From 68bd014e91b6007a0b8899631f3667e88ccb78b5 Mon Sep 17 00:00:00 2001 From: Ran Livneh Date: Tue, 19 Jun 2018 10:36:08 +0300 Subject: [PATCH 001/467] Fix NLTE Normalization - issue #784 --- tardis/plasma/properties/partition_function.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tardis/plasma/properties/partition_function.py b/tardis/plasma/properties/partition_function.py index a9c08a161ea..88739e163f1 100644 --- a/tardis/plasma/properties/partition_function.py +++ b/tardis/plasma/properties/partition_function.py @@ -124,7 +124,7 @@ def __init__(self, plasma_parent): def _main_nlte_calculation( self, atomic_data, nlte_data, t_electrons, j_blues, beta_sobolevs, general_level_boltzmann_factor, - previous_electron_densities): + previous_electron_densities, g): """ The core of the NLTE calculation, used with all possible config. options. @@ -190,7 +190,7 @@ def _main_nlte_calculation( else: raise e general_level_boltzmann_factor[i].ix[species] = \ - level_boltzmann_factor + level_boltzmann_factor * g[species][0] / level_boltzmann_factor[0] return general_level_boltzmann_factor def _calculate_classical_nebular( @@ -232,7 +232,7 @@ def _calculate_coronal_approximation( def _calculate_general( self, t_electrons, lines, atomic_data, nlte_data, general_level_boltzmann_factor, j_blues, - previous_beta_sobolev, previous_electron_densities): + previous_beta_sobolev, previous_electron_densities, g): """ Full NLTE calculation without approximations. """ @@ -244,7 +244,7 @@ def _calculate_general( general_level_boltzmann_factor = self._main_nlte_calculation( atomic_data, nlte_data, t_electrons, j_blues, beta_sobolevs, general_level_boltzmann_factor, - previous_electron_densities) + previous_electron_densities, g) return general_level_boltzmann_factor From b54f34b5ebe6e22426d94265e8236528fabd9764 Mon Sep 17 00:00:00 2001 From: Ran Livneh Date: Tue, 19 Jun 2018 20:58:39 +0300 Subject: [PATCH 002/467] Fix NLTE Normalization - issue #784 g.loc --- tardis/plasma/properties/partition_function.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis/plasma/properties/partition_function.py b/tardis/plasma/properties/partition_function.py index 88739e163f1..9dfb99db645 100644 --- a/tardis/plasma/properties/partition_function.py +++ b/tardis/plasma/properties/partition_function.py @@ -190,7 +190,7 @@ def _main_nlte_calculation( else: raise e general_level_boltzmann_factor[i].ix[species] = \ - level_boltzmann_factor * g[species][0] / level_boltzmann_factor[0] + level_boltzmann_factor * g.loc[species][0] / level_boltzmann_factor[0] return general_level_boltzmann_factor def _calculate_classical_nebular( From d243f4cfe10168ce1dd06b78d30e2a358e1c9b48 Mon Sep 17 00:00:00 2001 From: Ran Livneh Date: Tue, 19 Jun 2018 21:54:03 +0300 Subject: [PATCH 003/467] Fix NLTE Normalization - issue #784 some more gs --- tardis/plasma/properties/partition_function.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tardis/plasma/properties/partition_function.py b/tardis/plasma/properties/partition_function.py index 9dfb99db645..c6ab3219f48 100644 --- a/tardis/plasma/properties/partition_function.py +++ b/tardis/plasma/properties/partition_function.py @@ -210,7 +210,7 @@ def _calculate_classical_nebular( j_blues, beta_sobolevs, general_level_boltzmann_factor, - previous_electron_densities) + previous_electron_densities, g) return general_level_boltzmann_factor def _calculate_coronal_approximation( @@ -226,7 +226,7 @@ def _calculate_coronal_approximation( general_level_boltzmann_factor = self._main_nlte_calculation( atomic_data, nlte_data, t_electrons, j_blues, beta_sobolevs, general_level_boltzmann_factor, - previous_electron_densities) + previous_electron_densities, g) return general_level_boltzmann_factor def _calculate_general( From 03c7acd1d2b9d97091753f199b39b13ef5da550f Mon Sep 17 00:00:00 2001 From: Ran Livneh Date: Tue, 19 Jun 2018 21:56:51 +0300 Subject: [PATCH 004/467] Flip g_ratio in NLTE collision matrix to fit new atomic data - issue #784 --- tardis/io/atomic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis/io/atomic.py b/tardis/io/atomic.py index 143c0fd6c44..c62ea261b70 100644 --- a/tardis/io/atomic.py +++ b/tardis/io/atomic.py @@ -442,7 +442,7 @@ def _create_collision_coefficient_matrix(self): C_ul_matrix[level_number_lower, level_number_upper, :] = line.values[2:] delta_E_matrix[level_number_lower, level_number_upper] = line['delta_e'] #TODO TARDISATOMIC fix change the g_ratio to be the otherway round - I flip them now here. - g_ratio_matrix[level_number_lower, level_number_upper] = line['g_ratio'] + g_ratio_matrix[level_number_lower, level_number_upper] = 1/line['g_ratio'] self.C_ul_interpolator[species] = interpolate.interp1d( self.atom_data.collision_data_temperatures, C_ul_matrix) From dff362ebde3aefce7f8fe73acce23bf64752b046 Mon Sep 17 00:00:00 2001 From: Ran Livneh Date: Tue, 19 Jun 2018 22:33:45 +0300 Subject: [PATCH 005/467] Fix NLTE Normalization - issue #784 even more gs --- tardis/plasma/properties/partition_function.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tardis/plasma/properties/partition_function.py b/tardis/plasma/properties/partition_function.py index c6ab3219f48..8a07949f7cf 100644 --- a/tardis/plasma/properties/partition_function.py +++ b/tardis/plasma/properties/partition_function.py @@ -196,7 +196,7 @@ def _main_nlte_calculation( def _calculate_classical_nebular( self, t_electrons, lines, atomic_data, nlte_data, general_level_boltzmann_factor, j_blues, - previous_electron_densities): + previous_electron_densities, g): """ Performs NLTE calculations using the classical nebular treatment. All beta sobolev values taken as 1. @@ -216,7 +216,7 @@ def _calculate_classical_nebular( def _calculate_coronal_approximation( self, t_electrons, lines, atomic_data, nlte_data, general_level_boltzmann_factor, - previous_electron_densities): + previous_electron_densities, g): """ Performs NLTE calculations using the coronal approximation. All beta sobolev values taken as 1 and j_blues taken as 0. From 908c8c082521c6231fe1f37be2a324b4e5d13d58 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 8 Mar 2019 21:18:50 -0500 Subject: [PATCH 006/467] Azure pipeline for TARDIS (#894) * enable pull request * add display variable step * add a few more variables * set build directory variable * set variable * add tardis home * try second url variable * switching out build_dir definitions * change https to http * add install conda env script * add reference data fetcher * fix env creator * fix variable hell * fix source activate * fix source problems * add ref-data test * add moria to pool * add mac build * remove task * remove activation of conda activate * make conda variable --- .travis.yml | 4 ++- azure-pipelines.yml | 44 ++++++++++++++---------------- ci-helpers/fetch_reference_data.sh | 6 ++-- ci-helpers/install_tardis_env.sh | 5 +--- 4 files changed, 27 insertions(+), 32 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7d31c6eacef..fa5f629d5ea 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,10 +23,11 @@ env: - SETUP_CMD='test' - TEST_MODE='normal' - REF_DATA_HOME=$HOME/tardis-refdata - - REF_DATA_GITHUBURL='https://github.com/tardis-sn/tardis-refdata.git' + - REF_DATA_GITHUB_URL='https://github.com/tardis-sn/tardis-refdata.git' - MINICONDA_URL='http://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh' - SAVE_COVERAGE=false - GIT_LFS_SKIP_SMUDGE=1 + - TARDIS_BUILD_DIR=$TRAVIS_BUILD_DIR # Doctr deploy key for tardis-sn/tardis - secure: "LrhEnB3RgZ/ZA4PruYSF7pkzlY+LrfF1GKpeU+wcG5v/BMIsoTGySO9C1T7XJfsCFMaKMiJoa7ZhJEXPlss9i9PzxFsvbBrBfwb5lPurTbQwqBN4qW/+u2V1kSLAwtVJIHzenVB25PevjkCz8TeAv6DWyHgBWBmImJaTC3d+1/Q=" @@ -45,6 +46,7 @@ before_install: install: - source ci-helpers/install_tardis_env.sh + - source activate tardis - source ci-helpers/fetch_reference_data.sh script: diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ec13bcb9eac..63add21d0da 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -8,54 +8,50 @@ trigger: - master variables: - System.Debug: 'true' - ref_data_home: '$(home)/tardis-refdata' - ref_data_githuburl: 'https://github.com/tardis-sn/tardis-refdata.git' + system.debug: 'true' + ref.data.home: '$(Agent.BuildDirectory)/tardis-refdata' + + ref.data.github.url: 'https://github.com/tardis-sn/tardis-refdata.git' + tardis.build.dir: $(Build.Repository.LocalPath) + jobs: - job: 'Test' pool: - vmImage: 'Ubuntu-16.04' + vmImage: $[variables.vm_Image] + strategy: matrix: - Python36: - python.version: '3.6' - + linux: + vm_Image: 'Ubuntu-16.04' + conda: '/usr/share/miniconda' + mac: + vm_Image: 'macOS-10.13' + miniconda.url: 'http://repo.continuum.io/miniconda/Miniconda2-latest-mac-x86_64.sh' maxParallel: 4 steps: - - task: UsePythonVersion@0 - inputs: - versionSpec: '$(python.version)' - architecture: 'x64' - bash: | - echo "##vso[task.prependpath]/usr/share/miniconda/bin" + echo "##vso[task.prependpath]$CONDA/bin" displayName: Add conda to PATH - bash: | - pwd - echo $AGENT_BUILDIRECTORY - sudo chown -R $USER /usr/share/miniconda + sudo chown -R $USER $CONDA conda update -y conda - . /usr/share/miniconda/etc/profile.d/conda.sh displayName: updating conda and activating - bash: | - conda env create -f tardis_env3.yml + sh ci-helpers/install_tardis_env.sh displayName: 'Install TARDIS env' - bash: | - echo $HOME - echo $AGENT_BUILD_DIRECTORY - echo $REF_DATA_HOME - echo $REF_DATA_GITHUBURL - - displayName: 'fetching reference data' + sh ci-helpers/fetch_reference_data.sh + displayName: 'Fetch Reference Data' - bash: | source activate tardis - python setup.py test + python setup.py test --coverage --args="--tardis-refdata=$(ref.data.home)" displayName: 'TARDIS test' diff --git a/ci-helpers/fetch_reference_data.sh b/ci-helpers/fetch_reference_data.sh index f97830fedeb..6b291d874ef 100644 --- a/ci-helpers/fetch_reference_data.sh +++ b/ci-helpers/fetch_reference_data.sh @@ -4,8 +4,8 @@ git lfs install --skip-smudge if test -e $REF_DATA_HOME; then echo "Ref data available" else - echo git clone $REF_DATA_GITHUBURL $REF_DATA_HOME - git clone $REF_DATA_GITHUBURL $REF_DATA_HOME + echo git clone $REF_DATA_GITHUB_URL $REF_DATA_HOME + git clone $REF_DATA_GITHUB_URL $REF_DATA_HOME cd $REF_DATA_HOME # Use the following to get the ref-data from the master; @@ -18,4 +18,4 @@ git lfs pull --include="atom_data/chianti_He.h5" origin git lfs pull --include="plasma_reference/" origin git lfs pull --include="unit_test_data.h5" origin echo MD5 `md5sum unit_test_data.h5`; fi -cd $TRAVIS_BUILD_DIR +cd $TARDIS_BUILD_DIR diff --git a/ci-helpers/install_tardis_env.sh b/ci-helpers/install_tardis_env.sh index 5f66e7186f8..c125887abf0 100644 --- a/ci-helpers/install_tardis_env.sh +++ b/ci-helpers/install_tardis_env.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -cd $TRAVIS_BUILD_DIR +cd $TARDIS_BUILD_DIR if test -e $HOME/miniconda/envs/tardis; then echo "TARDIS env already installed."; # Also check for tardis_env3.yml change @@ -7,7 +7,4 @@ else conda env create -f tardis_env3.yml #trouble with building due to segfault at cython (https://github.com/cython/cython/issues/2199) #remove if we can get normal cython through conda - conda activate tardis fi - -conda activate tardis From 1745c08630b30bc03ffdfb3a02ed89c2fbd3b9ac Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 8 Mar 2019 21:22:06 -0500 Subject: [PATCH 007/467] Update README.rst --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 7ce0a641244..a56a4a9660a 100644 --- a/README.rst +++ b/README.rst @@ -6,8 +6,8 @@ TARDIS is a tool that creates synthetic observations (spectra) for exploding stars (supernovae). Documentation can be found at http://tardis.readthedocs.org. -.. image:: https://img.shields.io/travis/tardis-sn/tardis/master.svg - :target: https://travis-ci.org/tardis-sn/tardis +.. image:: https://dev.azure.com/tardis-sn/TARDIS/_apis/build/status/tardis-sn.tardis?branchName=master + :target: https://dev.azure.com/tardis-sn/TARDIS/_build/latest?definitionId=1&branchName=master .. image:: https://img.shields.io/coveralls/tardis-sn/tardis.svg :target: https://coveralls.io/r/tardis-sn/tardis From 4958e1740ab7fe80f2ba6f4b5ee7feddc0b7d845 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 9 Mar 2019 08:27:17 -0500 Subject: [PATCH 008/467] Adding general build artefacts (#896) * add coverage report * add pytest junit * add stuff * switch to clean pytest * fix install --- azure-pipelines.yml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 63add21d0da..95db67e6770 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -52,6 +52,24 @@ jobs: - bash: | source activate tardis - python setup.py test --coverage --args="--tardis-refdata=$(ref.data.home)" + python setup.py build_ext --inplace + displayName: 'TARDIS build' + + - bash: | + source activate tardis + conda install -y pytest-cov + pytest tardis --tardis-refdata=$(ref.data.home) --junitxml=junit/test-results.xml --cov=tardis --cov-report=xml --cov-report=html displayName: 'TARDIS test' + + - task: PublishTestResults@2 + condition: succeededOrFailed() + inputs: + testResultsFiles: '**/test-*.xml' + testRunTitle: 'Publish test results for TARDIS' + + - task: PublishCodeCoverageResults@1 + inputs: + codeCoverageTool: Cobertura + summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml' + reportDirectory: '$(System.DefaultWorkingDirectory)/**/htmlcov' From e3d3fe6975abe3b8820302ff51ee91908d8d79a8 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 9 Mar 2019 16:49:49 -0500 Subject: [PATCH 009/467] add pytest azurepipelines (#897) * add pytest azurepipelines * add stuff --- azure-pipelines.yml | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 95db67e6770..90764c51277 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -58,18 +58,19 @@ jobs: - bash: | source activate tardis conda install -y pytest-cov - pytest tardis --tardis-refdata=$(ref.data.home) --junitxml=junit/test-results.xml --cov=tardis --cov-report=xml --cov-report=html + pip install git+https://github.com/tonybaloney/pytest-azurepipelines.git + pytest tardis --tardis-refdata=$(ref.data.home) --test-run-title="TARDIS test $(vm_Image)" --cov=tardis --cov-report=xml --cov-report=html displayName: 'TARDIS test' - - task: PublishTestResults@2 - condition: succeededOrFailed() - inputs: - testResultsFiles: '**/test-*.xml' - testRunTitle: 'Publish test results for TARDIS' +# - task: PublishTestResults@2 +# condition: succeededOrFailed() +# inputs: +# testResultsFiles: '**/test-*.xml' +# testRunTitle: 'Test results for TARDIS on $(vm_Image)' - - task: PublishCodeCoverageResults@1 - inputs: - codeCoverageTool: Cobertura - summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml' - reportDirectory: '$(System.DefaultWorkingDirectory)/**/htmlcov' +# - task: PublishCodeCoverageResults@1 +# inputs: +# codeCoverageTool: Cobertura +# summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml' +# reportDirectory: '$(System.DefaultWorkingDirectory)/**/htmlcov' From cf1178ac0af28712772b59cf6b098708ad2e9798 Mon Sep 17 00:00:00 2001 From: debajyotidasgupta Date: Sun, 10 Mar 2019 20:33:27 +0530 Subject: [PATCH 010/467] .nojekyll added to docs (#901) --- docs/.nojekyll | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 docs/.nojekyll diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 00000000000..e688bb918b8 --- /dev/null +++ b/docs/.nojekyll @@ -0,0 +1,5 @@ +downloads +_static +_sources +_images + From d209920e71196329e21b5bbe2c399ad26c4b5e1b Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 11 Mar 2019 10:24:15 -0400 Subject: [PATCH 011/467] disable auto_upgrade for setup_helpers --- setup.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.cfg b/setup.cfg index f2295d61c51..9b1ec97d44d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -16,6 +16,7 @@ addopts = -p no:warnings [ah_bootstrap] auto_use = True +auto_upgrade = False [upload_docs] upload-dir = docs/_build/html From 592cc80cc7b585a7eb654fe109d8a01da8ef15aa Mon Sep 17 00:00:00 2001 From: chvogl Date: Wed, 13 Mar 2019 19:44:10 +0100 Subject: [PATCH 012/467] Relativity (#697) * Add better treatment of relativistic effects * Include angle aberration in virtual packet scheme * Fix transformation of electron scattering opacity * Move check of relativity flag into do_angle_aberration function * Add test for relativistic calculation of distance2line * Fix j_blue_estimator * Rename angle_aberration functions for clarity * Fix formatting * Use the original relativistic treatment for full_relativity disabled * Remove trailing whitespaces * Fix cmontecarlo unit tests * Remove deprecated distance attribute * Use comoving distance in estimator update for full_relativity only * Remove not needed j_blue_idx from get_increment_j_blue_estimator_energy * Fix Edotlu estimator bug * Raise Exception in FormalIntegrator for full relativity mode * Raise Exception if config options for both full relativity and formal integral are set --- tardis/io/config_reader.py | 12 ++ tardis/io/schemas/montecarlo.yml | 6 + tardis/montecarlo/base.py | 16 +- tardis/montecarlo/montecarlo.pyx | 2 + tardis/montecarlo/src/cmontecarlo.c | 178 +++++++++++++++----- tardis/montecarlo/src/cmontecarlo.h | 20 ++- tardis/montecarlo/src/rpacket.c | 29 ++-- tardis/montecarlo/src/storage.h | 1 + tardis/montecarlo/struct.py | 3 +- tardis/montecarlo/tests/test_cmontecarlo.py | 146 ++++++++++++++-- 10 files changed, 336 insertions(+), 77 deletions(-) diff --git a/tardis/io/config_reader.py b/tardis/io/config_reader.py index 734f1872f19..9ceeaf2920c 100644 --- a/tardis/io/config_reader.py +++ b/tardis/io/config_reader.py @@ -270,6 +270,18 @@ def from_config_dict(cls, config_dict, validate=True, config_dirname=''): raise ValueError('convergence_strategy is not "damped" ' 'or "custom"') + enable_full_relativity = montecarlo_section['enable_full_relativity'] + spectrum_integrated = ( + validated_config_dict['spectrum']['method'] == 'integrated' + ) + if enable_full_relativity and spectrum_integrated: + raise NotImplementedError( + "The spectrum method is set to 'integrated' and " + "enable_full_relativity to 'True'.\n" + "The FormalIntegrator is not yet implemented for the full " + "relativity mode. " + ) + return cls(validated_config_dict) diff --git a/tardis/io/schemas/montecarlo.yml b/tardis/io/schemas/montecarlo.yml index 133b18472a9..b0638270e6c 100644 --- a/tardis/io/schemas/montecarlo.yml +++ b/tardis/io/schemas/montecarlo.yml @@ -63,6 +63,12 @@ properties: - $ref: '#/definitions/convergence_strategy/custom' default: type: 'damped' + enable_full_relativity: + type: boolean + default: false + description: Enables a more complete treatment of relativitic effects. This includes + angle aberration as well as use of the fully general Doppler formula. + required: - no_of_packets - iterations diff --git a/tardis/montecarlo/base.py b/tardis/montecarlo/base.py index dd00bef0aa7..8f5a3c268de 100644 --- a/tardis/montecarlo/base.py +++ b/tardis/montecarlo/base.py @@ -42,8 +42,8 @@ class MontecarloRunner(HDFWriterMixin): def __init__(self, seed, spectrum_frequency, virtual_spectrum_range, sigma_thomson, enable_reflective_inner_boundary, - inner_boundary_albedo, line_interaction_type, - integrator_settings): + enable_full_relativity, inner_boundary_albedo, + line_interaction_type, integrator_settings): self.seed = seed self.packet_source = packet_source.BlackBodySimpleSource(seed) @@ -52,6 +52,7 @@ def __init__(self, seed, spectrum_frequency, virtual_spectrum_range, self.sigma_thomson = sigma_thomson self.enable_reflective_inner_boundary = enable_reflective_inner_boundary self.inner_boundary_albedo = inner_boundary_albedo + self.enable_full_relativity = enable_full_relativity self.line_interaction_type = line_interaction_type self.integrator_settings = integrator_settings self._integrator = None @@ -152,6 +153,13 @@ def integrator(self): "The FormalIntegrator is not yet available." "Please run the montecarlo simulation at least once.", UserWarning) + if self.enable_full_relativity: + raise NotImplementedError( + "The FormalIntegrator is not yet implemented for the full " + "relativity mode. " + "Please run with config option enable_full_relativity: " + "False." + ) return self._integrator def run(self, model, plasma, no_of_packets, @@ -410,6 +418,6 @@ def from_config(cls, config): sigma_thomson=sigma_thomson, enable_reflective_inner_boundary=config.montecarlo.enable_reflective_inner_boundary, inner_boundary_albedo=config.montecarlo.inner_boundary_albedo, + enable_full_relativity=config.montecarlo.enable_full_relativity, line_interaction_type=config.plasma.line_interaction_type, - integrator_settings=config.spectrum.integrated - ) + integrator_settings=config.spectrum.integrated) diff --git a/tardis/montecarlo/montecarlo.pyx b/tardis/montecarlo/montecarlo.pyx index e1be57533b4..decbd90a5d8 100644 --- a/tardis/montecarlo/montecarlo.pyx +++ b/tardis/montecarlo/montecarlo.pyx @@ -117,6 +117,7 @@ cdef extern from "src/cmontecarlo.h": double *bf_heating_estimator double *ff_heating_estimator double *stim_recomb_cooling_estimator + int full_relativity void montecarlo_main_loop(storage_model_t * storage, int_type_t virtual_packet_flag, int nthreads, unsigned long seed) @@ -252,6 +253,7 @@ cdef initialize_storage_model(model, plasma, runner, storage_model_t *storage): storage.inverse_sigma_thomson = 1.0 / storage.sigma_thomson storage.reflective_inner_boundary = runner.enable_reflective_inner_boundary storage.inner_boundary_albedo = runner.inner_boundary_albedo + storage.full_relativity = runner.enable_full_relativity # Data for continuum implementation cdef np.ndarray[double, ndim=1] t_electrons = plasma.t_electrons storage.t_electrons = t_electrons.data diff --git a/tardis/montecarlo/src/cmontecarlo.c b/tardis/montecarlo/src/cmontecarlo.c index e65cce459c3..89161961962 100644 --- a/tardis/montecarlo/src/cmontecarlo.c +++ b/tardis/montecarlo/src/cmontecarlo.c @@ -139,12 +139,58 @@ binary_search (const double *x, double x_insert, int64_t imin, return ret_val; } +void +angle_aberration_CMF_to_LF (rpacket_t *packet, const storage_model_t *storage) +{ + if (storage->full_relativity) + { + double beta = rpacket_get_r (packet) * storage->inverse_time_explosion * INVERSE_C; + double mu_0 = rpacket_get_mu (packet); + rpacket_set_mu (packet, (mu_0 + beta) / (1.0 + beta * mu_0)); + } +} + +/** Transform the lab frame direction cosine to the CMF + * + * @param packet + * @param storage + * @param mu lab frame direction cosine + * + * @return CMF direction cosine + */ +double +angle_aberration_LF_to_CMF (rpacket_t *packet, const storage_model_t *storage, double mu) +{ + double beta = rpacket_get_r (packet) * storage->inverse_time_explosion * INVERSE_C; + return (mu - beta) / (1.0 - beta * mu); +} + double rpacket_doppler_factor (const rpacket_t *packet, const storage_model_t *storage) { - return 1.0 - - rpacket_get_mu (packet) * rpacket_get_r (packet) * - storage->inverse_time_explosion * INVERSE_C; + double beta = rpacket_get_r (packet) * storage->inverse_time_explosion * INVERSE_C; + if (!storage->full_relativity) + { + return 1.0 - rpacket_get_mu (packet) * beta; + } + else + { + return (1.0 - rpacket_get_mu (packet) * beta) / sqrt (1 - beta * beta); + } +} + +double +rpacket_inverse_doppler_factor (const rpacket_t *packet, const storage_model_t *storage) +{ + double beta = rpacket_get_r (packet) * storage->inverse_time_explosion * INVERSE_C; + if (!storage->full_relativity) + { + return 1.0 / (1.0 - rpacket_get_mu (packet) * beta); + } + else + { + return (1.0 + rpacket_get_mu (packet) * beta) / sqrt (1 - beta * beta); + } } double @@ -218,7 +264,7 @@ void calculate_chi_bf (rpacket_t * packet, storage_model_t * storage) packet->chi_bf_tmp_partial[i] = bf_helper; } - rpacket_set_chi_boundfree(packet, bf_helper); + rpacket_set_chi_boundfree (packet, bf_helper); } void calculate_chi_ff (rpacket_t * packet, const storage_model_t * storage) @@ -274,14 +320,21 @@ compute_distance2line (rpacket_t * packet, const storage_model_t * storage) double nu = rpacket_get_nu (packet); double nu_line = rpacket_get_nu_line (packet); double distance, nu_diff; - double t_exp = storage->time_explosion; - double inverse_t_exp = storage->inverse_time_explosion; - int64_t cur_zone_id = rpacket_get_current_shell_id (packet); - double doppler_factor = 1.0 - mu * r * inverse_t_exp * INVERSE_C; + double ct = storage->time_explosion * C; + double doppler_factor = rpacket_doppler_factor (packet, storage); double comov_nu = nu * doppler_factor; if ( (nu_diff = comov_nu - nu_line) >= 0) { - distance = (nu_diff / nu) * C * t_exp; + if (!storage->full_relativity) + { + distance = (nu_diff / nu) * ct; + } + else + { + double nu_r = nu_line / nu; + distance = - mu * r + (ct - nu_r * nu_r * sqrt(ct * ct - + (1 + r * r * (1 - mu * mu) * (1 + pow (nu_r, -2))))) / (1 + nu_r * nu_r); + } rpacket_set_d_line (packet, distance); return TARDIS_ERROR_OK; } @@ -319,7 +372,7 @@ compute_distance2line (rpacket_t * packet, const storage_model_t * storage) fprintf (stderr, "mu = %f\n", mu); fprintf (stderr, "nu = %f\n", nu); fprintf (stderr, "doppler_factor = %f\n", doppler_factor); - fprintf (stderr, "cur_zone_id = %" PRIi64 "\n", cur_zone_id); + fprintf (stderr, "cur_zone_id = %" PRIi64 "\n", rpacket_get_current_shell_id (packet)); return TARDIS_ERROR_COMOV_NU_LESS_THAN_NU_LINE; } } @@ -334,7 +387,12 @@ void compute_distance2continuum (rpacket_t * packet, storage_model_t * storage) { double chi_continuum, d_continuum; - double chi_electron = storage->electron_densities[rpacket_get_current_shell_id(packet)] * storage->sigma_thomson; + double chi_electron = storage->electron_densities[rpacket_get_current_shell_id(packet)] * + storage->sigma_thomson; + if (storage->full_relativity) + { + chi_electron *= rpacket_doppler_factor (packet, storage); + } if (storage->cont_status == CONTINUUM_ON) { @@ -347,7 +405,6 @@ compute_distance2continuum (rpacket_t * packet, storage_model_t * storage) { packet->compute_chi_bf=true; } - chi_electron *= rpacket_doppler_factor (packet, storage); chi_continuum = rpacket_get_chi_boundfree (packet) + rpacket_get_chi_freefree (packet) + chi_electron; d_continuum = rpacket_get_tau_event (packet) / chi_continuum; } @@ -448,6 +505,10 @@ move_packet (rpacket_t * packet, storage_model_t * storage, double distance) { double comov_energy = rpacket_get_energy (packet) * doppler_factor; double comov_nu = rpacket_get_nu (packet) * doppler_factor; + if (storage->full_relativity) + { + distance *= doppler_factor; + } #ifdef WITHOPENMP #pragma omp atomic #endif @@ -525,45 +586,58 @@ increment_continuum_estimators (const rpacket_t * packet, storage_model_t * stor } } -void -increment_j_blue_estimator (const rpacket_t * packet, storage_model_t * storage, - double d_line, int64_t j_blue_idx) +double +get_increment_j_blue_estimator_energy (const rpacket_t * packet, + const storage_model_t * storage, + double d_line) { - if (storage->line_lists_j_blues != NULL) + double energy; + if (storage->full_relativity) + { + // Accurate up to a factor 1 / gamma + energy = rpacket_get_energy (packet); + } + else { double r = rpacket_get_r (packet); - double r_interaction = - sqrt (r * r + d_line * d_line + - 2.0 * r * d_line * rpacket_get_mu (packet)); + double r_interaction = sqrt (r * r + d_line * d_line + + 2.0 * r * d_line * rpacket_get_mu (packet)); double mu_interaction = (rpacket_get_mu (packet) * r + d_line) / r_interaction; double doppler_factor = 1.0 - mu_interaction * r_interaction * storage->inverse_time_explosion * INVERSE_C; - double comov_energy = rpacket_get_energy (packet) * doppler_factor; -#ifdef WITHOPENMP -#pragma omp atomic -#endif + energy = rpacket_get_energy (packet) * doppler_factor; + } + return energy; +} + +void +increment_j_blue_estimator (const rpacket_t * packet, storage_model_t * storage, + double d_line, int64_t j_blue_idx) +{ + if (storage->line_lists_j_blues != NULL) + { + double energy = get_increment_j_blue_estimator_energy (packet, storage, + d_line); + #ifdef WITHOPENMP + #pragma omp atomic + #endif storage->line_lists_j_blues[j_blue_idx] += - comov_energy / rpacket_get_nu (packet); + energy / rpacket_get_nu (packet); } } void -increment_Edotlu_estimator (const rpacket_t * packet, storage_model_t * storage, double d_line, int64_t line_idx) +increment_Edotlu_estimator (const rpacket_t * packet, storage_model_t * storage, + double d_line, int64_t line_idx) { if (storage->line_lists_Edotlu != NULL) { - double r = rpacket_get_r (packet); - double r_interaction = - sqrt (r * r + d_line * d_line + - 2.0 * r * d_line * rpacket_get_mu (packet)); - double mu_interaction = (rpacket_get_mu (packet) * r + d_line) / r_interaction; - double doppler_factor = 1.0 - mu_interaction * r_interaction * - storage->inverse_time_explosion * INVERSE_C; - double comov_energy = rpacket_get_energy (packet) * doppler_factor; -#ifdef WITHOPENMP -#pragma omp atomic -#endif - storage->line_lists_Edotlu[line_idx] += comov_energy; //rpacket_get_energy (packet); + double energy = get_increment_j_blue_estimator_energy (packet, storage, + d_line); + #ifdef WITHOPENMP + #pragma omp atomic + #endif + storage->line_lists_Edotlu[line_idx] += energy; } } @@ -592,6 +666,12 @@ montecarlo_one_packet (storage_model_t * storage, rpacket_t * packet, -1.0 * sqrt (1.0 - (storage->r_inner[0] / rpacket_get_r(&virt_packet)) * (storage->r_inner[0] / rpacket_get_r(&virt_packet))); + + if (storage->full_relativity) + { + // Need to transform the angular size of the photosphere into the CMF + mu_min = angle_aberration_LF_to_CMF (&virt_packet, storage, mu_min); + } } else { @@ -620,6 +700,7 @@ montecarlo_one_packet (storage_model_t * storage, rpacket_t * packet, // I'm adding an exit() here to inform the compiler about the impossible path exit(1); } + angle_aberration_CMF_to_LF (&virt_packet, storage); double doppler_factor_ratio = rpacket_doppler_factor (packet, storage) / rpacket_doppler_factor (&virt_packet, storage); @@ -720,8 +801,9 @@ move_packet_across_shell_boundary (rpacket_t * packet, double doppler_factor = rpacket_doppler_factor (packet, storage); double comov_nu = rpacket_get_nu (packet) * doppler_factor; double comov_energy = rpacket_get_energy (packet) * doppler_factor; + // TODO: correct rpacket_set_mu (packet, rk_double (mt_state)); - double inverse_doppler_factor = 1.0 / rpacket_doppler_factor (packet, storage); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); rpacket_set_nu (packet, comov_nu * inverse_doppler_factor); rpacket_set_energy (packet, comov_energy * inverse_doppler_factor); if (rpacket_get_virtual_packet_flag (packet) > 0) @@ -740,11 +822,14 @@ montecarlo_thomson_scatter (rpacket_t * packet, storage_model_t * storage, double comov_nu = rpacket_get_nu (packet) * doppler_factor; double comov_energy = rpacket_get_energy (packet) * doppler_factor; rpacket_set_mu (packet, 2.0 * rk_double (mt_state) - 1.0); - double inverse_doppler_factor = 1.0 / rpacket_doppler_factor (packet, storage); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); rpacket_set_nu (packet, comov_nu * inverse_doppler_factor); rpacket_set_energy (packet, comov_energy * inverse_doppler_factor); rpacket_reset_tau_event (packet, mt_state); storage->last_interaction_type[rpacket_get_id (packet)] = 1; + + angle_aberration_CMF_to_LF (packet, storage); + if (rpacket_get_virtual_packet_flag (packet) > 0) { montecarlo_one_packet (storage, packet, 1, mt_state); @@ -777,7 +862,7 @@ montecarlo_bound_free_scatter (rpacket_t * packet, storage_model_t * storage, do move_packet (packet, storage, distance); double old_doppler_factor = rpacket_doppler_factor (packet, storage); rpacket_set_mu (packet, 2.0 * rk_double (mt_state) - 1.0); - double inverse_doppler_factor = 1.0 / rpacket_doppler_factor (packet, storage); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); double comov_energy = rpacket_get_energy (packet) * old_doppler_factor; rpacket_set_energy (packet, comov_energy * inverse_doppler_factor); storage->last_interaction_type[rpacket_get_id (packet)] = 3; // last interaction was a bf-absorption @@ -800,7 +885,7 @@ montecarlo_free_free_scatter (rpacket_t * packet, storage_model_t * storage, dou move_packet (packet, storage, distance); double old_doppler_factor = rpacket_doppler_factor (packet, storage); rpacket_set_mu (packet, 2.0 * rk_double (mt_state) - 1.0); - double inverse_doppler_factor = 1.0 / rpacket_doppler_factor (packet, storage); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); double comov_energy = rpacket_get_energy (packet) * old_doppler_factor; rpacket_set_energy (packet, comov_energy * inverse_doppler_factor); storage->last_interaction_type[rpacket_get_id (packet)] = 4; // last interaction was a ff-absorption @@ -864,7 +949,7 @@ montecarlo_line_scatter (rpacket_t * packet, storage_model_t * storage, move_packet (packet, storage, distance); double old_doppler_factor = rpacket_doppler_factor (packet, storage); rpacket_set_mu (packet, 2.0 * rk_double (mt_state) - 1.0); - double inverse_doppler_factor = 1.0 / rpacket_doppler_factor (packet, storage); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); double comov_energy = rpacket_get_energy (packet) * old_doppler_factor; rpacket_set_energy (packet, comov_energy * inverse_doppler_factor); storage->last_interaction_in_nu[rpacket_get_id (packet)] = @@ -898,7 +983,7 @@ montecarlo_line_scatter (rpacket_t * packet, storage_model_t * storage, void line_emission (rpacket_t * packet, storage_model_t * storage, int64_t emission_line_id, rk_state *mt_state) { - double inverse_doppler_factor = 1.0 / rpacket_doppler_factor (packet, storage); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); storage->last_line_interaction_out_id[rpacket_get_id (packet)] = emission_line_id; if (storage->cont_status == CONTINUUM_ON) { @@ -910,6 +995,9 @@ line_emission (rpacket_t * packet, storage_model_t * storage, int64_t emission_l rpacket_set_nu_line (packet, storage->line_list_nu[emission_line_id]); rpacket_set_next_line_id (packet, emission_line_id + 1); rpacket_reset_tau_event (packet, mt_state); + + angle_aberration_CMF_to_LF (packet, storage); + if (rpacket_get_virtual_packet_flag (packet) > 0) { bool virtual_close_line = false; @@ -945,7 +1033,7 @@ void continuum_emission (rpacket_t * packet, storage_model_t * storage, rk_state *mt_state, pt2sample_nu sample_nu_continuum, int64_t emission_type_id) { - double inverse_doppler_factor = 1.0 / rpacket_doppler_factor (packet, storage); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); double nu_comov = sample_nu_continuum (packet, storage, mt_state); rpacket_set_nu (packet, nu_comov * inverse_doppler_factor); rpacket_reset_tau_event (packet, mt_state); @@ -960,6 +1048,8 @@ continuum_emission (rpacket_t * packet, storage_model_t * storage, rk_state *mt_ rpacket_set_last_line (packet, last_line); rpacket_set_next_line_id (packet, current_line_id); + angle_aberration_CMF_to_LF (packet, storage); + if (rpacket_get_virtual_packet_flag (packet) > 0) { montecarlo_one_packet (storage, packet, 1, mt_state); diff --git a/tardis/montecarlo/src/cmontecarlo.h b/tardis/montecarlo/src/cmontecarlo.h index 6196440344a..c4521ca28eb 100644 --- a/tardis/montecarlo/src/cmontecarlo.h +++ b/tardis/montecarlo/src/cmontecarlo.h @@ -34,7 +34,15 @@ tardis_error_t binary_search (const double *x, double x_insert, int64_t imin, int64_t imax, int64_t * result); -double rpacket_doppler_factor(const rpacket_t *packet, const storage_model_t *storage); +double rpacket_doppler_factor (const rpacket_t *packet, const storage_model_t *storage); + +double rpacket_inverse_doppler_factor (const rpacket_t *packet, const storage_model_t *storage); + +void +angle_aberration_CMF_to_LF (rpacket_t * packet, const storage_model_t * storage); + +double +angle_aberration_LF_to_CMF (rpacket_t *packet, const storage_model_t *storage, double mu); /** Calculate the distance to shell boundary. * @@ -73,11 +81,17 @@ void move_packet (rpacket_t * packet, storage_model_t * storage, void increment_j_blue_estimator (const rpacket_t * packet, storage_model_t * storage, - double d_line, int64_t j_blue_idx); + double d_line, + int64_t j_blue_idx); void increment_Edotlu_estimator (const rpacket_t * packet, storage_model_t * storage, - double d_line, int64_t j_blue_idx); + double d_line, + int64_t j_blue_idx); + +double get_increment_j_blue_estimator_energy (const rpacket_t * packet, + const storage_model_t * storage, + double d_line); void increment_continuum_estimators (const rpacket_t * packet, storage_model_t * storage, double distance, diff --git a/tardis/montecarlo/src/rpacket.c b/tardis/montecarlo/src/rpacket.c index 3e273397d8c..0ca33211af4 100644 --- a/tardis/montecarlo/src/rpacket.c +++ b/tardis/montecarlo/src/rpacket.c @@ -15,23 +15,22 @@ rpacket_init (rpacket_t * packet, storage_model_t * storage, int packet_index, double current_nu = storage->packet_nus[packet_index]; double current_energy = storage->packet_energies[packet_index]; double current_mu = storage->packet_mus[packet_index]; + double comov_current_nu = current_nu; int current_shell_id = 0; double current_r = storage->r_inner[0]; - double comov_current_nu = current_nu; -/* WARNING/TODO: THIS IS NOT FINAL - * For an exact reconstruction of the BlackBody we need to initialize the packets differently - * This initialization was assumed by Lucy (insert exact reference) - * For this 'convention' it is required to comment the next two lines (current_nu and current_energy calculation) - double comov_current_nu = current_nu * (1 - (current_mu * current_r * storage->inverse_time_explosion * INVERSE_C)); - */ - current_nu = - current_nu / (1 - - (current_mu * current_r * storage->inverse_time_explosion * - INVERSE_C)); - current_energy = - current_energy / (1 - - (current_mu * current_r * - storage->inverse_time_explosion * INVERSE_C)); + double beta = current_r * storage->inverse_time_explosion * INVERSE_C; + + if (storage->full_relativity) + { + current_nu = current_nu * (1 + beta * current_mu) / sqrt(1 - beta * beta); + current_energy = current_energy * (1 + beta * current_mu) / sqrt(1 - beta * beta); + current_mu = (current_mu + beta) / (1 + beta * current_mu); + } + else + { + current_nu = current_nu / (1 - beta * current_mu); + current_energy = current_energy / (1 - beta * current_mu); + } if ((ret_val = line_search (storage->line_list_nu, comov_current_nu, storage->no_of_lines, diff --git a/tardis/montecarlo/src/storage.h b/tardis/montecarlo/src/storage.h index 8581b534501..701665eb483 100644 --- a/tardis/montecarlo/src/storage.h +++ b/tardis/montecarlo/src/storage.h @@ -92,6 +92,7 @@ typedef struct StorageModel double *bf_heating_estimator; double *ff_heating_estimator; double *stim_recomb_cooling_estimator; + int full_relativity; } storage_model_t; #endif // TARDIS_STORAGE_H diff --git a/tardis/montecarlo/struct.py b/tardis/montecarlo/struct.py index 40f226c3e02..9e3054aa039 100644 --- a/tardis/montecarlo/struct.py +++ b/tardis/montecarlo/struct.py @@ -125,7 +125,8 @@ class StorageModel(Structure): ('photo_ion_estimator_statistics', POINTER(c_int64)), ('bf_heating_estimator', POINTER(c_double)), ('ff_heating_estimator', POINTER(c_double)), - ('stim_recomb_cooling_estimator', POINTER(c_double)) + ('stim_recomb_cooling_estimator', POINTER(c_double)), + ('full_relativity', c_int) ] diff --git a/tardis/montecarlo/tests/test_cmontecarlo.py b/tardis/montecarlo/tests/test_cmontecarlo.py index b4486d25401..ff7519e251a 100644 --- a/tardis/montecarlo/tests/test_cmontecarlo.py +++ b/tardis/montecarlo/tests/test_cmontecarlo.py @@ -157,7 +157,9 @@ def model_w_edges(ion_edges, model): model.no_of_edges = no_of_edges estimator_size = model.no_of_shells * no_of_edges - estims = ['photo_ion_estimator', 'stim_recomb_estimator', 'bf_heating_estimator', 'stim_recomb_cooling_estimator'] + estims = ['photo_ion_estimator', 'stim_recomb_estimator', + 'bf_heating_estimator', 'stim_recomb_cooling_estimator' + ] for estimator in estims: setattr(model, estimator, (c_double * estimator_size)(*[0] * estimator_size)) @@ -168,15 +170,19 @@ def model_w_edges(ion_edges, model): @pytest.fixture(scope='module') def ion_edges(): return [ - {'nu': [4.0e14, 4.1e14, 4.2e14, 4.3e14], 'x_sect': [1.0, 0.9, 0.8, 0.7], 'no_of_points': 4}, - {'nu': [3.0e14, 3.1e14, 3.2e14, 3.3e14, 3.4e14], 'x_sect': [1.0, 0.9, 0.8, 0.7, 0.6], 'no_of_points': 5}, - {'nu': [2.8e14, 3.0e14, 3.2e14, 3.4e14], 'x_sect': [2.0, 1.8, 1.6, 1.4], 'no_of_points': 4} + {'nu': [4.0e14, 4.1e14, 4.2e14, 4.3e14], + 'x_sect': [1.0, 0.9, 0.8, 0.7], 'no_of_points': 4}, + {'nu': [3.0e14, 3.1e14, 3.2e14, 3.3e14, 3.4e14], + 'x_sect': [1.0, 0.9, 0.8, 0.7, 0.6], 'no_of_points': 5}, + {'nu': [2.8e14, 3.0e14, 3.2e14, 3.4e14], + 'x_sect': [2.0, 1.8, 1.6, 1.4], 'no_of_points': 4} ] @pytest.fixture(scope='module') def mock_sample_nu(): - SAMPLE_NUFUNC = CFUNCTYPE(c_double, POINTER(RPacket), POINTER(StorageModel), POINTER(RKState)) + SAMPLE_NUFUNC = CFUNCTYPE(c_double, POINTER(RPacket), + POINTER(StorageModel), POINTER(RKState)) def sample_nu_simple(packet, model, mt_state): return packet.contents.nu @@ -404,6 +410,7 @@ def test_compute_distance2continuum(clib, packet_params, expected_params, packet assert_almost_equal(packet.d_cont, expected_params['d_cont']) +@pytest.mark.parametrize('full_relativity', [1, 0]) @pytest.mark.parametrize( ['packet_params', 'expected_params'], [({'nu': 0.4, 'mu': 0.3, 'energy': 0.9, 'r': 7.5e14}, @@ -414,19 +421,53 @@ def test_compute_distance2continuum(clib, packet_params, expected_params, packet {'mu': -.4906548373534084, 'r': 805046582503149.2, 'j': 5001298975563.031, 'nubar': 3001558973156.1387})] ) -def test_move_packet(clib, packet_params, expected_params, packet, model): +def test_move_packet(clib, packet_params, expected_params, + packet, model, full_relativity): packet.nu = packet_params['nu'] packet.mu = packet_params['mu'] packet.energy = packet_params['energy'] packet.r = packet_params['r'] + model.full_relativity = full_relativity + clib.rpacket_doppler_factor.restype = c_double + doppler_factor = clib.rpacket_doppler_factor(byref(packet), byref(model)) clib.move_packet(byref(packet), byref(model), c_double(1.e13)) assert_almost_equal(packet.mu, expected_params['mu']) assert_almost_equal(packet.r, expected_params['r']) - assert_almost_equal(model.js[packet.current_shell_id], expected_params['j']) - assert_almost_equal(model.nubars[packet.current_shell_id], expected_params['nubar']) + expected_j = expected_params['j'] + expected_nubar = expected_params['nubar'] + if full_relativity: + expected_j *= doppler_factor + expected_nubar *= doppler_factor + + assert_allclose(model.js[packet.current_shell_id], + expected_j, rtol=5e-7) + assert_allclose(model.nubars[packet.current_shell_id], + expected_nubar, rtol=5e-7) + + +@pytest.mark.continuumtest +@pytest.mark.parametrize( + ['packet_params', 'j_blue_idx', 'expected'], + [({'nu': 0.30, 'energy': 0.30}, 0, 1.0), + ({'nu': 0.20, 'energy': 1.e5}, 0, 5e5), + ({'nu': 2e15, 'energy': 0.50}, 1, 2.5e-16), + ({'nu': 0.40, 'energy': 1e-7}, 1, 2.5e-7)], +) +def test_increment_j_blue_estimator_full_relativity(clib, packet_params, + j_blue_idx, expected, + packet, model): + packet.nu = packet_params['nu'] + packet.energy = packet_params['energy'] + model.full_relativity = True + + clib.increment_j_blue_estimator(byref(packet), byref(model), + c_double(packet.d_line), + c_int64(j_blue_idx)) + + assert_almost_equal(model.line_lists_j_blues[j_blue_idx], expected) @pytest.mark.parametrize( @@ -653,9 +694,9 @@ def test_sample_nu_free_free(clib, t_electron, packet, model, mt_state_seeded, e nu = clib.sample_nu_free_free(byref(packet), byref(model), byref(mt_state_seeded)) nus.append(nu) - obtained_emissivity, _ = np.histogram(nus, normed=True, bins=nu_bins) + obtained_emissivity, _ = np.histogram(nus, density=True, bins=nu_bins) - assert_equal(obtained_emissivity, expected_emissivity) + assert_allclose(obtained_emissivity, expected_emissivity, rtol=1e-10) @pytest.mark.continuumtest @@ -926,6 +967,91 @@ def test_montecarlo_bound_free_scatter_continuum_selection(clib, packet, model_3 assert_equal(model_3lvlatom.last_line_interaction_in_id[packet.id], expected) +@pytest.mark.continuumtest +@pytest.mark.parametrize( + ['mu', 'r', 'inv_t_exp', 'full_relativity'], + [(0.8, 7.5e14, 1 / 5.2e5, 1), + (-0.7, 7.5e14, 1 / 5.2e5, 1), + (0.3, 7.5e14, 1 / 2.2e5, 1), + (0.0, 7.5e14, 1 / 2.2e5, 1), + (-0.7, 7.5e14, 1 / 5.2e5, 0)] +) +def test_frame_transformations(clib, packet, model, mu, r, + inv_t_exp, full_relativity): + packet.r = r + packet.mu = mu + model.inverse_time_explosion = inv_t_exp + model.full_relativity = full_relativity + clib.rpacket_doppler_factor.restype = c_double + clib.rpacket_inverse_doppler_factor.restype = c_double + + inverse_doppler_factor = clib.rpacket_inverse_doppler_factor(byref(packet), byref(model)) + clib.angle_aberration_CMF_to_LF(byref(packet), byref(model)) + + doppler_factor = clib.rpacket_doppler_factor(byref(packet), byref(model)) + + assert_almost_equal(doppler_factor * inverse_doppler_factor, 1.0) + + +@pytest.mark.continuumtest +@pytest.mark.parametrize( + ['mu', 'r', 'inv_t_exp'], + [(0.8, 7.5e14, 1 / 5.2e5), + (-0.7, 7.5e14, 1 / 5.2e5), + (0.3, 7.5e14, 1 / 2.2e5), + (0.0, 7.5e14, 1 / 2.2e5), + (-0.7, 7.5e14, 1 / 5.2e5)] +) +def test_angle_transformation_invariance(clib, packet, model, + mu, r, inv_t_exp): + packet.r = r + packet.mu = mu + model.inverse_time_explosion = inv_t_exp + model.full_relativity = 1 + clib.angle_aberration_LF_to_CMF.restype = c_double + + clib.angle_aberration_CMF_to_LF(byref(packet), byref(model)) + mu_obtained = clib.angle_aberration_LF_to_CMF( + byref(packet), byref(model), c_double(packet.mu)) + + assert_almost_equal(mu_obtained, mu) + + +@pytest.mark.continuumtest +@pytest.mark.parametrize( + 'full_relativity', + [1, 0] +) +@pytest.mark.parametrize( + ['mu', 'r', 't_exp', 'nu', 'nu_line'], + [(0.8, 7.5e14, 5.2e5, 1.0e15, 9.4e14), + (0.0, 6.3e14, 2.2e5, 6.0e12, 5.8e12), + (1.0, 9.0e14, 2.2e5, 4.0e8, 3.4e8), + (0.9, 9.0e14, 0.5e5, 1.0e15, 4.5e14), + (-0.7, 7.5e14, 5.2e5, 1.0e15, 9.8e14), + (-1.0, 6.3e14, 2.2e5, 6.0e12, 6.55e12)] +) +def test_compute_distance2line_relativistic(clib, mu, r, t_exp, nu, nu_line, + full_relativity, packet, model): + packet.r = r + packet.mu = mu + packet.nu = nu + packet.nu_line = nu_line + model.inverse_time_explosion = 1 / t_exp + model.time_explosion = t_exp + model.full_relativity = full_relativity + + clib.rpacket_doppler_factor.restype = c_double + + clib.compute_distance2line(byref(packet), byref(model)) + clib.move_packet(byref(packet), byref(model), c_double(packet.d_line)) + + doppler_factor = clib.rpacket_doppler_factor(byref(packet), byref(model)) + comov_nu = packet.nu * doppler_factor + + assert_allclose(comov_nu, nu_line, rtol=1e-14) + + @pytest.mark.continuumtest @pytest.mark.skipif(True, reason="Yet to be written.") def test_montecarlo_free_free_scatter(packet, model, mt_state): From 9e398b34c702d22681699e38512f45d7c7f12454 Mon Sep 17 00:00:00 2001 From: chvogl Date: Tue, 2 Apr 2019 17:29:14 +0200 Subject: [PATCH 013/467] Update fetch_reference_data.sh --- ci-helpers/fetch_reference_data.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ci-helpers/fetch_reference_data.sh b/ci-helpers/fetch_reference_data.sh index 6b291d874ef..9fde2216cd9 100644 --- a/ci-helpers/fetch_reference_data.sh +++ b/ci-helpers/fetch_reference_data.sh @@ -12,7 +12,8 @@ cd $REF_DATA_HOME git fetch origin git checkout origin/master # Use the following to get the ref-data from a specific pull request -#git fetch origin pull/11/head:thomson-ref +#git fetch origin pull/11/head:update-ref +#git checkout origin/update-ref git lfs pull --include="atom_data/kurucz_cd23_chianti_H_He.h5" origin git lfs pull --include="atom_data/chianti_He.h5" origin git lfs pull --include="plasma_reference/" origin From 4f8e8cac3f860de127c4593813fb2dde8d0e4330 Mon Sep 17 00:00:00 2001 From: chvogl Date: Thu, 11 Apr 2019 19:52:11 +0200 Subject: [PATCH 014/467] Use Russian roulette to kill v-packets with negligible weight (#911) * Use Russian roulette to kill v-packets with negligible weight * Update refdata path * Recover previous default behavior for killing vpackets * Fix reference data path * Checkout reference data from master --- ci-helpers/fetch_reference_data.sh | 4 ++-- tardis/io/schemas/spectrum.yml | 14 ++++++++++++++ tardis/montecarlo/base.py | 7 +++++-- tardis/montecarlo/montecarlo.pyx | 6 ++++++ tardis/montecarlo/src/cmontecarlo.c | 19 +++++++++++++++---- tardis/montecarlo/src/storage.h | 2 ++ 6 files changed, 44 insertions(+), 8 deletions(-) diff --git a/ci-helpers/fetch_reference_data.sh b/ci-helpers/fetch_reference_data.sh index 9fde2216cd9..e7e3edfe521 100644 --- a/ci-helpers/fetch_reference_data.sh +++ b/ci-helpers/fetch_reference_data.sh @@ -12,8 +12,8 @@ cd $REF_DATA_HOME git fetch origin git checkout origin/master # Use the following to get the ref-data from a specific pull request -#git fetch origin pull/11/head:update-ref -#git checkout origin/update-ref +#git fetch origin pull/20/head:update-ref +#git checkout update-ref git lfs pull --include="atom_data/kurucz_cd23_chianti_H_He.h5" origin git lfs pull --include="atom_data/chianti_He.h5" origin git lfs pull --include="plasma_reference/" origin diff --git a/tardis/io/schemas/spectrum.yml b/tardis/io/schemas/spectrum.yml index 8ac890052a0..0987b995b4f 100644 --- a/tardis/io/schemas/spectrum.yml +++ b/tardis/io/schemas/spectrum.yml @@ -31,3 +31,17 @@ properties: default: -1 description: Number of shells on which the formal integral quantities are interpolated + virtual: + type: object + default: {} + additionalProperties: false + properties: + tau_russian: + type: number + default: 10. + description: For optical depths greater tau_russian russian rouletting + is used for the v-packets + survival_probability: + type: number + default: 0.0 + description: Probability for not terminating the packet path diff --git a/tardis/montecarlo/base.py b/tardis/montecarlo/base.py index 8f5a3c268de..b9a6d0b57dd 100644 --- a/tardis/montecarlo/base.py +++ b/tardis/montecarlo/base.py @@ -43,7 +43,8 @@ class MontecarloRunner(HDFWriterMixin): def __init__(self, seed, spectrum_frequency, virtual_spectrum_range, sigma_thomson, enable_reflective_inner_boundary, enable_full_relativity, inner_boundary_albedo, - line_interaction_type, integrator_settings): + line_interaction_type, integrator_settings, + v_packet_settings): self.seed = seed self.packet_source = packet_source.BlackBodySimpleSource(seed) @@ -55,6 +56,7 @@ def __init__(self, seed, spectrum_frequency, virtual_spectrum_range, self.enable_full_relativity = enable_full_relativity self.line_interaction_type = line_interaction_type self.integrator_settings = integrator_settings + self.v_packet_settings = v_packet_settings self._integrator = None self._spectrum_integrated = None @@ -420,4 +422,5 @@ def from_config(cls, config): inner_boundary_albedo=config.montecarlo.inner_boundary_albedo, enable_full_relativity=config.montecarlo.enable_full_relativity, line_interaction_type=config.plasma.line_interaction_type, - integrator_settings=config.spectrum.integrated) + integrator_settings=config.spectrum.integrated, + v_packet_settings=config.spectrum.virtual) diff --git a/tardis/montecarlo/montecarlo.pyx b/tardis/montecarlo/montecarlo.pyx index decbd90a5d8..81663e1b657 100644 --- a/tardis/montecarlo/montecarlo.pyx +++ b/tardis/montecarlo/montecarlo.pyx @@ -118,6 +118,8 @@ cdef extern from "src/cmontecarlo.h": double *ff_heating_estimator double *stim_recomb_cooling_estimator int full_relativity + double survival_probability + double tau_russian void montecarlo_main_loop(storage_model_t * storage, int_type_t virtual_packet_flag, int nthreads, unsigned long seed) @@ -254,6 +256,10 @@ cdef initialize_storage_model(model, plasma, runner, storage_model_t *storage): storage.reflective_inner_boundary = runner.enable_reflective_inner_boundary storage.inner_boundary_albedo = runner.inner_boundary_albedo storage.full_relativity = runner.enable_full_relativity + + storage.tau_russian = runner.v_packet_settings['tau_russian'] + storage.survival_probability = runner.v_packet_settings['survival_probability'] + # Data for continuum implementation cdef np.ndarray[double, ndim=1] t_electrons = plasma.t_electrons storage.t_electrons = t_electrons.data diff --git a/tardis/montecarlo/src/cmontecarlo.c b/tardis/montecarlo/src/cmontecarlo.c index 89161961962..06cf29e53bf 100644 --- a/tardis/montecarlo/src/cmontecarlo.c +++ b/tardis/montecarlo/src/cmontecarlo.c @@ -1158,11 +1158,22 @@ montecarlo_one_packet_loop (storage_model_t * storage, rpacket_t * packet, double distance; get_event_handler (packet, storage, &distance, mt_state) (packet, storage, distance, mt_state); - if (virtual_packet > 0 && rpacket_get_tau_event (packet) > 10.0) + if (virtual_packet > 0 && rpacket_get_tau_event (packet) > storage->tau_russian) { - rpacket_set_tau_event (packet, 100.0); - rpacket_set_status (packet, TARDIS_PACKET_STATUS_EMITTED); - } + double event_random = rk_double (mt_state); + if (event_random > storage->survival_probability) + { + rpacket_set_energy(packet, 0.0); + rpacket_set_status (packet, TARDIS_PACKET_STATUS_EMITTED); + } + else + { + rpacket_set_energy(packet, + rpacket_get_energy (packet) / storage->survival_probability * + exp (-1.0 * rpacket_get_tau_event (packet))); + rpacket_set_tau_event (packet, 0.0); + } + } } if (virtual_packet > 0) { diff --git a/tardis/montecarlo/src/storage.h b/tardis/montecarlo/src/storage.h index 701665eb483..b47f7af6b20 100644 --- a/tardis/montecarlo/src/storage.h +++ b/tardis/montecarlo/src/storage.h @@ -93,6 +93,8 @@ typedef struct StorageModel double *ff_heating_estimator; double *stim_recomb_cooling_estimator; int full_relativity; + double survival_probability; + double tau_russian; } storage_model_t; #endif // TARDIS_STORAGE_H From 750fb86bf9e05b667ad68490b5d7834e2d535e7e Mon Sep 17 00:00:00 2001 From: sarafina325 <31808841+sarafina325@users.noreply.github.com> Date: Fri, 12 Apr 2019 11:08:47 -0700 Subject: [PATCH 015/467] Parsing STELLA files for TARDIS (#915) * Add simple first reader for stella data. * Add notebook explaining STELLA to TARDIS * Remove last row of STELLA data * Add STELLA notebook to Example Models section * Add mesa.stella.dat file --- docs/examples/index.rst | 1 + docs/examples/mesa.stella.dat | 407 ++++++ docs/examples/stella_to_tardis.ipynb | 1877 ++++++++++++++++++++++++++ tardis/io/parsers/__init__.py | 0 tardis/io/parsers/stella.py | 14 + 5 files changed, 2299 insertions(+) create mode 100644 docs/examples/mesa.stella.dat create mode 100644 docs/examples/stella_to_tardis.ipynb create mode 100644 tardis/io/parsers/__init__.py create mode 100644 tardis/io/parsers/stella.py diff --git a/docs/examples/index.rst b/docs/examples/index.rst index 5382a79bf1c..f05770226a8 100644 --- a/docs/examples/index.rst +++ b/docs/examples/index.rst @@ -13,6 +13,7 @@ applications. modelconfig tardis_example + stella_to_tardis Simple Parametrized Models ========================== diff --git a/docs/examples/mesa.stella.dat b/docs/examples/mesa.stella.dat new file mode 100644 index 00000000000..0e0b4e74ca0 --- /dev/null +++ b/docs/examples/mesa.stella.dat @@ -0,0 +1,407 @@ + days post max Lbol 50.0 + zones 400 + inner boundary mass 5.190242521200000E+33 2.609211000000000E+00 + total mass 2.618867335600000E+34 1.316543000000000E+01 + + mass of cell (g) cell center m (g) cell center R (cm) cell center v (cm/s) avg density radiation pressure avg temperature radiation temperature avg opacity tau outer edge m (g) outer edge r (cm) h1 he3 he4 c12 n14 o16 ne20 na23 mg24 si28 s32 ar36 ca40 ti44 cr48 cr60 fe52 fe54 fe56 co56 ni56 luminosity n_bar n_e + + 1 6.006769337200000E+29 5.190242521200000E+33 2.517208995922069E+13 3.930633463858500E+06 1.005529258105087E-11 1.123795450558407E+04 4.594345302259182E+04 4.594345302259182E+04 1.627115175247000E-01 5.403504880532457E+03 5.190874092200000E+33 2.743917483671189E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274956000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 7.648868494018999E+38 6.055413236609000E+12 2.412188329693000E+12 + 2 1.262405996000000E+30 5.191505663200000E+33 2.970625971420310E+13 5.050403113364500E+06 2.928088214842606E-11 1.123654402180205E+04 4.594218222923182E+04 4.594218222923182E+04 1.644115175247000E-01 5.381678444417913E+03 5.192138228800000E+33 3.084752490934893E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274956000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 9.609214019760001E+38 1.762303504940000E+13 6.969789895995001E+12 + 3 1.264623556160000E+30 5.192770794400000E+33 3.198879010449477E+13 5.680287938117499E+06 4.619658874727153E-11 1.113352676699529E+04 4.583651814225193E+04 4.583651814225193E+04 1.650115175247000E-01 5.364280083814479E+03 5.193402365400000E+33 3.278004423770521E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274956000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 1.050921401976000E+39 2.783915958398000E+13 1.091727628705000E+13 + 4 1.263066609320000E+30 5.194033936400000E+33 3.357129837091565E+13 6.135230350494000E+06 5.896887289487248E-11 1.113352676699529E+04 4.583651814225193E+04 4.583651814225193E+04 1.653103657722300E-01 5.348854703681713E+03 5.194663518200000E+33 3.418884043776321E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274956000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 1.100921401976000E+39 3.545182886115000E+13 1.392188329693000E+13 + 5 1.259386589320000E+30 5.195293099999999E+33 3.480638250461077E+13 6.495172762870502E+06 6.912716624103450E-11 1.103283871960936E+04 4.573236203052331E+04 4.573236203052331E+04 1.655103657722300E-01 5.334724892605372E+03 5.195921687200000E+33 3.532044191895871E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274956000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 1.140921401976000E+39 4.166219463338000E+13 1.632649030681000E+13 + 6 1.258090625520000E+30 5.196550274400000E+33 3.583450133330666E+13 6.805057587623500E+06 7.774308348390722E-11 1.103145398005769E+04 4.573109707592844E+04 4.573109707592844E+04 1.657092140197600E-01 5.321480960330699E+03 5.197178861599999E+33 3.627898123396824E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274956000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 1.180921401976000E+39 4.687025690067000E+13 1.832994556422000E+13 + 7 1.256430439200000E+30 5.197807448800000E+33 3.672346113462982E+13 7.075000000000001E+06 8.524104279923777E-11 1.103145398005769E+04 4.573109707592844E+04 4.573109707592844E+04 1.658092140197600E-01 5.308917604293943E+03 5.198434046800000E+33 3.711764413413297E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274956000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 1.210921401976000E+39 5.127831916796000E+13 2.013224906916000E+13 + 8 1.253971390160000E+30 5.199060644800000E+33 3.751182713363612E+13 7.310000000000000E+06 9.155071951057609E-11 1.103145398005769E+04 4.573109707592844E+04 4.573109707592844E+04 1.658195797919900E-01 5.296950387933184E+03 5.199687242800000E+33 3.786859739423271E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274956000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 1.240806226729000E+39 5.518407793031001E+13 2.153570432657000E+13 + 9 1.253772669080000E+30 5.200313840800000E+33 3.822536765482929E+13 7.520000000000000E+06 9.719899216272520E-11 1.093031700205559E+04 4.562591847132915E+04 4.562591847132915E+04 1.659357043265700E-01 5.285442617217990E+03 5.200940438800000E+33 3.855369204840971E+13 3.464691000000000E-05 0.000000000000000E+00 5.800994000000000E-01 1.190353000000000E-01 7.025597000000000E-07 2.461590000000000E-01 6.333397000000000E-03 3.274957000000000E-08 7.388660000000000E-03 3.112645000000000E-02 5.069225000000000E-03 4.829527000000000E-04 1.696820000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.070970000000000E-05 0.000000000000000E+00 4.079500000000000E-03 1.260806226729000E+39 5.848983669266000E+13 2.283800783151000E+13 + 10 1.252727742320000E+30 5.201567036800000E+33 3.888201644199014E+13 7.715000000000000E+06 1.017798395353652E-10 1.093031700205559E+04 4.562591847132915E+04 4.562591847132915E+04 1.664437665938600E-01 5.274319277721415E+03 5.202192640200000E+33 3.918782933873763E+13 4.154752000000000E-05 0.000000000000000E+00 5.841201000000000E-01 1.185549000000000E-01 7.856926000000000E-07 2.431931000000000E-01 6.325444000000000E-03 3.662477000000000E-08 7.302489000000000E-03 3.071376000000000E-02 5.003070000000000E-03 4.767893000000000E-04 1.676314000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.068415000000000E-05 0.000000000000000E+00 4.079380000000000E-03 1.290806226729000E+39 6.129444370254000E+13 2.403915958398000E+13 + 11 1.251315410320000E+30 5.202818243600000E+33 3.949364223548514E+13 7.899942412376500E+06 1.056026457897539E-10 1.093031700205559E+04 4.562591847132915E+04 4.562591847132915E+04 1.674426148413900E-01 5.263504963307480E+03 5.203442852400000E+33 3.977928982114709E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.310806226729000E+39 6.359789895995000E+13 2.504031133645000E+13 + 12 1.248464886720000E+30 5.204067461200000E+33 4.006493740680905E+13 8.069884824752999E+06 1.095624567086472E-10 1.093031700205559E+04 4.562591847132915E+04 4.562591847132915E+04 1.683437665938600E-01 5.252968552114717E+03 5.204689086199999E+33 4.033329407405283E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.330806226729000E+39 6.600135421736000E+13 2.594261484139000E+13 + 13 1.243739144280000E+30 5.205310711199999E+33 4.060165074129662E+13 8.224884824752999E+06 1.128950237403584E-10 1.083010725344128E+04 4.552098177080776E+04 4.552098177080776E+04 1.691426148413900E-01 5.242720454634525E+03 5.205932336200000E+33 4.085623968553272E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.350806226729000E+39 6.810365772230000E+13 2.674376659386000E+13 + 14 1.243958553040000E+30 5.206553961200000E+33 4.111082862976883E+13 8.374827237129501E+06 1.160579243824636E-10 1.083010725344128E+04 4.552098177080776E+04 4.552098177080776E+04 1.699414630889200E-01 5.232678533393097E+03 5.207176580799999E+33 4.135370636711265E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.380691051482000E+39 6.990711297971000E+13 2.744491834633000E+13 + 15 1.245056989280000E+30 5.207799200400000E+33 4.159658410445648E+13 8.514827237129500E+06 1.190314603547098E-10 1.083010725344128E+04 4.552098177080776E+04 4.552098177080776E+04 1.705414630889200E-01 5.222818388644689E+03 5.208415852400000E+33 4.182664731424838E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.400691051482000E+39 7.160941648465000E+13 2.814491834633000E+13 + 16 1.231934037960000E+30 5.209032504400000E+33 4.205671052404027E+13 8.644827237129500E+06 1.215239176795085E-10 1.083010725344128E+04 4.552098177080776E+04 4.552098177080776E+04 1.711414630889200E-01 5.213249349513649E+03 5.209640204999999E+33 4.227500312466951E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.420806226729000E+39 7.311171998959000E+13 2.864722185127000E+13 + 17 1.216115123880000E+30 5.210247905599999E+33 4.249329572529875E+13 8.769769649505999E+06 1.237832159909449E-10 1.073081623332446E+04 4.541628641800015E+04 4.541628641800015E+04 1.729414630889200E-01 5.203903812287533E+03 5.210856600800000E+33 4.270402303205376E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.440806226729000E+39 7.451402349453000E+13 2.924722185127000E+13 + 18 1.218288523800000E+30 5.211465296000000E+33 4.291475033880877E+13 8.889769649506001E+06 1.257945314501287E-10 1.073081623332446E+04 4.541628641800015E+04 4.541628641800015E+04 1.734414630889200E-01 5.194709057985139E+03 5.212075980400000E+33 4.311874033771442E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.470691051482000E+39 7.571632699947000E+13 2.974837360374000E+13 + 19 1.220635183040000E+30 5.212686664799999E+33 4.332273033662008E+13 9.009712061882500E+06 1.275483366087455E-10 1.073081623332446E+04 4.541628641800015E+04 4.541628641800015E+04 1.738414630889200E-01 5.185663371177895E+03 5.213296354599999E+33 4.351994817559711E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.490691051482000E+39 7.691747875194000E+13 3.014952535621000E+13 + 20 1.218599236840000E+30 5.213906044400000E+33 4.371716601457414E+13 9.119712061882500E+06 1.293227107193817E-10 1.073081623332446E+04 4.541628641800015E+04 4.541628641800015E+04 1.742403113364500E-01 5.176775981758805E+03 5.214514739599999E+33 4.390853926203266E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.510691051482000E+39 7.791978225688000E+13 3.054952535621000E+13 + 21 1.218527028880000E+30 5.215123434800000E+33 4.409991250949117E+13 9.224712061882501E+06 1.311178326528333E-10 1.073081623332446E+04 4.541628641800015E+04 4.541628641800015E+04 1.745414630889200E-01 5.168017132132754E+03 5.215732129999999E+33 4.428561489357539E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.530691051482000E+39 7.891978225688000E+13 3.094952535621000E+13 + 22 1.216195089720000E+30 5.216340825200000E+33 4.447131727765959E+13 9.329654474259000E+06 1.323350236218943E-10 1.063243551875173E+04 4.531183185782208E+04 4.531183185782208E+04 1.748403113364500E-01 5.159424248458041E+03 5.216947531200000E+33 4.465185383237795E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.560575876235000E+39 7.982093400935000E+13 3.125067710868000E+13 + 23 1.213956046200000E+30 5.217554237200000E+33 4.483239038709634E+13 9.429654474259000E+06 1.338633723734536E-10 1.063243551875173E+04 4.531183185782208E+04 4.531183185782208E+04 1.751403113364500E-01 5.150959409129642E+03 5.218160943200000E+33 4.500852584959350E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.580691051482000E+39 8.062208576182000E+13 3.155182886115000E+13 + 24 1.214387901520000E+30 5.218767649200000E+33 4.518466131209066E+13 9.524654474259000E+06 1.351019949078659E-10 1.063243551875173E+04 4.531183185782208E+04 4.531183185782208E+04 1.754403113364500E-01 5.142610227304026E+03 5.219374355200000E+33 4.535644726691923E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.600691051482000E+39 8.132323751429000E+13 3.185182886115000E+13 + 25 1.212674802480000E+30 5.219981061200000E+33 4.552823322174780E+13 9.619654474259000E+06 1.360384771977854E-10 1.063243551875173E+04 4.531183185782208E+04 4.531183185782208E+04 1.756403113364500E-01 5.134401424854060E+03 5.220586772599999E+33 4.569609344188388E+13 5.163466000000000E-05 0.000000000000000E+00 5.899974000000000E-01 1.178526000000000E-01 9.072140000000000E-07 2.388577000000000E-01 6.313819000000000E-03 4.228945000000000E-08 7.176527000000000E-03 3.011051000000000E-02 4.906365000000000E-03 4.677799000000000E-04 1.646339000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.064679000000000E-05 0.000000000000000E+00 4.079205000000000E-03 1.630575876235000E+39 8.202438926676000E+13 3.215182886115000E+13 + 26 1.210646614160000E+30 5.221192483999999E+33 4.586395366201997E+13 9.714654474258998E+06 1.369814508728242E-10 1.063243551875173E+04 4.531183185782208E+04 4.531183185782208E+04 1.758391595839800E-01 5.126315469650785E+03 5.221797200799999E+33 4.602932945875839E+13 5.448374000000000E-05 0.000000000000000E+00 5.911859000000000E-01 1.177102000000000E-01 9.409300000000000E-07 2.379806000000000E-01 6.311451000000000E-03 4.386111000000000E-08 7.151046000000000E-03 2.998848000000000E-02 4.886803000000000E-03 4.659575000000000E-04 1.640276000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.063923000000000E-05 0.000000000000000E+00 4.079156000000000E-03 1.650575876235000E+39 8.252554101923000E+13 3.235182886115000E+13 + 27 1.209411122040000E+30 5.222401917599999E+33 4.619470525549680E+13 9.799654474259000E+06 1.369814508728242E-10 1.063111310274632E+04 4.531058138304271E+04 4.531058138304271E+04 1.758391595839800E-01 5.118349188692644E+03 5.223003650600000E+33 4.635613851833191E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.670691051482000E+39 8.242554101923000E+13 3.255182886115000E+13 + 28 1.204719593840000E+30 5.223605383600000E+33 4.651757178116701E+13 9.884654474259000E+06 1.379268297413249E-10 1.053495676399177E+04 4.520761753646595E+04 4.520761753646595E+04 1.759403113364500E-01 5.110514634938473E+03 5.224207116600000E+33 4.667574501850436E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.690691051482000E+39 8.292669277170000E+13 3.275182886115000E+13 + 29 1.203252558840000E+30 5.224808849600000E+33 4.683391825584172E+13 9.969654474259000E+06 1.385676213176606E-10 1.053495676399177E+04 4.520761753646595E+04 4.520761753646595E+04 1.761391595839800E-01 5.102793921722409E+03 5.225411577199999E+33 4.698937388624833E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.720575876235000E+39 8.342669277170000E+13 3.285298061362000E+13 + 30 1.204574382240000E+30 5.226014304799999E+33 4.714482951665495E+13 1.005459688663550E+07 1.392072203970389E-10 1.053495676399177E+04 4.520761753646595E+04 4.520761753646595E+04 1.762403113364500E-01 5.095166449759044E+03 5.226616037799999E+33 4.729740091630819E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.740575876235000E+39 8.382669277170000E+13 3.305298061362000E+13 + 31 1.203128432760000E+30 5.227217770799999E+33 4.744997231596144E+13 1.013953929901200E+07 1.398497717316301E-10 1.053495676399177E+04 4.520761753646595E+04 4.520761753646595E+04 1.764391595839800E-01 5.087637455379388E+03 5.227818509200000E+33 4.759995299724170E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.770575876235000E+39 8.422669277170000E+13 3.315413236609000E+13 + 32 1.202779527080000E+30 5.228419247600000E+33 4.774993367852195E+13 1.021459688663550E+07 1.404910809561199E-10 1.053495676399177E+04 4.520761753646595E+04 4.520761753646595E+04 1.765391595839800E-01 5.080198143859343E+03 5.229019985999999E+33 4.789736173632684E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.790575876235000E+39 8.452784452417000E+13 3.335298061362000E+13 + 33 1.201842613880000E+30 5.229620724400000E+33 4.804478979413171E+13 1.028959688663550E+07 1.408191640382741E-10 1.053364647196917E+04 4.520636993769876E+04 4.520636993769876E+04 1.781391595839800E-01 5.072801943519852E+03 5.230221462800000E+33 4.818968421482151E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.810575876235000E+39 8.492784452417000E+13 3.345413236609000E+13 + 34 1.200077198880000E+30 5.230822201200000E+33 4.833457863551130E+13 1.036953929901200E+07 1.414691557666537E-10 1.043837169982715E+04 4.510364290139763E+04 4.510364290139763E+04 1.782391595839800E-01 5.065495196509356E+03 5.231419955800001E+33 4.847689391639477E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.840575876235000E+39 8.522784452417000E+13 3.355413236609000E+13 + 35 1.197014626560000E+30 5.232017710400000E+33 4.861920919727826E+13 1.044453929901200E+07 1.421178910019751E-10 1.043837169982715E+04 4.510364290139763E+04 4.510364290139763E+04 1.783391595839800E-01 5.058281546805312E+03 5.232615465000000E+33 4.875906400136149E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.860575876235000E+39 8.552784452417000E+13 3.365413236609000E+13 + 36 1.193635174680000E+30 5.233213219599999E+33 4.889891880544473E+13 1.051453929901200E+07 1.424455065758637E-10 1.043837169982715E+04 4.510364290139763E+04 4.510364290139763E+04 1.784391595839800E-01 5.051172285322529E+03 5.233809979600000E+33 4.903694050540465E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.890575876235000E+39 8.572899627664000E+13 3.375413236609000E+13 + 37 1.194906074560000E+30 5.234406739599999E+33 4.917496220536456E+13 1.058453929901200E+07 1.427738773816480E-10 1.043837169982715E+04 4.510364290139763E+04 4.510364290139763E+04 1.784391595839800E-01 5.044140029764931E+03 5.235004494199999E+33 4.931113897068456E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.910575876235000E+39 8.602899627664000E+13 3.385413236609000E+13 + 38 1.195203261040000E+30 5.235602248800000E+33 4.944731573600456E+13 1.065453929901200E+07 1.431072913850401E-10 1.043837169982715E+04 4.510364290139763E+04 4.510364290139763E+04 1.785391595839800E-01 5.037181678880548E+03 5.236197019599999E+33 4.958097907713568E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.940460700988000E+39 8.622899627664000E+13 3.395413236609000E+13 + 39 1.188840804840000E+30 5.236791790399999E+33 4.971464241826679E+13 1.072453929901200E+07 1.434371877623661E-10 1.043707342063402E+04 4.510239817202799E+04 4.510239817202799E+04 1.786391595839800E-01 5.030332176822147E+03 5.237383577400001E+33 4.984615165492705E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.960575876235000E+39 8.643014802911000E+13 3.405413236609000E+13 + 40 1.184461581040000E+30 5.237975364400000E+33 4.997766089158733E+13 1.079448171138850E+07 1.437635386203457E-10 1.043707342063402E+04 4.510239817202799E+04 4.510239817202799E+04 1.786391595839800E-01 5.023577721732046E+03 5.238568146000000E+33 5.010769736884806E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 1.990460700988000E+39 8.663014802911000E+13 3.415413236609000E+13 + 41 1.185873117360000E+30 5.239160927599999E+33 5.023773384610881E+13 1.085948171138850E+07 1.440949478037869E-10 1.034267213285332E+04 4.499990740135403E+04 4.499990740135403E+04 1.787391595839800E-01 5.016879763521018E+03 5.239753709200000E+33 5.036605223094619E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 2.010575876235000E+39 8.682899627664000E+13 3.415413236609000E+13 + 42 1.184179512480000E+30 5.240346490800000E+33 5.049437061578358E+13 1.092448171138850E+07 1.444271209642971E-10 1.034267213285332E+04 4.499990740135403E+04 4.499990740135403E+04 1.787391595839800E-01 5.010255063402822E+03 5.240937283200000E+33 5.062099608921266E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 2.030575876235000E+39 8.693014802911000E+13 3.425413236609000E+13 + 43 1.182131432160000E+30 5.241528075600000E+33 5.074762156264175E+13 1.098942412376500E+07 1.444314468489687E-10 1.034267213285332E+04 4.499990740135403E+04 4.499990740135403E+04 1.788391595839800E-01 5.003713913943664E+03 5.242118868000000E+33 5.087283925525538E+13 7.576387000000001E-05 0.000000000000000E+00 6.000626999999999E-01 1.166470000000000E-01 1.192759000000000E-06 2.314296000000000E-01 6.293762000000000E-03 5.560002000000000E-08 6.960729000000000E-03 2.907703000000000E-02 4.740693000000000E-03 4.523451000000000E-04 1.594986000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058276000000000E-05 0.000000000000000E+00 4.078789000000000E-03 2.060575876235000E+39 8.703014802911000E+13 3.425528411856000E+13 + 44 1.181971898320000E+30 5.242709660400000E+33 5.099805694786903E+13 1.104948171138850E+07 1.447600598630256E-10 1.034267213285332E+04 4.499990740135403E+04 4.499990740135403E+04 1.788391595839800E-01 4.997230762822934E+03 5.243298463599999E+33 5.112242343664109E+13 7.645219000000001E-05 0.000000000000000E+00 6.002724000000000E-01 1.166218000000000E-01 1.200780000000000E-06 2.312747000000000E-01 6.293340000000000E-03 5.597394000000000E-08 6.956230000000000E-03 2.905549000000000E-02 4.737240000000000E-03 4.520234000000000E-04 1.593916000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.058142000000000E-05 0.000000000000000E+00 4.078777000000000E-03 2.080575876235000E+39 8.713129978158000E+13 3.435413236609000E+13 + 45 1.177439506120000E+30 5.243887266800000E+33 5.124678992541316E+13 1.111448171138850E+07 1.437635386203457E-10 1.034267213285332E+04 4.499990740135403E+04 4.499990740135403E+04 1.786391595839800E-01 4.990843161622332E+03 5.244487010600000E+33 5.137223749160197E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467000000000E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.110460700988000E+39 8.662899627664000E+13 3.435413236609000E+13 + 46 1.199910901760000E+30 5.245086754400000E+33 5.149768505779078E+13 1.118448171138850E+07 1.440949478037869E-10 1.034138575635538E+04 4.499866553478249E+04 4.499866553478249E+04 1.787391595839800E-01 4.984381565669059E+03 5.245802866400000E+33 5.164555467485615E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.130575876235000E+39 8.672899627664000E+13 3.435413236609000E+13 + 47 1.431021926440000E+30 5.246518978399999E+33 5.179342429192152E+13 1.125953929901200E+07 1.440949478037869E-10 1.024784994478334E+04 4.489641048633996E+04 4.489641048633996E+04 1.787391595839800E-01 4.976765045074344E+03 5.247321620600000E+33 5.195673752387437E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.160575876235000E+39 8.673014802911000E+13 3.435528411856000E+13 + 48 1.605304093080000E+30 5.248124262800000E+33 5.212005075582720E+13 1.134448171138850E+07 1.440949478037869E-10 1.024784994478334E+04 4.489641048633996E+04 4.489641048633996E+04 1.787391595839800E-01 4.968353047774323E+03 5.248919942799999E+33 5.228001093056375E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.200460700988000E+39 8.683014802911000E+13 3.445413236609000E+13 + 49 1.591239454480000E+30 5.249715622800000E+33 5.243997110530028E+13 1.142448171138850E+07 1.444271209642971E-10 1.024784994478334E+04 4.489641048633996E+04 4.489641048633996E+04 1.802391595839800E-01 4.960025463010164E+03 5.250509313600000E+33 5.259754858899822E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.230460700988000E+39 8.693014802911000E+13 3.445413236609000E+13 + 50 1.588995835800000E+30 5.251303004400000E+33 5.275512607269612E+13 1.149948171138850E+07 1.444271209642971E-10 1.024784994478334E+04 4.489641048633996E+04 4.489641048633996E+04 1.802391595839800E-01 4.951821920693121E+03 5.252094706000000E+33 5.291016854880295E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.260575876235000E+39 8.703014802911000E+13 3.445528411856000E+13 + 51 1.583069810080000E+30 5.252886407599999E+33 5.306521102490976E+13 1.157942412376500E+07 1.447600598630256E-10 1.024657536185602E+04 4.489517147598229E+04 4.489517147598229E+04 1.802391595839800E-01 4.943731743053600E+03 5.253678109199999E+33 5.321828932275423E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.290575876235000E+39 8.713014802911000E+13 3.445528411856000E+13 + 52 1.582185212840000E+30 5.254469810800000E+33 5.337136762059868E+13 1.165936653614150E+07 1.447600598630256E-10 1.024657536185602E+04 4.489517147598229E+04 4.489517147598229E+04 1.802391595839800E-01 4.935744056310312E+03 5.255261512400000E+33 5.352284510113288E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.330460700988000E+39 8.713014802911000E+13 3.455413236609000E+13 + 53 1.584359010600000E+30 5.256053214000000E+33 5.367432258166705E+13 1.173436653614150E+07 1.447600598630256E-10 1.015389709175888E+04 4.479315160762490E+04 4.479315160762490E+04 1.803391595839800E-01 4.927835515134628E+03 5.256841931799999E+33 5.382336686823468E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.360460700988000E+39 8.723014802911000E+13 3.455413236609000E+13 + 54 1.576955009280000E+30 5.257630649600000E+33 5.397241115480229E+13 1.180442412376500E+07 1.447600598630256E-10 1.015389709175888E+04 4.479315160762490E+04 4.479315160762490E+04 1.803391595839800E-01 4.920054007770228E+03 5.258414394399999E+33 5.411895969861387E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.390460700988000E+39 8.723014802911000E+13 3.455413236609000E+13 + 55 1.567575334520000E+30 5.259198139200000E+33 5.426550824242547E+13 1.187442412376500E+07 1.447600598630256E-10 1.015389709175888E+04 4.479315160762490E+04 4.479315160762490E+04 1.803391595839800E-01 4.912402800337659E+03 5.259981884000000E+33 5.441052263858226E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.420460700988000E+39 8.723014802911000E+13 3.455413236609000E+13 + 56 1.568038221360000E+30 5.260765628800000E+33 5.455553703473905E+13 1.194936653614150E+07 1.447600598630256E-10 1.015389709175888E+04 4.479315160762490E+04 4.479315160762490E+04 1.803391595839800E-01 4.904831688572423E+03 5.261549373600000E+33 5.469905356014048E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.460460700988000E+39 8.723014802911000E+13 3.455413236609000E+13 + 57 1.568036630000000E+30 5.262333118400000E+33 5.484257008554189E+13 1.202430894851800E+07 1.447600598630256E-10 1.015263419427808E+04 4.479191544691196E+04 4.479191544691196E+04 1.803391595839800E-01 4.897338779498666E+03 5.263115868600000E+33 5.498521058187249E+13 1.068460000000000E-04 0.000000000000000E+00 6.095323000000000E-01 1.155094000000000E-01 1.554977000000000E-06 2.244369000000000E-01 6.274709000000000E-03 7.248467999999999E-08 6.757602000000000E-03 2.810425000000000E-02 4.584750000000000E-03 4.378168000000000E-04 1.546649000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.052243000000000E-05 0.000000000000000E+00 4.078257000000000E-03 2.490460700988000E+39 8.723014802911000E+13 3.455413236609000E+13 + 58 1.564241037480000E+30 5.263898618800000E+33 5.512785107820308E+13 1.209430894851800E+07 1.437635386203457E-10 1.006080560366852E+04 4.469013021774071E+04 4.469013021774071E+04 1.801391595839800E-01 4.889951075962655E+03 5.264680374400000E+33 5.526915409637256E+13 1.404520000000000E-04 0.000000000000000E+00 6.172320000000000E-01 1.145812000000000E-01 1.941466000000000E-06 2.187470000000000E-01 6.259039000000000E-03 9.050075000000000E-08 6.592341000000000E-03 2.731282000000000E-02 4.457879000000000E-03 4.259968000000000E-04 1.507322000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.047331000000000E-05 0.000000000000000E+00 4.077687000000000E-03 2.520460700988000E+39 8.662899627664000E+13 3.445528411856000E+13 + 59 1.563356241320000E+30 5.265462130000000E+33 5.541045711454202E+13 1.216430894851800E+07 1.437635386203457E-10 1.006080560366852E+04 4.469013021774071E+04 4.469013021774071E+04 1.800403113364500E-01 4.882636654893881E+03 5.266242891000000E+33 5.555019577534471E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.550460700988000E+39 8.652899627664000E+13 3.445528411856000E+13 + 60 1.561216458880000E+30 5.267023652000001E+33 5.568993443614738E+13 1.223430894851800E+07 1.437635386203457E-10 1.006080560366852E+04 4.469013021774071E+04 4.469013021774071E+04 1.800391595839800E-01 4.875403260484462E+03 5.267802423799999E+33 5.582808433626166E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.580460700988000E+39 8.652899627664000E+13 3.445413236609000E+13 + 61 1.557930300480000E+30 5.268581195600000E+33 5.596623423637595E+13 1.229936653614150E+07 1.434328916568751E-10 1.006080560366852E+04 4.469013021774071E+04 4.469013021774071E+04 1.800391595839800E-01 4.868268552030053E+03 5.269355988999999E+33 5.610240846638455E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.610460700988000E+39 8.642899627664000E+13 3.445413236609000E+13 + 62 1.549748919800000E+30 5.270130782400000E+33 5.623858269639318E+13 1.236436653614150E+07 1.434328916568751E-10 1.005955428450142E+04 4.468889690011853E+04 4.468889690011853E+04 1.800391595839800E-01 4.861235876775526E+03 5.270902592000000E+33 5.637313643491681E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.640460700988000E+39 8.632899627664000E+13 3.445413236609000E+13 + 63 1.543620791360000E+30 5.271674401600000E+33 5.650769017344044E+13 1.242936653614150E+07 1.434328916568751E-10 1.005955428450142E+04 4.468889690011853E+04 4.468889690011853E+04 1.800391595839800E-01 4.854286889229287E+03 5.272448200399999E+33 5.664163933331418E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.680345525741000E+39 8.632899627664000E+13 3.435413236609000E+13 + 64 1.547183647480000E+30 5.273221999200000E+33 5.677558849318790E+13 1.249436653614150E+07 1.431030051603175E-10 9.968567583470907E+03 4.458734577047810E+04 4.458734577047810E+04 1.799403113364500E-01 4.847388821374890E+03 5.273994803399999E+33 5.690904996241377E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.710345525741000E+39 8.622899627664000E+13 3.435413236609000E+13 + 65 1.545456425120000E+30 5.274767607600000E+33 5.704251143163963E+13 1.256430894851800E+07 1.431030051603175E-10 9.968567583470907E+03 4.458734577047810E+04 4.458734577047810E+04 1.813391595839800E-01 4.840462441372802E+03 5.275536433399999E+33 5.717611876567019E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.740345525741001E+39 8.612899627664000E+13 3.435413236609000E+13 + 66 1.539180499120000E+30 5.276305259200000E+33 5.730972609970071E+13 1.262930894851800E+07 1.431030051603175E-10 9.968567583470907E+03 4.458734577047810E+04 4.458734577047810E+04 1.812403113364500E-01 4.833532267264272E+03 5.277074085000001E+33 5.744505981274482E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.770345525741000E+39 8.612784452417000E+13 3.425413236609000E+13 + 67 1.537342677240000E+30 5.277842910800000E+33 5.758039352578892E+13 1.269430894851800E+07 1.427738773816480E-10 9.968567583470907E+03 4.458734577047810E+04 4.458734577047810E+04 1.812403113364500E-01 4.826528690524168E+03 5.278610742000001E+33 5.771789858118911E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.800345525741000E+39 8.602899627664000E+13 3.425413236609000E+13 + 68 1.535467458400000E+30 5.279378573200000E+33 5.785540363658930E+13 1.276430894851800E+07 1.427738773816480E-10 9.967327736466885E+03 4.458611528940774E+04 4.458611528940774E+04 1.812391595839800E-01 4.819412792704015E+03 5.280144415199999E+33 5.799421470062543E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.840345525741000E+39 8.592899627664000E+13 3.425413236609000E+13 + 69 1.531762971240000E+30 5.280910257200000E+33 5.813302576466156E+13 1.283430894851800E+07 1.427696108503392E-10 9.967327736466885E+03 4.458611528940774E+04 4.458611528940774E+04 1.812391595839800E-01 4.812229517714191E+03 5.281675104600000E+33 5.827219387386395E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333389000000001E-08 6.566352000000000E-03 2.718836000000000E-02 4.437928000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.870345525741000E+39 8.592784452417000E+13 3.425298061362000E+13 + 70 1.529602898960000E+30 5.282439952000000E+33 5.841136198306632E+13 1.289930894851800E+07 1.424455065758637E-10 9.877175206525444E+03 4.448479772088423E+04 4.448479772088423E+04 1.811403113364500E-01 4.805048033443673E+03 5.283203804800000E+33 5.854999383667591E+13 1.457368000000000E-04 0.000000000000000E+00 6.184428000000000E-01 1.144352000000000E-01 2.002244000000000E-06 2.178523000000000E-01 6.256575000000000E-03 9.333390000000000E-08 6.566352000000000E-03 2.718836000000000E-02 4.437927000000000E-03 4.241380000000000E-04 1.501138000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.046558000000000E-05 0.000000000000000E+00 4.077597000000000E-03 2.900345525741001E+39 8.582784452417000E+13 3.415413236609000E+13 + 71 1.527372210080000E+30 5.283967657599999E+33 5.868862569028551E+13 1.296430894851800E+07 1.421178910019751E-10 9.877175206525444E+03 4.448479772088423E+04 4.448479772088423E+04 1.810403113364500E-01 4.797914614522894E+03 5.284689737199999E+33 5.882193552394690E+13 1.617690000000000E-04 0.000000000000000E+00 6.212834000000000E-01 1.140913000000000E-01 2.184485000000000E-06 2.157513000000000E-01 6.250716000000000E-03 1.018290000000000E-07 6.505341000000000E-03 2.689618000000000E-02 4.391089000000000E-03 4.197743000000000E-04 1.486619000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.044743000000000E-05 0.000000000000000E+00 4.077327000000000E-03 2.940345525741000E+39 8.552669277170000E+13 3.415298061362000E+13 + 72 1.444053772400000E+30 5.285411816799999E+33 5.895524535760829E+13 1.304430894851800E+07 1.411395583217985E-10 9.877175206525444E+03 4.448479772088423E+04 4.448479772088423E+04 1.809391595839800E-01 4.791106075222792E+03 5.286478028000000E+33 5.913839382719280E+13 1.912826000000000E-04 0.000000000000000E+00 6.265125000000000E-01 1.134583000000000E-01 2.519971000000000E-06 2.118838000000000E-01 6.239931000000000E-03 1.174675000000000E-07 6.393024000000000E-03 2.635831000000000E-02 4.304865000000000E-03 4.117412000000000E-04 1.459891000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.041400000000000E-05 0.000000000000000E+00 4.076830000000000E-03 2.970345525741000E+39 8.502669277170000E+13 3.405413236609000E+13 + 73 2.132957494800000E+30 5.287544239200000E+33 5.932154229677730E+13 1.317425136089450E+07 1.411395583217985E-10 9.877175206525444E+03 4.448479772088423E+04 4.448479772088423E+04 1.821391595839800E-01 4.781690088472412E+03 5.289480725399999E+33 5.967177557194812E+13 1.912826000000000E-04 0.000000000000000E+00 6.265125000000000E-01 1.134583000000000E-01 2.519971000000000E-06 2.118838000000000E-01 6.239931000000000E-03 1.174675000000000E-07 6.393024000000000E-03 2.635831000000000E-02 4.304865000000000E-03 4.117412000000000E-04 1.459891000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.041400000000000E-05 0.000000000000000E+00 4.076830000000000E-03 3.020230350494000E+39 8.492669277170000E+13 3.405298061362000E+13 + 74 3.872498970400000E+30 5.291417211600000E+33 6.002200884711894E+13 1.336425136089450E+07 1.408149463455453E-10 9.875946726507078E+03 4.448357006984179E+04 4.448357006984179E+04 1.820403113364500E-01 4.763735122348797E+03 5.294179215800000E+33 6.047501614317666E+13 1.912826000000000E-04 0.000000000000000E+00 6.265125000000000E-01 1.134583000000000E-01 2.519971000000000E-06 2.118838000000000E-01 6.239931000000000E-03 1.174675000000000E-07 6.393024000000000E-03 2.635831000000000E-02 4.304865000000000E-03 4.117412000000000E-04 1.459891000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.041400000000000E-05 0.000000000000000E+00 4.076830000000000E-03 3.110230350494000E+39 8.482554101923000E+13 3.395298061362000E+13 + 75 5.523815447599999E+30 5.296941220000000E+33 6.092802343923437E+13 1.359430894851800E+07 1.404868826419289E-10 9.786620719928278E+03 4.438248552525961E+04 4.438248552525961E+04 1.819403113364500E-01 4.740578174939372E+03 5.300310924800001E+33 6.146142505868634E+13 1.912826000000000E-04 0.000000000000000E+00 6.265125000000000E-01 1.134583000000000E-01 2.519971000000000E-06 2.118838000000000E-01 6.239931000000000E-03 1.174675000000000E-07 6.393024000000000E-03 2.635831000000000E-02 4.304865000000000E-03 4.117412000000000E-04 1.459891000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.041400000000000E-05 0.000000000000000E+00 4.076830000000000E-03 3.230230350494000E+39 8.452554101923000E+13 3.385298061362000E+13 + 76 6.740623012000000E+30 5.303680629600000E+33 6.199482667813830E+13 1.383430894851800E+07 1.391988911600244E-10 9.696896441854366E+03 4.428040864115504E+04 4.428040864115504E+04 1.816403113364500E-01 4.713606120725508E+03 5.306958831200000E+33 6.248086763553174E+13 2.310003000000000E-04 0.000000000000000E+00 6.320732000000000E-01 1.127819000000000E-01 2.966680000000000E-06 2.077668000000000E-01 6.228286000000000E-03 1.382907000000000E-07 6.273485000000000E-03 2.578586000000000E-02 4.213098000000000E-03 4.031917000000000E-04 1.431445000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.037838000000000E-05 0.000000000000000E+00 4.076165000000000E-03 3.370230350494000E+39 8.372438926676000E+13 3.365298061362000E+13 + 77 6.554716358399999E+30 5.310237032800000E+33 6.296690859292517E+13 1.405430894851800E+07 1.379268297413249E-10 9.695690384123296E+03 4.427918663065678E+04 4.427918663065678E+04 1.814403113364500E-01 4.689280321573676E+03 5.313381958000000E+33 6.342191948155235E+13 2.473451000000000E-04 0.000000000000000E+00 6.343615000000000E-01 1.125035000000000E-01 3.150512000000000E-06 2.060726000000000E-01 6.223494000000000E-03 1.468600000000000E-07 6.224292000000000E-03 2.555028000000000E-02 4.175333000000000E-03 3.996733000000000E-04 1.419739000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.036372000000000E-05 0.000000000000000E+00 4.075891000000000E-03 3.510230350494000E+39 8.312208576182000E+13 3.345182886115000E+13 + 78 6.290646079999999E+30 5.316526883200000E+33 6.387693037017954E+13 1.426425136089450E+07 1.372890107737439E-10 9.607994760906291E+03 4.417856652736908E+04 4.417856652736908E+04 1.812403113364500E-01 4.666637806655718E+03 5.319657884000000E+33 6.432207350048184E+13 2.473451000000000E-04 0.000000000000000E+00 6.343615000000000E-01 1.125035000000000E-01 3.150512000000000E-06 2.060726000000000E-01 6.223494000000000E-03 1.468600000000000E-07 6.224292000000000E-03 2.555028000000000E-02 4.175333000000000E-03 3.996733000000000E-04 1.419739000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.036372000000000E-05 0.000000000000000E+00 4.075891000000000E-03 3.650230350494000E+39 8.262208576182000E+13 3.325182886115000E+13 + 79 6.261371023599999E+30 5.322788884800000E+33 6.476721663078414E+13 1.446919377327100E+07 1.366582250670168E-10 9.519908135468348E+03 4.407695864394511E+04 4.407695864394511E+04 1.810414630889200E-01 4.644612281024952E+03 5.325898999000000E+33 6.520195926556188E+13 2.473451000000000E-04 0.000000000000000E+00 6.343615000000000E-01 1.125035000000000E-01 3.150512000000000E-06 2.060726000000000E-01 6.223494000000000E-03 1.468600000000000E-07 6.224292000000000E-03 2.555028000000000E-02 4.175333000000000E-03 3.996733000000000E-04 1.419739000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.036372000000000E-05 0.000000000000000E+00 4.075891000000000E-03 3.790115175247000E+39 8.222093400935000E+13 3.305182886115000E+13 + 80 6.221901317200000E+30 5.329009113200000E+33 6.563670190033962E+13 1.466419377327100E+07 1.347832039263715E-10 9.518724090771706E+03 4.407574224807508E+04 4.407574224807508E+04 1.807403113364500E-01 4.623431801878862E+03 5.332098340800000E+33 6.605898452070074E+13 3.172061000000000E-04 0.000000000000000E+00 6.421076000000000E-01 1.115556000000000E-01 3.927966000000000E-06 2.003302000000000E-01 6.206966000000000E-03 1.831007000000000E-07 6.057593000000000E-03 2.475201000000000E-02 4.047364000000000E-03 3.877510000000000E-04 1.380071000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.031397000000000E-05 0.000000000000000E+00 4.074730000000000E-03 3.930115175247000E+39 8.121863050441000E+13 3.285067710868000E+13 + 81 6.177024965200000E+30 5.335187568399999E+33 6.648126714106186E+13 1.484919377327100E+07 1.341639313563057E-10 9.432629093066556E+03 4.397558445216805E+04 4.397558445216805E+04 1.830403113364500E-01 4.602692288220763E+03 5.338209163200000E+33 6.688486768582183E+13 3.225396000000000E-04 0.000000000000000E+00 6.426989000000000E-01 1.114833000000000E-01 3.987320000000000E-06 1.998918000000000E-01 6.205704000000000E-03 1.858675000000000E-07 6.044866000000000E-03 2.469107000000000E-02 4.037594000000000E-03 3.868408000000000E-04 1.377042000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.031017000000000E-05 0.000000000000000E+00 4.074642000000000E-03 4.070115175247000E+39 8.081863050441000E+13 3.274952535621000E+13 + 82 6.044098664399999E+30 5.341230758000000E+33 6.728846823058180E+13 1.507419377327100E+07 1.338553628768709E-10 9.431455903756942E+03 4.397437085393089E+04 4.397437085393089E+04 1.829414630889200E-01 4.582926557609838E+03 5.345722371600000E+33 6.787697651928216E+13 3.225396000000000E-04 0.000000000000000E+00 6.426990000000000E-01 1.114833000000000E-01 3.987320000000000E-06 1.998918000000000E-01 6.205704000000000E-03 1.858675000000000E-07 6.044866000000000E-03 2.469106000000000E-02 4.037594000000000E-03 3.868408000000000E-04 1.377042000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.031017000000000E-05 0.000000000000000E+00 4.074642000000000E-03 4.210115175247000E+39 8.061747875194000E+13 3.264952535621000E+13 + 83 8.982473293199999E+30 5.350213985199999E+33 6.846548480798253E+13 1.535919377327100E+07 1.323231332083583E-10 9.346150229735285E+03 4.387444341456219E+04 4.387444341456219E+04 1.826403113364500E-01 4.554482071520186E+03 5.355504262599999E+33 6.913981640587820E+13 4.184927000000000E-04 0.000000000000000E+00 6.510960000000000E-01 1.104480000000000E-01 5.043425000000000E-06 1.936565000000000E-01 6.187366000000000E-03 2.350974000000000E-07 5.863903000000000E-03 2.382451000000000E-02 3.898680000000000E-03 3.738986000000000E-04 1.333980000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.025605000000000E-05 0.000000000000000E+00 4.073059000000000E-03 4.410115175247000E+39 7.981517524700000E+13 3.244952535621000E+13 + 84 1.058142010200000E+31 5.360794540000000E+33 6.981414800377385E+13 1.562419377327100E+07 1.320187984471793E-10 9.260464209388570E+03 4.377353499488768E+04 4.377353499488768E+04 1.824414630889200E-01 4.521999809188801E+03 5.364870410799999E+33 7.032218559271389E+13 4.189031000000000E-04 0.000000000000000E+00 6.511261000000000E-01 1.104443000000000E-01 5.047903000000000E-06 1.936341000000000E-01 6.187299000000000E-03 2.353062000000000E-07 5.863254000000000E-03 2.382140000000000E-02 3.898181000000000E-03 3.738521000000000E-04 1.333826000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.025586000000000E-05 0.000000000000000E+00 4.073053000000000E-03 4.650115175247000E+39 7.941632699947000E+13 3.234952535621000E+13 + 85 8.151805254399998E+30 5.368946281599999E+33 7.083022318165394E+13 1.583913618564750E+07 1.308045427350605E-10 9.175563763198314E+03 4.367285865813818E+04 4.367285865813818E+04 1.821426148413900E-01 4.497792630441830E+03 5.372548722799999E+33 7.126633581034194E+13 5.311735000000000E-04 0.000000000000000E+00 6.589526999999999E-01 1.094707000000000E-01 6.270084000000000E-06 1.878108000000000E-01 6.169733000000000E-03 2.922777000000000E-07 5.694297000000000E-03 2.301237000000000E-02 3.768487000000000E-03 3.617689000000000E-04 1.293621000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.020521000000000E-05 0.000000000000000E+00 4.071215000000000E-03 4.840000000000000E+39 7.871402349453000E+13 3.224837360374000E+13 + 86 7.203625225599999E+30 5.376151163999999E+33 7.170244843902994E+13 1.603907859802400E+07 1.305075917578498E-10 9.174422546554422E+03 4.367165341425251E+04 4.367165341425251E+04 1.821414630889200E-01 4.477059888143435E+03 5.379953519799999E+33 7.215192974099116E+13 5.311736000000000E-04 0.000000000000000E+00 6.589526999999999E-01 1.094707000000000E-01 6.270085000000000E-06 1.878108000000000E-01 6.169733000000000E-03 2.922777000000000E-07 5.694297000000000E-03 2.301237000000000E-02 3.768487000000000E-03 3.617689000000000E-04 1.293621000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.020521000000000E-05 0.000000000000000E+00 4.071215000000000E-03 5.000000000000000E+39 7.851517524700000E+13 3.214837360374000E+13 + 87 7.605654480799999E+30 5.383755875600000E+33 7.260141104295234E+13 1.628407859802400E+07 1.302074326261344E-10 9.090310935070620E+03 4.357121139863622E+04 4.357121139863622E+04 1.820426148413900E-01 4.455752304968317E+03 5.389323646400000E+33 7.324829639490162E+13 5.432076000000000E-04 0.000000000000000E+00 6.596257000000000E-01 1.093860000000000E-01 6.399654000000000E-06 1.873088000000000E-01 6.168174000000000E-03 2.983176000000000E-07 5.679739000000000E-03 2.294267000000000E-02 3.757312000000000E-03 3.607278000000000E-04 1.290157000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.020083000000000E-05 0.000000000000000E+00 4.071020000000000E-03 5.170000000000000E+39 7.841402349453000E+13 3.204952535621000E+13 + 88 1.113508209480000E+31 5.394891417199999E+33 7.389518174685091E+13 1.657407859802400E+07 1.293072355159299E-10 9.008090850568675E+03 4.347220009953831E+04 4.347220009953831E+04 1.818414630889200E-01 4.425332475484333E+03 5.400617329399999E+33 7.453583937816650E+13 6.761233000000000E-04 0.000000000000000E+00 6.670584000000001E-01 1.084515000000000E-01 7.830749000000000E-06 1.817650000000000E-01 6.150954000000000E-03 3.650275000000000E-07 5.518951000000000E-03 2.217279000000000E-02 3.633893000000000E-03 3.492292000000000E-04 1.251897000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.015249000000000E-05 0.000000000000000E+00 4.068862000000000E-03 5.419884824753000E+39 7.781287174206000E+13 3.204837360374000E+13 + 89 1.145252857680000E+31 5.406343241599999E+33 7.517649700948211E+13 1.684407859802400E+07 1.293072355159299E-10 8.925504177239673E+03 4.337221681381614E+04 4.337221681381614E+04 1.858426148413900E-01 4.394542601582139E+03 5.411463442400000E+33 7.572927364979686E+13 7.069149000000000E-04 0.000000000000000E+00 6.684466000000000E-01 1.082748000000000E-01 8.158566000000000E-06 1.807264000000000E-01 6.147616000000000E-03 3.803086000000000E-07 5.488843000000000E-03 2.202863000000000E-02 3.610783000000000E-03 3.470761000000000E-04 1.244733000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.014341000000000E-05 0.000000000000000E+00 4.068367000000000E-03 5.669884824753001E+39 7.781287174206000E+13 3.204837360374000E+13 + 90 1.024059654160000E+31 5.416583643199999E+33 7.628205029011159E+13 1.710907859802400E+07 1.290136837084467E-10 8.843674663082953E+03 4.327246348327003E+04 4.327246348327003E+04 1.857437665938600E-01 4.368050679101013E+03 5.422712368400000E+33 7.692508203098175E+13 8.430807000000000E-04 0.000000000000000E+00 6.745857000000000E-01 1.074930000000000E-01 9.608229000000000E-06 1.761337000000000E-01 6.132855000000000E-03 4.478841000000000E-07 5.355699000000000E-03 2.139114000000000E-02 3.508588000000000E-03 3.375547000000000E-04 1.213051000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.010324000000000E-05 0.000000000000000E+00 4.066174000000000E-03 5.889884824753000E+39 7.781287174206000E+13 3.214952535621000E+13 + 91 1.225635832920000E+31 5.428841093600000E+33 7.756811377185191E+13 1.738402101040050E+07 1.296053194789891E-10 8.762595366421345E+03 4.317293957901759E+04 4.317293957901759E+04 1.858437665938600E-01 4.337075252784402E+03 5.434534183999999E+33 7.814918886970233E+13 9.157210000000000E-04 0.000000000000000E+00 6.772203000000000E-01 1.071523000000000E-01 1.037254000000000E-05 1.741554000000000E-01 6.126235000000000E-03 4.835122000000000E-07 5.298377000000000E-03 2.111670000000000E-02 3.464593000000000E-03 3.334557000000000E-04 1.199411000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.008587000000000E-05 0.000000000000000E+00 4.065015000000000E-03 6.159769649505999E+39 7.801287174206000E+13 3.224952535621000E+13 + 92 1.138593413920000E+31 5.440227274399999E+33 7.873026396755275E+13 1.763402101040050E+07 1.293110909647017E-10 8.682259409219656E+03 4.307364457339315E+04 4.307364457339315E+04 1.858437665938600E-01 4.309147895216154E+03 5.445573249400000E+33 7.925785615445247E+13 1.076355000000000E-03 0.000000000000000E+00 6.830464000000001E-01 1.063988000000000E-01 1.206272000000000E-05 1.697806000000000E-01 6.111593000000000E-03 5.622991000000000E-07 5.171616000000000E-03 2.050982000000000E-02 3.367302000000000E-03 3.243912000000000E-04 1.169249000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.004747000000000E-05 0.000000000000000E+00 4.062451000000000E-03 6.399769649506000E+39 7.791402349453000E+13 3.244837360374000E+13 + 93 1.069159592240000E+31 5.450919224400000E+33 7.978544834135217E+13 1.785907859802400E+07 1.299079638412652E-10 8.602659976500619E+03 4.297457793994428E+04 4.297457793994428E+04 1.860426148413900E-01 4.283646721204081E+03 5.456043403600000E+33 8.027889465273700E+13 1.076355000000000E-03 0.000000000000000E+00 6.830464000000001E-01 1.063988000000000E-01 1.206272000000000E-05 1.697806000000000E-01 6.111593000000000E-03 5.622992000000000E-07 5.171616000000000E-03 2.050982000000000E-02 3.367302000000000E-03 3.243912000000000E-04 1.169249000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.004747000000000E-05 0.000000000000000E+00 4.062451000000000E-03 6.629654474259000E+39 7.821402349453000E+13 3.254952535621000E+13 + 94 1.024980653760000E+31 5.461167582799999E+33 8.077234096412186E+13 1.807402101040050E+07 1.299040905965504E-10 8.601590015133635E+03 4.297339196657564E+04 4.297339196657564E+04 1.859437665938600E-01 4.259809348045044E+03 5.465973489999999E+33 8.122463914107541E+13 1.234700000000000E-03 0.000000000000000E+00 6.876067000000000E-01 1.057970000000000E-01 1.370700000000000E-05 1.663392000000000E-01 6.099482000000000E-03 6.389467000000000E-07 5.071970000000000E-03 2.003279000000000E-02 3.290827000000000E-03 3.172660000000000E-04 1.145539000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.001711000000000E-05 0.000000000000000E+00 4.059948000000000E-03 6.849539299012001E+39 7.821287174206000E+13 3.264837360374000E+13 + 95 9.611633382799999E+30 5.470779397199999E+33 8.167693731802897E+13 1.827896342277700E+07 1.296091838154882E-10 8.522730163865044E+03 4.287455590772408E+04 4.287455590772408E+04 1.859437665938600E-01 4.238009376691649E+03 5.475703661799999E+33 8.212981295721180E+13 1.377559000000000E-03 0.000000000000000E+00 6.917210000000000E-01 1.052540000000000E-01 1.519048000000000E-05 1.632343000000000E-01 6.088555000000000E-03 7.080989000000000E-07 4.982068000000000E-03 1.960240000000000E-02 3.221832000000000E-03 3.108376000000000E-04 1.124147000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.998972000000000E-05 0.000000000000000E+00 4.057690000000000E-03 7.049539299012001E+39 7.801402349453000E+13 3.264952535621000E+13 + 96 9.848634627600001E+30 5.480627926400000E+33 8.258268859639461E+13 1.848402101040050E+07 1.299079638412652E-10 8.444593304058699E+03 4.277594716550000E+04 4.277594716550000E+04 1.860437665938600E-01 4.216119489748159E+03 5.485834657400000E+33 8.305097870039655E+13 1.377559000000000E-03 0.000000000000000E+00 6.917210000000000E-01 1.052540000000000E-01 1.519048000000000E-05 1.632343000000000E-01 6.088555000000000E-03 7.080989000000000E-07 4.982068000000000E-03 1.960240000000000E-02 3.221832000000000E-03 3.108376000000000E-04 1.124147000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.998972000000000E-05 0.000000000000000E+00 4.057690000000000E-03 7.249539299012000E+39 7.821402349453000E+13 3.274952535621000E+13 + 97 1.041222272840000E+31 5.491041388399999E+33 8.351926880439848E+13 1.869902101040050E+07 1.296091838154882E-10 8.367172807288900E+03 4.267756521708949E+04 4.267756521708949E+04 1.907437665938600E-01 4.192966106242700E+03 5.496493785600001E+33 8.399613709889031E+13 1.612118000000000E-03 0.000000000000000E+00 6.971712000000000E-01 1.045183000000000E-01 1.759459000000000E-05 1.590975000000000E-01 6.073186000000000E-03 8.201656000000000E-07 4.862380000000000E-03 1.902948000000000E-02 3.129983000000000E-03 3.022799000000000E-04 1.095669000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.995303000000000E-05 0.000000000000000E+00 4.054019000000000E-03 7.459424123764999E+39 7.811402349453000E+13 3.275067710868000E+13 + 98 1.090650909040000E+31 5.501946182800000E+33 8.447300539338214E+13 1.891396342277700E+07 1.302074326261344E-10 8.291493365719571E+03 4.258058464118079E+04 4.258058464118079E+04 1.908449183463300E-01 4.169267197763668E+03 5.507478148000000E+33 8.494632917688588E+13 1.696406000000000E-03 0.000000000000000E+00 6.991298000000000E-01 1.042539000000000E-01 1.845851000000000E-05 1.576110000000000E-01 6.067663000000000E-03 8.604365000000000E-07 4.819370000000000E-03 1.882360000000000E-02 3.096978000000000E-03 2.992048000000000E-04 1.085436000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.993985000000000E-05 0.000000000000000E+00 4.052699000000000E-03 7.669424123765000E+39 7.841517524700000E+13 3.295067710868000E+13 + 99 1.106322224480000E+31 5.513010113200000E+33 8.541965296038961E+13 1.912890583515350E+07 1.302074326261344E-10 8.215476497621437E+03 4.248265201410775E+04 4.248265201410775E+04 1.908449183463300E-01 4.145744445554332E+03 5.518576889400000E+33 8.588450999222605E+13 2.010318000000000E-03 0.000000000000000E+00 7.051430000000000E-01 1.034223000000000E-01 2.163681000000000E-05 1.530178000000000E-01 6.049629000000000E-03 1.008592000000000E-06 4.686586000000000E-03 1.818804000000000E-02 2.995089000000000E-03 2.897114000000000E-04 1.053843000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.989887000000000E-05 0.000000000000000E+00 4.047831000000000E-03 7.889308948517999E+39 7.841402349453000E+13 3.314952535621000E+13 + 100 1.113388459640000E+31 5.524143665600000E+33 8.634936702406248E+13 1.933890583515350E+07 1.305075917578498E-10 8.214454692448639E+03 4.248147961646399E+04 4.248147961646399E+04 1.910437665938600E-01 4.122565097205196E+03 5.529738290599999E+33 8.680570888908288E+13 2.063620000000000E-03 0.000000000000000E+00 7.061640000000000E-01 1.032810000000000E-01 2.217648000000000E-05 1.522378000000000E-01 6.046566000000000E-03 1.033749000000000E-06 4.664040000000000E-03 1.808013000000000E-02 2.977788000000000E-03 2.880994000000000E-04 1.048478000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.989192000000000E-05 0.000000000000000E+00 4.047004000000000E-03 8.099308948518000E+39 7.861517524700000E+13 3.325067710868000E+13 + 101 1.118831507600000E+31 5.535332915600000E+33 8.726205075410327E+13 1.954390583515350E+07 1.308084428278250E-10 8.139144119152385E+03 4.238377492462259E+04 4.238377492462259E+04 1.911449183463300E-01 4.099745802612503E+03 5.540853940200000E+33 8.770407201133533E+13 2.063620000000000E-03 0.000000000000000E+00 7.061640000000000E-01 1.032810000000000E-01 2.217648000000000E-05 1.522378000000000E-01 6.046566000000000E-03 1.033749000000000E-06 4.664040000000000E-03 1.808013000000000E-02 2.977788000000000E-03 2.880994000000000E-04 1.048478000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.989192000000000E-05 0.000000000000000E+00 4.047004000000000E-03 8.309308948517999E+39 7.881632699947000E+13 3.335067710868000E+13 + 102 1.104339588840000E+31 5.546374964800001E+33 8.814609326856742E+13 1.979884824753000E+07 1.302113237489345E-10 8.064523997342329E+03 4.228629494733676E+04 4.228629494733676E+04 1.909449183463300E-01 4.077766543323558E+03 5.554758448200001E+33 8.881339908434250E+13 2.468878000000000E-03 0.000000000000000E+00 7.126200000000000E-01 1.023637000000000E-01 2.622973000000000E-05 1.472702000000000E-01 6.025883000000000E-03 1.222689000000000E-06 4.520567000000000E-03 1.739349000000000E-02 2.867708000000000E-03 2.778427000000000E-04 1.014343000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.984731000000000E-05 0.000000000000000E+00 4.040776000000000E-03 8.519193773271000E+39 7.851517524700000E+13 3.335067710868000E+13 + 103 1.676635412640000E+31 5.563141931600000E+33 8.948070490011761E+13 2.010384824753000E+07 1.305075917578498E-10 7.990587996921068E+03 4.218903916777715E+04 4.218903916777715E+04 1.910449183463300E-01 4.044492204600503E+03 5.571970995800000E+33 9.014876518513588E+13 2.479266000000000E-03 0.000000000000000E+00 7.127855000000000E-01 1.023402000000000E-01 2.633363000000000E-05 1.471429000000000E-01 6.025352000000000E-03 1.227532000000000E-06 4.516889000000000E-03 1.737589000000000E-02 2.864886000000000E-03 2.775798000000000E-04 1.013468000000000E-04 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.984617000000000E-05 0.000000000000000E+00 4.040617000000000E-03 8.829193773270999E+39 7.851517524700000E+13 3.335067710868000E+13 + 104 1.765824775200000E+31 5.580800060000000E+33 9.081682547015412E+13 2.037384824753000E+07 1.290136837084467E-10 7.845719145861835E+03 4.199635711778005E+04 4.199635711778005E+04 1.906460700988000E-01 4.011630304094290E+03 5.587589199600000E+33 9.132762899555362E+13 3.104324000000000E-03 0.000000000000000E+00 7.209510000000000E-01 1.011400000000000E-01 3.250084000000000E-05 1.407998000000000E-01 5.997034000000000E-03 1.515015000000000E-06 4.333908000000000E-03 1.650030000000000E-02 2.724511000000000E-03 2.645000000000000E-04 9.699353999999999E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.978875000000000E-05 0.000000000000000E+00 4.031108000000000E-03 9.149078598024000E+39 7.771402349453000E+13 3.324952535621000E+13 + 105 1.357841645480000E+31 5.594378339199999E+33 9.183843252095312E+13 2.060890583515350E+07 1.290136837084467E-10 7.772822290350505E+03 4.189861186497885E+04 4.189861186497885E+04 1.949460700988000E-01 3.985937150326271E+03 5.601584216200000E+33 9.237463883877405E+13 3.109868000000000E-03 0.000000000000000E+00 7.210095000000000E-01 1.011310000000000E-01 3.255470000000000E-05 1.407538000000000E-01 5.996811000000000E-03 1.517525000000000E-06 4.332584000000000E-03 1.649397000000000E-02 2.723495000000000E-03 2.644053000000000E-04 9.696204000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.978833000000000E-05 0.000000000000000E+00 4.031025000000000E-03 9.388963422777000E+39 7.761402349453000E+13 3.315067710868000E+13 + 106 1.441209614240000E+31 5.608790093200000E+33 9.291084515659494E+13 2.084390583515350E+07 1.278308791466206E-10 7.701560627253885E+03 4.180224773176583E+04 4.180224773176583E+04 1.946472218512700E-01 3.959254470192826E+03 5.615874629000000E+33 9.341743288535817E+13 3.827858000000000E-03 0.000000000000000E+00 7.285775000000000E-01 9.996972000000000E-02 3.952863000000000E-05 1.348006000000000E-01 5.967939000000000E-03 1.842613000000000E-06 4.161109000000000E-03 1.567359000000000E-02 2.591968000000000E-03 2.521496000000000E-04 9.288269000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.973388000000000E-05 0.000000000000000E+00 4.020231000000000E-03 9.648963422777000E+39 7.701287174206000E+13 3.314952535621000E+13 + 107 1.416737282320000E+31 5.622959164800000E+33 9.392402061412142E+13 2.107884824753000E+07 1.275368762830766E-10 7.630952295011509E+03 4.170610522990892E+04 4.170610522990892E+04 1.946460700988000E-01 3.934103798727329E+03 5.630376891600000E+33 9.444025484297742E+13 3.876744000000000E-03 0.000000000000000E+00 7.289979000000000E-01 9.990208000000000E-02 3.999612000000000E-05 1.344651000000000E-01 5.966167000000000E-03 1.864404000000000E-06 4.151461000000000E-03 1.562744000000000E-02 2.584569000000000E-03 2.514601000000000E-04 9.265317999999999E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.973077000000000E-05 0.000000000000000E+00 4.019504000000000E-03 9.898848247530000E+39 7.691171998959000E+13 3.304952535621000E+13 + 108 1.483683410480000E+31 5.637794618400000E+33 9.495648907183342E+13 2.134884824753000E+07 1.263676111731090E-10 7.560991303850158E+03 4.161018384967023E+04 4.161018384967023E+04 1.942472218512700E-01 3.908761194612620E+03 5.647585460800000E+33 9.563428143411222E+13 4.647231000000000E-03 0.000000000000000E+00 7.356234000000000E-01 9.883594000000000E-02 4.736410000000000E-05 1.291769000000000E-01 5.938235000000000E-03 2.207860000000000E-06 3.999400000000000E-03 1.490009000000000E-02 2.467954000000000E-03 2.405935000000000E-04 8.903590000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.968184000000000E-05 0.000000000000000E+00 4.008055000000000E-03 1.019884824753000E+40 7.611056823712000E+13 3.294952535621000E+13 + 109 1.958178823840000E+31 5.657376303199999E+33 9.631207379639103E+13 2.169379065990650E+07 1.254977026566311E-10 7.491671718911192E+03 4.151448308248421E+04 4.151448308248421E+04 1.940472218512700E-01 3.875750554708823E+03 5.669947052600000E+33 9.717152639215859E+13 4.745619000000000E-03 0.000000000000000E+00 7.363452000000000E-01 9.871479000000000E-02 4.829347000000000E-05 1.285930000000000E-01 5.934924000000000E-03 2.251183000000000E-06 3.982635000000000E-03 1.481991000000000E-02 2.455099000000000E-03 2.393956000000000E-04 8.863710000000001E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.967638000000000E-05 0.000000000000000E+00 4.006606000000000E-03 1.049884824753000E+40 7.561056823712000E+13 3.274837360374000E+13 + 110 2.514036495600000E+31 5.682517802000000E+33 9.803097898792614E+13 2.206379065990650E+07 1.232071114368812E-10 7.354933299822008E+03 4.132374135885304E+04 4.132374135885304E+04 1.933472218512700E-01 3.834804700495653E+03 5.694537543000000E+33 9.884307790984673E+13 5.851036000000000E-03 0.000000000000000E+00 7.439444000000000E-01 9.741540999999999E-02 5.867489000000000E-05 1.224075000000000E-01 5.898792000000000E-03 2.735109000000000E-06 3.805162000000000E-03 1.397123000000000E-02 2.319027000000000E-03 2.267154000000000E-04 8.441565000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.961830000000000E-05 0.000000000000000E+00 3.990400000000000E-03 1.099884824753000E+40 7.420826473218000E+13 3.234837360374000E+13 + 111 2.403944221600000E+31 5.706557284000000E+33 9.965517683176734E+13 2.240379065990650E+07 1.204025751825707E-10 7.220690638149455E+03 4.113387601383569E+04 4.113387601383569E+04 1.925472218512700E-01 3.797151969990961E+03 5.717522749000000E+33 1.003891763589626E+14 6.905274000000000E-03 0.000000000000000E+00 7.498231000000000E-01 9.634212000000000E-02 6.840493000000000E-05 1.175142000000000E-01 5.867210000000000E-03 3.188671000000000E-06 3.665098000000000E-03 1.330164000000000E-02 2.211667000000000E-03 2.167103000000000E-04 8.108433999999999E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.957162000000000E-05 0.000000000000000E+00 3.975142000000000E-03 1.139884824753000E+40 7.260480947477000E+13 3.174837360374000E+13 + 112 2.193234233200000E+31 5.728488214000000E+33 1.011231758861579E+14 2.273379065990650E+07 1.179331166087460E-10 7.154490948466661E+03 4.103927072427291E+04 4.103927072427291E+04 1.917472218512700E-01 3.763956766237455E+03 5.740098179800000E+33 1.018894008516455E+14 7.452147000000000E-03 0.000000000000000E+00 7.525421000000000E-01 9.582557000000000E-02 7.340433000000000E-05 1.152186000000000E-01 5.851531000000000E-03 3.421716000000000E-06 3.599488000000000E-03 1.298803000000000E-02 2.161383000000000E-03 2.120241000000000E-04 7.952391000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.954951000000000E-05 0.000000000000000E+00 3.967282000000000E-03 1.179884824753000E+40 7.100365772230000E+13 3.114722185127000E+13 + 113 2.321851926800000E+31 5.751708145600000E+33 1.026556258171332E+14 2.307379065990650E+07 1.160474964800288E-10 7.023906772012197E+03 4.085071240309712E+04 4.085071240309712E+04 1.981506771086800E-01 3.728719447765625E+03 5.763955650000000E+33 1.034526524697013E+14 7.948410000000000E-03 0.000000000000000E+00 7.546819000000000E-01 9.539681000000000E-02 7.788402000000000E-05 1.133758000000000E-01 5.838012000000000E-03 3.630535000000000E-06 3.546923000000000E-03 1.273685000000000E-02 2.121106000000000E-03 2.082703000000000E-04 7.827384000000001E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.953153000000000E-05 0.000000000000000E+00 3.960217000000000E-03 1.219884824753000E+40 6.990135421736000E+13 3.074607009880000E+13 + 114 2.449550610000000E+31 5.776203154400000E+33 1.042496791222696E+14 2.340373307228300E+07 1.141886206628069E-10 6.895706025387131E+03 4.066302042871210E+04 4.066302042871210E+04 1.975506771086800E-01 3.692761920380701E+03 5.787420253199999E+33 1.049692320923227E+14 9.420783000000000E-03 0.000000000000000E+00 7.607274000000001E-01 9.416192000000000E-02 9.111489000000000E-05 1.081309000000000E-01 5.798569000000000E-03 4.247287000000000E-06 3.397424000000000E-03 1.202252000000000E-02 2.006564000000000E-03 1.975950000000000E-04 7.471864000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.948012000000000E-05 0.000000000000000E+00 3.939323000000000E-03 1.269884824753000E+40 6.879905071242000E+13 3.044491834633000E+13 + 115 2.243342181200000E+31 5.798637352000000E+33 1.056887850623758E+14 2.370373307228300E+07 1.126218940522507E-10 6.832485812543085E+03 4.056949807694383E+04 4.056949807694383E+04 1.969506771086800E-01 3.660842213317558E+03 5.809325323600000E+33 1.063672136232389E+14 1.027863000000000E-02 0.000000000000000E+00 7.636500000000001E-01 9.351605000000000E-02 9.869933999999999E-05 1.055150000000000E-01 5.776913000000000E-03 4.600834000000000E-06 3.323081000000000E-03 1.166743000000000E-02 1.949624000000000E-03 1.922879000000000E-04 7.295090999999999E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.945399000000000E-05 0.000000000000000E+00 3.927295000000000E-03 1.309884824753000E+40 6.779789895995000E+13 3.014376659386000E+13 + 116 2.137650017600000E+31 5.820013295200001E+33 1.070456421841019E+14 2.399873307228300E+07 1.108211944992684E-10 6.707778892177413E+03 4.038309816502227E+04 4.038309816502227E+04 1.963506771086800E-01 3.631318201673040E+03 5.831021527999999E+33 1.077377627573395E+14 1.124199000000000E-02 0.000000000000000E+00 7.666495000000000E-01 9.282565000000000E-02 1.071455000000000E-04 1.027843000000000E-01 5.753234000000000E-03 4.994550000000000E-06 3.245597000000000E-03 1.129740000000000E-02 1.890287000000000E-03 1.867572000000000E-04 7.110858000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.942646000000000E-05 0.000000000000000E+00 3.913869000000000E-03 1.349884824753000E+40 6.669559545501000E+13 2.974376659386000E+13 + 117 2.201736074000000E+31 5.842029760799999E+33 1.084298833305770E+14 2.429373307228300E+07 1.090492861409947E-10 6.646281605646833E+03 4.029021961659520E+04 4.029021961659520E+04 1.957506771086800E-01 3.601770476668473E+03 5.852897755000000E+33 1.091093482276184E+14 1.220706000000000E-02 0.000000000000000E+00 7.693859000000000E-01 9.216728000000000E-02 1.155352000000000E-04 1.002455000000000E-01 5.730127000000000E-03 5.385629000000000E-06 3.173679000000000E-03 1.095403000000000E-02 1.835223000000000E-03 1.816245000000000E-04 6.939869000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.940059000000000E-05 0.000000000000000E+00 3.900502000000000E-03 1.389884824753000E+40 6.569329195007000E+13 2.934376659386000E+13 + 118 2.173491423200000E+31 5.863765749200000E+33 1.097888131246597E+14 2.457373307228300E+07 1.068126836910720E-10 6.524973295075297E+03 4.010510287264155E+04 4.010510287264155E+04 1.949506771086800E-01 3.573474095902363E+03 5.874152357000000E+33 1.104352268676465E+14 1.393432000000000E-02 0.000000000000000E+00 7.735661000000000E-01 9.107830000000000E-02 1.303309000000000E-04 9.622664000000000E-02 5.690449000000000E-03 6.075325000000000E-06 3.060179000000000E-03 1.041232000000000E-02 1.748351000000000E-03 1.735265000000000E-04 6.670049000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.935888000000000E-05 0.000000000000000E+00 3.876834000000000E-03 1.420000000000000E+40 6.439214019760000E+13 2.894261484139000E+13 + 119 2.077440912000000E+31 5.884538964800000E+33 1.110816406106332E+14 2.484367548465950E+07 1.048631325021542E-10 6.465151980332862E+03 4.001286369564460E+04 4.001286369564460E+04 1.941506771086800E-01 3.547153926456088E+03 5.894486954000000E+33 1.116988529514433E+14 1.542783000000000E-02 0.000000000000000E+00 7.767676999999999E-01 9.018849000000000E-02 1.429776000000000E-04 9.305350000000000E-02 5.657132000000000E-03 6.664851000000000E-06 2.970785000000000E-03 9.985805000000000E-03 1.679948000000000E-03 1.671498000000000E-04 6.457553999999999E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.932546000000000E-05 0.000000000000000E+00 3.856539000000000E-03 1.460000000000000E+40 6.309098844513000E+13 2.844261484139000E+13 + 120 1.989448650000000E+31 5.904434943200000E+33 1.123160652922535E+14 2.510867548465950E+07 1.027123881244455E-10 6.347149658003325E+03 3.982902128639281E+04 3.982902128639281E+04 1.933518288611500E-01 3.522639461932865E+03 5.914711150400000E+33 1.129485715944968E+14 1.676063000000000E-02 0.000000000000000E+00 7.792340000000000E-01 8.944371000000000E-02 1.541106000000000E-04 9.050738000000000E-02 5.628358000000000E-03 7.183808000000000E-06 2.899282000000000E-03 9.644784000000000E-03 1.625254000000000E-03 1.620507000000000E-04 6.287607000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.929814000000000E-05 0.000000000000000E+00 3.838606000000000E-03 1.500000000000000E+40 6.188868494019000E+13 2.804146308892000E+13 + 121 2.055321008000000E+31 5.924987357600000E+33 1.135810778967401E+14 2.537873307228300E+07 1.013031213273312E-10 6.288958640164933E+03 3.973741707942399E+04 3.973741707942399E+04 2.009518288611500E-01 3.496888342366021E+03 5.936038358199999E+33 1.142512930007579E+14 1.818130000000000E-02 0.000000000000000E+00 7.815797000000000E-01 8.868582000000000E-02 1.658527000000000E-04 8.800015999999999E-02 5.598398000000000E-03 7.731164000000000E-06 2.829051000000000E-03 9.309939999999999E-03 1.571549000000000E-03 1.570436000000000E-04 6.120701000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.927084000000000E-05 0.000000000000000E+00 3.819635000000000E-03 1.530000000000000E+40 6.098753318772000E+13 2.774146308892000E+13 + 122 2.210162325200000E+31 5.947089358799999E+33 1.149215081047756E+14 2.565873307228300E+07 1.003743687284676E-10 6.174172208719695E+03 3.955484023241576E+04 3.955484023241576E+04 2.007506771086800E-01 3.469879211809458E+03 5.958328338800000E+33 1.155942272067774E+14 1.968343000000000E-02 0.000000000000000E+00 7.837777000000000E-01 8.792052000000000E-02 1.781317000000000E-04 8.555490000000000E-02 5.567447000000000E-03 8.303543000000000E-06 2.760748000000000E-03 8.984400999999999E-03 1.519334000000000E-03 1.521751000000000E-04 5.958391000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.924379000000000E-05 0.000000000000000E+00 3.799734000000000E-03 1.570000000000000E+40 6.048638143525000E+13 2.764031133645000E+13 + 123 2.247907395200000E+31 5.969567318800000E+33 1.162669463087793E+14 2.593873307228300E+07 9.945117246169967E-11 6.117567057668589E+03 3.946386662437207E+04 3.946386662437207E+04 2.007449183463300E-01 3.443019321327713E+03 5.981057932600000E+33 1.169478284810355E+14 2.119060000000000E-02 0.000000000000000E+00 7.857351000000000E-01 8.718457000000000E-02 1.903194000000000E-04 8.328209000000000E-02 5.537045000000000E-03 8.871669000000000E-06 2.697443000000000E-03 8.682791000000000E-03 1.470956000000000E-03 1.476640000000000E-04 5.807975000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.921824000000000E-05 0.000000000000000E+00 3.779919000000000E-03 1.610115175247000E+40 5.988522968278000E+13 2.744031133645000E+13 + 124 2.298017332400000E+31 5.992548546400000E+33 1.176287106532918E+14 2.621873307228300E+07 9.808665122094592E-11 6.005908875152966E+03 3.928254662753809E+04 3.928254662753809E+04 2.007391595839800E-01 3.416207318677828E+03 6.004265929000000E+33 1.183208576164509E+14 2.275471000000000E-02 0.000000000000000E+00 7.875404000000000E-01 8.645012000000001E-02 2.028350000000000E-04 8.108795000000001E-02 5.506106000000000E-03 9.455079000000000E-06 2.636504000000000E-03 8.392564000000000E-03 1.424401000000000E-03 1.433227000000000E-04 5.663197000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.919319000000000E-05 0.000000000000000E+00 3.759510000000000E-03 1.650115175247000E+40 5.908292617784000E+13 2.714031133645000E+13 + 125 2.343566034000000E+31 6.015983311599999E+33 1.190130045796100E+14 2.650867548465950E+07 9.629636807388228E-11 5.950846371616532E+03 3.919219927740716E+04 3.919219927740716E+04 2.006299455642200E-01 3.389463845521448E+03 6.028557044799999E+33 1.197483035010838E+14 2.557572000000000E-02 0.000000000000000E+00 7.902967000000000E-01 8.519079000000000E-02 2.250861000000000E-04 7.749369000000000E-02 5.451693000000000E-03 1.049231000000000E-05 2.537091000000000E-03 7.919351999999999E-03 1.348489000000000E-03 1.362432000000000E-04 5.427050000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.915124000000000E-05 0.000000000000000E+00 3.723072000000000E-03 1.690115175247000E+40 5.788177442537001E+13 2.673915958398000E+13 + 126 2.514581536400000E+31 6.041130777999999E+33 1.204836024225574E+14 2.681861789703600E+07 9.497231350278104E-11 5.842231184562477E+03 3.901212747865170E+04 3.901212747865170E+04 2.005241868018700E-01 3.361458481157182E+03 6.055142702800000E+33 1.213047756675378E+14 2.560439000000000E-02 0.000000000000000E+00 7.903208000000000E-01 8.517851000000000E-02 2.253095000000000E-04 7.746003999999999E-02 5.451151000000000E-03 1.050272000000000E-05 2.536164000000000E-03 7.914941000000000E-03 1.347781000000000E-03 1.361772000000000E-04 5.424848000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.915084000000000E-05 0.000000000000000E+00 3.722705000000000E-03 1.740115175247000E+40 5.717947092043001E+13 2.633915958398000E+13 + 127 2.802396895200000E+31 6.069154627600000E+33 1.221259489125182E+14 2.712861789703600E+07 9.217431260754641E-11 5.787955829630898E+03 3.892133037109394E+04 3.892133037109394E+04 2.002138210296400E-01 3.331150939603086E+03 6.082745836600000E+33 1.229274163000014E+14 2.908491000000000E-02 0.000000000000000E+00 7.929967000000000E-01 8.372093999999999E-02 2.522158000000000E-04 7.355112000000000E-02 5.386137000000000E-03 1.175695000000000E-05 2.428692000000000E-03 7.403758000000000E-03 1.265770000000000E-03 1.285280000000000E-04 5.169613000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.910379000000000E-05 0.000000000000000E+00 3.678381000000000E-03 1.800115175247000E+40 5.557601566302001E+13 2.583685607904000E+13 + 128 2.718371098000000E+31 6.096337045600000E+33 1.237288836874846E+14 2.741861789703600E+07 8.924769685681600E-11 5.682313730030672E+03 3.874250310191543E+04 3.874250310191543E+04 1.998023035049400E-01 3.302568838557565E+03 6.109156444999999E+33 1.244810099768240E+14 3.227876000000000E-02 0.000000000000000E+00 7.949190000000000E-01 8.245515000000000E-02 2.764491000000000E-04 7.034996000000000E-02 5.328108000000000E-03 1.288657000000000E-05 2.341205000000000E-03 6.987962000000000E-03 1.199057000000000E-03 1.223047000000000E-04 4.961890000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.906408000000000E-05 0.000000000000000E+00 3.638236000000000E-03 1.860115175247000E+40 5.377371215808001E+13 2.513570432657000E+13 + 129 2.563852031200000E+31 6.121975844400000E+33 1.252331362661634E+14 2.769861789703600E+07 8.741722529204262E-11 5.579287467080402E+03 3.856555934817215E+04 3.856555934817215E+04 2.079953929901200E-01 3.275219201706874E+03 6.135006098999999E+33 1.259955068141417E+14 3.276228000000000E-02 0.000000000000000E+00 7.951362000000000E-01 8.227365000000000E-02 2.800437000000000E-04 6.991855000000000E-02 5.319563000000000E-03 1.305413000000000E-05 2.329494000000000E-03 6.932355000000000E-03 1.190134000000000E-03 1.214722000000000E-04 4.934093000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.905855000000000E-05 0.000000000000000E+00 3.632244000000000E-03 1.920000000000000E+40 5.267140865314001E+13 2.463570432657000E+13 + 130 2.606094682400000E+31 6.148036353600000E+33 1.267578773621201E+14 2.799361789703600E+07 8.562176115967057E-11 5.477453994323332E+03 3.838836669836233E+04 3.838836669836233E+04 2.076988482475300E-01 3.248105061688262E+03 6.163032932399999E+33 1.276275927951725E+14 3.627512000000000E-02 0.000000000000000E+00 7.967144000000000E-01 8.095498000000000E-02 3.061585000000000E-04 6.678436000000000E-02 5.257480000000000E-03 1.427147000000000E-05 2.244417000000000E-03 6.528368000000000E-03 1.125309000000000E-03 1.154242000000000E-04 4.732142000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.901837000000000E-05 0.000000000000000E+00 3.588711000000000E-03 1.980000000000000E+40 5.156910514820000E+13 2.433340082163000E+13 + 131 2.999204364800000E+31 6.178029511200000E+33 1.284973082282249E+14 2.831856030941250E+07 8.425276387594302E-11 5.377479191913539E+03 3.821198817482682E+04 3.821198817482682E+04 2.072069105148200E-01 3.217739687664980E+03 6.194417535400000E+33 1.294492662437318E+14 3.693887000000000E-02 0.000000000000000E+00 7.969398000000000E-01 8.071597000000000E-02 3.110112000000000E-04 6.624457000000000E-02 5.245998000000000E-03 1.449767000000000E-05 2.229850000000000E-03 6.459256000000000E-03 1.114218000000000E-03 1.143893000000000E-04 4.697574000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.901126000000000E-05 0.000000000000000E+00 3.580580000000000E-03 2.050115175247000E+40 5.076680164326000E+13 2.393340082163000E+13 + 132 3.277608818400000E+31 6.210805559600000E+33 1.304012242592388E+14 2.865350272178900E+07 8.176573123192848E-11 5.279329135293896E+03 3.803642003699514E+04 3.803642003699514E+04 2.066172762870500E-01 3.185575603360326E+03 6.227016544999999E+33 1.313493766652959E+14 4.177754000000000E-02 0.000000000000000E+00 7.983396000000000E-01 7.900826000000000E-02 3.460681000000000E-04 6.248373000000000E-02 5.163178000000000E-03 1.613184000000000E-05 2.128674000000000E-03 5.979402000000000E-03 1.037207000000000E-03 1.072030000000000E-04 4.457496000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.896100000000000E-05 0.000000000000000E+00 3.521671000000000E-03 2.140000000000000E+40 4.926449813832000E+13 2.343224906916000E+13 + 133 3.242236864000000E+31 6.243227530399999E+33 1.322975290713529E+14 2.898344513416550E+07 7.880818489916962E-11 5.182970519100263E+03 3.786165856148314E+04 3.786165856148314E+04 2.058276420592800E-01 3.154816708328172E+03 6.259019789200000E+33 1.332380518190313E+14 4.611983000000000E-02 0.000000000000000E+00 7.990718000000000E-01 7.755078000000000E-02 3.768126000000000E-04 5.948398000000000E-02 5.090785000000000E-03 1.756498000000000E-05 2.048664000000000E-03 5.600384000000000E-03 9.763716000000000E-04 1.015249000000000E-04 4.267707000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.891930000000000E-05 0.000000000000000E+00 3.469617000000000E-03 2.220000000000000E+40 4.746334638585000E+13 2.273109731669000E+13 + 134 3.158491543999999E+31 6.274812048000000E+33 1.341785745667097E+14 2.929844513416550E+07 7.526123229651355E-11 5.088370645859877E+03 3.768770004201408E+04 3.768770004201408E+04 2.048368560790400E-01 3.125818722379553E+03 6.289504279200000E+33 1.350691359952914E+14 5.100808000000000E-02 0.000000000000000E+00 7.993958000000000E-01 7.598470000000000E-02 4.106305000000000E-04 5.646283000000000E-02 5.011359000000000E-03 1.914139000000000E-05 1.968804000000000E-03 5.222492000000000E-03 9.157088000000001E-04 9.586191000000001E-05 4.078336000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.887590000000000E-05 0.000000000000000E+00 3.411978000000000E-03 2.300000000000000E+40 4.535989112844000E+13 2.183109731669000E+13 + 135 2.938497959200000E+31 6.304196510399999E+33 1.359596974238731E+14 2.958344513416550E+07 7.203960535256682E-11 4.995497414896212E+03 3.751454078934020E+04 3.751454078934020E+04 2.039449183463300E-01 3.099650828684737E+03 6.316817984400000E+33 1.367387225435791E+14 5.283310000000000E-02 0.000000000000000E+00 7.994297000000000E-01 7.541258000000001E-02 4.231045000000000E-04 5.539719000000000E-02 4.982030000000000E-03 1.972286000000000E-05 1.940772000000000E-03 5.089967000000000E-03 8.944324000000000E-04 9.387541000000001E-05 4.011881000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.886014000000000E-05 0.000000000000000E+00 3.390602000000000E-03 2.380000000000000E+40 4.335643587103000E+13 2.092879381175000E+13 + 136 2.524211253600000E+31 6.329439458399999E+33 1.375177476632850E+14 2.982838754654200E+07 6.895588314189727E-11 4.904319311436017E+03 3.734217713116410E+04 3.734217713116410E+04 2.030506771086800E-01 3.077836132257430E+03 6.339606259600001E+33 1.381546476905256E+14 5.491474000000000E-02 0.000000000000000E+00 7.993630000000000E-01 7.477646000000000E-02 4.371351000000000E-04 5.425598000000000E-02 4.949068000000000E-03 2.037689000000000E-05 1.910925000000000E-03 4.948957000000000E-03 8.717920000000000E-04 9.176133000000000E-05 3.941139000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.884297000000000E-05 0.000000000000000E+00 3.366468000000000E-03 2.449884824753000E+40 4.155413236609000E+13 2.012764205928000E+13 + 137 2.033286639600000E+31 6.349773060800000E+33 1.387915477177660E+14 3.003838754654200E+07 6.661292782166749E-11 4.858757322716815E+03 3.725526667811908E+04 3.725526667811908E+04 2.166403113364500E-01 3.059454293487160E+03 6.359265523200000E+33 1.393820592796068E+14 6.099373000000000E-02 0.000000000000000E+00 7.988717000000000E-01 7.296538000000000E-02 4.774821000000000E-04 5.113221000000000E-02 4.854200000000000E-03 2.225766000000000E-05 1.829733000000000E-03 4.565692000000000E-03 8.102493000000000E-04 8.601385000000000E-05 3.748745000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.879482000000000E-05 0.000000000000000E+00 3.296711000000000E-03 2.500000000000000E+40 4.015182886115000E+13 1.962649030681000E+13 + 138 1.898495662720000E+31 6.368757985600000E+33 1.399725708414476E+14 3.024338754654200E+07 6.585235716307236E-11 4.770662994715138E+03 3.708511539193623E+04 3.708511539193623E+04 2.161449183463300E-01 3.042644398606498E+03 6.378414557000000E+33 1.405724598881985E+14 6.216291000000000E-02 0.000000000000000E+00 7.987320000000000E-01 7.262414000000000E-02 4.851466000000000E-04 5.056325000000000E-02 4.836166000000000E-03 2.261493000000000E-05 1.815027000000000E-03 4.496327000000000E-03 7.991099000000000E-04 8.497340000000000E-05 3.713905000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.878586000000000E-05 0.000000000000000E+00 3.283404000000000E-03 2.550000000000000E+40 3.965182886115000E+13 1.942649030681000E+13 + 139 1.931450341280000E+31 6.388071128400000E+33 1.411723489349493E+14 3.045338754654200E+07 6.494691436414201E-11 4.726342696678775E+03 3.699880322624170E+04 3.699880322624170E+04 2.155495253562100E-01 3.025848727078071E+03 6.397776435200000E+33 1.417703787452311E+14 6.599466000000000E-02 0.000000000000000E+00 7.980983000000000E-01 7.153442000000000E-02 5.098399000000000E-04 4.882179000000000E-02 4.777960000000000E-03 2.376600000000000E-05 1.770340000000000E-03 4.285770000000000E-03 7.652925000000001E-04 8.181423000000000E-05 3.608073000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.875771000000000E-05 0.000000000000000E+00 3.240282000000000E-03 2.599884824753000E+40 3.905182886115000E+13 1.922649030681000E+13 + 140 1.940982985520000E+31 6.407481741999999E+33 1.423684085555129E+14 3.065838754654200E+07 6.435147747420681E-11 4.683011326379982E+03 3.691370834017947E+04 3.691370834017947E+04 2.150541323660900E-01 3.009296721324107E+03 6.416994096400000E+33 1.429501341561412E+14 6.702814999999999E-02 0.000000000000000E+00 7.979274000000000E-01 7.124050000000000E-02 5.165000000000000E-04 4.835209000000000E-02 4.762260000000000E-03 2.407646000000000E-05 1.758288000000000E-03 4.228979000000000E-03 7.561714000000000E-04 8.096215000000000E-05 3.579528000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.875011000000000E-05 0.000000000000000E+00 3.228651000000000E-03 2.649884824753000E+40 3.875067710868000E+13 1.902764205928000E+13 + 141 1.902494352560000E+31 6.426506450800000E+33 1.435318597567695E+14 3.089838754654200E+07 6.376337922360991E-11 4.598103456235316E+03 3.674511701036492E+04 3.674511701036492E+04 2.145575876235000E-01 2.993379934626356E+03 6.439469072600000E+33 1.443276237698998E+14 6.702824000000000E-02 0.000000000000000E+00 7.979273000000000E-01 7.124047999999999E-02 5.165006000000000E-04 4.835205000000000E-02 4.762259000000000E-03 2.407649000000000E-05 1.758287000000000E-03 4.228974000000000E-03 7.561707000000000E-04 8.096207999999999E-05 3.579526000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.875011000000000E-05 0.000000000000000E+00 3.228650000000000E-03 2.699884824753000E+40 3.844952535621000E+13 1.892649030681000E+13 + 142 2.592554198000000E+31 6.452431694399999E+33 1.451233877830302E+14 3.118338754654200E+07 6.231011065596897E-11 4.555386266652208E+03 3.665959615936189E+04 3.665959615936189E+04 2.137621946333800E-01 2.972181840677508E+03 6.466560981999999E+33 1.460011184081916E+14 7.134930000000000E-02 0.000000000000000E+00 7.969986999999999E-01 7.004705000000000E-02 5.437908000000000E-04 4.653740000000000E-02 4.697759000000000E-03 2.534861000000000E-05 1.712139000000000E-03 4.011812000000000E-03 7.212872000000000E-04 7.770260000000000E-05 3.470273000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.871983000000000E-05 0.000000000000000E+00 3.180658000000000E-03 2.769884824753000E+40 3.754837360374000E+13 1.852649030681000E+13 + 143 2.825861498400000E+31 6.480690269599999E+33 1.468788490333530E+14 3.144838754654200E+07 6.019473716915143E-11 4.472792371692168E+03 3.649116061494809E+04 3.649216540409844E+04 2.127668016432600E-01 2.949699174664599E+03 6.491704469999999E+33 1.475667805494754E+14 7.671566000000000E-02 0.000000000000000E+00 7.956231000000000E-01 6.860292000000000E-02 5.770397999999999E-04 4.443776000000000E-02 4.618924000000000E-03 2.689850000000000E-05 1.659199000000000E-03 3.762993000000000E-03 6.813126000000000E-04 7.396663999999999E-05 3.344984000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.868376000000000E-05 0.000000000000000E+00 3.121793000000000E-03 2.839884824753000E+40 3.624607009880000E+13 1.802533855434000E+13 + 144 2.202834112400000E+31 6.502718670399999E+33 1.482547120655979E+14 3.168338754654200E+07 5.855426346727620E-11 4.431239344117645E+03 3.632449913412750E+04 3.640723327449273E+04 2.118702569006700E-01 2.932630552983685E+03 6.513588653800000E+33 1.489376985005082E+14 7.680555000000000E-02 0.000000000000000E+00 7.955985000000000E-01 6.857899000000001E-02 5.775923000000000E-04 4.440366000000000E-02 4.617612000000000E-03 2.692425000000000E-05 1.658342000000000E-03 3.758970000000000E-03 6.806662000000000E-04 7.390623000000000E-05 3.342958000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.868316000000000E-05 0.000000000000000E+00 3.120812000000000E-03 2.889884824753000E+40 3.524607009880000E+13 1.752533855434000E+13 + 145 2.173905176800000E+31 6.524458637200000E+33 1.496206849354185E+14 3.191838754654200E+07 5.708980012476803E-11 4.350360111116731E+03 3.623995723221085E+04 3.623995723221085E+04 2.207656498907900E-01 2.915414815751107E+03 6.535382328999999E+33 1.503058411154404E+14 8.155376000000000E-02 0.000000000000000E+00 7.941809000000000E-01 6.733628000000000E-02 6.063864000000000E-04 4.268408000000000E-02 4.549060000000000E-03 2.826648000000000E-05 1.615415000000000E-03 3.557508000000000E-03 6.482945000000000E-04 7.088006000000000E-05 3.241410000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.865264000000000E-05 0.000000000000000E+00 3.069442000000000E-03 2.949884824753000E+40 3.444376659386000E+13 1.722418680187000E+13 + 146 2.184726424800000E+31 6.546306020800000E+33 1.509909972954624E+14 3.215338754654200E+07 5.617699734845503E-11 4.310475769881692E+03 3.607344975353034E+04 3.615660764350333E+04 2.200691051482000E-01 2.898474126830089E+03 6.556998965400000E+33 1.516544127560026E+14 8.640918000000000E-02 0.000000000000000E+00 7.925651000000000E-01 6.609545999999999E-02 6.352623000000000E-04 4.103949000000000E-02 4.480023000000000E-03 2.961252000000000E-05 1.574734000000000E-03 3.366848000000000E-03 6.176535000000000E-04 6.801503999999999E-05 3.145213000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.862259000000000E-05 0.000000000000000E+00 3.017562000000000E-03 2.999884824753000E+40 3.384376659386000E+13 1.702418680187000E+13 + 147 2.138746066800000E+31 6.567691909999999E+33 1.523178282165428E+14 3.238338754654200E+07 5.579192227433288E-11 4.231800720518845E+03 3.599048312139686E+04 3.599048312139686E+04 2.193725604056100E-01 2.882234972936995E+03 6.578518131000000E+33 1.529885409593302E+14 8.652701000000000E-02 0.000000000000000E+00 7.925222000000000E-01 6.606604000000001E-02 6.359493000000000E-04 4.100212000000000E-02 4.478372000000000E-03 2.964454000000000E-05 1.573819000000000E-03 3.362562000000000E-03 6.169646000000000E-04 6.795061000000000E-05 3.143049000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.862189000000000E-05 0.000000000000000E+00 3.016319000000000E-03 3.049884824753000E+40 3.364261484139000E+13 1.692418680187000E+13 + 148 2.165154686000000E+31 6.589344351999999E+33 1.536592537021174E+14 3.266338754654200E+07 5.489825277044616E-11 4.193003338310288E+03 3.582512187213715E+04 3.590770730722213E+04 2.186748639105500E-01 2.866131538724314E+03 6.604585602400000E+33 1.545936343358670E+14 9.140109000000000E-02 0.000000000000000E+00 7.907458000000001E-01 6.484906999999999E-02 6.643641000000000E-04 3.945624000000000E-02 4.410113000000000E-03 3.096909000000000E-05 1.535941000000000E-03 3.185296000000000E-03 5.884712000000000E-04 6.528574999999999E-05 3.053519000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.859281000000000E-05 0.000000000000000E+00 2.964893000000000E-03 3.099769649506000E+40 3.304261484139000E+13 1.672418680187000E+13 + 149 3.048321691200000E+31 6.619826852799999E+33 1.555280149696166E+14 3.303338754654200E+07 5.439494256375599E-11 4.116472402462064E+03 3.574272637828196E+04 3.574272637828196E+04 2.177783191679600E-01 2.843994351112019E+03 6.638970913600000E+33 1.567131481651797E+14 9.203222000000000E-02 0.000000000000000E+00 7.904938000000000E-01 6.469571000000000E-02 6.679543000000000E-04 3.927094000000000E-02 4.401433000000000E-03 3.113644000000000E-05 1.531455000000000E-03 3.164336000000000E-03 5.851014000000000E-04 6.497049000000000E-05 3.042920000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.858920000000000E-05 0.000000000000000E+00 2.958335000000000E-03 3.169769649506000E+40 3.274261484139000E+13 1.652418680187000E+13 + 150 3.828674905200000E+31 6.658114974400000E+33 1.578982813607428E+14 3.346838754654200E+07 5.242742438130689E-11 4.041338313615670E+03 3.549667518059003E+04 3.557850346785519E+04 2.164817744253700E-01 2.817093081436883E+03 6.678750935199999E+33 1.591798876739961E+14 1.015930000000000E-01 0.000000000000000E+00 7.866173000000000E-01 6.238402000000000E-02 7.220810000000000E-04 3.650304000000000E-02 4.270395000000000E-03 3.365955000000000E-05 1.464581000000000E-03 2.852040000000000E-03 5.348910000000000E-04 6.027282000000000E-05 2.884952000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.853497000000000E-05 0.000000000000000E+00 2.859297000000000E-03 3.249769649506000E+40 3.154146308892000E+13 1.612303504940000E+13 + 151 4.127220008800000E+31 6.699386896000000E+33 1.604614939872492E+14 3.394844513416550E+07 5.064905245874492E-11 3.931200624913121E+03 3.533358277272683E+04 3.533358277272683E+04 2.149852296827800E-01 2.789183048052343E+03 6.721064203000000E+33 1.618283864881679E+14 1.059462000000000E-01 0.000000000000000E+00 7.846845000000000E-01 6.136488000000000E-02 7.459755000000000E-04 3.535512000000000E-02 4.212032000000000E-03 3.477338000000000E-05 1.437277000000000E-03 2.724840000000000E-03 5.144341000000000E-04 5.835810000000000E-05 2.820500000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.851149000000000E-05 0.000000000000000E+00 2.815058000000000E-03 3.329769649505999E+40 3.053915958398000E+13 1.562303504940000E+13 + 152 4.335507151600000E+31 6.742741509999999E+33 1.631952789890866E+14 3.444844513416550E+07 4.825822289412489E-11 3.858976750423353E+03 3.509034809980444E+04 3.517027348882672E+04 2.132886849401900E-01 2.761044662276931E+03 6.763535612200000E+33 1.645053435472222E+14 1.120057000000000E-01 0.000000000000000E+00 7.818510000000000E-01 5.997625000000000E-02 7.785096000000000E-04 3.385155000000000E-02 4.132015000000000E-03 3.628994000000000E-05 1.401895000000000E-03 2.560285000000000E-03 4.879643000000000E-04 5.587986000000000E-05 2.737019000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.847986000000000E-05 0.000000000000000E+00 2.754305000000000E-03 3.399654474259000E+40 2.913685607904000E+13 1.502188329693000E+13 + 153 4.158842321199999E+31 6.784329714399999E+33 1.658154081053578E+14 3.492838754654200E+07 4.683370569783407E-11 3.753808920594169E+03 3.484878784259279E+04 3.492816302910712E+04 2.292829261778400E-01 2.732909692656315E+03 6.804430580399999E+33 1.670505265620634E+14 1.201035000000000E-01 0.000000000000000E+00 7.778897000000000E-01 5.815804000000000E-02 8.210504000000000E-04 3.195683000000000E-02 4.026637000000000E-03 3.827296000000000E-05 1.357791000000000E-03 2.355532000000000E-03 4.550216000000000E-04 5.279466000000000E-05 2.633016000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.843887000000000E-05 0.000000000000000E+00 2.674181000000000E-03 3.459654474259000E+40 2.813685607904000E+13 1.462188329693000E+13 + 154 4.020077718400000E+31 6.824531446399999E+33 1.682856450187690E+14 3.537838754654200E+07 4.651267585387234E-11 3.651953240232571E+03 3.468771924606901E+04 3.468867220665093E+04 2.279875331877200E-01 2.706714870125322E+03 6.844311056599999E+33 1.694831822278011E+14 1.258656000000000E-01 0.000000000000000E+00 7.749068000000000E-01 5.690068000000000E-02 8.503748000000000E-04 3.071526000000000E-02 3.953202000000000E-03 3.963991000000000E-05 1.329357000000000E-03 2.223873000000000E-03 4.338322000000000E-04 5.080931000000000E-05 2.566013000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.841093000000000E-05 0.000000000000000E+00 2.618243000000000E-03 3.509654474259000E+40 2.803570432657000E+13 1.462188329693000E+13 + 155 3.955918061600000E+31 6.864090666800000E+33 1.706807194368331E+14 3.581838754654200E+07 4.587314571060675E-11 3.584859688508562E+03 3.444987706683823E+04 3.452834365310592E+04 2.266898366926600E-01 2.681808831784585E+03 6.883840439000000E+33 1.718658858811367E+14 1.321229000000000E-01 0.000000000000000E+00 7.715537000000000E-01 5.556171000000000E-02 8.814964000000000E-04 2.943997000000000E-02 3.874616000000000E-03 4.109064000000000E-05 1.300484000000000E-03 2.090442000000000E-03 4.123527000000000E-04 4.879612000000000E-05 2.498016000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.838146000000000E-05 0.000000000000000E+00 2.558316000000000E-03 3.569539299012000E+40 2.763570432657000E+13 1.452073154446000E+13 + 156 3.949954440000000E+31 6.903590211200000E+33 1.730510523254402E+14 3.625844513416550E+07 4.503586644124420E-11 3.487588268919068E+03 3.429065220729257E+04 3.429159425942491E+04 2.253909884451300E-01 2.657748606091394E+03 6.923667206799999E+33 1.742484711603998E+14 1.384956000000000E-01 0.000000000000000E+00 7.680220000000000E-01 5.422596000000000E-02 9.124067000000000E-04 2.821537000000000E-02 3.795827000000000E-03 4.253151000000000E-05 1.273109000000000E-03 1.964209000000000E-03 3.920267000000000E-04 4.689034000000000E-05 2.433588000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.835233000000000E-05 0.000000000000000E+00 2.498175000000000E-03 3.619424123765000E+40 2.713455257410000E+13 1.432073154446000E+13 + 157 4.015520461200000E+31 6.943744202399999E+33 1.754458899953592E+14 3.670850272178900E+07 4.401202236749542E-11 3.423514424452794E+03 3.405553258497405E+04 3.413310097165615E+04 2.239932919500700E-01 2.634139588252838E+03 6.964041999200000E+33 1.766519254095804E+14 1.446613000000000E-01 0.000000000000000E+00 7.644993000000000E-01 5.295966000000000E-02 9.415554000000000E-04 2.709698000000000E-02 3.720785000000000E-03 4.389026000000000E-05 1.248435000000000E-03 1.850680000000000E-03 3.737414000000000E-04 4.517524000000000E-05 2.375551000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.832497000000000E-05 0.000000000000000E+00 2.440845000000000E-03 3.669424123765000E+40 2.653455257410000E+13 1.402188329693000E+13 + 158 4.059443986399999E+31 6.984339796000000E+33 1.778579608238015E+14 3.717356030941250E+07 4.301018642705622E-11 3.330620939913048E+03 3.389813035732389E+04 3.389906162587464E+04 2.225944437025400E-01 2.611047084721103E+03 7.004882264399999E+33 1.790791738601122E+14 1.508140000000000E-01 0.000000000000000E+00 7.608883000000000E-01 5.172048000000000E-02 9.699104000000000E-04 2.604053000000000E-02 3.647038000000000E-03 4.521202000000000E-05 1.225427000000000E-03 1.745062000000000E-03 3.567256000000000E-04 4.357859000000000E-05 2.321470000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.829842000000000E-05 0.000000000000000E+00 2.384465000000000E-03 3.709308948518000E+40 2.593340082163000E+13 1.382073154446000E+13 + 159 4.108607064400000E+31 7.025424732799999E+33 1.803003868964227E+14 3.764856030941250E+07 4.183803944104868E-11 3.269430893489841E+03 3.374238259576839E+04 3.374238259576839E+04 2.210967472074800E-01 2.588454276549428E+03 7.045090958600000E+33 1.814827104287751E+14 1.568987000000000E-01 0.000000000000000E+00 7.572327000000000E-01 5.051714000000000E-02 9.972711999999999E-04 2.504762000000000E-02 3.575152000000000E-03 4.648743000000000E-05 1.204072000000000E-03 1.647254000000000E-03 3.409637000000000E-04 4.209904000000000E-05 2.271308000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.827283000000000E-05 0.000000000000000E+00 2.329476000000000E-03 3.739193773271000E+40 2.523224906916000E+13 1.342073154446000E+13 + 160 3.933229246399999E+31 7.064757184400000E+33 1.826650339611274E+14 3.810856030941250E+07 4.032471670480713E-11 3.209757054529648E+03 3.351102227622466E+04 3.358735043017575E+04 2.194978989599500E-01 2.567524602230071E+03 7.082957369800001E+33 1.837582202985689E+14 1.641927000000000E-01 0.000000000000000E+00 7.527416000000000E-01 4.910427000000000E-02 1.029136000000000E-03 2.392377000000000E-02 3.490402000000000E-03 4.797281000000000E-05 1.180255000000000E-03 1.538455000000000E-03 3.234251000000000E-04 4.045194000000000E-05 2.215403000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.824302000000000E-05 0.000000000000000E+00 2.264614000000000E-03 3.749193773271000E+40 2.423224906916000E+13 1.302073154446000E+13 + 161 3.640009231200000E+31 7.101157555200000E+33 1.848514066360103E+14 3.853861789703600E+07 3.931734258011370E-11 3.151172385878372E+03 3.335613673614529E+04 3.343303057268111E+04 2.418944437025400E-01 2.546731149044072E+03 7.119229437200000E+33 1.859025247333717E+14 1.743337000000000E-01 0.000000000000000E+00 7.463168000000000E-01 4.719094000000000E-02 1.071777000000000E-03 2.246938000000000E-02 3.375078000000000E-03 4.996051000000000E-05 1.150019000000000E-03 1.400834000000000E-03 3.012306000000000E-04 3.836633000000000E-05 2.144506000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.820306000000000E-05 0.000000000000000E+00 2.176307000000000E-03 3.759193773270999E+40 2.363224906916000E+13 1.282073154446000E+13 + 162 3.614300810400000E+31 7.137301319200000E+33 1.869536428307330E+14 3.895861789703600E+07 3.967996907420166E-11 3.093657007937474E+03 3.320287920907732E+04 3.327941975052601E+04 2.410955954550100E-01 2.526620077452808E+03 7.155644727000000E+33 1.880033967764116E+14 1.751725000000000E-01 0.000000000000000E+00 7.457808000000000E-01 4.703396000000000E-02 1.075263000000000E-03 2.235178000000000E-02 3.365601000000000E-03 5.012297000000000E-05 1.147590000000000E-03 1.389790000000000E-03 2.994493000000000E-04 3.819890000000000E-05 2.138812000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.819979000000000E-05 0.000000000000000E+00 2.169050000000000E-03 3.778963422777000E+40 2.393109731669000E+13 1.292073154446000E+13 + 163 3.668705430400000E+31 7.173988134799999E+33 1.890531507220902E+14 3.935861789703599E+07 3.940681408843601E-11 3.037191403951955E+03 3.305032583638396E+04 3.312651470598895E+04 2.400967472074800E-01 2.506755988215771E+03 7.191124098200000E+33 1.900279680764703E+14 1.813811000000000E-01 0.000000000000000E+00 7.417450000000000E-01 4.589270000000000E-02 1.100359000000000E-03 2.152164000000000E-02 3.296504000000000E-03 5.129283000000000E-05 1.130671000000000E-03 1.313070000000000E-03 2.870709000000000E-04 3.703494000000000E-05 2.099182000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.817617000000000E-05 0.000000000000000E+00 2.116124000000000E-03 3.788963422776999E+40 2.373109731669000E+13 1.282073154446000E+13 + 164 3.427228485600000E+31 7.208260061600000E+33 1.910027854308503E+14 3.972361789703600E+07 3.886613232950746E-11 2.981756413387817E+03 3.289847338276975E+04 3.297431219631644E+04 2.388978989599500E-01 2.488653816092414E+03 7.223970763200000E+33 1.918830467300176E+14 1.905900000000000E-01 0.000000000000000E+00 7.356394000000001E-01 4.423652000000000E-02 1.136323000000000E-03 2.035931000000000E-02 3.195879000000000E-03 5.296927000000000E-05 1.107381000000000E-03 1.207813000000000E-03 2.700811000000000E-04 3.543645000000000E-05 2.044680000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.814214000000000E-05 0.000000000000000E+00 2.039038000000000E-03 3.808848247530000E+40 2.333109731669000E+13 1.272073154446000E+13 + 165 3.142060752000000E+31 7.239681464800000E+33 1.927633080291849E+14 4.007367548465951E+07 3.868755867229300E-11 2.927333225430140E+03 3.282280899365392E+04 3.282280899365392E+04 2.379990507124200E-01 2.472443849575888E+03 7.255489637199999E+33 1.936506270282799E+14 1.907013000000000E-01 0.000000000000000E+00 7.355653000000000E-01 4.421664000000000E-02 1.136753000000000E-03 2.034552000000000E-02 3.194670000000000E-03 5.298931000000000E-05 1.107106000000000E-03 1.206572000000000E-03 2.698808000000000E-04 3.541760000000000E-05 2.044037000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.814173000000000E-05 0.000000000000000E+00 2.038112000000000E-03 3.818733072282999E+40 2.323109731669000E+13 1.262073154446000E+13 + 166 3.161674264000000E+31 7.271297809599999E+33 1.945379460273747E+14 4.042867548465950E+07 3.789407627942249E-11 2.873903372600103E+03 3.267200188497755E+04 3.267200188497755E+04 2.369002024648900E-01 2.456512943132645E+03 7.287210414999999E+33 1.954224687526801E+14 2.002177000000000E-01 0.000000000000000E+00 7.291125000000001E-01 4.255070000000000E-02 1.172313000000000E-03 1.922597000000000E-02 3.093040000000000E-03 5.464695000000000E-05 1.085155000000000E-03 1.107802000000000E-03 2.539297000000000E-04 3.391571000000000E-05 1.992734000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.810779000000000E-05 0.000000000000000E+00 1.960254000000000E-03 3.818848247529999E+40 2.282994556422000E+13 1.251957979199000E+13 + 167 3.182525058400000E+31 7.303123020400000E+33 1.963069914779856E+14 4.077867548465950E+07 3.754777066607345E-11 2.847555268107235E+03 3.252188767202591E+04 3.259685836585266E+04 2.360002024648900E-01 2.440837157779554E+03 7.318076831400000E+33 1.971439188407680E+14 2.003215000000000E-01 0.000000000000000E+00 7.290407000000000E-01 4.253299000000000E-02 1.172684000000000E-03 1.921454000000000E-02 3.091956000000000E-03 5.466424000000000E-05 1.084936000000000E-03 1.106820000000000E-03 2.537711000000000E-04 3.390076000000000E-05 1.992223000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.810743000000000E-05 0.000000000000000E+00 1.959424000000000E-03 3.828733072283000E+40 2.262994556422000E+13 1.232073154446000E+13 + 168 2.990716448400000E+31 7.333030642400000E+33 1.979808462035505E+14 4.111373307228300E+07 3.669199494483945E-11 2.795581527100004E+03 3.244708940601019E+04 3.244708940601019E+04 2.348013542173600E-01 2.426416563481115E+03 7.347420515200000E+33 1.987758877250738E+14 2.093136000000000E-01 0.000000000000000E+00 7.228200000000000E-01 4.099979000000000E-02 1.204804000000000E-03 1.822537000000000E-02 2.998083000000000E-03 5.616151000000000E-05 1.065958000000000E-03 1.021805000000000E-03 2.400338000000000E-04 3.260630000000000E-05 1.947922000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.807643000000000E-05 0.000000000000000E+00 1.887517000000000E-03 3.828617897036000E+40 2.202994556422000E+13 1.212073154446000E+13 + 169 2.878068052400000E+31 7.361810387999999E+33 1.995709292465971E+14 4.146873307228300E+07 3.652448967443715E-11 2.769616232135107E+03 3.229800857203190E+04 3.237157586212960E+04 2.492002024648900E-01 2.411944023395182E+03 7.378975194799999E+33 2.005078508271629E+14 2.096028000000000E-01 0.000000000000000E+00 7.226175000000000E-01 4.095135000000000E-02 1.205805000000000E-03 1.819494000000000E-02 2.995110000000000E-03 5.620817000000000E-05 1.065382000000000E-03 1.019237000000000E-03 2.396186000000000E-04 3.256715000000000E-05 1.946580000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.807546000000000E-05 0.000000000000000E+00 1.885240000000000E-03 3.828617897036000E+40 2.202879381175000E+13 1.202073154446000E+13 + 170 3.432947435600000E+31 7.396140001599999E+33 2.014447724077288E+14 4.187373307228300E+07 3.635560071319082E-11 2.719394169328694E+03 3.222372521365758E+04 3.222372521365758E+04 2.483025059698300E-01 2.395028760773990E+03 7.415661015800000E+33 2.024974386675272E+14 2.167377000000000E-01 0.000000000000000E+00 7.175992000000000E-01 3.976332000000000E-02 1.230237000000000E-03 1.745504000000000E-02 2.922149000000000E-03 5.734705000000000E-05 1.051464000000000E-03 9.571516000000000E-04 2.295813000000000E-04 3.162064000000000E-05 1.914130000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.805159000000000E-05 0.000000000000000E+00 1.829366000000000E-03 3.828502721789000E+40 2.182994556422000E+13 1.202073154446000E+13 + 171 3.904290364800000E+31 7.435182030000000E+33 2.035501049273257E+14 4.230373307228300E+07 3.610533051825342E-11 2.669759631998991E+03 3.207567064492176E+04 3.207567064492176E+04 2.474013542173600E-01 2.376223163150142E+03 7.455147630400000E+33 2.046135828140216E+14 2.230957000000000E-01 0.000000000000000E+00 7.130716000000000E-01 3.872439000000000E-02 1.251267000000000E-03 1.682560000000000E-02 2.858199000000000E-03 5.832737000000000E-05 1.039813000000000E-03 9.053658000000000E-04 2.212054000000000E-04 3.083032000000000E-05 1.886993000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.803082000000000E-05 0.000000000000000E+00 1.780404000000000E-03 3.828502721789000E+40 2.172879381175000E+13 1.201957979199000E+13 + 172 3.993010674000000E+31 7.475113230800000E+33 2.056770607007173E+14 4.273373307228300E+07 3.577537185827460E-11 2.621031027072784E+03 3.192829632513842E+04 3.192829632513842E+04 2.463025059698300E-01 2.357481649630084E+03 7.494960473799999E+33 2.067262896615550E+14 2.289140000000000E-01 0.000000000000000E+00 7.088852000000000E-01 3.778936000000000E-02 1.269916000000000E-03 1.627242000000000E-02 2.800531000000000E-03 5.919669000000000E-05 1.029721000000000E-03 8.606510000000000E-04 2.139703000000000E-04 3.014725000000000E-05 1.863508000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.801220000000000E-05 0.000000000000000E+00 1.736266000000000E-03 3.828387546542000E+40 2.152879381175000E+13 1.192073154446000E+13 + 173 3.969516232800000E+31 7.514807716800000E+33 2.077755186223927E+14 4.315873307228300E+07 3.528451535464433E-11 2.596686953015093E+03 3.178159912884765E+04 3.185399015932460E+04 2.452036577223000E-01 2.339326297626568E+03 7.534052232200000E+33 2.087915988230191E+14 2.362806000000000E-01 0.000000000000000E+00 7.035187000000001E-01 3.663032000000000E-02 1.292572000000000E-03 1.560658000000000E-02 2.728883000000000E-03 6.025277000000000E-05 1.017796000000000E-03 8.080418000000001E-04 2.054534000000000E-04 2.934257000000000E-05 1.835791000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.798923000000000E-05 0.000000000000000E+00 1.681449000000000E-03 3.828272371295000E+40 2.122879381175000E+13 1.181957979199000E+13 + 174 3.848915015200000E+31 7.553296747599999E+33 2.098076790236454E+14 4.357379065990650E+07 3.464050036987914E-11 2.549600655018355E+03 3.163557594494953E+04 3.170850347923414E+04 2.440036577223000E-01 2.322149917071926E+03 7.572245866800000E+33 2.108009164941545E+14 2.465423000000000E-01 0.000000000000000E+00 6.959542000000000E-01 3.504994000000000E-02 1.322797000000000E-03 1.472446000000000E-02 2.630972000000000E-03 6.166170000000000E-05 1.002294000000000E-03 7.399556000000000E-04 1.944247000000000E-04 2.829977000000000E-05 1.799804000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.795806000000000E-05 0.000000000000000E+00 1.606578000000000E-03 3.828157196048000E+40 2.082879381175000E+13 1.162073154446000E+13 + 175 3.789762174800000E+31 7.591194986000000E+33 2.117941539646637E+14 4.399884824753000E+07 3.424397384110886E-11 2.503065198586660E+03 3.156281613933936E+04 3.156281613933936E+04 2.429048094747700E-01 2.305626628046094E+03 7.611124780799999E+33 2.128343299947375E+14 2.499970000000000E-01 0.000000000000000E+00 6.933799000000000E-01 3.452878000000000E-02 1.332543000000000E-03 1.444144000000000E-02 2.598618000000000E-03 6.211600000000000E-05 9.974134000000001E-04 7.186165000000000E-04 1.909663000000000E-04 2.797249000000000E-05 1.788488000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.794783000000000E-05 0.000000000000000E+00 1.581850000000000E-03 3.818157196047999E+40 2.062764205928000E+13 1.151957979199000E+13 + 176 3.986026592800000E+31 7.631054575600000E+33 2.138745060248115E+14 4.448390583515351E+07 3.377412890597745E-11 2.457379109957367E+03 3.141779817196862E+04 3.141779817196862E+04 2.419048094747700E-01 2.288630183194427E+03 7.655350664399999E+33 2.151351100913571E+14 2.526643000000000E-01 0.000000000000000E+00 6.913824000000000E-01 3.413038000000000E-02 1.339909000000000E-03 1.422785000000000E-02 2.573862000000000E-03 6.245938000000001E-05 9.937628999999999E-04 7.026914000000000E-04 1.883845000000000E-04 2.772808000000000E-05 1.780030000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.794002000000000E-05 0.000000000000000E+00 1.562935000000000E-03 3.808042020801000E+40 2.032764205928000E+13 1.132073154446000E+13 + 177 4.859243619599999E+31 7.679646753200000E+33 2.163957141579028E+14 4.503390583515351E+07 3.323411793088997E-11 2.434555031027088E+03 3.127344650163449E+04 3.134468007958130E+04 2.633059612272400E-01 2.266568174195589E+03 7.706242357200000E+33 2.177466330563875E+14 2.635643000000000E-01 0.000000000000000E+00 6.831423000000000E-01 3.253444000000000E-02 1.368717000000000E-03 1.339286000000000E-02 2.474518000000000E-03 6.380225000000000E-05 9.797428999999999E-04 6.418021000000001E-04 1.785077000000000E-04 2.679234000000000E-05 1.747585000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.790886000000000E-05 0.000000000000000E+00 1.487076000000000E-03 3.797926845554000E+40 2.002649030681000E+13 1.122073154446000E+13 + 178 5.318941771999999E+31 7.732837961200000E+33 2.190975519548722E+14 4.557890583515350E+07 3.315768158073515E-11 2.368493308224161E+03 3.112975806698014E+04 3.112975806698014E+04 2.622071129797100E-01 2.243078333426027E+03 7.757958573400000E+33 2.203498852529793E+14 2.726322000000000E-01 0.000000000000000E+00 6.762099000000000E-01 3.123925000000000E-02 1.391363000000000E-03 1.273538000000000E-02 2.393723000000000E-03 6.485790000000000E-05 9.689520000000000E-04 5.952130000000000E-04 1.709449000000000E-04 2.607508000000000E-05 1.722653000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.788369000000000E-05 0.000000000000000E+00 1.425434000000000E-03 3.777926845554000E+40 1.992764205928000E+13 1.122073154446000E+13 + 179 5.024200018800000E+31 7.783079185599999E+33 2.216022185510864E+14 4.611896342277700E+07 3.300533587228073E-11 2.325263433405654E+03 3.098672982071438E+04 3.098672982071438E+04 2.611071129797100E-01 2.221493679164357E+03 7.810541086200001E+33 2.229526341250234E+14 2.796552000000000E-01 0.000000000000000E+00 6.707786999999999E-01 3.026306000000000E-02 1.407796000000000E-03 1.225539000000000E-02 2.332696000000000E-03 6.562390000000000E-05 9.612705000000000E-04 5.622723000000000E-04 1.655930000000000E-04 2.556689000000000E-05 1.704938000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.786480000000000E-05 0.000000000000000E+00 1.378920000000000E-03 3.777696495060000E+40 1.982764205928000E+13 1.121957979199000E+13 + 180 5.492489526000000E+31 7.838002986799999E+33 2.243030496989604E+14 4.670896342277700E+07 3.262752691673481E-11 2.282822592725591E+03 3.084351330483774E+04 3.084435872954722E+04 2.598082647321800E-01 2.198599396813334E+03 7.868165226399999E+33 2.257625150420634E+14 2.882217000000000E-01 0.000000000000000E+00 6.640920000000000E-01 2.910002000000000E-02 1.426690000000000E-03 1.169844000000000E-02 2.259861000000000E-03 6.650463000000000E-05 9.525491000000001E-04 5.250987000000000E-04 1.595488000000000E-04 2.499234000000000E-05 1.684858000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.784238000000000E-05 0.000000000000000E+00 1.323459000000000E-03 3.767581319813000E+40 1.962649030681000E+13 1.111957979199000E+13 + 181 6.032334535600000E+31 7.898327466000000E+33 2.272219803851664E+14 4.727896342277700E+07 3.225404270454077E-11 2.241156384687901E+03 3.063202765756566E+04 3.070264177412518E+04 2.585094164846500E-01 2.174261846047819E+03 7.924131368399999E+33 2.284592715478133E+14 2.958529000000000E-01 0.000000000000000E+00 6.580852000000000E-01 2.808688000000000E-02 1.442560000000000E-03 1.122491000000000E-02 2.196313000000000E-03 6.724442000000000E-05 9.452866000000000E-04 4.943279000000000E-04 1.545417000000000E-04 2.451588000000000E-05 1.668164000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.782291000000000E-05 0.000000000000000E+00 1.275115000000000E-03 3.757581319813000E+40 1.942649030681000E+13 1.101957979199000E+13 + 182 5.160824242400000E+31 7.949935270799999E+33 2.296965627104602E+14 4.774396342277700E+07 3.188483373077085E-11 2.199984372535606E+03 3.049128627480268E+04 3.056073827515835E+04 2.572094164846500E-01 2.153967952848229E+03 7.970194278199999E+33 2.306637726855662E+14 3.023868000000000E-01 0.000000000000000E+00 6.529015000000000E-01 2.723836000000000E-02 1.455348000000000E-03 1.083746000000000E-02 2.143013000000000E-03 6.784050000000000E-05 9.394660000000000E-04 4.698173000000000E-04 1.505502000000000E-04 2.413562000000000E-05 1.654806000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.780665000000000E-05 0.000000000000000E+00 1.234608000000000E-03 3.747466144566000E+40 1.922533855434000E+13 1.082073154446000E+13 + 183 4.051729868800000E+31 7.990453285600001E+33 2.316309826606721E+14 4.814896342277700E+07 3.137595962311826E-11 2.160091570042359E+03 3.042032443735474E+04 3.042115826240235E+04 2.560105682371200E-01 2.138429846977682E+03 8.009469043000001E+33 2.325427213126917E+14 3.086414000000000E-01 0.000000000000000E+00 6.479082000000000E-01 2.644098000000000E-02 1.466957000000000E-03 1.048018000000000E-02 2.092865000000000E-03 6.838165000000000E-05 9.341906000000000E-04 4.477196000000000E-04 1.469491000000000E-04 2.379224000000000E-05 1.642717000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.779141000000000E-05 0.000000000000000E+00 1.196529000000000E-03 3.747350969319000E+40 1.892533855434000E+13 1.071957979199000E+13 + 184 3.803292713200000E+31 8.028484800400000E+33 2.334544599647112E+14 4.853896342277700E+07 3.073243823343201E-11 2.140028690736717E+03 3.028138573650349E+04 3.035035963265165E+04 2.549105682371200E-01 2.124144952078650E+03 8.046662110000001E+33 2.343257349798942E+14 3.174309000000000E-01 0.000000000000000E+00 6.408373000000001E-01 2.534648000000000E-02 1.482155000000000E-03 1.000116000000000E-02 2.023934000000000E-03 6.909012000000000E-05 9.272728000000000E-04 4.189447000000000E-04 1.422556000000000E-04 2.334413000000000E-05 1.626894000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.777056000000000E-05 0.000000000000000E+00 1.144248000000000E-03 3.727350969319000E+40 1.852533855434000E+13 1.052073154446000E+13 + 185 3.635396276400000E+31 8.064839419599999E+33 2.351970099950772E+14 4.897402101040050E+07 3.031077337306225E-11 2.101223077862745E+03 3.021174048194492E+04 3.021174048194492E+04 2.807128717420601E-01 2.109318569594972E+03 8.089663640999999E+33 2.363553741671267E+14 3.284786000000000E-01 0.000000000000000E+00 6.318639000000000E-01 2.401336000000000E-02 1.499421000000000E-03 9.434947000000001E-03 1.939824000000000E-03 6.989495000000000E-05 9.193330999999999E-04 3.862378000000000E-04 1.369140000000000E-04 2.283324000000000E-05 1.608780000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.774524000000000E-05 0.000000000000000E+00 1.080557000000000E-03 3.717235794072000E+40 1.822533855434000E+13 1.051957979199000E+13 + 186 4.964846269200000E+31 8.114487862399998E+33 2.375137383391761E+14 4.949902101040050E+07 3.059032961708208E-11 2.081958948892304E+03 3.007293014334636E+04 3.014225540702684E+04 2.802128717420600E-01 2.089460423852349E+03 8.142578350199998E+33 2.388052974644507E+14 3.285587000000000E-01 0.000000000000000E+00 6.317987000000000E-01 2.400376000000000E-02 1.499543000000000E-03 9.430902999999999E-03 1.939218000000000E-03 6.990062999999999E-05 9.192768000000000E-04 3.860066000000000E-04 1.368762000000000E-04 2.282962000000000E-05 1.608652000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.774506000000000E-05 0.000000000000000E+00 1.080099000000000E-03 3.707120618825000E+40 1.842533855434000E+13 1.051957979199000E+13 + 187 5.618165192799999E+31 8.170668838000000E+33 2.400968565897253E+14 5.001902101040050E+07 3.044977981941233E-11 2.043958915527073E+03 2.993475758032101E+04 3.000376432334789E+04 2.791140234945300E-01 2.067507027895304E+03 8.195617384400000E+33 2.412288971736790E+14 3.367099000000000E-01 0.000000000000000E+00 6.251180000000000E-01 2.305077000000000E-02 1.510948000000000E-03 9.037599000000000E-03 1.878991000000000E-03 7.043230000000000E-05 9.139213000000000E-04 3.641672000000000E-04 1.333047000000000E-04 2.248739000000000E-05 1.596466000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.772703000000000E-05 0.000000000000000E+00 1.034572000000000E-03 3.697120618825000E+40 1.832533855434000E+13 1.051957979199000E+13 + 188 4.989613798400000E+31 8.220565930800000E+33 2.423609377576327E+14 5.054907859802401E+07 3.024016500954232E-11 2.006652460936049E+03 2.979721986255624E+04 2.986590954839891E+04 2.780151752470000E-01 2.048472746436417E+03 8.251147891600001E+33 2.437334746874475E+14 3.448435000000000E-01 0.000000000000000E+00 6.184041000000000E-01 2.212454000000000E-02 1.521246000000000E-03 8.664065000000000E-03 1.820378000000000E-03 7.091234000000000E-05 9.089581000000000E-04 3.441061000000000E-04 1.300200000000000E-04 2.217215000000000E-05 1.585200000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.770954000000000E-05 0.000000000000000E+00 9.903310999999999E-04 3.697005443578000E+40 1.822418680187000E+13 1.041957979199000E+13 + 189 6.116396138399999E+31 8.281729852399999E+33 2.451060116172623E+14 5.111413618564750E+07 2.989489397146802E-11 1.970026925879961E+03 2.972868815860699E+04 2.972868815860699E+04 2.769151752470000E-01 2.025748492150856E+03 8.310707523400000E+33 2.463958186332162E+14 3.526365000000000E-01 0.000000000000000E+00 6.119274000000000E-01 2.126046000000000E-02 1.530083000000000E-03 8.323373000000000E-03 1.765628000000000E-03 7.132424000000000E-05 9.045418000000000E-04 3.264211000000000E-04 1.271208000000000E-04 2.189341000000000E-05 1.575199000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.769327000000000E-05 0.000000000000000E+00 9.490719000000000E-04 3.696890268331000E+40 1.802418680187000E+13 1.041957979199000E+13 + 190 5.795526243200000E+31 8.339685194400000E+33 2.476856256491700E+14 5.161913618564750E+07 2.955181481517024E-11 1.934069882176638E+03 2.959209724383160E+04 2.959209724383160E+04 2.756163269994700E-01 2.004738018938811E+03 8.363612286599999E+33 2.487445995121197E+14 3.607977000000000E-01 0.000000000000000E+00 6.051005000000000E-01 2.037936000000000E-02 1.538281000000000E-03 7.983463000000000E-03 1.709733000000000E-03 7.170638999999999E-05 9.002427000000000E-04 3.093711000000000E-04 1.243220000000000E-04 2.162385000000000E-05 1.565488000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.767672000000000E-05 0.000000000000000E+00 9.070182000000000E-04 3.687005443578000E+40 1.782418680187000E+13 1.031842803952000E+13 + 191 4.785390591200000E+31 8.387539378799999E+33 2.498035733750696E+14 5.210907859802400E+07 2.908017511585227E-11 1.898769128483822E+03 2.945613390730318E+04 2.945613390730318E+04 2.744163269994700E-01 1.987836953383178E+03 8.414414465399999E+33 2.509911545995441E+14 3.687201000000000E-01 0.000000000000000E+00 5.984316000000000E-01 1.954684000000000E-02 1.545222000000000E-03 7.669092000000000E-03 1.656859000000000E-03 7.202995000000000E-05 8.963641000000000E-04 2.941446000000000E-04 1.218191000000000E-04 2.138232000000000E-05 1.556749000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.766111000000000E-05 0.000000000000000E+00 8.673055000000000E-04 3.686890268331000E+40 1.752418680187000E+13 1.021842803952000E+13 + 192 5.375100866400000E+31 8.441289552000001E+33 2.521787358240187E+14 5.260907859802400E+07 2.868033082831565E-11 1.881361108477964E+03 2.932079526556154E+04 2.938838667928204E+04 2.733163269994700E-01 1.969218882843580E+03 8.466466856400001E+33 2.532843230702261E+14 3.754587000000000E-01 0.000000000000000E+00 5.927264000000000E-01 1.885710000000000E-02 1.550303000000000E-03 7.413807000000000E-03 1.613006000000000E-03 7.226682000000001E-05 8.932889000000000E-04 2.821948000000000E-04 1.198520000000000E-04 2.119214000000000E-05 1.549839000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.764820000000000E-05 0.000000000000000E+00 8.344246000000000E-04 3.686775093084000E+40 1.722418680187000E+13 1.001957979199000E+13 + 193 5.035331582000000E+31 8.491644160800001E+33 2.543899103164334E+14 5.304413618564750E+07 2.828765961089325E-11 1.847022398326044E+03 2.925335930777881E+04 2.925335930777881E+04 2.947197822568799E-01 1.950784857141653E+03 8.512806265000000E+33 2.553058705460522E+14 3.837656000000000E-01 0.000000000000000E+00 5.856491000000000E-01 1.803177000000000E-02 1.555444000000000E-03 7.114954000000000E-03 1.560471000000000E-03 7.250643000000000E-05 8.897836000000000E-04 2.687363000000000E-04 1.176328000000000E-04 2.097710000000000E-05 1.541986000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.763279000000000E-05 0.000000000000000E+00 7.951140000000000E-04 3.676890268331000E+40 1.702418680187000E+13 9.978888740508000E+12 + 194 4.232581965200000E+31 8.533968369199999E+33 2.562218307756709E+14 5.344419377327100E+07 2.828682193708408E-11 1.813531937395176E+03 2.911895233069376E+04 2.911975230297101E+04 2.940186305044100E-01 1.935549355907934E+03 8.556263322799999E+33 2.571726767209158E+14 3.894723000000000E-01 0.000000000000000E+00 5.807690000000000E-01 1.747523000000000E-02 1.558504000000000E-03 6.916159000000000E-03 1.525020000000000E-03 7.264908999999999E-05 8.874914000000000E-04 2.600056000000000E-04 1.161916000000000E-04 2.083724000000000E-05 1.536861000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.762241000000000E-05 0.000000000000000E+00 7.686209000000000E-04 3.676890268331000E+40 1.702303504940000E+13 9.988773565261000E+12 + 195 4.458877335600000E+31 8.578558276399998E+33 2.581235226661608E+14 5.392413618564750E+07 2.828682193708408E-11 1.796685910225529E+03 2.905198059877902E+04 2.905198059877902E+04 2.933197822568800E-01 1.919771169231472E+03 8.608564363799999E+33 2.593914699913083E+14 3.913060000000000E-01 0.000000000000000E+00 5.791940000000000E-01 1.730035000000000E-02 1.559308000000000E-03 6.854655000000000E-03 1.513871000000000E-03 7.268658000000000E-05 8.867961000000000E-04 2.573819000000000E-04 1.157579000000000E-04 2.079507000000000E-05 1.535309000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.761915000000000E-05 0.000000000000000E+00 7.603025000000000E-04 3.686775093084000E+40 1.702303504940000E+13 9.969003915755000E+12 + 196 6.001241350400000E+31 8.638570451200001E+33 2.606594173164560E+14 5.450913618564750E+07 2.802831678872598E-11 1.764108157332016E+03 2.891849887281612E+04 2.891929333812295E+04 2.923197822568800E-01 1.898994409179315E+03 8.673181536599999E+33 2.621065678566468E+14 3.990280000000000E-01 0.000000000000000E+00 5.725468000000000E-01 1.657266000000000E-02 1.562296000000000E-03 6.600793000000000E-03 1.467462000000000E-03 7.282586000000000E-05 8.839551000000000E-04 2.467182000000000E-04 1.139940000000000E-04 2.062341000000000E-05 1.528981000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.760560000000000E-05 0.000000000000000E+00 7.257047000000000E-04 3.686775093084000E+40 1.692303504940000E+13 9.938197689026000E+12 + 197 6.922246918000000E+31 8.707792621999999E+33 2.635537183968376E+14 5.509413618564750E+07 2.777135163584394E-11 1.731909554725471E+03 2.878642125474546E+04 2.878642125474546E+04 2.911209340093500E-01 1.875594955406849E+03 8.738380550400000E+33 2.648257280822462E+14 4.061505000000000E-01 0.000000000000000E+00 5.663854000000000E-01 1.591916000000000E-02 1.564245000000000E-03 6.376940000000000E-03 1.425745000000000E-03 7.291673000000000E-05 8.815089000000000E-04 2.376478000000000E-04 1.124909000000000E-04 2.047679000000000E-05 1.523547000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.759346000000000E-05 0.000000000000000E+00 6.946666999999999E-04 3.696775093084000E+40 1.672303504940000E+13 9.877736988038000E+12 + 198 6.117585680000000E+31 8.768968478800000E+33 2.660977377676547E+14 5.562407859802400E+07 2.732731843166808E-11 1.700298642848392E+03 2.865415966313679E+04 2.865415966313679E+04 2.898209340093500E-01 1.855446639640847E+03 8.797192242999999E+33 2.672726648229918E+14 4.167992000000000E-01 0.000000000000000E+00 5.571147000000000E-01 1.497743000000000E-02 1.565521000000000E-03 6.061913000000000E-03 1.365556000000000E-03 7.297618000000000E-05 8.781718000000000E-04 2.254833000000000E-04 1.104701000000000E-04 2.027902000000000E-05 1.516166000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.757599000000000E-05 0.000000000000000E+00 6.500095000000000E-04 3.706775093084000E+40 1.652188329693000E+13 9.807391462297000E+12 + 199 5.644762786000000E+31 8.825416007199999E+33 2.684475918783290E+14 5.613413618564750E+07 2.682853865854225E-11 1.684504447806503E+03 2.852250575834198E+04 2.858747155355558E+04 2.884220857618200E-01 1.837263955072767E+03 8.853782993799999E+33 2.696209814652094E+14 4.301206000000000E-01 0.000000000000000E+00 5.454359000000000E-01 1.384858000000000E-02 1.564930000000000E-03 5.694214000000000E-03 1.293311000000000E-03 7.294867000000000E-05 8.744130000000000E-04 2.120647000000000E-04 1.082341000000000E-04 2.005928000000000E-05 1.507894000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.755508000000000E-05 0.000000000000000E+00 5.965876000000000E-04 3.716775093084000E+40 1.612303504940000E+13 9.737045936556000E+12 + 200 5.673321730400000E+31 8.882149980400001E+33 2.707943710520899E+14 5.664919377327099E+07 2.652143491602527E-11 1.653960784422513E+03 2.845690581547691E+04 2.845690581547691E+04 2.874209340093500E-01 1.819375249207921E+03 8.911385252800000E+33 2.719935229450998E+14 4.325248000000000E-01 0.000000000000000E+00 5.433194000000000E-01 1.365018000000000E-02 1.564554000000000E-03 5.630679000000000E-03 1.280603000000000E-03 7.293114000000001E-05 8.737787000000000E-04 2.098331000000000E-04 1.078614000000000E-04 2.002256000000000E-05 1.506503000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.755141000000000E-05 0.000000000000000E+00 5.872109000000000E-04 3.726659917837000E+40 1.592303504940000E+13 9.627161111803000E+12 + 201 5.847149961600000E+31 8.940620525200000E+33 2.731926748381096E+14 5.716413618564750E+07 2.627828493919224E-11 1.638597025043724E+03 2.832615820978790E+04 2.839067678361296E+04 3.084243892667600E-01 1.799937740515323E+03 8.968931814200001E+33 2.743444274719005E+14 4.383960000000000E-01 0.000000000000000E+00 5.381312000000000E-01 1.317793000000000E-02 1.563108000000000E-03 5.481648000000000E-03 1.250332000000000E-03 7.286371000000001E-05 8.723198000000000E-04 2.047666000000000E-04 1.070136000000000E-04 1.993879000000000E-05 1.503313000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.754269000000000E-05 0.000000000000000E+00 5.649227000000000E-04 3.726775093084000E+40 1.582188329693000E+13 9.566700410815000E+12 + 202 5.662223983599999E+31 8.997243103200000E+33 2.754961801056915E+14 5.763913618564750E+07 2.603736417474620E-11 1.608885761282969E+03 2.819601133477933E+04 2.826100985375312E+04 3.073255410192300E-01 1.781505594878050E+03 9.023096735599998E+33 2.765319401721838E+14 4.497146000000000E-01 0.000000000000000E+00 5.280824000000000E-01 1.229687000000000E-02 1.558955000000000E-03 5.208781000000000E-03 1.193804000000000E-03 7.267014000000000E-05 8.697157000000000E-04 1.958825000000000E-04 1.055230000000000E-04 1.979098000000000E-05 1.497642000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.752643000000000E-05 0.000000000000000E+00 5.234181000000000E-04 3.736775093084000E+40 1.572073154446000E+13 9.576585235568000E+12 + 203 5.170710566400000E+31 9.048950367999999E+33 2.775677002386762E+14 5.812919377327099E+07 2.603736417474620E-11 1.579520286693699E+03 2.813116230825074E+04 2.813116230825074E+04 3.066255410192300E-01 1.764967492239559E+03 9.079834687199998E+33 2.787950140433432E+14 4.506236000000000E-01 0.000000000000000E+00 5.272735000000000E-01 1.222730000000000E-02 1.558567000000000E-03 5.187451000000000E-03 1.189339000000000E-03 7.265203000000000E-05 8.695150000000000E-04 1.952047000000000E-04 1.054091000000000E-04 1.977966000000000E-05 1.497206000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.752514000000000E-05 0.000000000000000E+00 5.201441000000000E-04 3.746890268331000E+40 1.572073154446000E+13 9.556815586062000E+12 + 204 6.176891688800000E+31 9.110719006399999E+33 2.800223278480102E+14 5.866919377327100E+07 2.579865218514502E-11 1.565039157662309E+03 2.800191135802790E+04 2.806646243034441E+04 3.056255410192300E-01 1.745613816347865E+03 9.142631742000001E+33 2.812825148628689E+14 4.577203000000000E-01 0.000000000000000E+00 5.209354000000000E-01 1.169868000000000E-02 1.554855000000000E-03 5.027789000000000E-03 1.155381000000000E-03 7.247900000000000E-05 8.680428000000000E-04 1.903096000000000E-04 1.045844000000000E-04 1.969746000000000E-05 1.494019000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.751540000000000E-05 0.000000000000000E+00 4.953082000000000E-04 3.766890268331000E+40 1.552188329693000E+13 9.535894184086000E+12 + 205 6.382441692399999E+31 9.174544477600000E+33 2.825427018777276E+14 5.916419377327099E+07 2.550333745560311E-11 1.536473973780691E+03 2.793750874905789E+04 2.793750874905789E+04 3.044266927717000E-01 1.726046283188175E+03 9.200909334400000E+33 2.835792616795426E+14 4.653237000000000E-01 0.000000000000000E+00 5.141195000000000E-01 1.114847000000000E-02 1.550124000000000E-03 4.864226000000000E-03 1.120010000000000E-03 7.225845000000000E-05 8.665668000000000E-04 1.854857000000000E-04 1.037695000000000E-04 1.961595000000000E-05 1.490836000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.750527000000000E-05 0.000000000000000E+00 4.695058000000000E-04 3.786890268331000E+40 1.532188329693000E+13 9.486470060321000E+12 + 206 5.273007165599999E+31 9.227274191199999E+33 2.846158214813576E+14 5.962919377327101E+07 2.521140316581668E-11 1.508430163262938E+03 2.780914755611791E+04 2.780914755611791E+04 3.033266927717000E-01 1.710192848208575E+03 9.255074255799999E+33 2.857061039801252E+14 4.724433000000000E-01 0.000000000000000E+00 5.077119000000000E-01 1.064964000000000E-02 1.544927000000000E-03 4.718524000000000E-03 1.087914000000000E-03 7.201619000000000E-05 8.652828000000000E-04 1.813740000000000E-04 1.030726000000000E-04 1.954595000000000E-05 1.488079000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.749609000000000E-05 0.000000000000000E+00 4.461636000000000E-04 3.797005443578000E+40 1.522073154446000E+13 9.435894184086000E+12 + 207 5.560050714799999E+31 9.282874320399999E+33 2.867963864788928E+14 6.009919377327100E+07 2.492281062021183E-11 1.494600792400727E+03 2.774518829158963E+04 2.774518829158963E+04 3.023255410192300E-01 1.693763056292718E+03 9.309844888600000E+33 2.878544671004866E+14 4.788850000000000E-01 0.000000000000000E+00 5.018942000000000E-01 1.021149000000000E-02 1.539606000000000E-03 4.592560000000000E-03 1.059701000000000E-03 7.176817000000001E-05 8.641960000000000E-04 1.779600000000000E-04 1.024922000000000E-04 1.948741000000000E-05 1.485756000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.748803000000000E-05 0.000000000000000E+00 4.257029000000000E-04 3.816890268331000E+40 1.502073154446000E+13 9.365548658345000E+12 + 208 5.394185251200000E+31 9.336815456800000E+33 2.889125477220807E+14 6.054919377327099E+07 2.452432243707000E-11 1.467502124224457E+03 2.761771073088649E+04 2.761847118836804E+04 3.012266927717000E-01 1.678130487613816E+03 9.362087248200000E+33 2.899005512994345E+14 4.853653000000000E-01 0.000000000000000E+00 4.960222000000000E-01 9.783355000000001E-03 1.533659000000000E-03 4.471355000000000E-03 1.032112000000000E-03 7.149095999999999E-05 8.631711000000000E-04 1.748034000000000E-04 1.019537000000000E-04 1.943288000000000E-05 1.483574000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.748017000000000E-05 0.000000000000000E+00 4.057520000000000E-04 3.827005443578000E+40 1.472073154446000E+13 9.275433483098000E+12 + 209 5.054290647200000E+31 9.387359039599999E+33 2.908885548767885E+14 6.107425136089450E+07 2.424431441265883E-11 1.453868771462670E+03 2.755419175883830E+04 2.755419175883830E+04 3.219289962766400E-01 1.662708199476468E+03 9.424141336799999E+33 2.923010109332738E+14 4.925473000000000E-01 0.000000000000000E+00 4.894930000000000E-01 9.323039999999999E-03 1.526400000000000E-03 4.343102000000000E-03 1.002427000000000E-03 7.115260000000000E-05 8.621088000000000E-04 1.716006000000000E-04 1.014053000000000E-04 1.937710000000000E-05 1.481322000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.747171000000000E-05 0.000000000000000E+00 3.843502000000000E-04 3.837120618825000E+40 1.461957979199000E+13 9.234742431616000E+12 + 210 7.356481321199999E+31 9.460923633999999E+33 2.937134669897591E+14 6.173925136089449E+07 2.429948209749937E-11 1.427508617226139E+03 2.742759174749040E+04 2.742834697001947E+04 3.212289962766400E-01 1.640658256058198E+03 9.503599930800000E+33 2.953474063746973E+14 4.932429000000000E-01 0.000000000000000E+00 4.888577000000000E-01 9.280359000000000E-03 1.525607000000000E-03 4.331475000000000E-03 9.996711000000000E-04 7.111564000000000E-05 8.620152000000000E-04 1.713270000000000E-04 1.013582000000000E-04 1.937228000000000E-05 1.481125000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.747093000000000E-05 0.000000000000000E+00 3.823726000000000E-04 3.867120618825000E+40 1.462073154446000E+13 9.244627256369000E+12 + 211 8.535261349200000E+31 9.546276227599999E+33 2.969813457596356E+14 6.242425136089450E+07 2.391096024818325E-11 1.401453648605067E+03 2.730157341035800E+04 2.730232516295474E+04 3.197289962766400E-01 1.615675764080929E+03 9.586134822599999E+33 2.984902371661744E+14 5.091103000000000E-01 0.000000000000000E+00 4.743557000000000E-01 8.314439000000000E-03 1.507156000000000E-03 4.069378000000000E-03 9.372998000000000E-04 7.025553999999999E-05 8.599138000000000E-04 1.652235000000000E-04 1.003064000000000E-04 1.926442000000000E-05 1.476706000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.745321000000000E-05 0.000000000000000E+00 3.376453000000000E-04 3.897120618825000E+40 1.441957979199000E+13 9.234742431616000E+12 + 212 7.971643410399999E+31 9.625993417599998E+33 2.999991285727131E+14 6.305930894851801E+07 2.363725374956060E-11 1.375704659307207E+03 2.717613407489077E+04 2.717613407489077E+04 3.183301480291100E-01 1.592969077508994E+03 9.663883699199999E+33 3.014248229750180E+14 5.160446000000000E-01 0.000000000000000E+00 4.679810000000000E-01 7.917176000000000E-03 1.497915000000000E-03 3.964921000000000E-03 9.116090000000000E-04 6.982474000000000E-05 8.591071000000000E-04 1.629912000000000E-04 9.991832000000000E-05 1.922420000000000E-05 1.475025000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.744592000000000E-05 0.000000000000000E+00 3.193431000000000E-04 3.927235794072000E+40 1.421957979199000E+13 9.194051380134000E+12 + 213 7.578070244400000E+31 9.701773980799999E+33 3.028505173773229E+14 6.363930894851801E+07 2.331293846985102E-11 1.350595219477862E+03 2.705127108081770E+04 2.705127108081770E+04 3.170289962766400E-01 1.571895253271309E+03 9.734507261399999E+33 3.040799855648864E+14 5.238021000000000E-01 0.000000000000000E+00 4.608293000000000E-01 7.486444000000000E-03 1.486923000000000E-03 3.853442000000000E-03 8.837326000000000E-04 6.931239000000000E-05 8.582607000000000E-04 1.607078000000000E-04 9.951946000000000E-05 1.918263000000000E-05 1.473271000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.743803000000000E-05 0.000000000000000E+00 2.995536000000000E-04 3.947350969319000E+40 1.401957979199000E+13 9.134742431616000E+12 + 214 6.546759558400000E+31 9.767240542000000E+33 3.053094537524498E+14 6.415925136089449E+07 2.294019036225940E-11 1.326107522241790E+03 2.692698178009060E+04 2.692772321825504E+04 3.157289962766400E-01 1.554085839113259E+03 9.797614631399999E+33 3.064465662015442E+14 5.326811000000000E-01 0.000000000000000E+00 4.526158000000000E-01 7.012569000000000E-03 1.473432000000000E-03 3.733254000000000E-03 8.530344000000000E-04 6.868351000000000E-05 8.573671000000000E-04 1.583776000000000E-04 9.910980000000000E-05 1.913961000000000E-05 1.471430000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.742935000000000E-05 0.000000000000000E+00 2.778603000000000E-04 3.977350969319000E+40 1.381957979199000E+13 9.074281730628000E+12 + 215 6.074758203999999E+31 9.827988720799999E+33 3.075836786506388E+14 6.464919377327101E+07 2.267759617463081E-11 1.313787750193529E+03 2.680400156839357E+04 2.686505144054516E+04 3.146289962766400E-01 1.537859520728443E+03 9.857006175799999E+33 3.086678388606638E+14 5.368676999999999E-01 0.000000000000000E+00 4.487335000000000E-01 6.795559000000000E-03 1.466764000000000E-03 3.679041000000000E-03 8.389660000000000E-04 6.837265999999999E-05 8.569701000000000E-04 1.573695000000000E-04 9.893165000000000E-05 1.912079000000000E-05 1.470617000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.742537000000000E-05 0.000000000000000E+00 2.679532000000000E-04 3.997466144566000E+40 1.361957979199000E+13 8.994051380134000E+12 + 216 5.803524816400000E+31 9.886023630799999E+33 3.097519990706887E+14 6.513919377327099E+07 2.236711174807544E-11 1.289967410690450E+03 2.674161774134605E+04 2.674235407548606E+04 3.136289962766400E-01 1.522649135190839E+03 9.916307211599999E+33 3.108837040597112E+14 5.391420000000000E-01 0.000000000000000E+00 4.466206000000000E-01 6.680304000000000E-03 1.463015000000000E-03 3.650584000000000E-03 8.314901000000000E-04 6.819793000000000E-05 8.567640000000000E-04 1.568570000000000E-04 9.884068000000000E-05 1.911113000000000E-05 1.470196000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.742326000000000E-05 0.000000000000000E+00 2.627030000000000E-04 4.017466144566000E+40 1.351842803952000E+13 8.903936204887000E+12 + 217 6.056742019600000E+31 9.946590792399999E+33 3.120154090487338E+14 6.567919377327101E+07 2.206022346994764E-11 1.277983386632940E+03 2.661948411947152E+04 2.668011372725932E+04 3.349312997815800E-01 1.505925959115650E+03 9.981998552400000E+33 3.133277895214568E+14 5.488554000000000E-01 0.000000000000000E+00 4.375801000000000E-01 6.199632000000000E-03 1.446452000000000E-03 3.533342000000000E-03 8.002935000000001E-04 6.742582000000000E-05 8.559234000000000E-04 1.548122000000000E-04 9.847618000000000E-05 1.907224000000000E-05 1.468486000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.741446000000000E-05 0.000000000000000E+00 2.408583000000000E-04 4.037581319813000E+40 1.331842803952000E+13 8.863245153405000E+12 + 218 7.081402809999999E+31 1.001740631240000E+34 3.146401699941796E+14 6.625425136089450E+07 2.190771171787810E-11 1.254812217511904E+03 2.655752973966878E+04 2.655826100492022E+04 3.339301480291100E-01 1.486724575771445E+03 1.005318107980000E+34 3.159595363155311E+14 5.569014000000000E-01 0.000000000000000E+00 4.300686000000000E-01 5.817343000000000E-03 1.431970000000000E-03 3.442075000000000E-03 7.754570000000000E-04 6.675078000000000E-05 8.552806000000000E-04 1.533101000000000E-04 9.820616000000000E-05 1.904315000000000E-05 1.467187000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.740746000000000E-05 0.000000000000000E+00 2.235566000000000E-04 4.067581319813000E+40 1.321842803952000E+13 8.863245153405000E+12 + 219 7.155035037200000E+31 1.008895584720000E+34 3.172789026368824E+14 6.680930894851799E+07 2.165693621556048E-11 1.231909313418649E+03 2.643623687973336E+04 2.643623687973336E+04 3.327301480291100E-01 1.467710521613271E+03 1.012260913280000E+34 3.185080385014461E+14 5.659152000000000E-01 0.000000000000000E+00 4.216237000000000E-01 5.409869000000000E-03 1.414748000000000E-03 3.347347000000000E-03 7.489511000000000E-04 6.594796000000000E-05 8.546257000000000E-04 1.518566000000000E-04 9.794197000000000E-05 1.901435000000000E-05 1.465876000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.740000000000000E-05 0.000000000000000E+00 2.052123000000000E-04 4.097696495060000E+40 1.301842803952000E+13 8.843245153405000E+12 + 220 6.730679001200000E+31 1.015626241840000E+34 3.197371743660096E+14 6.735430894851801E+07 2.150785091530163E-11 1.209424434435922E+03 2.631477340447482E+04 2.631477340447482E+04 3.317301480291101E-01 1.450171629653339E+03 1.019098489900000E+34 3.209980553683335E+14 5.681956000000000E-01 0.000000000000000E+00 4.194850000000000E-01 5.308380000000000E-03 1.410314000000000E-03 3.323955000000000E-03 7.423467000000000E-04 6.574128000000000E-05 8.544649000000000E-04 1.515059000000000E-04 9.787798000000000E-05 1.900734000000000E-05 1.465555000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.739814000000000E-05 0.000000000000000E+00 2.006512000000000E-04 4.117811670307000E+40 1.291842803952000E+13 8.803129978158000E+12 + 221 6.944468271200000E+31 1.022570737960000E+34 3.222589363706574E+14 6.792930894851799E+07 2.131066575287203E-11 1.198188668789505E+03 2.619386800319213E+04 2.625352821059321E+04 3.306312997815800E-01 1.432403752922488E+03 1.026320479420000E+34 3.236211379614162E+14 5.724045000000000E-01 0.000000000000000E+00 4.155305000000000E-01 5.125972000000000E-03 1.401894000000000E-03 3.282518000000000E-03 7.304684000000000E-04 6.534876000000000E-05 8.541825000000001E-04 1.509073000000000E-04 9.776805000000001E-05 1.899523000000000E-05 1.464993000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.739480000000000E-05 0.000000000000000E+00 1.924775000000000E-04 4.147811670307000E+40 1.281727628705000E+13 8.752899627664000E+12 + 222 7.499530660799999E+31 1.030070220880000E+34 3.249833395521750E+14 6.854925136089450E+07 2.092232324344214E-11 1.176464260965569E+03 2.613290420541563E+04 2.613362377854431E+04 3.293301480291100E-01 1.413632078794795E+03 1.034035193780000E+34 3.264241549556559E+14 5.817262000000000E-01 0.000000000000000E+00 4.067542000000000E-01 4.734644000000000E-03 1.382633000000000E-03 3.195183000000000E-03 7.049644000000000E-04 6.445093000000001E-05 8.535926000000000E-04 1.497010000000000E-04 9.754466000000001E-05 1.897038000000000E-05 1.463827000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.738764000000000E-05 0.000000000000000E+00 1.750060000000000E-04 4.177926845554000E+40 1.261727628705000E+13 8.692784452417000E+12 + 223 7.929913972800000E+31 1.038000166680000E+34 3.278649703591366E+14 6.917919377327099E+07 2.058718738242011E-11 1.154991368239475E+03 2.601355068418970E+04 2.601355068418970E+04 3.279301480291100E-01 1.394178164950054E+03 1.041856131420000E+34 3.292689854729484E+14 5.895354000000000E-01 0.000000000000000E+00 3.993833000000000E-01 4.419856000000000E-03 1.365867000000000E-03 3.126542000000000E-03 6.844267000000000E-04 6.366937000000000E-05 8.531336000000000E-04 1.488061000000000E-04 9.737705000000000E-05 1.895152000000000E-05 1.462926000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.738187000000000E-05 0.000000000000000E+00 1.610189000000000E-04 4.217926845554000E+40 1.241727628705000E+13 8.602669277170000E+12 + 224 7.711913566399999E+31 1.045712096160000E+34 3.306730005867601E+14 6.982425136089450E+07 2.016554238367194E-11 1.133910399974945E+03 2.589402927559096E+04 2.589402927559096E+04 3.265289962766400E-01 1.375688737084307E+03 1.049910302760000E+34 3.321937012676724E+14 5.960254000000000E-01 0.000000000000000E+00 3.932443000000000E-01 4.167774000000000E-03 1.351471000000000E-03 3.072761000000000E-03 6.679639000000000E-04 6.299834000000001E-05 8.527766000000000E-04 1.481412000000000E-04 9.725110000000000E-05 1.893718000000000E-05 1.462230000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.737726000000000E-05 0.000000000000000E+00 1.498687000000000E-04 4.238042020800999E+40 1.211727628705000E+13 8.492438926676000E+12 + 225 8.396486800399999E+31 1.054108509360000E+34 3.337144019485849E+14 7.048930894851801E+07 1.993470932881456E-11 1.113214202744363E+03 2.577505701798224E+04 2.577505701798224E+04 3.463312997815800E-01 1.354691367319666E+03 1.058289608840000E+34 3.352211803107348E+14 6.021489000000000E-01 0.000000000000000E+00 3.874418000000000E-01 3.936974000000000E-03 1.337547000000000E-03 3.024410000000000E-03 6.528784000000000E-04 6.234924000000000E-05 8.524573000000000E-04 1.475689000000000E-04 9.714162000000000E-05 1.892460000000000E-05 1.461610000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.737303000000000E-05 0.000000000000000E+00 1.396984000000000E-04 4.278042020801000E+40 1.201612453458000E+13 8.442208576182000E+12 + 226 8.362069662000000E+31 1.062470708320000E+34 3.367279586728845E+14 7.114925136089450E+07 1.966119486303091E-11 1.092895753684913E+03 2.565663138824403E+04 2.565663138824403E+04 3.450312997815800E-01 1.334248700865107E+03 1.066627738480000E+34 3.382213171503693E+14 6.133421000000000E-01 0.000000000000000E+00 3.768092000000000E-01 3.533883000000000E-03 1.311179000000000E-03 2.942329000000000E-03 6.264984000000000E-04 6.112014999999999E-05 8.519176000000000E-04 1.466578000000000E-04 9.696455000000000E-05 1.890393000000000E-05 1.460571000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.736564000000000E-05 0.000000000000000E+00 1.220407000000000E-04 4.308157196048000E+40 1.181727628705000E+13 8.422208576182000E+12 + 227 8.314092147200000E+31 1.070784768640000E+34 3.397146756278541E+14 7.179925136089449E+07 1.939085761716782E-11 1.072948158115442E+03 2.553874987484935E+04 2.553874987484935E+04 3.436312997815800E-01 1.314347754487391E+03 1.074945080980000E+34 3.411950055392686E+14 6.221870000000000E-01 0.000000000000000E+00 3.683858000000000E-01 3.230725000000000E-03 1.289595000000000E-03 2.882563000000000E-03 6.066304000000000E-04 6.011401000000000E-05 8.515254000000000E-04 1.460399000000000E-04 9.684213000000000E-05 1.888939000000000E-05 1.459823000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.736008000000000E-05 0.000000000000000E+00 1.088491000000000E-04 4.338387546542000E+40 1.171612453458000E+13 8.372093400935000E+12 + 228 8.320744032000000E+31 1.079105393320000E+34 3.426753354506832E+14 7.245430894851799E+07 1.921365142861900E-11 1.053364647196917E+03 2.542140997781069E+04 2.542140997781069E+04 3.425301480291100E-01 1.294863352340860E+03 1.083377498700000E+34 3.441976978427451E+14 6.222059000000000E-01 0.000000000000000E+00 3.683678000000000E-01 3.230095000000000E-03 1.289548000000000E-03 2.882441000000000E-03 6.065890000000000E-04 6.011182000000000E-05 8.515246000000000E-04 1.460386000000000E-04 9.684188000000000E-05 1.888936000000000E-05 1.459821000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.736007000000000E-05 0.000000000000000E+00 1.088218000000000E-04 4.378387546542001E+40 1.161612453458000E+13 8.301863050441000E+12 + 229 8.544149094800001E+31 1.087649604080000E+34 3.457200602348072E+14 7.312930894851801E+07 1.886240291375443E-11 1.034138575635538E+03 2.530460920862688E+04 2.530460920862688E+04 3.410301480291100E-01 1.275278163251045E+03 1.092005753160000E+34 3.472772308854994E+14 6.315137000000000E-01 0.000000000000000E+00 3.594836000000000E-01 2.925351000000000E-03 1.266136000000000E-03 2.824224000000000E-03 5.865900000000000E-04 5.902046000000000E-05 8.511420000000000E-04 1.454744000000000E-04 9.672792999999999E-05 1.887558000000000E-05 1.459097000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.735448000000000E-05 0.000000000000000E+00 9.564623000000000E-05 4.408502721789001E+40 1.131612453458000E+13 8.221747875194000E+12 + 230 8.712314073599999E+31 1.096361902240000E+34 3.488344015361914E+14 7.375930894851801E+07 1.847553475476631E-11 1.015263419427808E+03 2.518834509023054E+04 2.518834509023054E+04 3.395278445241700E-01 1.255742493856027E+03 1.100044806580000E+34 3.501526795478544E+14 6.410123000000000E-01 0.000000000000000E+00 3.503990000000000E-01 2.627530000000000E-03 1.241598000000000E-03 2.769086000000000E-03 5.670196000000000E-04 5.787663000000000E-05 8.507780000000000E-04 1.449719000000000E-04 9.662437000000000E-05 1.886284000000000E-05 1.458413000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.734901000000000E-05 0.000000000000000E+00 8.285100000000000E-05 4.438733072283000E+40 1.111497278211000E+13 8.131517524700000E+12 + 231 7.365750993199999E+31 1.103727710920000E+34 3.514709575595176E+14 7.432430894851799E+07 1.813885660435431E-11 9.967327736466888E+02 2.507261515693523E+04 2.507261515693523E+04 3.389186305044100E-01 1.239534435902340E+03 1.107210899580000E+34 3.527186956226874E+14 6.453530000000000E-01 0.000000000000000E+00 3.462408000000000E-01 2.496177000000000E-03 1.230150000000000E-03 2.745413000000000E-03 5.583784000000000E-04 5.734301000000000E-05 8.506207000000000E-04 1.447664000000000E-04 9.658129000000000E-05 1.885747000000000E-05 1.458119000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.734660000000000E-05 0.000000000000000E+00 7.723773000000000E-05 4.458848247530000E+40 1.091497278211000E+13 8.021402349453000E+12 + 232 6.966385276800001E+31 1.110694088240000E+34 3.539664336858574E+14 7.486930894851799E+07 1.784883634449336E-11 9.875946726507083E+02 2.495741695438334E+04 2.501494974227258E+04 3.388059612272400E-01 1.224444005666920E+03 1.114047481600000E+34 3.551704232522126E+14 6.458310000000000E-01 0.000000000000000E+00 3.457826000000000E-01 2.481948000000000E-03 1.228878000000000E-03 2.742882000000000E-03 5.574419000000000E-04 5.728371000000000E-05 8.506039000000000E-04 1.447450000000000E-04 9.657674000000000E-05 1.885690000000000E-05 1.458087000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.734634000000000E-05 0.000000000000000E+00 7.663120000000001E-05 4.479078598024000E+40 1.071497278211000E+13 7.901287174206000E+12 + 233 6.706812579599999E+31 1.117400874960000E+34 3.563744128185679E+14 7.541930894851799E+07 1.756345318789439E-11 9.695690384123294E+02 2.490001648823432E+04 2.490001648823432E+04 3.582955954550101E-01 1.209291316766330E+03 1.120939761220000E+34 3.576395184293712E+14 6.522447000000000E-01 0.000000000000000E+00 3.396321000000000E-01 2.292655000000000E-03 1.211728000000000E-03 2.709434000000000E-03 5.449793000000000E-04 5.648426000000000E-05 8.503804000000000E-04 1.444644000000000E-04 9.651713000000001E-05 1.884937000000000E-05 1.457671000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.734286000000000E-05 0.000000000000000E+00 6.857296999999999E-05 4.499193773271001E+40 1.061497278211000E+13 7.821171998959000E+12 + 234 7.077710854799999E+31 1.124478647480000E+34 3.589046240401746E+14 7.607425136089450E+07 1.740243048119449E-11 9.518724090771702E+02 2.478561130453079E+04 2.478561130453079E+04 3.582829261778400E-01 1.193516026606575E+03 1.129251533960000E+34 3.606052493543639E+14 6.575171000000000E-01 0.000000000000000E+00 3.345703000000000E-01 2.141209000000000E-03 1.197424000000000E-03 2.683261000000000E-03 5.349995000000000E-04 5.581750000000000E-05 8.502040999999999E-04 1.442529000000000E-04 9.647150000000000E-05 1.884355000000000E-05 1.457345000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.734008000000000E-05 0.000000000000000E+00 6.215334000000000E-05 4.519308948518000E+40 1.051382102964000E+13 7.791056823712000E+12 + 235 9.545802798000000E+31 1.134024420440000E+34 3.623058746685530E+14 7.689919377327099E+07 1.716366018372540E-11 9.344987796289915E+02 2.467173176489921E+04 2.467173176489921E+04 3.582679533957300E-01 1.172601901684187E+03 1.139769826800000E+34 3.643506688356004E+14 6.625532000000000E-01 0.000000000000000E+00 3.297307000000000E-01 1.999882000000000E-03 1.183596000000000E-03 2.659316000000000E-03 5.256795000000000E-04 5.517290000000000E-05 8.500417000000000E-04 1.440654000000000E-04 9.643050000000000E-05 1.883826000000000E-05 1.457045000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.733748000000000E-05 0.000000000000000E+00 5.618510000000000E-05 4.549424123765000E+40 1.031497278211000E+13 7.720941648465000E+12 + 236 1.149091615840000E+32 1.145515233160000E+34 3.663954630026479E+14 7.779425136089449E+07 1.684988795924370E-11 9.174422546554421E+02 2.455837545422439E+04 2.455837545422439E+04 3.580506771086800E-01 1.147929976036930E+03 1.151219960380000E+34 3.684290430069325E+14 6.699675000000000E-01 0.000000000000000E+00 3.225961000000000E-01 1.798817000000000E-03 1.162889000000000E-03 2.626266000000000E-03 5.124043000000000E-04 5.420765000000000E-05 8.498144000000000E-04 1.438179000000000E-04 9.637524000000000E-05 1.883101000000000E-05 1.456627000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.733378000000000E-05 0.000000000000000E+00 4.774151000000000E-05 4.589654474258999E+40 1.011497278211000E+13 7.630711297971000E+12 + 237 1.140938282880000E+32 1.156924687600000E+34 3.704626230112170E+14 7.859430894851799E+07 1.642895376958133E-11 8.924394061917601E+02 2.438931678673697E+04 2.438931678673697E+04 3.575334008216300E-01 1.124040990077102E+03 1.161427639640000E+34 3.720703969933085E+14 6.778850000000000E-01 0.000000000000000E+00 3.149699000000000E-01 1.589514000000000E-03 1.140506000000000E-03 2.592668000000000E-03 4.985730000000000E-04 5.316429000000000E-05 8.495807000000000E-04 1.435745000000000E-04 9.631998000000000E-05 1.882368000000000E-05 1.456200000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.732993000000000E-05 0.000000000000000E+00 3.898958000000000E-05 4.629654474259000E+40 9.903936204887000E+12 7.500596122724000E+12 + 238 9.005866285199999E+31 1.165930591680000E+34 3.736781709753998E+14 7.924930894851801E+07 1.609199568804743E-11 8.761505512987387E+02 2.427725805502053E+04 2.427725805502053E+04 3.571184280395200E-01 1.105562959141177E+03 1.169743390780000E+34 3.750450014830845E+14 6.821310000000000E-01 0.000000000000000E+00 3.108743000000000E-01 1.481447000000000E-03 1.128293000000000E-03 2.575954000000000E-03 4.914219000000000E-04 5.259495000000000E-05 8.494621000000000E-04 1.434593000000000E-04 9.629311000000000E-05 1.882005000000000E-05 1.455984000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.732794000000000E-05 0.000000000000000E+00 3.450024000000000E-05 4.659769649506000E+40 9.694051380134000E+12 7.380365772230000E+12 + 239 7.625685724799999E+31 1.173556189880000E+34 3.764118319907692E+14 7.985930894851799E+07 1.576194862168240E-11 8.601590015133634E+02 2.416571418640844E+04 2.416571418640844E+04 3.566092140197600E-01 1.090198237103616E+03 1.177418221680000E+34 3.778042866560389E+14 6.862576000000000E-01 0.000000000000000E+00 3.068916000000000E-01 1.378129000000000E-03 1.116336000000000E-03 2.560241000000000E-03 4.845810000000000E-04 5.203757000000000E-05 8.493494000000000E-04 1.433529000000000E-04 9.626803000000000E-05 1.881664000000000E-05 1.455779000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.732604000000000E-05 0.000000000000000E+00 3.022042000000000E-05 4.689654474259000E+40 9.502784452417000E+12 7.260250596983001E+12 + 240 7.723906453200000E+31 1.181280253480000E+34 3.791967413213085E+14 8.049430894851799E+07 1.547380136006970E-11 8.444593304058700E+02 2.405468281531963E+04 2.405468281531963E+04 3.561115175247000E-01 1.074853048469460E+03 1.185302316420000E+34 3.806459458135744E+14 6.904162000000000E-01 0.000000000000000E+00 3.028751000000000E-01 1.276091000000000E-03 1.104179000000000E-03 2.545051000000000E-03 4.778197000000000E-04 5.147089000000000E-05 8.492391000000000E-04 1.432525000000000E-04 9.624400000000000E-05 1.881333000000000E-05 1.455579000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.732415000000000E-05 0.000000000000000E+00 2.600873000000000E-05 4.719654474259000E+40 9.312669277170000E+12 7.140135421736001E+12 + 241 8.044243242800000E+31 1.189324379360000E+34 3.820951503058405E+14 8.114930894851801E+07 1.522684432056858E-11 8.291493365719568E+02 2.394416158704180E+04 2.394482239450142E+04 3.706184280395200E-01 1.058497133142399E+03 1.193512043200000E+34 3.835978171596117E+14 6.912295000000001E-01 0.000000000000000E+00 3.020894000000000E-01 1.256315000000000E-03 1.101792000000000E-03 2.542136000000000E-03 4.765088000000000E-04 5.135964000000000E-05 8.492178000000000E-04 1.432334000000000E-04 9.623941000000000E-05 1.881270000000000E-05 1.455541000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.732379000000000E-05 0.000000000000000E+00 2.519374000000000E-05 4.739654474259001E+40 9.173129978158000E+12 7.049905071242001E+12 + 242 8.375311766400000E+31 1.197699707040000E+34 3.851004840133828E+14 8.181430894851799E+07 1.505254407495747E-11 8.214454692448643E+02 2.383414815768176E+04 2.388909154356916E+04 3.703218832969300E-01 1.041745361029582E+03 1.201936205740000E+34 3.866174276468321E+14 6.934696000000000E-01 0.000000000000000E+00 2.999244000000000E-01 1.202392000000000E-03 1.095190000000000E-03 2.534277000000000E-03 4.729332000000000E-04 5.105187000000000E-05 8.491599000000000E-04 1.431826000000000E-04 9.622706000000000E-05 1.881098000000000E-05 1.455436000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.732280000000000E-05 0.000000000000000E+00 2.297564000000000E-05 4.779654474259000E+40 9.073129978158000E+12 6.979789895995001E+12 + 243 8.472963583599999E+31 1.206172704440000E+34 3.881343712802814E+14 8.249930894851801E+07 1.484601542769020E-11 8.064523997342328E+02 2.372529494325576E+04 2.377933113807531E+04 3.699253385543400E-01 1.025084305635298E+03 1.210631894080000E+34 3.897299337527776E+14 6.969554000000000E-01 0.000000000000000E+00 2.965544000000000E-01 1.119336000000000E-03 1.084871000000000E-03 2.522310000000000E-03 4.674235000000000E-04 5.057085000000000E-05 8.490711000000000E-04 1.431059000000000E-04 9.620831000000001E-05 1.880837000000000E-05 1.455276000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.732126000000000E-05 0.000000000000000E+00 1.956536000000000E-05 4.809654474259000E+40 8.952208576182000E+12 6.909789895995001E+12 + 244 8.918343474400001E+31 1.215091083720000E+34 3.913254962252736E+14 8.320936653614150E+07 1.464232045969530E-11 7.917329845826085E+02 2.361628711477958E+04 2.367007503583597E+04 3.695276420592800E-01 1.007818771828737E+03 1.219707917460000E+34 3.929794692899618E+14 6.998077000000000E-01 0.000000000000000E+00 2.937956000000000E-01 1.052322000000000E-03 1.076376000000000E-03 2.512812000000000E-03 4.629755000000000E-04 5.017487000000000E-05 8.489998000000000E-04 1.430460000000000E-04 9.619349000000000E-05 1.880629000000000E-05 1.455148000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.732003000000000E-05 0.000000000000000E+00 1.682075000000000E-05 4.849539299012000E+40 8.812323751429000E+12 6.819674720748001E+12 + 245 9.233697318000000E+31 1.224324751200000E+34 3.946334423546500E+14 8.393936653614148E+07 1.437506799234529E-11 7.772822290350507E+02 2.350778013178068E+04 2.356132091978828E+04 3.689310973166900E-01 9.902761984792165E+02 1.229000564720000E+34 3.963122105871650E+14 7.025153000000000E-01 0.000000000000000E+00 2.911757000000000E-01 9.894436000000000E-04 1.068271000000000E-03 2.504024000000000E-03 4.588001000000000E-04 4.979706000000000E-05 8.489332000000000E-04 1.429912000000000E-04 9.617980000000000E-05 1.880435000000000E-05 1.455028000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731887000000000E-05 0.000000000000000E+00 1.425087000000000E-05 4.889539299012000E+40 8.661978225688000E+12 6.719444370254001E+12 + 246 9.351617093999999E+31 1.233676378240000E+34 3.979909788196799E+14 8.467936653614150E+07 1.411227456642378E-11 7.630952295011507E+02 2.339977169308304E+04 2.345306648351514E+04 3.682345525741000E-01 9.728291197203004E+02 1.238366016700000E+34 3.996801473435335E+14 7.047778000000000E-01 0.000000000000000E+00 2.889858000000000E-01 9.373879000000000E-04 1.061470000000000E-03 2.496833000000000E-03 4.553420000000000E-04 4.948003000000000E-05 8.488782000000000E-04 1.429466000000000E-04 9.616860000000001E-05 1.880276000000000E-05 1.454929000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731790000000000E-05 0.000000000000000E+00 1.212680000000000E-05 4.929539299012000E+40 8.491863050441000E+12 6.609214019760001E+12 + 247 9.379374390799999E+31 1.243055655160000E+34 4.013693158673870E+14 8.542436653614150E+07 1.382324188403924E-11 7.491671718911190E+02 2.329161670946199E+04 2.334530943119650E+04 3.674380078315100E-01 9.556707001888642E+02 1.247746089300000E+34 4.030659254228943E+14 7.068238000000000E-01 0.000000000000000E+00 2.870050000000000E-01 8.906546000000000E-04 1.055297000000000E-03 2.490438000000000E-03 4.522366000000000E-04 4.919229000000000E-05 8.488289999999999E-04 1.429072000000000E-04 9.615865000000000E-05 1.880135000000000E-05 1.454841000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731704000000000E-05 0.000000000000000E+00 1.022226000000000E-05 4.969539299012000E+40 8.321632699947000E+12 6.489098844513000E+12 + 248 9.380760863200000E+31 1.252436523440000E+34 4.047625349784017E+14 8.617430894851799E+07 1.353972699129853E-11 7.354933299822009E+02 2.318460145147382E+04 2.323804747756066E+04 3.666414630889200E-01 9.388267476990470E+02 1.257113132640000E+34 4.064584498149532E+14 7.085965000000000E-01 0.000000000000000E+00 2.852884000000000E-01 8.503577000000000E-04 1.049933000000000E-03 2.484961000000000E-03 4.495582000000000E-04 4.894225000000000E-05 8.487866000000000E-04 1.428736000000000E-04 9.615011000000000E-05 1.880013000000000E-05 1.454765000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731630000000000E-05 0.000000000000000E+00 8.581220999999999E-06 5.009539299012000E+40 8.151402349453000E+12 6.358983669266000E+12 + 249 9.353299957199999E+31 1.261789741840000E+34 4.081543646515048E+14 8.691936653614150E+07 1.326202699314475E-11 7.220690638149455E+02 2.307807788393312E+04 2.313127834783587E+04 3.727460700988000E-01 9.220604197870732E+02 1.266462173720000E+34 4.098496143693998E+14 7.100779000000000E-01 0.000000000000000E+00 2.838539000000000E-01 8.167643000000000E-04 1.045441000000000E-03 2.480413000000000E-03 4.473251000000000E-04 4.873285000000000E-05 8.487513000000000E-04 1.428456000000000E-04 9.614301000000000E-05 1.879912000000000E-05 1.454701000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731568000000000E-05 0.000000000000000E+00 7.213488000000000E-06 5.049424123765000E+40 7.991171998959000E+12 6.248753318772000E+12 + 250 9.344897576399999E+31 1.271134605600000E+34 4.115448640872948E+14 8.768436653614150E+07 1.304998184615838E-11 7.024780483602514E+02 2.297204374772747E+04 2.297267772682154E+04 3.720483736037400E-01 9.055994966207302E+02 1.276021473240000E+34 4.133201352887822E+14 7.113110000000000E-01 0.000000000000000E+00 2.826598000000000E-01 7.888246999999999E-04 1.041697000000000E-03 2.476638000000000E-03 4.454677000000000E-04 4.855832000000000E-05 8.487219000000000E-04 1.428223000000000E-04 9.613710000000000E-05 1.879827000000000E-05 1.454649000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731516000000000E-05 0.000000000000000E+00 6.075935000000000E-06 5.089424123765001E+40 7.860941648465000E+12 6.148638143525000E+12 + 251 9.773603992799999E+31 1.280908340880000E+34 4.150954064902696E+14 8.847430894851799E+07 1.281179283391412E-11 6.896563789943712E+02 2.286649679412420E+04 2.286712786034893E+04 3.712506771086800E-01 8.887124654293394E+02 1.285879749520000E+34 4.169022398643529E+14 7.121910000000000E-01 0.000000000000000E+00 2.818077000000000E-01 7.688989000000000E-04 1.039022000000000E-03 2.473949000000000E-03 4.441430000000000E-04 4.843362000000000E-05 8.487009000000000E-04 1.428058000000000E-04 9.613289000000000E-05 1.879767000000000E-05 1.454611000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731479000000000E-05 0.000000000000000E+00 5.264615000000000E-06 5.139424123765000E+40 7.710826473218000E+12 6.048407793031000E+12 + 252 9.942851096399998E+31 1.290851158160000E+34 4.187090732384364E+14 8.926936653614150E+07 1.257795126109337E-11 6.770687314683361E+02 2.276143478472257E+04 2.276206295146137E+04 3.704529806136200E-01 8.718751513659852E+02 1.295894178000000E+34 4.205459336427036E+14 7.123015000000000E-01 0.000000000000000E+00 2.817006000000000E-01 7.663976000000000E-04 1.038685000000000E-03 2.473612000000000E-03 4.439766000000000E-04 4.841792000000000E-05 8.486983000000000E-04 1.428037000000000E-04 9.613236000000001E-05 1.879760000000000E-05 1.454606000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731475000000000E-05 0.000000000000000E+00 5.162762000000000E-06 5.189308948518000E+40 7.580596122724000E+12 5.938292617784000E+12 + 253 1.008613914000000E+32 1.300937197840000E+34 4.223827940469708E+14 9.008942412376499E+07 1.234801127717562E-11 6.646281605646834E+02 2.265685549140634E+04 2.265685549140634E+04 3.694564358710300E-01 8.551161242662977E+02 1.306207483780000E+34 4.243021541441114E+14 7.139290000000000E-01 0.000000000000000E+00 2.801245000000000E-01 7.295869000000000E-04 1.033726000000000E-03 2.468659000000000E-03 4.415291000000000E-04 4.818675000000000E-05 8.486596000000000E-04 1.427730000000000E-04 9.612458000000000E-05 1.879649000000000E-05 1.454537000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731407000000000E-05 0.000000000000000E+00 3.663779000000000E-06 5.239308948518000E+40 7.430365772230000E+12 5.828177442537000E+12 + 254 1.054049231200000E+32 1.311477769720000E+34 4.262215142412522E+14 9.093442412376499E+07 1.209511236957868E-11 6.524973295075300E+02 2.255275669629653E+04 2.255275669629653E+04 3.686587393759700E-01 8.380000858665966E+02 1.316825535000000E+34 4.281664399251511E+14 7.143630000000000E-01 0.000000000000000E+00 2.797042000000000E-01 7.197876000000000E-04 1.032399000000000E-03 2.467346000000000E-03 4.408775000000000E-04 4.812491000000000E-05 8.486492000000000E-04 1.427649000000000E-04 9.612250999999999E-05 1.879619000000000E-05 1.454518000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731388000000000E-05 0.000000000000000E+00 3.264681000000000E-06 5.289308948518001E+40 7.290250596983000E+12 5.727947092043000E+12 + 255 1.069560217120000E+32 1.322173300280000E+34 4.301113656090499E+14 9.178942412376499E+07 1.190137165297795E-11 6.405879110700516E+02 2.239812273427200E+04 2.244913619170450E+04 3.677610428809100E-01 8.209754173099211E+02 1.327563534980000E+34 4.320754400061088E+14 7.144941000000000E-01 0.000000000000000E+00 2.795772000000000E-01 7.168303000000000E-04 1.031997000000000E-03 2.466951000000000E-03 4.406808000000000E-04 4.810618000000000E-05 8.486461000000000E-04 1.427624000000000E-04 9.612188000000000E-05 1.879610000000000E-05 1.454513000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731383000000000E-05 0.000000000000000E+00 3.144227000000000E-06 5.349308948517999E+40 7.160020246489001E+12 5.627831916796000E+12 + 256 1.078040574560000E+32 1.332953769680000E+34 4.340395144031679E+14 9.263942412376501E+07 1.168449393611205E-11 6.288958640164931E+02 2.229521270819876E+04 2.234599178008490E+04 3.668633463858501E-01 8.041376317678265E+02 1.338211523660000E+34 4.359589050204124E+14 7.152517000000000E-01 0.000000000000000E+00 2.788434000000000E-01 6.997552000000000E-04 1.029673000000000E-03 2.464674000000000E-03 4.395451000000000E-04 4.799781000000000E-05 8.486282000000000E-04 1.427482000000000E-04 9.611827000000000E-05 1.879559000000000E-05 1.454481000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731351000000000E-05 0.000000000000000E+00 2.448683000000000E-06 5.399308948518000E+40 7.039789895995001E+12 5.527716741549000E+12 + 257 1.051554575480000E+32 1.343469277640000E+34 4.378782956376571E+14 9.344442412376501E+07 1.149767179833287E-11 6.118328028651875E+02 2.219216305468458E+04 2.219277551074567E+04 3.678668016432600E-01 7.879017099516722E+02 1.348273195640000E+34 4.396278372659986E+14 7.157514000000000E-01 0.000000000000000E+00 2.783594000000000E-01 6.885145000000001E-04 1.028133000000000E-03 2.463182000000000E-03 4.387973000000000E-04 4.792606000000000E-05 8.486162999999999E-04 1.427388000000000E-04 9.611590000000001E-05 1.879525000000000E-05 1.454459000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731331000000000E-05 0.000000000000000E+00 1.990718000000000E-06 5.459193773271001E+40 6.929674720748001E+12 5.447601566302000E+12 + 258 9.607754442800000E+31 1.353077113640000E+34 4.413773788943402E+14 9.422436653614150E+07 1.136605903759177E-11 6.006655956850504E+02 2.209019932738144E+04 2.209080896946254E+04 3.671679533957300E-01 7.732997180521191E+02 1.358024552420000E+34 4.431749660164828E+14 7.161302000000001E-01 0.000000000000000E+00 2.779925000000000E-01 6.800033000000000E-04 1.026964000000000E-03 2.462056000000000E-03 4.382311000000000E-04 4.787154000000000E-05 8.486073999999999E-04 1.427317000000000E-04 9.611409000000000E-05 1.879499000000000E-05 1.454443000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731315000000000E-05 0.000000000000000E+00 1.643922000000000E-06 5.509193773270999E+40 6.839559545501001E+12 5.377486391055000E+12 + 259 9.895008847200001E+31 1.362971991200000E+34 4.449725531386256E+14 9.507436653614150E+07 1.123595283566481E-11 5.897022130066688E+02 2.198870408085052E+04 2.198931092188069E+04 3.664702569006700E-01 7.584966420572293E+02 1.368699793140000E+34 4.470417100702391E+14 7.164443000000000E-01 0.000000000000000E+00 2.776883000000000E-01 6.729566000000000E-04 1.025991000000000E-03 2.461127000000000E-03 4.377622000000000E-04 4.782622000000000E-05 8.486000000000000E-04 1.427259000000000E-04 9.611260000000001E-05 1.879478000000000E-05 1.454430000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731302000000000E-05 0.000000000000000E+00 1.356763000000000E-06 5.559193773271000E+40 6.759444370254001E+12 5.317486391055000E+12 + 260 1.145552829040000E+32 1.374427595080000E+34 4.491108670018527E+14 9.600442412376501E+07 1.110733594711586E-11 5.788669287113199E+02 2.188767516261825E+04 2.188767516261825E+04 3.657714086531400E-01 7.416843663945709E+02 1.380485405300000E+34 4.512727581603205E+14 7.167148000000000E-01 0.000000000000000E+00 2.774263000000000E-01 6.669033000000000E-04 1.025150000000000E-03 2.460335000000000E-03 4.373593000000000E-04 4.778698000000000E-05 8.485936000000000E-04 1.427208000000000E-04 9.611132000000000E-05 1.879459000000000E-05 1.454419000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731291000000000E-05 0.000000000000000E+00 1.110027000000000E-06 5.619078598024000E+40 6.689444370254001E+12 5.267371215808000E+12 + 261 1.211562640760000E+32 1.386543215520000E+34 4.534346493187884E+14 9.693442412376501E+07 1.098019132391565E-11 5.683014165446356E+02 2.173760136119878E+04 2.178711043010067E+04 3.649737121580800E-01 7.243575418540745E+02 1.392450343840000E+34 4.555244014445642E+14 7.169436000000000E-01 0.000000000000000E+00 2.772046000000000E-01 6.618034000000000E-04 1.024432000000000E-03 2.459674000000000E-03 4.370198000000000E-04 4.775353000000000E-05 8.485882000000000E-04 1.427166000000000E-04 9.611024000000000E-05 1.879444000000000E-05 1.454409000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731281000000000E-05 0.000000000000000E+00 9.020737000000000E-07 5.679078598024000E+40 6.609329195007001E+12 5.207256040561000E+12 + 262 1.181420492080000E+32 1.398357472160000E+34 4.576141535703402E+14 9.782942412376499E+07 1.085450211318209E-11 5.528823903151667E+02 2.163712901685209E+04 2.163772615516521E+04 3.642748639105500E-01 7.078323051598793E+02 1.404011275860000E+34 4.596027186993189E+14 7.171308000000000E-01 0.000000000000000E+00 2.770232000000000E-01 6.576497000000000E-04 1.023840000000000E-03 2.459142000000000E-03 4.367431000000000E-04 4.772592000000000E-05 8.485838000000000E-04 1.427131000000000E-04 9.610936000000000E-05 1.879431000000000E-05 1.454401000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731274000000000E-05 0.000000000000000E+00 7.326300000000000E-07 5.748963422776999E+40 6.539098844513001E+12 5.147140865314000E+12 + 263 1.130753578880000E+32 1.409665079560000E+34 4.615912838282977E+14 9.870942412376501E+07 1.073025165494644E-11 5.427236394256072E+02 2.153771543930850E+04 2.153771543930850E+04 3.634771674154900E-01 6.923212642873295E+02 1.415413270800000E+34 4.636013681815554E+14 7.172980000000000E-01 0.000000000000000E+00 2.768611000000000E-01 6.539620000000000E-04 1.023305000000000E-03 2.458678000000000E-03 4.364974000000000E-04 4.770100000000000E-05 8.485800000000000E-04 1.427100000000000E-04 9.610858000000000E-05 1.879420000000000E-05 1.454394000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731267000000000E-05 0.000000000000000E+00 5.821201000000000E-07 5.808963422776999E+40 6.459098844513000E+12 5.087140865314000E+12 + 264 1.149642823160000E+32 1.421161462040000E+34 4.656114525348131E+14 9.960942412376499E+07 1.060742347994504E-11 5.328178166344106E+02 2.139004115202795E+04 2.143875862566331E+04 3.626783191679600E-01 6.768559041466203E+02 1.427253685420000E+34 4.677291987957923E+14 7.173144000000000E-01 0.000000000000000E+00 2.768452000000000E-01 6.535998000000000E-04 1.023252000000000E-03 2.458632000000000E-03 4.364732000000000E-04 4.769853000000000E-05 8.485796000000000E-04 1.427097000000000E-04 9.610851000000000E-05 1.879419000000000E-05 1.454394000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731266000000000E-05 0.000000000000000E+00 5.673323000000000E-07 5.868848247530000E+40 6.388983669266000E+12 5.027025690067000E+12 + 265 1.218446665200000E+32 1.433345908800000E+34 4.698469450567716E+14 1.005544241237650E+08 1.048600130743632E-11 5.183615234578670E+02 2.129117524936895E+04 2.129176284010073E+04 3.623806226729000E-01 6.607619307050865E+02 1.439725372660000E+34 4.720552546429557E+14 7.174173000000000E-01 0.000000000000000E+00 2.767455000000000E-01 6.513470000000000E-04 1.022919000000000E-03 2.458354000000000E-03 4.363230000000000E-04 4.768301000000000E-05 8.485771999999999E-04 1.427079000000000E-04 9.610803000000000E-05 1.879412000000000E-05 1.454389000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731262000000000E-05 0.000000000000000E+00 4.753239000000000E-07 5.928963422777001E+40 6.318753318772000E+12 4.976910514820000E+12 + 266 1.275890186040000E+32 1.446104836520000E+34 4.742635642291398E+14 1.015294817113885E+08 1.036596904304289E-11 5.088370645859875E+02 2.119335118500257E+04 2.119335118500257E+04 3.615817744253700E-01 6.442083854369852E+02 1.452631302260000E+34 4.765158905810857E+14 7.175408000000000E-01 0.000000000000000E+00 2.766257000000000E-01 6.486583000000000E-04 1.022514000000000E-03 2.458028000000000E-03 4.361436000000000E-04 4.766412999999999E-05 8.485744000000000E-04 1.427056000000000E-04 9.610746000000000E-05 1.879404000000000E-05 1.454384000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731257000000000E-05 0.000000000000000E+00 3.654475000000000E-07 5.998848247530000E+40 6.238753318772000E+12 4.916910514820000E+12 + 267 1.305295733960000E+32 1.459157768000000E+34 4.787682169330318E+14 1.025144817113885E+08 1.024731077661808E-11 4.950314117810404E+02 2.104745718164690E+04 2.104803804628320E+04 3.606829261778400E-01 6.275596394068161E+02 1.465727697760000E+34 4.810187333875044E+14 7.176290000000000E-01 0.000000000000000E+00 2.765402000000000E-01 6.467575000000000E-04 1.022220000000000E-03 2.457804000000000E-03 4.360167000000000E-04 4.765041000000000E-05 8.485724000000000E-04 1.427040000000000E-04 9.610706000000000E-05 1.879398000000000E-05 1.454381000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731253000000000E-05 0.000000000000000E+00 2.876958000000000E-07 6.068848247530000E+40 6.168638143525000E+12 4.856795339573000E+12 + 268 1.313991919600000E+32 1.472297627520000E+34 4.832692498419772E+14 1.034994241237650E+08 1.013001078013720E-11 4.859356241725292E+02 2.090314437153824E+04 2.095075290008560E+04 3.598829261778400E-01 6.111511709172478E+02 1.478862385360000E+34 4.854957182082341E+14 7.177021000000000E-01 0.000000000000000E+00 2.764693000000000E-01 6.452014000000000E-04 1.021971000000000E-03 2.457627000000000E-03 4.359126000000000E-04 4.763879000000000E-05 8.485707000000000E-04 1.427027000000000E-04 9.610673000000000E-05 1.879394000000000E-05 1.454378000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731251000000000E-05 0.000000000000000E+00 2.239705000000000E-07 6.138848247530000E+40 6.098522968278000E+12 4.796795339573000E+12 + 269 1.312958530200000E+32 1.485427143200000E+34 4.877221865744911E+14 1.044994817113885E+08 1.001405350561279E-11 4.727513280986146E+02 2.080652893157643E+04 2.080710314711021E+04 3.589852296827800E-01 5.951438764122993E+02 1.492366865240000E+34 4.900603652702952E+14 7.177601000000000E-01 0.000000000000000E+00 2.764130000000000E-01 6.439877000000000E-04 1.021768000000000E-03 2.457496000000000E-03 4.358313000000000E-04 4.762935000000000E-05 8.485694000000000E-04 1.427017000000000E-04 9.610647000000000E-05 1.879390000000000E-05 1.454375000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731248000000000E-05 0.000000000000000E+00 1.741930000000000E-07 6.208848247529999E+40 6.028407793031000E+12 4.746680164326000E+12 + 270 1.387936650120000E+32 1.499306587280000E+34 4.923985439660991E+14 1.055294817113885E+08 9.876655540599195E-12 4.640649183684646E+02 2.066386805654490E+04 2.071093161477246E+04 3.585806226729000E-01 5.785827868468149E+02 1.506397786900000E+34 4.947660114515760E+14 7.178049000000000E-01 0.000000000000000E+00 2.763695000000000E-01 6.430662000000000E-04 1.021607000000000E-03 2.457404000000000E-03 4.357695000000000E-04 4.762182000000000E-05 8.485685000000000E-04 1.427009000000000E-04 9.610627000000000E-05 1.879387000000000E-05 1.454374000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731247000000000E-05 0.000000000000000E+00 1.363253000000000E-07 6.278848247530000E+40 5.948407793031000E+12 4.686564989079000E+12 + 271 1.418238332640000E+32 1.513488986520000E+34 4.971334789370529E+14 1.065694241237650E+08 9.763598399519936E-12 4.514178609952075E+02 2.056835856437901E+04 2.056835856437901E+04 3.581748639105499E-01 5.620249718599633E+02 1.520652394100000E+34 4.995160300575345E+14 7.178403000000000E-01 0.000000000000000E+00 2.763351000000000E-01 6.423552000000000E-04 1.021474000000000E-03 2.457338000000000E-03 4.357217000000000E-04 4.761565000000000E-05 8.485677000000000E-04 1.427003000000000E-04 9.610612000000000E-05 1.879385000000000E-05 1.454372000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731245000000000E-05 0.000000000000000E+00 1.070375000000000E-07 6.348963422776999E+40 5.878292617784000E+12 4.626564989079000E+12 + 272 1.432689074960000E+32 1.527815801680000E+34 5.018985811780163E+14 1.076344241237650E+08 9.629636807388227E-12 4.391700931091861E+02 2.042676697996094E+04 2.042733071488009E+04 3.577691051482000E-01 5.456089283359837E+02 1.535357455640000E+34 5.043887473690821E+14 7.178681000000000E-01 0.000000000000000E+00 2.763081000000000E-01 6.418140000000000E-04 1.021366000000000E-03 2.457295000000000E-03 4.356852000000000E-04 4.761061000000000E-05 8.485671000000000E-04 1.426999000000000E-04 9.610600000000000E-05 1.879383000000000E-05 1.454371000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731244000000000E-05 0.000000000000000E+00 8.468129000000000E-08 6.428963422777000E+40 5.798177442537000E+12 4.566449813832000E+12 + 273 1.508331189840000E+32 1.542899109600000E+34 5.068789135601477E+14 1.087244817113885E+08 9.519124729621375E-12 4.272014888378351E+02 2.028670995934933E+04 2.028670995934933E+04 3.575621946333800E-01 5.286581309434148E+02 1.550563895040000E+34 5.093973290676037E+14 7.178907000000000E-01 0.000000000000000E+00 2.762860000000000E-01 6.413881000000000E-04 1.021274000000000E-03 2.457267000000000E-03 4.356563000000000E-04 4.760631000000000E-05 8.485666999999999E-04 1.426995000000000E-04 9.610591000000000E-05 1.879382000000000E-05 1.454370000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731243000000000E-05 0.000000000000000E+00 6.701723000000000E-08 6.509078598024000E+40 5.728062267290000E+12 4.506334638585000E+12 + 274 1.532953109600000E+32 1.558228680480000E+34 5.119157445750596E+14 1.098194817113885E+08 9.367202470367385E-12 4.155590622603898E+02 2.014705723029059E+04 2.014705723029059E+04 3.571552841185600E-01 5.118078680473429E+02 1.565908484380000E+34 5.144317491908804E+14 7.179103999999999E-01 0.000000000000000E+00 2.762669000000000E-01 6.410340000000000E-04 1.021189000000000E-03 2.457249000000000E-03 4.356323000000000E-04 4.760237000000000E-05 8.485663000000000E-04 1.426992000000000E-04 9.610583999999999E-05 1.879381000000000E-05 1.454370000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731243000000000E-05 0.000000000000000E+00 5.226638000000000E-08 6.599078598024000E+40 5.637947092043000E+12 4.446219463338000E+12 + 275 1.535948248040000E+32 1.573588288280000E+34 5.169477538067012E+14 1.109094817113885E+08 9.217431260754642E-12 4.042339241291529E+02 2.000836586385659E+04 2.000836586385659E+04 3.566472218512700E-01 4.952664868968365E+02 1.581213090800000E+34 5.194390331774114E+14 7.179265000000000E-01 0.000000000000000E+00 2.762511000000000E-01 6.407602000000001E-04 1.021116000000000E-03 2.457244000000000E-03 4.356135000000000E-04 4.759893000000000E-05 8.485660000000000E-04 1.426990000000000E-04 9.610578000000000E-05 1.879380000000000E-05 1.454369000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731242000000000E-05 0.000000000000000E+00 4.077885000000000E-08 6.698963422777000E+40 5.547716741549000E+12 4.366104288091000E+12 + 276 1.524970847840000E+32 1.588837893320000E+34 5.219303125481217E+14 1.119945392990120E+08 9.049194180173971E-12 3.968064643144239E+02 1.987062924207356E+04 1.991588613752964E+04 3.562391595839800E-01 4.792050338992606E+02 1.596534605420000E+34 5.244402051334036E+14 7.179348000000000E-01 0.000000000000000E+00 2.762431000000000E-01 6.406262000000000E-04 1.021076000000000E-03 2.457243000000000E-03 4.356043000000000E-04 4.759709000000000E-05 8.485659000000000E-04 1.426989000000000E-04 9.610575000000000E-05 1.879380000000000E-05 1.454369000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731242000000000E-05 0.000000000000000E+00 3.512459000000000E-08 6.788963422777000E+40 5.447716741549000E+12 4.295989112844000E+12 + 277 1.539340430800000E+32 1.604231317520000E+34 5.269500977186855E+14 1.131044817113885E+08 8.904507571480193E-12 3.859923865386089E+02 1.973384079252554E+04 1.977878614170469E+04 3.558310973166900E-01 4.633005705358127E+02 1.612192593220000E+34 5.295419582251905E+14 7.179386000000000E-01 0.000000000000000E+00 2.762394000000000E-01 6.405676000000000E-04 1.021057000000000E-03 2.457244000000000E-03 4.356002000000000E-04 4.759621000000000E-05 8.485658000000000E-04 1.426988000000000E-04 9.610573000000000E-05 1.879380000000000E-05 1.454369000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731242000000000E-05 0.000000000000000E+00 3.263970000000000E-08 6.898848247530000E+40 5.357486391055000E+12 4.225873937597000E+12 + 278 1.592252355120000E+32 1.620153868920000E+34 5.321338187316951E+14 1.142294817113885E+08 8.741981991906559E-12 3.754730224044765E+02 1.959799398804079E+04 1.964262993561248E+04 3.554299455642200E-01 4.471946500249896E+02 1.628141402060000E+34 5.347308857409688E+14 7.179541000000000E-01 0.000000000000000E+00 2.762242000000000E-01 6.403365000000000E-04 1.020978000000000E-03 2.457253000000000E-03 4.355841000000000E-04 4.759252000000000E-05 8.485655000000000E-04 1.426986000000000E-04 9.610568000000000E-05 1.879379000000000E-05 1.454368000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731242000000000E-05 0.000000000000000E+00 2.279044000000000E-08 7.008733072283001E+40 5.267371215808000E+12 4.145758762350000E+12 + 279 1.597501257160000E+32 1.636128935200000E+34 5.373279527502424E+14 1.153645392990120E+08 8.582422838472009E-12 3.619368127050897E+02 1.946308234638028E+04 1.946308234638028E+04 3.550299455642200E-01 4.313687623315765E+02 1.644282566540000E+34 5.399781066275983E+14 7.179643999999999E-01 0.000000000000000E+00 2.762141000000000E-01 6.401971000000000E-04 1.020921000000000E-03 2.457267000000000E-03 4.355743000000000E-04 4.758985000000000E-05 8.485654000000000E-04 1.426985000000000E-04 9.610564999999999E-05 1.879378000000000E-05 1.454368000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.676256000000000E-08 7.118733072282999E+40 5.167256040561000E+12 4.065758762350000E+12 + 280 1.630734423720000E+32 1.652436197880000E+34 5.426282605049542E+14 1.165294817113885E+08 8.425775967797631E-12 3.520730297415591E+02 1.932909942992841E+04 1.932909942992841E+04 3.546287938117501E-01 4.155320535069220E+02 1.660812122320000E+34 5.453485330189642E+14 7.179726000000000E-01 0.000000000000000E+00 2.762060000000000E-01 6.400988000000000E-04 1.020872000000000E-03 2.457283000000000E-03 4.355672000000000E-04 4.758757000000000E-05 8.485653000000000E-04 1.426984000000000E-04 9.610563000000001E-05 1.879378000000000E-05 1.454368000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.243567000000000E-08 7.248617897036000E+40 5.067140865314000E+12 3.995528411856000E+12 + 281 1.675186479360000E+32 1.669188046760000E+34 5.480688055329746E+14 1.177044817113885E+08 8.252963179755076E-12 3.424780622478486E+02 1.919603884538586E+04 1.919603884538586E+04 3.543276420592800E-01 3.996232616068646E+02 1.677587543220000E+34 5.507962804364869E+14 7.179797999999999E-01 0.000000000000000E+00 2.761990000000000E-01 6.400256000000000E-04 1.020826000000000E-03 2.457303000000000E-03 4.355618000000000E-04 4.758545000000000E-05 8.485652000000000E-04 1.426983000000000E-04 9.610561000000000E-05 1.879378000000000E-05 1.454368000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 9.132207000000000E-09 7.388502721788999E+40 4.967025690067000E+12 3.915528411856000E+12 + 282 1.679905259600000E+32 1.685987039680000E+34 5.535237553399992E+14 1.188745392990120E+08 8.102089147773675E-12 3.331445842561093E+02 1.902004850341077E+04 1.906389424346434E+04 3.539264903068100E-01 3.839816664470689E+02 1.694306073000000E+34 5.562232907014179E+14 7.179858000000000E-01 0.000000000000000E+00 2.761931000000000E-01 6.399740000000000E-04 1.020785000000000E-03 2.457324000000000E-03 4.355579000000000E-04 4.758353000000000E-05 8.485651000000001E-04 1.426983000000000E-04 9.610560000000000E-05 1.879378000000000E-05 1.454368000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 6.719011000000000E-09 7.538387546541999E+40 4.876795339573000E+12 3.835413236609000E+12 + 283 1.663794927720000E+32 1.702625106320000E+34 5.589228260628365E+14 1.200545392990120E+08 7.936150726700768E-12 3.211347252203488E+02 1.888911541048179E+04 1.888963789681733E+04 3.535264903068100E-01 3.688345241832790E+02 1.711117200040000E+34 5.616832642158431E+14 7.179911000000000E-01 0.000000000000000E+00 2.761878000000000E-01 6.399383000000000E-04 1.020746000000000E-03 2.457348000000000E-03 4.355550000000000E-04 4.758171000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610559000000000E-05 1.879378000000000E-05 1.454368000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 4.953204000000000E-09 7.688272371295001E+40 4.776680164326000E+12 3.765298061362000E+12 + 284 1.698418545080000E+32 1.719609293760000E+34 5.644437023688498E+14 1.212495392990120E+08 7.773380159497364E-12 3.123437050116443E+02 1.875908365462464E+04 1.875908365462464E+04 3.532253385543400E-01 3.536762580376234E+02 1.728226408700000E+34 5.672438808798751E+14 7.179958000000000E-01 0.000000000000000E+00 2.761832000000000E-01 6.399138000000000E-04 1.020710000000000E-03 2.457372000000000E-03 4.355529000000000E-04 4.758001000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610559000000000E-05 1.879378000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 3.650244000000000E-09 7.858157196048000E+40 4.686449813832000E+12 3.685182886115000E+12 + 285 1.723418213920000E+32 1.736843523640000E+34 5.700440593909004E+14 1.224494817113885E+08 7.613722036435702E-12 3.038314719142880E+02 1.858761347427467E+04 1.862994703107855E+04 3.528241868018700E-01 3.386326775058995E+02 1.745420158360000E+34 5.728372953709040E+14 7.180008000000000E-01 0.000000000000000E+00 2.761782000000000E-01 6.398946000000000E-04 1.020669000000000E-03 2.457401000000000E-03 4.355510000000000E-04 4.757812000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.523076000000000E-09 8.038042020801000E+40 4.576449813832000E+12 3.605067710868000E+12 + 286 1.715326944000000E+32 1.753996793080000E+34 5.756305313509074E+14 1.236594241237650E+08 7.440412564016443E-12 2.928415909213830E+02 1.845914665005282E+04 1.845914665005282E+04 3.525230350494000E-01 3.239804982314289E+02 1.762732961640000E+34 5.784834021067052E+14 7.180042000000000E-01 0.000000000000000E+00 2.761749000000000E-01 6.398845999999999E-04 1.020641000000000E-03 2.457423000000000E-03 4.355500000000000E-04 4.757679000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.872279000000000E-09 8.237926845554000E+40 4.476219463338000E+12 3.524952535621000E+12 + 287 1.747241270960000E+32 1.771469130200000E+34 5.813362728625030E+14 1.249694817113885E+08 7.271263908499836E-12 2.822846544049850E+02 1.829041808828153E+04 1.829041808828153E+04 3.521230350494000E-01 3.093723161892444E+02 1.781542637920000E+34 5.846394379033002E+14 7.180071000000000E-01 0.000000000000000E+00 2.761719000000000E-01 6.398790000000000E-04 1.020615000000000E-03 2.457443000000000E-03 4.355492000000000E-04 4.757558000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.412427000000000E-09 8.457581319813000E+40 4.376104288091000E+12 3.444837360374000E+12 + 288 2.014693587200000E+32 1.791616145640000E+34 5.879426029440971E+14 1.263745392990120E+08 7.105538835576439E-12 2.720741428391879E+02 1.812273052731387E+04 1.812273052731387E+04 3.518207315444600E-01 2.928580712103561E+02 1.801768724060000E+34 5.912654434450636E+14 7.180103000000000E-01 0.000000000000000E+00 2.761687000000000E-01 6.398766000000000E-04 1.020586000000000E-03 2.457466000000000E-03 4.355487000000000E-04 4.757426000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.059694000000000E-09 8.727350969319000E+40 4.275989112844000E+12 3.364722185127000E+12 + 289 2.030515684000000E+32 1.811921302480000E+34 5.945882839460300E+14 1.276995392990120E+08 6.943797025072309E-12 2.622329554460218E+02 1.795608365713073E+04 1.795658033514591E+04 3.515195797919899E-01 2.766375047269992E+02 1.820891798800000E+34 5.975240627866030E+14 7.180136000000000E-01 0.000000000000000E+00 2.761655000000000E-01 6.398764000000000E-04 1.020556000000000E-03 2.457491000000000E-03 4.355482000000000E-04 4.757286000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 7.784835000000000E-10 9.017120618825001E+40 4.175873937597000E+12 3.294491834633000E+12 + 290 1.794100457520000E+32 1.829862295120000E+34 6.004598416271758E+14 1.289544817113885E+08 6.817058446113028E-12 2.527477334095684E+02 1.775103305976443E+04 1.779195341709587E+04 3.513184280395200E-01 2.625760183627920E+02 1.839053592640000E+34 6.034586835597544E+14 7.180166000000000E-01 0.000000000000000E+00 2.761625000000000E-01 6.398778000000000E-04 1.020528000000000E-03 2.457514000000000E-03 4.355479000000000E-04 4.757155000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 5.767057000000000E-10 9.296775093084000E+40 4.105643587103000E+12 3.234491834633000E+12 + 291 1.838271439200000E+32 1.848244890160000E+34 6.064575254923330E+14 1.302244817113885E+08 6.708260321283613E-12 2.414027866547013E+02 1.758829061046222E+04 1.758877822308198E+04 3.511172762870500E-01 2.484498256109301E+02 1.857545892060000E+34 6.094768038206372E+14 7.180195000000000E-01 0.000000000000000E+00 2.761596000000000E-01 6.398803000000000E-04 1.020501000000000E-03 2.457538000000000E-03 4.355476000000000E-04 4.757028000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 4.282668000000000E-10 9.606429567343000E+40 4.045528411856000E+12 3.184376659386000E+12 + 292 1.860188842640000E+32 1.866846893960000E+34 6.124960821489414E+14 1.314844817113885E+08 6.616219539155870E-12 2.326415429784213E+02 1.742704019290347E+04 1.742704019290347E+04 3.509161245345800E-01 2.344305439387714E+02 1.876067233800000E+34 6.154593366678572E+14 7.180225000000000E-01 0.000000000000000E+00 2.761566000000000E-01 6.398839000000000E-04 1.020473000000000E-03 2.457562000000000E-03 4.355474000000000E-04 4.756896000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 3.103360000000000E-10 9.945853691108001E+40 3.985528411856000E+12 3.144261484139000E+12 + 293 1.844079306440000E+32 1.885287573640000E+34 6.184225911867729E+14 1.327194241237650E+08 6.540484300362243E-12 2.221990915963413E+02 1.722803212508339E+04 1.722803212508339E+04 3.508138210296400E-01 2.208328646026258E+02 1.894462161880000E+34 6.213361003800755E+14 7.180252000000000E-01 0.000000000000000E+00 2.761539000000000E-01 6.398878000000000E-04 1.020447000000000E-03 2.457585000000000E-03 4.355473000000000E-04 4.756776000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.306589000000000E-10 1.029539299012000E+41 3.945413236609000E+12 3.104261484139000E+12 + 294 1.834904320360000E+32 1.903636750120000E+34 6.242496095733781E+14 1.339544241237650E+08 6.480328437510080E-12 2.121984850952040E+02 1.703082447210035E+04 1.703082447210035E+04 3.508126692771700E-01 2.075864521064225E+02 1.913178246300000E+34 6.272505049824996E+14 7.180279000000001E-01 0.000000000000000E+00 2.761512000000000E-01 6.398924000000000E-04 1.020420000000000E-03 2.457608000000000E-03 4.355472000000000E-04 4.756652000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.686132000000000E-10 1.069424123765000E+41 3.905413236609000E+12 3.074261484139000E+12 + 295 1.908313359320000E+32 1.922719742480000E+34 6.302514003916211E+14 1.351944241237650E+08 6.421107008235134E-12 2.026738841063838E+02 1.683587423645393E+04 1.683634205230926E+04 3.508103657722300E-01 1.940675256478968E+02 1.932263625700000E+34 6.332117823110782E+14 7.180306000000000E-01 0.000000000000000E+00 2.761485000000000E-01 6.398972000000000E-04 1.020394000000000E-03 2.457630000000000E-03 4.355471000000000E-04 4.756532000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.237472000000000E-10 1.109424123765000E+41 3.875298061362000E+12 3.044261484139000E+12 + 296 1.908780423480000E+32 1.941807508920000E+34 6.361721642305352E+14 1.364244241237650E+08 6.376904418506439E-12 1.935520567017644E+02 1.664315557770157E+04 1.664361803851308E+04 3.509080622672900E-01 1.808192348969561E+02 1.951421710360000E+34 6.391159295675016E+14 7.180331000000000E-01 0.000000000000000E+00 2.761459000000000E-01 6.399021000000000E-04 1.020370000000000E-03 2.457652000000000E-03 4.355471000000000E-04 4.756416000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 9.119423000000000E-11 1.159308948518000E+41 3.845298061362000E+12 3.024261484139000E+12 + 297 1.922824772240000E+32 1.961035911800000E+34 6.420596949044679E+14 1.376594241237650E+08 6.347416806700321E-12 1.831697735076128E+02 1.641525903806701E+04 1.641571620513339E+04 3.511057587623501E-01 1.676988290078251E+02 1.970950780820000E+34 6.450444302576451E+14 7.180356000000000E-01 0.000000000000000E+00 2.761435000000000E-01 6.399070000000000E-04 1.020346000000000E-03 2.457673000000000E-03 4.355470000000000E-04 4.756305000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 6.794119000000000E-11 1.209193773271000E+41 3.825298061362000E+12 3.014146308892000E+12 + 298 1.982986534880000E+32 1.980865649840000E+34 6.480291656108222E+14 1.388894241237650E+08 6.332818153153265E-12 1.733220465318584E+02 1.615369794937336E+04 1.619048413506687E+04 3.514034552574100E-01 1.544151689131915E+02 1.990737850520000E+34 6.509494901774670E+14 7.180380000000000E-01 0.000000000000000E+00 2.761411000000000E-01 6.399121000000000E-04 1.020322000000000E-03 2.457694000000000E-03 4.355470000000000E-04 4.756194000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 5.034039000000000E-11 1.259078598024000E+41 3.815298061362000E+12 3.004146308892000E+12 + 299 1.974439141400000E+32 2.000610051200000E+34 6.538698147441118E+14 1.400894241237650E+08 6.332818153153265E-12 1.625213186022966E+02 1.593206090454988E+04 1.593206090454988E+04 3.519000000000000E-01 1.413998182294097E+02 2.010289498400000E+34 6.566869668888408E+14 7.180404000000000E-01 0.000000000000000E+00 2.761387000000000E-01 6.399171000000000E-04 1.020299000000000E-03 2.457715000000000E-03 4.355470000000000E-04 4.756085000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 3.702245000000000E-11 1.318963422777000E+41 3.815182886115000E+12 2.994261484139000E+12 + 300 1.935817033120000E+32 2.019968945600000E+34 6.595041190335699E+14 1.412793665361415E+08 6.318253075577632E-12 1.523938292132111E+02 1.564170561871649E+04 1.567776347411206E+04 3.560539299012001E-01 1.287254281593345E+02 2.029691160600000E+34 6.623025700470149E+14 7.180427000000000E-01 0.000000000000000E+00 2.761364000000000E-01 6.399220000000000E-04 1.020277000000000E-03 2.457735000000000E-03 4.355470000000000E-04 4.755982000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.754423000000000E-11 1.388733072283000E+41 3.805182886115000E+12 2.994146308892000E+12 + 301 1.944548228680000E+32 2.039413375600000E+34 6.651010210604600E+14 1.424893089485180E+08 6.274944768187573E-12 1.415875107355482E+02 1.535707451094404E+04 1.539204363540466E+04 3.615940387727600E-01 1.160271059317083E+02 2.049250964200000E+34 6.679197265219762E+14 7.180449000000000E-01 0.000000000000000E+00 2.761342000000000E-01 6.399269000000000E-04 1.020255000000000E-03 2.457754000000000E-03 4.355470000000000E-04 4.755880000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.032567000000000E-11 1.448617897036000E+41 3.785182886115000E+12 2.974146308892000E+12 + 302 1.967451280720000E+32 2.059088552800000E+34 6.707384319834926E+14 1.437143089485180E+08 6.202931960428030E-12 1.303591906024036E+02 1.504252440471625E+04 1.507720100476176E+04 3.671329958918500E-01 1.031901290023247E+02 2.068758054000000E+34 6.735282113548548E+14 7.180471000000000E-01 0.000000000000000E+00 2.761320000000000E-01 6.399317000000000E-04 1.020233000000000E-03 2.457773000000000E-03 4.355470000000000E-04 4.755780000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.504142000000000E-11 1.528387546542000E+41 3.735182886115000E+12 2.934146308892000E+12 + 303 1.933972646880000E+32 2.078427555200000E+34 6.763179907262170E+14 1.449692513608945E+08 6.047973889216569E-12 1.189215337263576E+02 1.470094575345497E+04 1.473483493338698E+04 3.727995950702200E-01 9.061119604247229E+01 2.088179608200000E+34 6.791798741008835E+14 7.180492000000001E-01 0.000000000000000E+00 2.761299000000000E-01 6.399363000000000E-04 1.020213000000000E-03 2.457791000000000E-03 4.355470000000000E-04 4.755684000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.120674000000000E-11 1.618042020801000E+41 3.645182886115000E+12 2.864031133645000E+12 + 304 1.950389514480000E+32 2.097931661200000E+34 6.820417574755498E+14 1.462791361856475E+08 5.856119192174639E-12 1.065228711469277E+02 1.433449212815466E+04 1.433449212815466E+04 3.786007468226900E-01 7.792205889014323E+01 2.107687692600000E+34 6.849812994935079E+14 7.180512999999999E-01 0.000000000000000E+00 2.761278000000000E-01 6.399410000000000E-04 1.020192000000000E-03 2.457810000000000E-03 4.355470000000000E-04 4.755588000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 8.283237999999999E-12 1.717811670307000E+41 3.524952535621000E+12 2.754146308892000E+12 + 305 1.951231343920000E+32 2.117443724000000E+34 6.879208415114660E+14 1.476290785980240E+08 5.592716781354092E-12 9.454319066698343E+01 1.388136218457989E+04 1.391296201549524E+04 3.844007468226900E-01 6.528416979971308E+01 2.126988900200000E+34 6.908945774357339E+14 7.180534000000000E-01 0.000000000000000E+00 2.761257000000000E-01 6.399458000000000E-04 1.020171000000000E-03 2.457828000000000E-03 4.355470000000000E-04 4.755490000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 6.066939000000000E-12 1.847350969319000E+41 3.374722185127000E+12 2.624031133645000E+12 + 306 1.909035240000000E+32 2.136534076400000E+34 6.938683133600018E+14 1.490240785980240E+08 5.316463381917126E-12 8.164961140831559E+01 1.338119639355952E+04 1.341165322773734E+04 3.903972915652800E-01 5.294119955913597E+01 2.146122020400000E+34 6.969755708548940E+14 7.180550999999999E-01 0.000000000000000E+00 2.761240000000000E-01 6.399496000000000E-04 1.020154000000000E-03 2.457843000000000E-03 4.355470000000000E-04 4.755413000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 4.696671000000000E-12 2.006775093084000E+41 3.204491834633000E+12 2.474031133645000E+12 + 307 1.917465270680000E+32 2.155709964400000E+34 7.000828283497861E+14 1.505189634227770E+08 5.019065079074712E-12 6.799919985071759E+01 1.278156863974641E+04 1.281103319847005E+04 3.969869257930500E-01 4.055998588969702E+01 2.165571423400000E+34 7.034215879713440E+14 7.180567000000000E-01 0.000000000000000E+00 2.761224000000000E-01 6.399531000000000E-04 1.020139000000000E-03 2.457857000000000E-03 4.355470000000000E-04 4.755341000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 3.653197000000000E-12 2.166544742590000E+41 3.024261484139000E+12 2.284376659386000E+12 + 308 1.972342723520000E+32 2.175432882400000E+34 7.067603475929019E+14 1.520238482475300E+08 4.716532452047452E-12 5.312850394451197E+01 1.204279368370835E+04 1.204279368370835E+04 4.045684977535300E-01 2.781950894975513E+01 2.184238076200000E+34 7.098679434427529E+14 7.180586000000000E-01 0.000000000000000E+00 2.761205000000000E-01 6.399574000000001E-04 1.020120000000000E-03 2.457873000000000E-03 4.355469000000000E-04 4.755253000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.648717000000000E-12 2.860555629746000E+41 2.834146308892000E+12 2.084607009880000E+12 + 309 1.761064420680000E+32 2.193043270000000E+34 7.129755392926038E+14 1.534037906599065E+08 4.432235490223580E-12 3.466037809777733E+01 1.081702981253829E+04 1.081702981253829E+04 4.177890268331000E-01 1.631192501085550E+01 2.200666879000000E+34 7.157803137081032E+14 7.180606000000000E-01 0.000000000000000E+00 2.761185000000000E-01 6.399619000000000E-04 1.020101000000000E-03 2.457891000000000E-03 4.355469000000000E-04 4.755162000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.895124000000000E-12 2.803435010920999E+41 2.663915958398000E+12 1.914491834633000E+12 + 310 1.524716429160000E+32 2.208290488000000E+34 7.185850881236028E+14 1.547988482475300E+08 4.193945928773884E-12 2.070776236116316E+01 9.497719359226794E+03 9.498052076185006E+03 3.260350205407500E-01 8.640493463721265E+00 2.216722706800000E+34 7.218076149864162E+14 7.180624000000000E-01 0.000000000000000E+00 2.761167000000000E-01 6.399661000000000E-04 1.020082000000000E-03 2.457907000000000E-03 4.355469000000000E-04 4.755077000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.377684000000000E-12 3.250670804993000E+41 2.523685607904000E+12 1.793915958398000E+12 + 311 1.686442168640000E+32 2.225154925600000E+34 7.250301418492299E+14 1.563741937732710E+08 3.968467490564625E-12 1.123664980038017E+01 8.151527054482564E+03 8.133090287839122E+03 1.475083774516401E-01 4.861891442668658E+00 2.234373872999999E+34 7.286968430810096E+14 7.180641000000001E-01 0.000000000000000E+00 2.761150000000000E-01 6.399699000000000E-04 1.020066000000000E-03 2.457922000000000E-03 4.355469000000000E-04 4.754999000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.025219000000000E-12 3.471131505981000E+41 2.383455257410000E+12 1.406334638585000E+12 + 312 1.843730002920000E+32 2.243592820400000E+34 7.323635443127894E+14 1.580895392990120E+08 3.720684344873885E-12 6.617527539387686E+00 7.151380913080701E+03 7.119079981914502E+03 7.539840362836311E-02 2.796232455648177E+00 2.252754081000000E+34 7.362159092498396E+14 7.180664000000000E-01 0.000000000000000E+00 2.761127000000000E-01 6.399751000000000E-04 1.020043000000000E-03 2.457942000000000E-03 4.355469000000000E-04 4.754895000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 6.815712000000000E-13 3.621477031722000E+41 2.243224906916000E+12 5.951550378563004E+11 + 313 1.832238792360000E+32 2.261915341600000E+34 7.400682741868899E+14 1.599097696495060E+08 3.472344666761586E-12 4.244903021195637E+00 6.426316784073801E+03 6.382784968453208E+03 4.310897261238907E-02 1.638192090342143E+00 2.271233749000000E+34 7.441875006301536E+14 7.180679000000000E-01 0.000000000000000E+00 2.761112000000000E-01 6.399785000000000E-04 1.020029000000000E-03 2.457955000000000E-03 4.355469000000000E-04 4.754827000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 5.263846000000000E-13 3.685738515861000E+41 2.092994556422000E+12 1.936197881421005E+11 + 314 1.863733994880000E+32 2.280552156400000E+34 7.483067270734172E+14 1.620449424123765E+08 3.233127465560434E-12 3.088948821626517E+00 5.974584253250002E+03 5.906985590889662E+03 2.178420037121902E-02 1.056131415585039E+00 2.291721514400000E+34 7.535203028750996E+14 7.180695000000000E-01 0.000000000000000E+00 2.761096000000000E-01 6.399821000000000E-04 1.020013000000000E-03 2.457969000000000E-03 4.355469000000000E-04 4.754754000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 4.009097000000000E-13 3.708157196048000E+41 1.952764205928000E+12 7.811137436215028E+10 + 315 2.233871600000000E+32 2.302890872400000E+34 7.587338786767820E+14 1.644249424123765E+08 2.982791020075351E-12 2.346457652120346E+00 5.646683924755707E+03 5.519516399238341E+03 1.179564721993401E-02 6.882933167623022E-01 2.313416724200000E+34 7.638992304394555E+14 7.180714000000000E-01 0.000000000000000E+00 2.761077000000000E-01 6.399864000000000E-04 1.019994000000000E-03 2.457985000000000E-03 4.355470000000000E-04 4.754666000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.869702000000000E-13 3.719193773271000E+41 1.792649030681000E+12 3.285052432638007E+10 + 316 2.105182295200000E+32 2.323942576000000E+34 7.690645822021290E+14 1.667149424123765E+08 2.726608767989430E-12 1.791313726928461E+00 5.377070728418233E+03 5.160609090703876E+03 6.614509484956605E-03 5.016061690230696E-01 2.333175447800000E+34 7.739192242723935E+14 7.180728000000000E-01 0.000000000000000E+00 2.761063000000000E-01 6.399897000000000E-04 1.019980000000000E-03 2.457998000000000E-03 4.355470000000000E-04 4.754601000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.261538000000000E-13 3.739308948517999E+41 1.642303504940000E+12 1.470697355169002E+10 + 317 1.846659298840000E+32 2.342408319600000E+34 7.787738663426581E+14 1.691600000000000E+08 2.492429179128024E-12 1.571172926593511E+00 5.252846523612103E+03 4.994971385964735E+03 4.965018318037602E-03 3.813028784017606E-01 2.352849630400000E+34 7.846334109305780E+14 7.180742000000000E-01 0.000000000000000E+00 2.761049000000000E-01 6.399928000000000E-04 1.019967000000000E-03 2.458010000000000E-03 4.355470000000000E-04 4.754538000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.784437000000000E-13 3.739424123764999E+41 1.502188329693000E+12 9.547626781050007E+09 + 318 2.088224365200000E+32 2.363290941200000E+34 7.904929555184979E+14 1.717450000000000E+08 2.257474362966191E-12 1.366967041975215E+00 5.120454264721783E+03 4.824414348480403E+03 3.650885818404802E-03 2.846266036563404E-01 2.372344785000000E+34 7.959667976478009E+14 7.180761000000000E-01 0.000000000000000E+00 2.761029000000000E-01 6.399972000000000E-04 1.019947000000000E-03 2.458027000000000E-03 4.355470000000000E-04 4.754448000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.291385000000000E-13 3.749424123765001E+41 1.361957979199000E+12 6.007593927187004E+09 + 319 1.810734346840000E+32 2.381398628800000E+34 8.014406397771036E+14 1.740950000000000E+08 2.030592729854148E-12 1.211492523831826E+00 5.003337917278094E+03 4.681204265869916E+03 2.825252488089101E-03 2.217744540987975E-01 2.388803425800000E+34 8.062923915935224E+14 7.180784000000000E-01 0.000000000000000E+00 2.761007000000000E-01 6.400024000000000E-04 1.019925000000000E-03 2.458047000000000E-03 4.355470000000000E-04 4.754343000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 8.474055000000000E-14 3.749539299012001E+41 1.221727628705000E+12 3.992194633380002E+09 + 320 1.480897138040000E+32 2.396208222800000E+34 8.111441434099412E+14 1.763550000000000E+08 1.839174034575773E-12 1.094462306253461E+00 4.922929686298422E+03 4.563867065135245E+03 2.323052010502701E-03 1.802903949040595E-01 2.403423051200000E+34 8.162092941496832E+14 7.180795000000000E-01 0.000000000000000E+00 2.760996000000000E-01 6.400050000000000E-04 1.019914000000000E-03 2.458057000000000E-03 4.355470000000000E-04 4.754292000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 7.018866000000000E-14 3.759424123765001E+41 1.111497278211000E+12 2.888929233486001E+09 + 321 1.443066532440000E+32 2.410637879600000E+34 8.212744448894254E+14 1.787100000000000E+08 1.673488864741103E-12 1.016307069212987E+00 4.855116268346998E+03 4.480188489160044E+03 1.967110992406400E-03 1.469237604231093E-01 2.417631906800000E+34 8.265525091352436E+14 7.180807000000000E-01 0.000000000000000E+00 2.760984000000000E-01 6.400076000000000E-04 1.019903000000000E-03 2.458067000000000E-03 4.355470000000000E-04 4.754239000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 5.735616000000000E-14 3.759424123765001E+41 1.011382102964000E+12 2.166144781069001E+09 + 322 1.398794897240000E+32 2.424625934000000E+34 8.318305733810616E+14 1.811300000000000E+08 1.512247331903430E-12 9.524754890990977E-01 4.788369727402838E+03 4.408185233296133E+03 1.692632699947000E-03 1.198903523557817E-01 2.431201234600000E+34 8.371915200030125E+14 7.180825000000000E-01 0.000000000000000E+00 2.760966000000000E-01 6.400117000000000E-04 1.019885000000000E-03 2.458083000000000E-03 4.355470000000000E-04 4.754156000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 4.232309000000000E-14 3.759424123765001E+41 9.102784452417001E+11 1.657852163285001E+09 + 323 1.315132924720000E+32 2.437776535200000E+34 8.425524666249631E+14 1.836249424123765E+08 1.363398547365749E-12 9.009221604475486E-01 4.733427672991682E+03 4.347340257143995E+03 1.477179467185900E-03 9.828725947664393E-02 2.444083293800000E+34 8.481477091898645E+14 7.180839999999999E-01 0.000000000000000E+00 2.760951000000000E-01 6.400152000000000E-04 1.019870000000000E-03 2.458096000000000E-03 4.355470000000000E-04 4.754085000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 3.180035000000000E-14 3.759424123765001E+41 8.201747875194000E+11 1.282669277170000E+09 + 324 1.261212277080000E+32 2.450390052400000E+34 8.537429517547658E+14 1.862199424123765E+08 1.217967712946713E-12 8.523790315767288E-01 4.679116319284102E+03 4.287573915342970E+03 1.304405768382100E-03 8.050147204398442E-02 2.456394452600000E+34 8.595655119515219E+14 7.180849000000000E-01 0.000000000000000E+00 2.760942000000000E-01 6.400171000000000E-04 1.019861000000000E-03 2.458104000000000E-03 4.355470000000000E-04 4.754046000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.736099000000000E-14 3.759424123765001E+41 7.340596122724000E+11 1.005029739364800E+09 + 325 1.201005558520000E+32 2.462398852800000E+34 8.653880721482779E+14 1.888950000000000E+08 1.085482501830630E-12 8.138140964025817E-01 4.635964640494632E+03 4.238260791365670E+03 1.161092770566300E-03 6.581934205527994E-02 2.467994472400000E+34 8.713365083580791E+14 7.180862000000000E-01 0.000000000000000E+00 2.760929000000000E-01 6.400201000000000E-04 1.019848000000000E-03 2.458115000000000E-03 4.355470000000000E-04 4.753986000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 2.169155000000000E-14 3.759424123765001E+41 6.539329195007001E+11 7.926110591778002E+08 + 326 1.118946284440000E+32 2.473590092000000E+34 8.772849445678804E+14 1.916550000000000E+08 9.629923274610492E-13 7.841869231103412E-01 4.593336813717459E+03 4.199173717743914E+03 1.045044675818600E-03 5.384280398933856E-02 2.478899266800000E+34 8.834624172867055E+14 7.180871000000000E-01 0.000000000000000E+00 2.760920000000000E-01 6.400221000000000E-04 1.019840000000000E-03 2.458123000000000E-03 4.355470000000000E-04 4.753946000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.836719000000000E-14 3.769308948518001E+41 5.798407793031001E+11 6.279179830469000E+08 + 327 1.061848088720000E+32 2.484208441600000E+34 8.896398900055305E+14 1.947150000000000E+08 8.523595411831024E-13 7.557314663799076E-01 4.540757322002038E+03 4.160561679334914E+03 9.534774062086902E-04 4.379896695510757E-02 2.489843845200000E+34 8.969250422749346E+14 7.180879000000000E-01 0.000000000000000E+00 2.760912000000000E-01 6.400240000000000E-04 1.019832000000000E-03 2.458130000000000E-03 4.355470000000000E-04 4.753908000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.584723000000000E-14 3.769308948518001E+41 5.137371215808000E+11 4.987201604781001E+08 + 328 1.127071768600000E+32 2.495479248800000E+34 9.042101945443388E+14 1.980350000000000E+08 7.475423057241531E-13 5.949386204049487E-01 4.427311860729904E+03 3.919004349352575E+03 6.934938095993101E-04 3.624309455596839E-02 2.500701893400000E+34 9.115336327476921E+14 7.180889000000000E-01 0.000000000000000E+00 2.760902000000000E-01 6.400262000000000E-04 1.019822000000000E-03 2.458139000000000E-03 4.355470000000000E-04 4.753862000000000E-05 8.485650000000000E-04 1.426982000000000E-04 9.610557000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.309853000000000E-14 3.769308948518001E+41 4.506449813832001E+11 2.973150224647000E+08 + 329 1.044576064040000E+32 2.505924538000000E+34 9.188570709510455E+14 2.018300000000000E+08 6.570869271882204E-13 5.526779805534254E-01 4.386602602199499E+03 3.847474458663262E+03 6.241206417990301E-04 3.023458280883156E-02 2.511818537600000E+34 9.282280942570271E+14 7.181248000000000E-01 0.000000000000000E+00 2.760543000000000E-01 6.401174000000000E-04 1.019429000000000E-03 2.458487000000000E-03 4.355470000000000E-04 4.752032000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.109708000000000E-14 3.769308948518001E+41 3.955758762350000E+11 2.297621812791001E+08 + 330 1.178778436640000E+32 2.517712537200000E+34 9.375991175630090E+14 2.060300000000000E+08 5.722987890170614E-13 5.181698766314115E-01 4.336271796515957E+03 3.785957596456954E+03 5.543255907018202E-04 2.428713951862263E-02 2.523370816600000E+34 9.467450195556308E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769308948518001E+41 3.444952535621000E+11 1.742899627664000E+08 + 331 1.131731071760000E+32 2.529029096000000E+34 9.558909215482526E+14 2.087150000000000E+08 5.124314493491822E-13 4.858163894630835E-01 4.286634903719452E+03 3.725424320854375E+03 4.893800649608201E-04 1.969870975170847E-02 2.531236113400000E+34 9.587332720235661E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 3.084491834633000E+11 1.349674720748000E+08 + 332 4.414544035200000E+31 2.533443130800000E+34 9.615756224988799E+14 2.095350000000000E+08 5.112224384636575E-13 4.640077220471925E-01 4.257125916605112E+03 3.682880916692415E+03 4.456566249816400E-04 1.840321005844155E-02 2.534083653200000E+34 9.624480823641351E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 3.074376659386000E+11 1.198407793031000E+08 + 333 1.281317917160000E+31 2.534724175600000E+34 9.633205422293902E+14 2.099300000000000E+08 5.207577905869433E-13 4.596975213105257E-01 4.247334798697568E+03 3.674309582930252E+03 4.289621812791000E-04 1.801331468198611E-02 2.535389563000000E+34 9.642033899771960E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 3.134607009880000E+11 1.168177442537000E+08 + 334 1.329459143120000E+31 2.536054950400000E+34 9.650862377250020E+14 2.103449424123765E+08 5.019065079074713E-13 4.596975213105257E-01 4.247334798697568E+03 3.674309582930252E+03 4.281598777741601E-04 1.763376761114505E-02 2.536718348600000E+34 9.660835786742610E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 3.024261484139000E+11 1.117831916796000E+08 + 335 1.327689152960000E+31 2.537381746800000E+34 9.670809196235200E+14 2.108749424123765E+08 4.641120313497488E-13 4.554829891024932E-01 4.237566199736310E+03 3.665858905393333E+03 4.327783058136801E-04 1.723301100808722E-02 2.538148583400000E+34 9.684117642718200E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.794031133645000E+11 1.057371215808000E+08 + 336 1.532393746560000E+31 2.538915420000000E+34 9.697426089201201E+14 2.115400000000000E+08 4.422173479894812E-13 4.513070959579950E-01 4.237566199736310E+03 3.657427663875406E+03 4.313656365365100E-04 1.672513727997803E-02 2.539739943400000E+34 9.712457320393340E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.663915958398000E+11 1.006037207591700E+08 + 337 1.650637364320000E+31 2.540564466800000E+34 9.727488551585478E+14 2.122350000000000E+08 4.442585305252693E-13 4.471694876319656E-01 4.227820067929213E+03 3.649015813674861E+03 4.210103524179501E-04 1.616270838178665E-02 2.541358157600000E+34 9.742048674237604E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.673915958398000E+11 9.797607869989002E+07 + 338 1.586029540760000E+31 2.542151848400000E+34 9.756608796889730E+14 2.128850000000000E+08 4.473379835434599E-13 4.431239344117643E-01 4.218096351603249E+03 3.640723327449272E+03 4.102562200518601E-04 1.562814205282929E-02 2.542905755200000E+34 9.770421773702744E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.693915958398000E+11 9.555765066037001E+07 + 339 1.507508655640000E+31 2.543659662000000E+34 9.784234750515756E+14 2.134950000000000E+08 4.412002763125461E-13 4.390613497617441E-01 4.218096351603249E+03 3.632349896156398E+03 4.030193639728200E-04 1.513678730127732E-02 2.544340963000000E+34 9.797005916432176E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.653915958398000E+11 9.232540159121002E+07 + 340 1.364045562440000E+31 2.545022264000000E+34 9.809777082348596E+14 2.140650000000000E+08 4.311573319086086E-13 4.390077246639834E-01 4.208394999204243E+03 3.632250108933348E+03 3.976917219135401E-04 1.469870217499807E-02 2.545658808000000E+34 9.822025740710122E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.593800783151000E+11 8.890697355169003E+07 + 341 1.272877144800000E+31 2.546295352000000E+34 9.834274399071648E+14 2.146099424123765E+08 4.213429928290901E-13 4.349828776517639E-01 4.198715959296587E+03 3.623896165502279E+03 3.929675351116701E-04 1.429298096706840E-02 2.546915982400000E+34 9.846213195262530E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.543570432657000E+11 8.578509025476001E+07 + 342 1.241096293160000E+31 2.547536612800000E+34 9.858151991453412E+14 2.151198848247530E+08 4.193945928773884E-13 4.310475769881694E-01 4.198715959296587E+03 3.615660764350333E+03 3.863341342900400E-04 1.390599997059347E-02 2.548089610399999E+34 9.868696632514985E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.523685607904000E+11 8.366320695783001E+07 + 343 1.106063628480000E+31 2.548642608000000E+34 9.879241273576560E+14 2.155599424123765E+08 4.108050519331948E-13 4.309949306587486E-01 4.189059180562976E+03 3.615561435607927E+03 3.822122509931100E-04 1.357477968482643E-02 2.549089183400000E+34 9.888124151449882E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.473570432657000E+11 8.104708242325000E+07 + 344 8.937149371200000E+30 2.549535758800000E+34 9.897007029323206E+14 2.159450000000000E+08 4.023794343238645E-13 4.270435453835317E-01 4.189059180562976E+03 3.607245875060392E+03 3.792961264585301E-04 1.330356534975704E-02 2.549942550200001E+34 9.905315819656952E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.423455257410000E+11 7.872750263126001E+07 + 345 8.127562874000000E+30 2.550349341600000E+34 9.913624609990702E+14 2.163100000000000E+08 3.887074164428044E-13 4.231800720518846E-01 4.188945659895257E+03 3.599048312139686E+03 3.785915194486501E-04 1.305895576740995E-02 2.550743203200000E+34 9.921749583043410E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.343340082163000E+11 7.601252984915002E+07 + 346 7.877216086400000E+30 2.551137064800000E+34 9.929874556096119E+14 2.166699424123765E+08 3.798593554094787E-13 4.231283866262681E-01 4.179424611804135E+03 3.598949439771396E+03 3.766823054288901E-04 1.282638129227595E-02 2.551515012800000E+34 9.937820488015009E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.293224906916000E+11 7.398949479975002E+07 + 347 7.567085882000000E+30 2.551892960800000E+34 9.945766419933896E+14 2.170249424123765E+08 3.703589353142477E-13 4.231283866262681E-01 4.179311352226708E+03 3.598949439771396E+03 3.752753949140700E-04 1.260544859705386E-02 2.552255989800000E+34 9.953677995844050E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.233224906916000E+11 7.187912902752002E+07 + 348 7.251851390399999E+30 2.552619018800000E+34 9.961589571754204E+14 2.173850000000000E+08 3.553225964280579E-13 4.193003338310305E-01 4.179311352226708E+03 3.590770730722218E+03 3.758765466665400E-04 1.239406476746585E-02 2.552966134200000E+34 9.969558470183338E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.142994556422000E+11 6.926300449294001E+07 + 349 6.936895386799999E+30 2.553313249600000E+34 9.977527368612472E+14 2.177499424123765E+08 3.432699413000219E-13 4.192491222602444E-01 4.169812201938536E+03 3.590672085754065E+03 3.753730914091300E-04 1.218864618817734E-02 2.553643456800000E+34 9.985216774521931E+14 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 2.072994556422000E+11 6.704227294848001E+07 + 350 6.610433850400000E+30 2.553973664000000E+34 9.992906180431390E+14 2.180849424123765E+08 3.285759526661101E-13 4.154561652639854E-01 4.169699202850908E+03 3.582512187213712E+03 3.763765466665400E-04 1.199841005153422E-02 2.554268065600000E+34 1.000014214291593E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.982879381175000E+11 6.452499666143002E+07 + 351 5.890251947200001E+30 2.554562467200000E+34 1.000737810540048E+15 2.184000000000000E+08 3.137782430701549E-13 4.154054232037024E-01 4.169699202850908E+03 3.582413769122689E+03 3.777869124387700E-04 1.182681288812837E-02 2.554842944400000E+34 1.001462336776328E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.892649030681000E+11 6.211117563179001E+07 + 352 5.600192770799999E+30 2.555123421600000E+34 1.002186863012606E+15 2.187450000000000E+08 3.024285776527524E-13 4.116472402462065E-01 4.160221900002141E+03 3.574272637828196E+03 3.781892159437101E-04 1.166103391593160E-02 2.555400915000000E+34 1.002983371966567E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.822533855434000E+11 6.009735460215002E+07 + 353 5.551526992799999E+30 2.555678408400000E+34 1.003779880920528E+15 2.191200000000000E+08 2.829018423636236E-13 4.116472402462065E-01 4.160109160805202E+03 3.574272637828196E+03 3.816030369733501E-04 1.148901329021685E-02 2.555956896400000E+34 1.004585290261620E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.702533855434000E+11 5.708007831510001E+07 + 354 5.568043320400000E+30 2.556235384400000E+34 1.005390699602712E+15 2.194700000000000E+08 2.628063023139226E-13 4.115969633919283E-01 4.150653655148115E+03 3.574174446092502E+03 3.858249202702801E-04 1.132563885600747E-02 2.556480056000000E+34 1.006114421481604E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.582303504940000E+11 5.406049852311001E+07 + 355 4.909649947599999E+30 2.556724727600000E+34 1.006838143360495E+15 2.197900000000000E+08 2.527102322860231E-13 4.078732356628893E-01 4.150653655148115E+03 3.566052038880398E+03 3.863318307851000E-04 1.118428772077487E-02 2.556929615200000E+34 1.007558959062400E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.522188329693000E+11 5.224667749347001E+07 + 356 4.087262948400000E+30 2.557134502800000E+34 1.008279774764306E+15 2.201099424123765E+08 2.073112293237860E-13 4.078732356628893E-01 4.150541175244135E+03 3.566052038880398E+03 4.045251227351700E-04 1.106335654913741E-02 2.557334417400000E+34 1.009002556414888E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.251727628705000E+11 4.610982141443001E+07 + 357 3.999425844000000E+30 2.557534332000000E+34 1.009725338065470E+15 2.204399424123765E+08 2.304744710610029E-13 4.040355654928787E-01 4.150428954036755E+03 3.557655090411331E+03 3.892774959541201E-04 1.093363283117413E-02 2.557736235800000E+34 1.010506665954772E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.391957979199000E+11 4.849139337491001E+07 + 358 4.037505099599999E+30 2.557938139600000E+34 1.011287993844075E+15 2.207899424123765E+08 2.262678378827585E-13 4.037055458294341E-01 4.140660078053656E+03 3.556978730930489E+03 3.856707248673200E-04 1.079725062192903E-02 2.558151978600000E+34 1.012047773287162E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.361957979199000E+11 4.709925317731000E+07 + 359 4.274174148000000E+30 2.558365817600000E+34 1.012807552730251E+15 2.211299424123765E+08 2.136169823610041E-13 3.822221808938244E-01 4.112488785024660E+03 3.508650540080422E+03 3.494957215287500E-04 1.068377602767335E-02 2.558481191200000E+34 1.013524112683844E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.281957979199000E+11 3.974877853352001E+07 + 360 2.318766677600000E+30 2.558596564800000E+34 1.014240672637436E+15 2.220500000000000E+08 1.320187984471793E-13 3.787629630000272E-01 4.103030323288639E+03 3.500676383507568E+03 3.914134027455801E-04 1.060970190902630E-02 2.559346493200000E+34 1.017474231379480E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 7.951517524700000E+10 2.959119091002000E+07 + 361 1.498211134840000E+31 2.560096421600000E+34 1.020707790121523E+15 2.235150000000000E+08 1.780884589095935E-13 3.752458398691255E-01 4.093593615410948E+03 3.492529755189415E+03 3.481991767861600E-04 1.020857863181285E-02 2.560845355400000E+34 1.023824381521423E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.071612453458000E+11 3.361077070201001E+07 + 362 1.498866377320000E+31 2.561594289200000E+34 1.026940972921324E+15 2.249900000000000E+08 1.826513249576277E-13 3.683534435716284E-01 4.084178611359100E+03 3.476388398532203E+03 3.297197058657300E-04 9.833104600149427E-03 2.562344217600000E+34 1.030509968919181E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 1.101612453458000E+11 3.219925317731001E+07 + 363 1.499495362360000E+31 2.563094146000000E+34 1.034078964917039E+15 2.267100000000000E+08 1.572616496167565E-13 3.583569950104007E-01 4.065413515178083E+03 3.452551097673934E+03 3.263162506083200E-04 9.466712446745148E-03 2.563844074400000E+34 1.038426847625309E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 9.483014802911002E+10 2.787161111803000E+07 + 364 1.500099681320000E+31 2.564594002800000E+34 1.042774730333579E+15 2.287550000000000E+08 1.272397558029455E-13 3.517748076463706E-01 4.046734636782381E+03 3.436594509598488E+03 3.257266163805500E-04 9.106223494100422E-03 2.565343931200000E+34 1.047622626046609E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 7.670941648465001E+10 2.304281730628001E+07 + 365 1.500680527720000E+31 2.566093859600000E+34 1.052470521759639E+15 2.309950000000000E+08 1.123628708837473E-13 3.422282733838536E-01 4.037318242522787E+03 3.413030072066779E+03 3.163978225688001E-04 8.761440672906622E-03 2.566844782600000E+34 1.057502536088263E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 6.759789895995000E+10 1.992438926676000E+07 + 366 1.501239294000000E+31 2.567595705600000E+34 1.062534550416887E+15 2.333100000000000E+08 1.060805531718667E-13 3.329016028321276E-01 4.018877111489439E+03 3.389534938312775E+03 3.019425384502400E-04 8.439007022637664E-03 2.568346628600000E+34 1.067644073052840E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 6.389329195007000E+10 1.801171998959000E+07 + 367 1.501777571520000E+31 2.569097551600000E+34 1.072753595688792E+15 2.356600000000000E+08 1.027123881244455E-13 3.267869720194562E-01 4.000412048446643E+03 3.373869590792089E+03 2.868849508267400E-04 8.137813513513992E-03 2.569848474599999E+34 1.077938447309927E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 6.178983669266000E+10 1.650135421736000E+07 + 368 1.502295957040000E+31 2.570599397600000E+34 1.083123298931064E+15 2.380450000000000E+08 9.922835135367518E-14 3.178811197984065E-01 3.991103442760817E+03 3.350644035894991E+03 2.729296667081800E-04 7.856907668860611E-03 2.571351315199999E+34 1.088404986365225E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 5.978638143525000E+10 1.509214019760000E+07 + 369 1.502795843000000E+31 2.572103232800000E+34 1.093686673799387E+15 2.404800000000000E+08 9.563631349077967E-14 3.092179767750123E-01 3.972873405608826E+03 3.327578364593202E+03 2.699626626000300E-04 7.584126709382917E-03 2.572855150400000E+34 1.099080651212797E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 5.758292617784000E+10 1.368522968278000E+07 + 370 1.503278224000000E+31 2.573607068000000E+34 1.104474628626208E+15 2.429600000000000E+08 9.175627529964367E-14 3.008263582005635E-01 3.954619710394833E+03 3.304761441536000E+03 2.725449813832000E-04 7.314308281344222E-03 2.574357991000000E+34 1.109986664445421E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 5.528062267290000E+10 1.237947092043000E+07 + 371 1.503743895720000E+31 2.575108914000000E+34 1.115498700264632E+15 2.454950000000000E+08 8.803102846802799E-14 2.953008752846858E-01 3.936449883292145E+03 3.289487890032086E+03 2.752376659386001E-04 7.047181874350868E-03 2.575861826200000E+34 1.121129571971708E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 5.307716741549000E+10 1.117371215808000E+07 + 372 1.504193653840000E+31 2.576614738400000E+34 1.126760443678784E+15 2.480850000000000E+08 8.464919393736427E-14 2.872531066120855E-01 3.918469726838503E+03 3.266843214677180E+03 2.779453232761100E-04 6.782213804415191E-03 2.577366656000000E+34 1.132507657870873E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 5.097371215808000E+10 1.016680164326000E+07 + 373 1.504628492960000E+31 2.578118573600000E+34 1.138254872062962E+15 2.507250000000000E+08 8.121491156765013E-14 2.794246619782156E-01 3.900465993823005E+03 3.244354424170943E+03 2.806322490691600E-04 6.520250894766141E-03 2.578871485800000E+34 1.144116979528632E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.769424123765001E+41 4.887140865314000E+10 9.161042880910002E+06 + 374 1.505049009840000E+31 2.579624398000000E+34 1.149979086994301E+15 2.534200000000000E+08 7.809492765829459E-14 2.692861674145481E-01 3.864706306647749E+03 3.214522691821607E+03 2.816539299012000E-04 6.262385941706158E-03 2.580376315600000E+34 1.155958828702688E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759539299012001E+41 4.696910514820000E+10 7.638488778987001E+06 + 375 1.505455801240000E+31 2.581128233200000E+34 1.161938570411075E+15 2.561650000000000E+08 7.492655687121483E-14 2.643405658281265E-01 3.846949594109780E+03 3.199666590490461E+03 2.844527781487299E-04 6.007510773828205E-03 2.581881145400000E+34 1.168037678672284E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759539299012001E+41 4.516564989079000E+10 6.863536243366001E+06 + 376 1.505849861760000E+31 2.582634057600000E+34 1.174136786933494E+15 2.589650000000000E+08 7.204814886326081E-14 2.571365515409419E-01 3.829170695509592E+03 3.177640240612367E+03 2.871527781487300E-04 5.755161484819180E-03 2.583387964400000E+34 1.180359485232374E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759539299012001E+41 4.336334638585000E+10 6.169274759227001E+06 + 377 1.506231390320000E+31 2.584141871200000E+34 1.186582183531252E+15 2.618250000000000E+08 6.912510050446933E-14 2.501288666430345E-01 3.811577254273961E+03 3.155765519060302E+03 2.899527781487300E-04 5.505735857974970E-03 2.584894783400000E+34 1.192933797938704E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759539299012001E+41 4.165989112844000E+10 5.535128450335001E+06 + 378 1.506601182600000E+31 2.585647695600000E+34 1.199285412346158E+15 2.647400000000000E+08 6.631866507759012E-14 2.433403034648518E-01 3.794064647558162E+03 3.134126314733467E+03 2.928516263962600E-04 5.259037229043527E-03 2.586401602400000E+34 1.205773689956506E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759539299012001E+41 3.995758762350000E+10 4.971327667184002E+06 + 379 1.506959835360000E+31 2.587155509200000E+34 1.212261967566853E+15 2.677200000000000E+08 6.362427212351011E-14 2.367086046284786E-01 3.768048601802589E+03 3.112551140940164E+03 2.958516263962600E-04 5.014791960806864E-03 2.587908421400000E+34 1.218897344791497E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759539299012001E+41 3.825528411856000E+10 4.457872409774001E+06 + 380 1.507307746440000E+31 2.588661333600000E+34 1.225532722016141E+15 2.707700000000000E+08 6.090077606707370E-14 2.302576379964725E-01 3.750735991078142E+03 3.091124489598567E+03 2.990504746437900E-04 4.773116342440520E-03 2.589415240400000E+34 1.232326610585579E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759539299012001E+41 3.665298061362000E+10 3.994762678105000E+06 + 381 1.507645313680000E+31 2.590169147200000E+34 1.239120499155016E+15 2.738900000000000E+08 5.816152373019628E-14 2.239824781145097E-01 3.733502924574532E+03 3.069845338287304E+03 3.023504746437900E-04 4.534189954376939E-03 2.590923054000000E+34 1.246083479886240E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759424123765001E+41 3.505067710868000E+10 3.581883296930001E+06 + 382 1.507972934920000E+31 2.591676960800000E+34 1.253046460617465E+15 2.770850000000000E+08 5.554216789835819E-14 2.198689058886164E-01 3.707801671221458E+03 3.055657871658875E+03 3.058493228913200E-04 4.297638593014210E-03 2.592431862200000E+34 1.260193032124745E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.759424123765001E+41 3.344837360374000E+10 3.209349441496001E+06 + 383 1.508291405840000E+31 2.593186763600000E+34 1.267339603632024E+15 2.803650000000000E+08 5.292036451511330E-14 2.119160328878958E-01 3.682277344051988E+03 3.027643431902659E+03 3.085470193863800E-04 4.064270418105689E-03 2.593940670400000E+34 1.274687684734534E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.749539299012001E+41 3.184607009880000E+10 2.765894184086001E+06 + 384 1.508600925360000E+31 2.594694577200000E+34 1.282035765837046E+15 2.837450000000000E+08 5.030635219010445E-14 2.061407326655292E-01 3.656928725114845E+03 3.006801281118765E+03 3.123470193863800E-04 3.833365101164820E-03 2.595449478600000E+34 1.289606587860471E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.749539299012001E+41 3.024491834633000E+10 2.463821029640000E+06 + 385 1.508901692400000E+31 2.596204380000000E+34 1.297177409883896E+15 2.872300000000000E+08 4.771147323841262E-14 2.005228254077430E-01 3.640028018879575E+03 2.986102606691668E+03 3.164458676339100E-04 3.604770980512346E-03 2.596958286800000E+34 1.305001768992681E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.749539299012001E+41 2.874146308892000E+10 2.201978225688000E+06 + 386 1.509194104800000E+31 2.597712193600000E+34 1.312826128101464E+15 2.908350000000000E+08 4.504387823102161E-14 1.950580217192948E-01 3.615068208152130E+03 2.965546420937078E+03 3.209458676339100E-04 3.378559056102412E-03 2.598467095000000E+34 1.320941628815841E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.749539299012001E+41 2.713915958398000E+10 1.960250596983000E+06 + 387 1.509478759320000E+31 2.599221996400000E+34 1.329057129530218E+15 2.945800000000000E+08 4.242636029284096E-14 1.897421491028708E-01 3.590182253652192E+03 2.945131742969874E+03 3.259447158814400E-04 3.154122187924910E-03 2.599976897800000E+34 1.337514507623818E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.749539299012001E+41 2.553685607904000E+10 1.738753318772000E+06 + 388 1.509755854880000E+31 2.600731799200000E+34 1.345971885717417E+15 2.984900000000000E+08 3.968585815135184E-14 1.845711487732931E-01 3.565467612858027E+03 2.924857598657301E+03 3.316435641289700E-04 2.931513426239800E-03 2.601486700600000E+34 1.354831053873126E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.749539299012001E+41 2.393455257410000E+10 1.537486391055000E+06 + 389 1.510025391480000E+31 2.602241602000000E+34 1.363690222028836E+15 3.025900000000000E+08 3.695181506942291E-14 1.778950301113177E-01 3.540923106454382E+03 2.898042343012003E+03 3.379435641289699E-04 2.710269084492001E-03 2.602996503400000E+34 1.373014938430472E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.739654474258999E+41 2.223224906916000E+10 1.366104288091000E+06 + 390 1.510288164800000E+31 2.603751404800000E+34 1.382339654832108E+15 3.069150000000000E+08 3.416927591839826E-14 1.730468966645038E-01 3.508555024342128E+03 2.878092359848625E+03 3.451412606240300E-04 2.490347691406686E-03 2.604507300800000E+34 1.392217757277160E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.739654474258999E+41 2.062994556422000E+10 1.205067710868000E+06 + 391 1.510543975920000E+31 2.605263196800000E+34 1.402095859722212E+15 3.115150000000000E+08 3.137875987410658E-14 1.667876214533067E-01 3.468392927087563E+03 2.851705850489828E+03 3.520378053666199E-04 2.272126169972158E-03 2.606018098200000E+34 1.412651719900646E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.739654474258999E+41 1.892764205928000E+10 1.033915958398000E+06 + 392 1.510793421600000E+31 2.606772999600000E+34 1.423207580079080E+15 3.164600000000000E+08 2.855109880327627E-14 1.607547503379050E-01 3.436594509598488E+03 2.825561254102919E+03 3.612366536141500E-04 2.054401319616167E-03 2.607528895600000E+34 1.434632413248157E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.739539299011999E+41 1.722418680187000E+10 9.080521440455001E+05 + 393 1.511036700760000E+31 2.608284791600000E+34 1.446057246417233E+15 3.218649424123765E+08 2.556441009669583E-14 1.549400940610981E-01 3.405087621753278E+03 2.799656352816443E+03 3.723343501092100E-04 1.836922105872225E-03 2.609040687600000E+34 1.458651333533087E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.739539299011999E+41 1.542188329693000E+10 7.863841276129001E+05 + 394 1.511273813400000E+31 2.609796583600000E+34 1.471245420648942E+15 3.279099424123764E+08 2.242000864685485E-14 1.493357595791144E-01 3.366109906062239E+03 2.773988949092508E+03 3.863320466042700E-04 1.618768572289873E-03 2.610552479600000E+34 1.485540339291884E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.729654474258999E+41 1.351957979199000E+10 6.707967338532001E+05 + 395 1.511505157360000E+31 2.611308375600000E+34 1.499835257934825E+15 3.349250000000000E+08 1.908195322507025E-14 1.439176437480407E-01 3.319925146729186E+03 2.748482550804782E+03 4.051262878419200E-04 1.397767447833027E-03 2.612063277000000E+34 1.516795473637614E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.729654474258999E+41 1.151612453458000E+10 5.573014802911000E+05 + 396 1.511730931560000E+31 2.612818178400000E+34 1.533755689340404E+15 3.435050000000001E+08 1.540408036610017E-14 1.361958314396001E-01 3.259329683781698E+03 2.710845251573292E+03 4.302170738221600E-04 1.172989726748741E-03 2.613575069000000E+34 1.555029522904940E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.729654474258999E+41 9.283014802910999E+09 4.408753318772000E+05 + 397 1.511951334920000E+31 2.614331959600000E+34 1.576303356469476E+15 3.545750000000000E+08 1.168518992967093E-14 1.288735569312615E-01 3.192480784409476E+03 2.673651060347517E+03 4.673044045449900E-04 9.406735456725225E-04 2.615087855600000E+34 1.604329886377402E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.719769649506000E+41 7.040250596983000E+09 3.305758762350000E+05 + 398 1.512166566360000E+31 2.615843751600000E+34 1.632356416285329E+15 3.682800000000000E+08 8.348776345564017E-15 1.197192025339124E-01 3.126918024237526E+03 2.624851428849374E+03 5.250249336245600E-04 6.949954691487124E-04 2.616599647600000E+34 1.665210963424940E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.719654474258999E+41 5.027256040561001E+09 2.333800783151000E+05 + 399 1.512376824800000E+31 2.617355543600000E+34 1.698065510564550E+15 4.244849999999999E+08 6.601395848975489E-15 1.101828597281630E-01 3.055657871658875E+03 2.570946173318331E+03 5.690972915652800E-04 4.481584120613199E-04 2.618111439600000E+34 1.912169359734609E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.709769649506000E+41 3.975758762350000E+09 1.842764205928000E+05 + 400 1.512582110240000E+31 2.618867335600000E+34 2.126273208904668E+15 4.732800000000000E+08 7.649548028809211E-16 7.623665194026311E-02 2.780233476424581E+03 2.344794175376322E+03 1.368308948518000E-03 0.000000000000000E+00 2.618867335600000E+34 2.126273208904668E+15 7.181253000000000E-01 0.000000000000000E+00 2.760538000000000E-01 6.401185999999999E-04 1.019424000000000E-03 2.458491000000000E-03 4.355470000000000E-04 4.752008000000000E-05 8.485651000000001E-04 1.426982000000000E-04 9.610558000000000E-05 1.879377000000000E-05 1.454367000000000E-05 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.731241000000000E-05 0.000000000000000E+00 1.108306000000000E-14 3.679884824753000E+41 4.606795339573000E+08 2.123224906916000E+04 diff --git a/docs/examples/stella_to_tardis.ipynb b/docs/examples/stella_to_tardis.ipynb new file mode 100644 index 00000000000..2f587513756 --- /dev/null +++ b/docs/examples/stella_to_tardis.ipynb @@ -0,0 +1,1877 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### STELLA Files to TARDIS ###" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "from tardis.io.parsers import stella\n", + "from astropy import units as u" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "data = stella.read_stella_data('mesa.stella.dat')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mass_of_cellcell_center_mcell_center_Rcell_center_vavg_densityradiation_pressureavg_temperatureradiation_temperatureavg_opacitytau...cr48cr60fe52fe54fe56co56ni56luminosityn_barn_e
16.006769e+295.190243e+332.517209e+133.930633e+061.005529e-1111237.95450645943.45302345943.4530230.1627125403.504881...0.00.00.00.00.0000210.04.079500e-037.648868e+386.055413e+122.412188e+12
21.262406e+305.191506e+332.970626e+135.050403e+062.928088e-1111236.54402245942.18222945942.1822290.1644125381.678444...0.00.00.00.00.0000210.04.079500e-039.609214e+381.762304e+136.969790e+12
31.264624e+305.192771e+333.198879e+135.680288e+064.619659e-1111133.52676745836.51814245836.5181420.1650125364.280084...0.00.00.00.00.0000210.04.079500e-031.050921e+392.783916e+131.091728e+13
41.263067e+305.194034e+333.357130e+136.135230e+065.896887e-1111133.52676745836.51814245836.5181420.1653105348.854704...0.00.00.00.00.0000210.04.079500e-031.100921e+393.545183e+131.392188e+13
51.259387e+305.195293e+333.480638e+136.495173e+066.912717e-1111032.83872045732.36203145732.3620310.1655105334.724893...0.00.00.00.00.0000210.04.079500e-031.140921e+394.166219e+131.632649e+13
61.258091e+305.196550e+333.583450e+136.805058e+067.774308e-1111031.45398045731.09707645731.0970760.1657095321.480960...0.00.00.00.00.0000210.04.079500e-031.180921e+394.687026e+131.832995e+13
71.256430e+305.197807e+333.672346e+137.075000e+068.524104e-1111031.45398045731.09707645731.0970760.1658095308.917604...0.00.00.00.00.0000210.04.079500e-031.210921e+395.127832e+132.013225e+13
81.253971e+305.199061e+333.751183e+137.310000e+069.155072e-1111031.45398045731.09707645731.0970760.1658205296.950388...0.00.00.00.00.0000210.04.079500e-031.240806e+395.518408e+132.153570e+13
91.253773e+305.200314e+333.822537e+137.520000e+069.719899e-1110930.31700245625.91847145625.9184710.1659365285.442617...0.00.00.00.00.0000210.04.079500e-031.260806e+395.848984e+132.283801e+13
101.252728e+305.201567e+333.888202e+137.715000e+061.017798e-1010930.31700245625.91847145625.9184710.1664445274.319278...0.00.00.00.00.0000210.04.079380e-031.290806e+396.129444e+132.403916e+13
111.251315e+305.202818e+333.949364e+137.899942e+061.056026e-1010930.31700245625.91847145625.9184710.1674435263.504963...0.00.00.00.00.0000210.04.079205e-031.310806e+396.359790e+132.504031e+13
121.248465e+305.204067e+334.006494e+138.069885e+061.095625e-1010930.31700245625.91847145625.9184710.1683445252.968552...0.00.00.00.00.0000210.04.079205e-031.330806e+396.600135e+132.594261e+13
131.243739e+305.205311e+334.060165e+138.224885e+061.128950e-1010830.10725345520.98177145520.9817710.1691435242.720455...0.00.00.00.00.0000210.04.079205e-031.350806e+396.810366e+132.674377e+13
141.243959e+305.206554e+334.111083e+138.374827e+061.160579e-1010830.10725345520.98177145520.9817710.1699415232.678533...0.00.00.00.00.0000210.04.079205e-031.380691e+396.990711e+132.744492e+13
151.245057e+305.207799e+334.159658e+138.514827e+061.190315e-1010830.10725345520.98177145520.9817710.1705415222.818389...0.00.00.00.00.0000210.04.079205e-031.400691e+397.160942e+132.814492e+13
161.231934e+305.209033e+334.205671e+138.644827e+061.215239e-1010830.10725345520.98177145520.9817710.1711415213.249350...0.00.00.00.00.0000210.04.079205e-031.420806e+397.311172e+132.864722e+13
171.216115e+305.210248e+334.249330e+138.769770e+061.237832e-1010730.81623345416.28641845416.2864180.1729415203.903812...0.00.00.00.00.0000210.04.079205e-031.440806e+397.451402e+132.924722e+13
181.218289e+305.211465e+334.291475e+138.889770e+061.257945e-1010730.81623345416.28641845416.2864180.1734415194.709058...0.00.00.00.00.0000210.04.079205e-031.470691e+397.571633e+132.974837e+13
191.220635e+305.212687e+334.332273e+139.009712e+061.275483e-1010730.81623345416.28641845416.2864180.1738415185.663371...0.00.00.00.00.0000210.04.079205e-031.490691e+397.691748e+133.014953e+13
201.218599e+305.213906e+334.371717e+139.119712e+061.293227e-1010730.81623345416.28641845416.2864180.1742405176.775982...0.00.00.00.00.0000210.04.079205e-031.510691e+397.791978e+133.054953e+13
211.218527e+305.215123e+334.409991e+139.224712e+061.311178e-1010730.81623345416.28641845416.2864180.1745415168.017132...0.00.00.00.00.0000210.04.079205e-031.530691e+397.891978e+133.094953e+13
221.216195e+305.216341e+334.447132e+139.329654e+061.323350e-1010632.43551945311.83185845311.8318580.1748405159.424248...0.00.00.00.00.0000210.04.079205e-031.560576e+397.982093e+133.125068e+13
231.213956e+305.217554e+334.483239e+139.429654e+061.338634e-1010632.43551945311.83185845311.8318580.1751405150.959409...0.00.00.00.00.0000210.04.079205e-031.580691e+398.062209e+133.155183e+13
241.214388e+305.218768e+334.518466e+139.524654e+061.351020e-1010632.43551945311.83185845311.8318580.1754405142.610227...0.00.00.00.00.0000210.04.079205e-031.600691e+398.132324e+133.185183e+13
251.212675e+305.219981e+334.552823e+139.619654e+061.360385e-1010632.43551945311.83185845311.8318580.1756405134.401425...0.00.00.00.00.0000210.04.079205e-031.630576e+398.202439e+133.215183e+13
261.210647e+305.221192e+334.586395e+139.714654e+061.369815e-1010632.43551945311.83185845311.8318580.1758395126.315470...0.00.00.00.00.0000210.04.079156e-031.650576e+398.252554e+133.235183e+13
271.209411e+305.222402e+334.619471e+139.799654e+061.369815e-1010631.11310345310.58138345310.5813830.1758395118.349189...0.00.00.00.00.0000210.04.078789e-031.670691e+398.242554e+133.255183e+13
281.204720e+305.223605e+334.651757e+139.884654e+061.379268e-1010534.95676445207.61753645207.6175360.1759405110.514635...0.00.00.00.00.0000210.04.078789e-031.690691e+398.292669e+133.275183e+13
291.203253e+305.224809e+334.683392e+139.969654e+061.385676e-1010534.95676445207.61753645207.6175360.1761395102.793922...0.00.00.00.00.0000210.04.078789e-031.720576e+398.342669e+133.285298e+13
301.204574e+305.226014e+334.714483e+131.005460e+071.392072e-1010534.95676445207.61753645207.6175360.1762405095.166450...0.00.00.00.00.0000210.04.078789e-031.740576e+398.382669e+133.305298e+13
..................................................................
3701.503278e+312.573607e+341.104475e+152.429600e+089.175628e-140.3008263954.6197103304.7614420.0002730.007314...0.00.00.00.00.0000170.01.108306e-143.769424e+415.528062e+101.237947e+07
3711.503744e+312.575109e+341.115499e+152.454950e+088.803103e-140.2953013936.4498833289.4878900.0002750.007047...0.00.00.00.00.0000170.01.108306e-143.769424e+415.307717e+101.117371e+07
3721.504194e+312.576615e+341.126760e+152.480850e+088.464919e-140.2872533918.4697273266.8432150.0002780.006782...0.00.00.00.00.0000170.01.108306e-143.769424e+415.097371e+101.016680e+07
3731.504628e+312.578119e+341.138255e+152.507250e+088.121491e-140.2794253900.4659943244.3544240.0002810.006520...0.00.00.00.00.0000170.01.108306e-143.769424e+414.887141e+109.161043e+06
3741.505049e+312.579624e+341.149979e+152.534200e+087.809493e-140.2692863864.7063073214.5226920.0002820.006262...0.00.00.00.00.0000170.01.108306e-143.759539e+414.696911e+107.638489e+06
3751.505456e+312.581128e+341.161939e+152.561650e+087.492656e-140.2643413846.9495943199.6665900.0002840.006008...0.00.00.00.00.0000170.01.108306e-143.759539e+414.516565e+106.863536e+06
3761.505850e+312.582634e+341.174137e+152.589650e+087.204815e-140.2571373829.1706963177.6402410.0002870.005755...0.00.00.00.00.0000170.01.108306e-143.759539e+414.336335e+106.169275e+06
3771.506231e+312.584142e+341.186582e+152.618250e+086.912510e-140.2501293811.5772543155.7655190.0002900.005506...0.00.00.00.00.0000170.01.108306e-143.759539e+414.165989e+105.535128e+06
3781.506601e+312.585648e+341.199285e+152.647400e+086.631867e-140.2433403794.0646483134.1263150.0002930.005259...0.00.00.00.00.0000170.01.108306e-143.759539e+413.995759e+104.971328e+06
3791.506960e+312.587156e+341.212262e+152.677200e+086.362427e-140.2367093768.0486023112.5511410.0002960.005015...0.00.00.00.00.0000170.01.108306e-143.759539e+413.825528e+104.457872e+06
3801.507308e+312.588661e+341.225533e+152.707700e+086.090078e-140.2302583750.7359913091.1244900.0002990.004773...0.00.00.00.00.0000170.01.108306e-143.759539e+413.665298e+103.994763e+06
3811.507645e+312.590169e+341.239120e+152.738900e+085.816152e-140.2239823733.5029253069.8453380.0003020.004534...0.00.00.00.00.0000170.01.108306e-143.759424e+413.505068e+103.581883e+06
3821.507973e+312.591677e+341.253046e+152.770850e+085.554217e-140.2198693707.8016713055.6578720.0003060.004298...0.00.00.00.00.0000170.01.108306e-143.759424e+413.344837e+103.209349e+06
3831.508291e+312.593187e+341.267340e+152.803650e+085.292036e-140.2119163682.2773443027.6434320.0003090.004064...0.00.00.00.00.0000170.01.108306e-143.749539e+413.184607e+102.765894e+06
3841.508601e+312.594695e+341.282036e+152.837450e+085.030635e-140.2061413656.9287253006.8012810.0003120.003833...0.00.00.00.00.0000170.01.108306e-143.749539e+413.024492e+102.463821e+06
3851.508902e+312.596204e+341.297177e+152.872300e+084.771147e-140.2005233640.0280192986.1026070.0003160.003605...0.00.00.00.00.0000170.01.108306e-143.749539e+412.874146e+102.201978e+06
3861.509194e+312.597712e+341.312826e+152.908350e+084.504388e-140.1950583615.0682082965.5464210.0003210.003379...0.00.00.00.00.0000170.01.108306e-143.749539e+412.713916e+101.960251e+06
3871.509479e+312.599222e+341.329057e+152.945800e+084.242636e-140.1897423590.1822542945.1317430.0003260.003154...0.00.00.00.00.0000170.01.108306e-143.749539e+412.553686e+101.738753e+06
3881.509756e+312.600732e+341.345972e+152.984900e+083.968586e-140.1845713565.4676132924.8575990.0003320.002932...0.00.00.00.00.0000170.01.108306e-143.749539e+412.393455e+101.537486e+06
3891.510025e+312.602242e+341.363690e+153.025900e+083.695182e-140.1778953540.9231062898.0423430.0003380.002710...0.00.00.00.00.0000170.01.108306e-143.739654e+412.223225e+101.366104e+06
3901.510288e+312.603751e+341.382340e+153.069150e+083.416928e-140.1730473508.5550242878.0923600.0003450.002490...0.00.00.00.00.0000170.01.108306e-143.739654e+412.062995e+101.205068e+06
3911.510544e+312.605263e+341.402096e+153.115150e+083.137876e-140.1667883468.3929272851.7058500.0003520.002272...0.00.00.00.00.0000170.01.108306e-143.739654e+411.892764e+101.033916e+06
3921.510793e+312.606773e+341.423208e+153.164600e+082.855110e-140.1607553436.5945102825.5612540.0003610.002054...0.00.00.00.00.0000170.01.108306e-143.739539e+411.722419e+109.080521e+05
3931.511037e+312.608285e+341.446057e+153.218649e+082.556441e-140.1549403405.0876222799.6563530.0003720.001837...0.00.00.00.00.0000170.01.108306e-143.739539e+411.542188e+107.863841e+05
3941.511274e+312.609797e+341.471245e+153.279099e+082.242001e-140.1493363366.1099062773.9889490.0003860.001619...0.00.00.00.00.0000170.01.108306e-143.729654e+411.351958e+106.707967e+05
3951.511505e+312.611308e+341.499835e+153.349250e+081.908195e-140.1439183319.9251472748.4825510.0004050.001398...0.00.00.00.00.0000170.01.108306e-143.729654e+411.151612e+105.573015e+05
3961.511731e+312.612818e+341.533756e+153.435050e+081.540408e-140.1361963259.3296842710.8452520.0004300.001173...0.00.00.00.00.0000170.01.108306e-143.729654e+419.283015e+094.408753e+05
3971.511951e+312.614332e+341.576303e+153.545750e+081.168519e-140.1288743192.4807842673.6510600.0004670.000941...0.00.00.00.00.0000170.01.108306e-143.719770e+417.040251e+093.305759e+05
3981.512167e+312.615844e+341.632356e+153.682800e+088.348776e-150.1197193126.9180242624.8514290.0005250.000695...0.00.00.00.00.0000170.01.108306e-143.719654e+415.027256e+092.333801e+05
3991.512377e+312.617356e+341.698066e+154.244850e+086.601396e-150.1101833055.6578722570.9461730.0005690.000448...0.00.00.00.00.0000170.01.108306e-143.709770e+413.975759e+091.842764e+05
\n", + "

399 rows × 36 columns

\n", + "
" + ], + "text/plain": [ + " mass_of_cell cell_center_m cell_center_R cell_center_v avg_density \\\n", + "1 6.006769e+29 5.190243e+33 2.517209e+13 3.930633e+06 1.005529e-11 \n", + "2 1.262406e+30 5.191506e+33 2.970626e+13 5.050403e+06 2.928088e-11 \n", + "3 1.264624e+30 5.192771e+33 3.198879e+13 5.680288e+06 4.619659e-11 \n", + "4 1.263067e+30 5.194034e+33 3.357130e+13 6.135230e+06 5.896887e-11 \n", + "5 1.259387e+30 5.195293e+33 3.480638e+13 6.495173e+06 6.912717e-11 \n", + "6 1.258091e+30 5.196550e+33 3.583450e+13 6.805058e+06 7.774308e-11 \n", + "7 1.256430e+30 5.197807e+33 3.672346e+13 7.075000e+06 8.524104e-11 \n", + "8 1.253971e+30 5.199061e+33 3.751183e+13 7.310000e+06 9.155072e-11 \n", + "9 1.253773e+30 5.200314e+33 3.822537e+13 7.520000e+06 9.719899e-11 \n", + "10 1.252728e+30 5.201567e+33 3.888202e+13 7.715000e+06 1.017798e-10 \n", + "11 1.251315e+30 5.202818e+33 3.949364e+13 7.899942e+06 1.056026e-10 \n", + "12 1.248465e+30 5.204067e+33 4.006494e+13 8.069885e+06 1.095625e-10 \n", + "13 1.243739e+30 5.205311e+33 4.060165e+13 8.224885e+06 1.128950e-10 \n", + "14 1.243959e+30 5.206554e+33 4.111083e+13 8.374827e+06 1.160579e-10 \n", + "15 1.245057e+30 5.207799e+33 4.159658e+13 8.514827e+06 1.190315e-10 \n", + "16 1.231934e+30 5.209033e+33 4.205671e+13 8.644827e+06 1.215239e-10 \n", + "17 1.216115e+30 5.210248e+33 4.249330e+13 8.769770e+06 1.237832e-10 \n", + "18 1.218289e+30 5.211465e+33 4.291475e+13 8.889770e+06 1.257945e-10 \n", + "19 1.220635e+30 5.212687e+33 4.332273e+13 9.009712e+06 1.275483e-10 \n", + "20 1.218599e+30 5.213906e+33 4.371717e+13 9.119712e+06 1.293227e-10 \n", + "21 1.218527e+30 5.215123e+33 4.409991e+13 9.224712e+06 1.311178e-10 \n", + "22 1.216195e+30 5.216341e+33 4.447132e+13 9.329654e+06 1.323350e-10 \n", + "23 1.213956e+30 5.217554e+33 4.483239e+13 9.429654e+06 1.338634e-10 \n", + "24 1.214388e+30 5.218768e+33 4.518466e+13 9.524654e+06 1.351020e-10 \n", + "25 1.212675e+30 5.219981e+33 4.552823e+13 9.619654e+06 1.360385e-10 \n", + "26 1.210647e+30 5.221192e+33 4.586395e+13 9.714654e+06 1.369815e-10 \n", + "27 1.209411e+30 5.222402e+33 4.619471e+13 9.799654e+06 1.369815e-10 \n", + "28 1.204720e+30 5.223605e+33 4.651757e+13 9.884654e+06 1.379268e-10 \n", + "29 1.203253e+30 5.224809e+33 4.683392e+13 9.969654e+06 1.385676e-10 \n", + "30 1.204574e+30 5.226014e+33 4.714483e+13 1.005460e+07 1.392072e-10 \n", + ".. ... ... ... ... ... \n", + "370 1.503278e+31 2.573607e+34 1.104475e+15 2.429600e+08 9.175628e-14 \n", + "371 1.503744e+31 2.575109e+34 1.115499e+15 2.454950e+08 8.803103e-14 \n", + "372 1.504194e+31 2.576615e+34 1.126760e+15 2.480850e+08 8.464919e-14 \n", + "373 1.504628e+31 2.578119e+34 1.138255e+15 2.507250e+08 8.121491e-14 \n", + "374 1.505049e+31 2.579624e+34 1.149979e+15 2.534200e+08 7.809493e-14 \n", + "375 1.505456e+31 2.581128e+34 1.161939e+15 2.561650e+08 7.492656e-14 \n", + "376 1.505850e+31 2.582634e+34 1.174137e+15 2.589650e+08 7.204815e-14 \n", + "377 1.506231e+31 2.584142e+34 1.186582e+15 2.618250e+08 6.912510e-14 \n", + "378 1.506601e+31 2.585648e+34 1.199285e+15 2.647400e+08 6.631867e-14 \n", + "379 1.506960e+31 2.587156e+34 1.212262e+15 2.677200e+08 6.362427e-14 \n", + "380 1.507308e+31 2.588661e+34 1.225533e+15 2.707700e+08 6.090078e-14 \n", + "381 1.507645e+31 2.590169e+34 1.239120e+15 2.738900e+08 5.816152e-14 \n", + "382 1.507973e+31 2.591677e+34 1.253046e+15 2.770850e+08 5.554217e-14 \n", + "383 1.508291e+31 2.593187e+34 1.267340e+15 2.803650e+08 5.292036e-14 \n", + "384 1.508601e+31 2.594695e+34 1.282036e+15 2.837450e+08 5.030635e-14 \n", + "385 1.508902e+31 2.596204e+34 1.297177e+15 2.872300e+08 4.771147e-14 \n", + "386 1.509194e+31 2.597712e+34 1.312826e+15 2.908350e+08 4.504388e-14 \n", + "387 1.509479e+31 2.599222e+34 1.329057e+15 2.945800e+08 4.242636e-14 \n", + "388 1.509756e+31 2.600732e+34 1.345972e+15 2.984900e+08 3.968586e-14 \n", + "389 1.510025e+31 2.602242e+34 1.363690e+15 3.025900e+08 3.695182e-14 \n", + "390 1.510288e+31 2.603751e+34 1.382340e+15 3.069150e+08 3.416928e-14 \n", + "391 1.510544e+31 2.605263e+34 1.402096e+15 3.115150e+08 3.137876e-14 \n", + "392 1.510793e+31 2.606773e+34 1.423208e+15 3.164600e+08 2.855110e-14 \n", + "393 1.511037e+31 2.608285e+34 1.446057e+15 3.218649e+08 2.556441e-14 \n", + "394 1.511274e+31 2.609797e+34 1.471245e+15 3.279099e+08 2.242001e-14 \n", + "395 1.511505e+31 2.611308e+34 1.499835e+15 3.349250e+08 1.908195e-14 \n", + "396 1.511731e+31 2.612818e+34 1.533756e+15 3.435050e+08 1.540408e-14 \n", + "397 1.511951e+31 2.614332e+34 1.576303e+15 3.545750e+08 1.168519e-14 \n", + "398 1.512167e+31 2.615844e+34 1.632356e+15 3.682800e+08 8.348776e-15 \n", + "399 1.512377e+31 2.617356e+34 1.698066e+15 4.244850e+08 6.601396e-15 \n", + "\n", + " radiation_pressure avg_temperature radiation_temperature avg_opacity \\\n", + "1 11237.954506 45943.453023 45943.453023 0.162712 \n", + "2 11236.544022 45942.182229 45942.182229 0.164412 \n", + "3 11133.526767 45836.518142 45836.518142 0.165012 \n", + "4 11133.526767 45836.518142 45836.518142 0.165310 \n", + "5 11032.838720 45732.362031 45732.362031 0.165510 \n", + "6 11031.453980 45731.097076 45731.097076 0.165709 \n", + "7 11031.453980 45731.097076 45731.097076 0.165809 \n", + "8 11031.453980 45731.097076 45731.097076 0.165820 \n", + "9 10930.317002 45625.918471 45625.918471 0.165936 \n", + "10 10930.317002 45625.918471 45625.918471 0.166444 \n", + "11 10930.317002 45625.918471 45625.918471 0.167443 \n", + "12 10930.317002 45625.918471 45625.918471 0.168344 \n", + "13 10830.107253 45520.981771 45520.981771 0.169143 \n", + "14 10830.107253 45520.981771 45520.981771 0.169941 \n", + "15 10830.107253 45520.981771 45520.981771 0.170541 \n", + "16 10830.107253 45520.981771 45520.981771 0.171141 \n", + "17 10730.816233 45416.286418 45416.286418 0.172941 \n", + "18 10730.816233 45416.286418 45416.286418 0.173441 \n", + "19 10730.816233 45416.286418 45416.286418 0.173841 \n", + "20 10730.816233 45416.286418 45416.286418 0.174240 \n", + "21 10730.816233 45416.286418 45416.286418 0.174541 \n", + "22 10632.435519 45311.831858 45311.831858 0.174840 \n", + "23 10632.435519 45311.831858 45311.831858 0.175140 \n", + "24 10632.435519 45311.831858 45311.831858 0.175440 \n", + "25 10632.435519 45311.831858 45311.831858 0.175640 \n", + "26 10632.435519 45311.831858 45311.831858 0.175839 \n", + "27 10631.113103 45310.581383 45310.581383 0.175839 \n", + "28 10534.956764 45207.617536 45207.617536 0.175940 \n", + "29 10534.956764 45207.617536 45207.617536 0.176139 \n", + "30 10534.956764 45207.617536 45207.617536 0.176240 \n", + ".. ... ... ... ... \n", + "370 0.300826 3954.619710 3304.761442 0.000273 \n", + "371 0.295301 3936.449883 3289.487890 0.000275 \n", + "372 0.287253 3918.469727 3266.843215 0.000278 \n", + "373 0.279425 3900.465994 3244.354424 0.000281 \n", + "374 0.269286 3864.706307 3214.522692 0.000282 \n", + "375 0.264341 3846.949594 3199.666590 0.000284 \n", + "376 0.257137 3829.170696 3177.640241 0.000287 \n", + "377 0.250129 3811.577254 3155.765519 0.000290 \n", + "378 0.243340 3794.064648 3134.126315 0.000293 \n", + "379 0.236709 3768.048602 3112.551141 0.000296 \n", + "380 0.230258 3750.735991 3091.124490 0.000299 \n", + "381 0.223982 3733.502925 3069.845338 0.000302 \n", + "382 0.219869 3707.801671 3055.657872 0.000306 \n", + "383 0.211916 3682.277344 3027.643432 0.000309 \n", + "384 0.206141 3656.928725 3006.801281 0.000312 \n", + "385 0.200523 3640.028019 2986.102607 0.000316 \n", + "386 0.195058 3615.068208 2965.546421 0.000321 \n", + "387 0.189742 3590.182254 2945.131743 0.000326 \n", + "388 0.184571 3565.467613 2924.857599 0.000332 \n", + "389 0.177895 3540.923106 2898.042343 0.000338 \n", + "390 0.173047 3508.555024 2878.092360 0.000345 \n", + "391 0.166788 3468.392927 2851.705850 0.000352 \n", + "392 0.160755 3436.594510 2825.561254 0.000361 \n", + "393 0.154940 3405.087622 2799.656353 0.000372 \n", + "394 0.149336 3366.109906 2773.988949 0.000386 \n", + "395 0.143918 3319.925147 2748.482551 0.000405 \n", + "396 0.136196 3259.329684 2710.845252 0.000430 \n", + "397 0.128874 3192.480784 2673.651060 0.000467 \n", + "398 0.119719 3126.918024 2624.851429 0.000525 \n", + "399 0.110183 3055.657872 2570.946173 0.000569 \n", + "\n", + " tau ... cr48 cr60 fe52 fe54 fe56 co56 ni56 \\\n", + "1 5403.504881 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "2 5381.678444 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "3 5364.280084 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "4 5348.854704 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "5 5334.724893 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "6 5321.480960 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "7 5308.917604 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "8 5296.950388 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "9 5285.442617 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079500e-03 \n", + "10 5274.319278 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079380e-03 \n", + "11 5263.504963 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "12 5252.968552 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "13 5242.720455 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "14 5232.678533 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "15 5222.818389 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "16 5213.249350 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "17 5203.903812 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "18 5194.709058 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "19 5185.663371 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "20 5176.775982 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "21 5168.017132 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "22 5159.424248 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "23 5150.959409 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "24 5142.610227 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "25 5134.401425 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079205e-03 \n", + "26 5126.315470 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.079156e-03 \n", + "27 5118.349189 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.078789e-03 \n", + "28 5110.514635 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.078789e-03 \n", + "29 5102.793922 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.078789e-03 \n", + "30 5095.166450 ... 0.0 0.0 0.0 0.0 0.000021 0.0 4.078789e-03 \n", + ".. ... ... ... ... ... ... ... ... ... \n", + "370 0.007314 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "371 0.007047 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "372 0.006782 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "373 0.006520 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "374 0.006262 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "375 0.006008 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "376 0.005755 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "377 0.005506 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "378 0.005259 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "379 0.005015 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "380 0.004773 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "381 0.004534 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "382 0.004298 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "383 0.004064 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "384 0.003833 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "385 0.003605 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "386 0.003379 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "387 0.003154 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "388 0.002932 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "389 0.002710 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "390 0.002490 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "391 0.002272 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "392 0.002054 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "393 0.001837 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "394 0.001619 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "395 0.001398 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "396 0.001173 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "397 0.000941 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "398 0.000695 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "399 0.000448 ... 0.0 0.0 0.0 0.0 0.000017 0.0 1.108306e-14 \n", + "\n", + " luminosity n_bar n_e \n", + "1 7.648868e+38 6.055413e+12 2.412188e+12 \n", + "2 9.609214e+38 1.762304e+13 6.969790e+12 \n", + "3 1.050921e+39 2.783916e+13 1.091728e+13 \n", + "4 1.100921e+39 3.545183e+13 1.392188e+13 \n", + "5 1.140921e+39 4.166219e+13 1.632649e+13 \n", + "6 1.180921e+39 4.687026e+13 1.832995e+13 \n", + "7 1.210921e+39 5.127832e+13 2.013225e+13 \n", + "8 1.240806e+39 5.518408e+13 2.153570e+13 \n", + "9 1.260806e+39 5.848984e+13 2.283801e+13 \n", + "10 1.290806e+39 6.129444e+13 2.403916e+13 \n", + "11 1.310806e+39 6.359790e+13 2.504031e+13 \n", + "12 1.330806e+39 6.600135e+13 2.594261e+13 \n", + "13 1.350806e+39 6.810366e+13 2.674377e+13 \n", + "14 1.380691e+39 6.990711e+13 2.744492e+13 \n", + "15 1.400691e+39 7.160942e+13 2.814492e+13 \n", + "16 1.420806e+39 7.311172e+13 2.864722e+13 \n", + "17 1.440806e+39 7.451402e+13 2.924722e+13 \n", + "18 1.470691e+39 7.571633e+13 2.974837e+13 \n", + "19 1.490691e+39 7.691748e+13 3.014953e+13 \n", + "20 1.510691e+39 7.791978e+13 3.054953e+13 \n", + "21 1.530691e+39 7.891978e+13 3.094953e+13 \n", + "22 1.560576e+39 7.982093e+13 3.125068e+13 \n", + "23 1.580691e+39 8.062209e+13 3.155183e+13 \n", + "24 1.600691e+39 8.132324e+13 3.185183e+13 \n", + "25 1.630576e+39 8.202439e+13 3.215183e+13 \n", + "26 1.650576e+39 8.252554e+13 3.235183e+13 \n", + "27 1.670691e+39 8.242554e+13 3.255183e+13 \n", + "28 1.690691e+39 8.292669e+13 3.275183e+13 \n", + "29 1.720576e+39 8.342669e+13 3.285298e+13 \n", + "30 1.740576e+39 8.382669e+13 3.305298e+13 \n", + ".. ... ... ... \n", + "370 3.769424e+41 5.528062e+10 1.237947e+07 \n", + "371 3.769424e+41 5.307717e+10 1.117371e+07 \n", + "372 3.769424e+41 5.097371e+10 1.016680e+07 \n", + "373 3.769424e+41 4.887141e+10 9.161043e+06 \n", + "374 3.759539e+41 4.696911e+10 7.638489e+06 \n", + "375 3.759539e+41 4.516565e+10 6.863536e+06 \n", + "376 3.759539e+41 4.336335e+10 6.169275e+06 \n", + "377 3.759539e+41 4.165989e+10 5.535128e+06 \n", + "378 3.759539e+41 3.995759e+10 4.971328e+06 \n", + "379 3.759539e+41 3.825528e+10 4.457872e+06 \n", + "380 3.759539e+41 3.665298e+10 3.994763e+06 \n", + "381 3.759424e+41 3.505068e+10 3.581883e+06 \n", + "382 3.759424e+41 3.344837e+10 3.209349e+06 \n", + "383 3.749539e+41 3.184607e+10 2.765894e+06 \n", + "384 3.749539e+41 3.024492e+10 2.463821e+06 \n", + "385 3.749539e+41 2.874146e+10 2.201978e+06 \n", + "386 3.749539e+41 2.713916e+10 1.960251e+06 \n", + "387 3.749539e+41 2.553686e+10 1.738753e+06 \n", + "388 3.749539e+41 2.393455e+10 1.537486e+06 \n", + "389 3.739654e+41 2.223225e+10 1.366104e+06 \n", + "390 3.739654e+41 2.062995e+10 1.205068e+06 \n", + "391 3.739654e+41 1.892764e+10 1.033916e+06 \n", + "392 3.739539e+41 1.722419e+10 9.080521e+05 \n", + "393 3.739539e+41 1.542188e+10 7.863841e+05 \n", + "394 3.729654e+41 1.351958e+10 6.707967e+05 \n", + "395 3.729654e+41 1.151612e+10 5.573015e+05 \n", + "396 3.729654e+41 9.283015e+09 4.408753e+05 \n", + "397 3.719770e+41 7.040251e+09 3.305759e+05 \n", + "398 3.719654e+41 5.027256e+09 2.333801e+05 \n", + "399 3.709770e+41 3.975759e+09 1.842764e+05 \n", + "\n", + "[399 rows x 36 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "# extract outer radius boundaries \n", + "radius = data.loc[:,'outer_edge_r'].values * u.cm\n", + "\n", + "# calculate t_expl_s\n", + "t_expl = 50 * u.day #days\n", + "\n", + "# calculate outer velocities of each zone assuming homologous expansion (d =v*t) \n", + "\n", + "vel = (radius/t_expl).to(u.km/u.s) \n", + "\n", + "# create a new column of our velocities (OPTIONAL)\n", + "data['velocity'] = vel" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "density_dat = data[['velocity', 'avg_density']].reset_index(drop=True)\n", + "density_dat.to_csv('density_parse.csv', sep = ' ')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# import all elements and isotopes and export to TARDIS\n", + "\n", + "data_elements = data.iloc[12:33].reset_index(drop=True)\n", + "abund = data_elements.to_csv('abund_parse.csv', sep = ' ')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/tardis/io/parsers/__init__.py b/tardis/io/parsers/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tardis/io/parsers/stella.py b/tardis/io/parsers/stella.py new file mode 100644 index 00000000000..5265d3d2730 --- /dev/null +++ b/tardis/io/parsers/stella.py @@ -0,0 +1,14 @@ +import re +import pandas as pd +from astropy import units as u +import numpy as np + +def read_stella_data(filename): + with open(filename) as fh: + col = fh.readlines()[5] + col_names = re.split('\s{3,}', col.strip()) + col_names = [re.sub('\s\(.+\)', '', col_name).replace(' ', '_') for col_name in col_names] + data = pd.read_csv(filename, skiprows=7, delim_whitespace=True, names = col_names) + # drop last row of data + data = data.iloc[0:-1] + return data From 32bcf38f21cfed8bf8482e2f3be2a83b00c95a3f Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 13 Apr 2019 08:18:59 -0700 Subject: [PATCH 016/467] make python3 compatible (#916) --- docs/examples/index.rst | 10 ++++++++-- docs/{notebooks => examples}/integrator.ipynb | 0 2 files changed, 8 insertions(+), 2 deletions(-) rename docs/{notebooks => examples}/integrator.ipynb (100%) diff --git a/docs/examples/index.rst b/docs/examples/index.rst index f05770226a8..bcf9b7673c6 100644 --- a/docs/examples/index.rst +++ b/docs/examples/index.rst @@ -20,7 +20,10 @@ Simple Parametrized Models These setups specify the ejecta solely via the YAML configuration file: -* :doc:`tardis_example ` +.. toctree:: + :maxdepth: 2 + + tardis_example API demonstrations @@ -28,7 +31,10 @@ API demonstrations An example on how to use the formal integrator with tardis: -:ref:`notebooks/integrator.ipynb` +.. toctree:: + :maxdepth: 2 + + integrator.ipynb Detailed Explosion Models diff --git a/docs/notebooks/integrator.ipynb b/docs/examples/integrator.ipynb similarity index 100% rename from docs/notebooks/integrator.ipynb rename to docs/examples/integrator.ipynb From 96b19c0bb6ed0b7929fa94b6fdc8b0fe657d01a4 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 26 Apr 2019 14:38:26 -0400 Subject: [PATCH 017/467] Update README.rst update link to documentation --- README.rst | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/README.rst b/README.rst index a56a4a9660a..6a45bcfc626 100644 --- a/README.rst +++ b/README.rst @@ -4,7 +4,7 @@ TARDIS TARDIS is a tool that creates synthetic observations (spectra) for exploding stars (supernovae). Documentation can be found at -http://tardis.readthedocs.org. +https://tardis-sn.github.io/tardis/. .. image:: https://dev.azure.com/tardis-sn/TARDIS/_apis/build/status/tardis-sn.tardis?branchName=master :target: https://dev.azure.com/tardis-sn/TARDIS/_build/latest?definitionId=1&branchName=master @@ -15,10 +15,6 @@ http://tardis.readthedocs.org. .. image:: https://zenodo.org/badge/5756/tardis-sn/tardis.svg :target: http://dx.doi.org/10.5281/zenodo.17630 -.. image:: https://readthedocs.org/projects/tardis/badge/?version=latest - :target: http://tardis.readthedocs.org/en/latest/?badge=latest - :alt: Documentation Status - .. image:: https://badges.gitter.im/Join%20Chat.svg :target: https://gitter.im/tardis-sn/tardis From f6597797a5d1a587947b9f50761b12a9fe4d88cb Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 29 Apr 2019 14:54:30 -0400 Subject: [PATCH 018/467] general overhaul of the docs for 3.0 (#902) * fix missing graphics on gh_pages * fix right ls * fix ls --- .travis.yml | 15 +-------------- docs/index.rst | 11 ++++------- 2 files changed, 5 insertions(+), 21 deletions(-) diff --git a/.travis.yml b/.travis.yml index fa5f629d5ea..8487864eef6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -56,6 +56,7 @@ script: - python setup.py build_docs - pip install doctr - git lfs uninstall + - ls docs/_build/html/_images - doctr deploy --built-docs docs/_build/html . @@ -79,20 +80,6 @@ jobs: - SETUP_CMD='test --coverage --args="--tardis-refdata=$REF_DATA_HOME"' - TEST_MODE='spectrum' - SAVE_COVERAGE=true - - stage: test - python: 2.7 - env: - - COMPILER=clang - - SETUP_CMD='test --args="--tardis-refdata=$REF_DATA_HOME"' - - TEST_MODE='spectrum' - - stage: test - os: osx - language: generic - env: - - COMPILER=clang - - SETUP_CMD='test --args="--tardis-refdata=$REF_DATA_HOME"' - - TEST_MODE='spectrum' - - MINICONDA_URL='http://repo.continuum.io/miniconda/Miniconda2-latest-MacOSX-x86_64.sh' - stage: integration if: type = cron script: diff --git a/docs/index.rst b/docs/index.rst index 49e9bba9967..d91c7b8991e 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -2,11 +2,11 @@ .. image:: graphics/tardis_logo.jpg .. the "raw" directive below is used to hide the title in favor of just the logo being visible -.. raw:: html +.. .. raw:: html - +.. ################################## Tardis Core Package Documentation @@ -25,9 +25,6 @@ for 1D models of supernova ejecta. It is designed for rapid spectral modelling of supernovae. If you use this code for any publications or presentations please acknowledge it by citing :cite:`Kerzendorf2014`. -.. note:: - This documentation is still under construction! - ============ Using Tardis From f98ef14766cd5f5b89764270156489f408d0731a Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 29 Apr 2019 14:55:05 -0400 Subject: [PATCH 019/467] make python3 compatible (#914) --- tardis/gui/datahandler.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tardis/gui/datahandler.py b/tardis/gui/datahandler.py index 40b76addfb0..1c6215e6ab5 100644 --- a/tardis/gui/datahandler.py +++ b/tardis/gui/datahandler.py @@ -1,6 +1,5 @@ import os from pkg_resources import parse_version -import exceptions import numpy as np import matplotlib From a41526551a779e6155bfee9f9ef32500a1e39cfb Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 29 Apr 2019 16:55:06 -0400 Subject: [PATCH 020/467] add changes builder to travis process --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 8487864eef6..cf227eb9146 100644 --- a/.travis.yml +++ b/.travis.yml @@ -53,6 +53,9 @@ script: - echo CC=$COMPILER python setup.py $SETUP_CMD - CC=$COMPILER python setup.py $SETUP_CMD - set -e + - conda install -y -c conda-forge nodejs + - npm install -g github-changes + - github-changes -o tardis-sn -r tardis --only-pulls --use-commit-body -f CHANGELOG.rst -k $GITHUB_CHANGES_OAUTH - python setup.py build_docs - pip install doctr - git lfs uninstall From f8010395da466967b9fba91bd8cb658d432d61c1 Mon Sep 17 00:00:00 2001 From: chvogl Date: Mon, 29 Apr 2019 22:57:58 +0200 Subject: [PATCH 021/467] Add possibility to bias vpacket emission based on optical depth (#919) * Add possibility to bias vpacket emission based on optical depth * Make use of vpacket biasing optional * Fix cmontecarlo unit tests --- tardis/io/schemas/spectrum.yml | 5 +++++ tardis/montecarlo/montecarlo.pyx | 14 +++++++++++++ tardis/montecarlo/src/cmontecarlo.c | 31 ++++++++++++++++++++++++++--- tardis/montecarlo/src/cmontecarlo.h | 4 ++++ tardis/montecarlo/src/rpacket.c | 1 + tardis/montecarlo/src/rpacket.h | 1 + tardis/montecarlo/src/storage.h | 2 ++ tardis/montecarlo/struct.py | 9 +++++++-- tardis/montecarlo/tests/conftest.py | 8 +++++++- 9 files changed, 69 insertions(+), 6 deletions(-) diff --git a/tardis/io/schemas/spectrum.yml b/tardis/io/schemas/spectrum.yml index 0987b995b4f..8439e75c041 100644 --- a/tardis/io/schemas/spectrum.yml +++ b/tardis/io/schemas/spectrum.yml @@ -45,3 +45,8 @@ properties: type: number default: 0.0 description: Probability for not terminating the packet path + enable_biasing: + type: boolean + default: False + description: If True bias v-packet emission based on the electron + scattering optical depth diff --git a/tardis/montecarlo/montecarlo.pyx b/tardis/montecarlo/montecarlo.pyx index 81663e1b657..e3ac6e42f58 100644 --- a/tardis/montecarlo/montecarlo.pyx +++ b/tardis/montecarlo/montecarlo.pyx @@ -120,6 +120,8 @@ cdef extern from "src/cmontecarlo.h": int full_relativity double survival_probability double tau_russian + double *tau_bias + int enable_biasing void montecarlo_main_loop(storage_model_t * storage, int_type_t virtual_packet_flag, int nthreads, unsigned long seed) @@ -259,6 +261,18 @@ cdef initialize_storage_model(model, plasma, runner, storage_model_t *storage): storage.tau_russian = runner.v_packet_settings['tau_russian'] storage.survival_probability = runner.v_packet_settings['survival_probability'] + storage.enable_biasing = runner.v_packet_settings['enable_biasing'] + + if runner.v_packet_settings['enable_biasing']: + # Calculate the integrated electron scattering optical depth + # at all cell interfaces. + runner.tau_bias = np.zeros(len(runner.r_inner_cgs) + 1) + runner.tau_bias[:-1] = ( + ((runner.r_outer_cgs - runner.r_inner_cgs) * + plasma.electron_densities.values * + runner.sigma_thomson.cgs.value)[::-1].cumsum()[::-1] + ) + storage.tau_bias = PyArray_DATA(runner.tau_bias) # Data for continuum implementation cdef np.ndarray[double, ndim=1] t_electrons = plasma.t_electrons diff --git a/tardis/montecarlo/src/cmontecarlo.c b/tardis/montecarlo/src/cmontecarlo.c index 06cf29e53bf..41441d8d363 100644 --- a/tardis/montecarlo/src/cmontecarlo.c +++ b/tardis/montecarlo/src/cmontecarlo.c @@ -832,7 +832,7 @@ montecarlo_thomson_scatter (rpacket_t * packet, storage_model_t * storage, if (rpacket_get_virtual_packet_flag (packet) > 0) { - montecarlo_one_packet (storage, packet, 1, mt_state); + create_vpacket (storage, packet, mt_state); } } @@ -1011,7 +1011,7 @@ line_emission (rpacket_t * packet, storage_model_t * storage, int64_t emission_l // QUESTIONABLE!!! bool old_close_line = rpacket_get_close_line (packet); rpacket_set_close_line (packet, virtual_close_line); - montecarlo_one_packet (storage, packet, 1, mt_state); + create_vpacket (storage, packet, mt_state); rpacket_set_close_line (packet, old_close_line); virtual_close_line = false; } @@ -1052,7 +1052,7 @@ continuum_emission (rpacket_t * packet, storage_model_t * storage, rk_state *mt_ if (rpacket_get_virtual_packet_flag (packet) > 0) { - montecarlo_one_packet (storage, packet, 1, mt_state); + create_vpacket (storage, packet, mt_state); } } @@ -1264,3 +1264,28 @@ montecarlo_main_loop(storage_model_t * storage, int64_t virtual_packet_flag, int print_progress(storage->no_of_packets, storage->no_of_packets); fprintf(stderr,"\n"); } + +void +create_vpacket (storage_model_t * storage, rpacket_t * packet, + rk_state *mt_state) +{ + if (storage->enable_biasing) + { + int64_t shell_id = rpacket_get_current_shell_id(packet); + double tau_bias = (storage->tau_bias[shell_id + 1] + + (storage->tau_bias[shell_id] - storage->tau_bias[shell_id + 1]) * + (storage->r_outer[shell_id] - rpacket_get_r (packet)) / + (storage->r_outer[shell_id] - storage->r_inner[shell_id])); + double vpacket_prob = exp(-tau_bias); + double event_random = rk_double (mt_state); + if (event_random < vpacket_prob) + { + packet->vpacket_weight = 1. / vpacket_prob; + montecarlo_one_packet (storage, packet, 1, mt_state); + } + } + else + { + montecarlo_one_packet (storage, packet, 1, mt_state); + } +} diff --git a/tardis/montecarlo/src/cmontecarlo.h b/tardis/montecarlo/src/cmontecarlo.h index c4521ca28eb..767017b7303 100644 --- a/tardis/montecarlo/src/cmontecarlo.h +++ b/tardis/montecarlo/src/cmontecarlo.h @@ -152,4 +152,8 @@ double sample_nu_free_bound(const rpacket_t * packet, const storage_model_t * st void continuum_emission(rpacket_t * packet, storage_model_t * storage, rk_state *mt_state, pt2sample_nu sample_nu_continuum, int64_t emission_type_id); +void +create_vpacket (storage_model_t * storage, rpacket_t * packet, + rk_state *mt_state); + #endif // TARDIS_CMONTECARLO_H diff --git a/tardis/montecarlo/src/rpacket.c b/tardis/montecarlo/src/rpacket.c index 0ca33211af4..cb52cddc698 100644 --- a/tardis/montecarlo/src/rpacket.c +++ b/tardis/montecarlo/src/rpacket.c @@ -50,5 +50,6 @@ rpacket_init (rpacket_t * packet, storage_model_t * storage, int packet_index, rpacket_set_virtual_packet_flag (packet, virtual_packet_flag); packet->chi_bf_tmp_partial = chi_bf_tmp_partial; packet->compute_chi_bf = true; + packet->vpacket_weight = 1.0; return ret_val; } diff --git a/tardis/montecarlo/src/rpacket.h b/tardis/montecarlo/src/rpacket.h index e6138fdd707..2a30546a837 100644 --- a/tardis/montecarlo/src/rpacket.h +++ b/tardis/montecarlo/src/rpacket.h @@ -60,6 +60,7 @@ typedef struct RPacket double *chi_bf_tmp_partial; int64_t macro_atom_activation_level; bool compute_chi_bf; + double vpacket_weight; } rpacket_t; static inline double rpacket_get_nu (const rpacket_t * packet) diff --git a/tardis/montecarlo/src/storage.h b/tardis/montecarlo/src/storage.h index b47f7af6b20..a408a9f7bc2 100644 --- a/tardis/montecarlo/src/storage.h +++ b/tardis/montecarlo/src/storage.h @@ -95,6 +95,8 @@ typedef struct StorageModel int full_relativity; double survival_probability; double tau_russian; + double *tau_bias; + int enable_biasing; } storage_model_t; #endif // TARDIS_STORAGE_H diff --git a/tardis/montecarlo/struct.py b/tardis/montecarlo/struct.py index 9e3054aa039..80f4b95c015 100644 --- a/tardis/montecarlo/struct.py +++ b/tardis/montecarlo/struct.py @@ -34,7 +34,8 @@ class RPacket(Structure): ('chi_bf', c_double), ('chi_bf_tmp_partial', POINTER(c_double)), ('macro_atom_activation_level', c_int64), - ('compute_chi_bf', c_bool) + ('compute_chi_bf', c_bool), + ('vpacket_weight', c_double) ] @@ -126,7 +127,11 @@ class StorageModel(Structure): ('bf_heating_estimator', POINTER(c_double)), ('ff_heating_estimator', POINTER(c_double)), ('stim_recomb_cooling_estimator', POINTER(c_double)), - ('full_relativity', c_int) + ('full_relativity', c_int), + ('survival_probability',c_double), + ('tau_russian', c_double), + ('tau_bias', POINTER(c_double)), + ('enable_biasing', c_int) ] diff --git a/tardis/montecarlo/tests/conftest.py b/tardis/montecarlo/tests/conftest.py index 792cb35a8ce..13cca00085e 100644 --- a/tardis/montecarlo/tests/conftest.py +++ b/tardis/montecarlo/tests/conftest.py @@ -46,7 +46,8 @@ def packet(): id=0, chi_cont=6.652486e-16, chi_bf_tmp_partial=(c_double * 2)(), - compute_chi_bf=True + compute_chi_bf=True, + vpacket_weight=1.0 ) @@ -120,6 +121,11 @@ def model(): bf_treatment=BoundFreeTreatment.LIN_INTERPOLATION.value, ff_heating_estimator=(c_double * 2)(*([0.0] * 2)), cont_edge2macro_level=(c_int64 * 6)(*([1] * 6)), + + survival_probability=0.0, + tau_russian=10.0, + tau_bias=(c_double * 3)(*([5.0, 0.5, 0.0])), + enable_biasing=0 ) From de83a13509ef5c90630df694e50b5bb76ecf6d72 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 29 Apr 2019 17:19:34 -0400 Subject: [PATCH 022/467] add changes builder to travis process (#921) --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 8487864eef6..cf227eb9146 100644 --- a/.travis.yml +++ b/.travis.yml @@ -53,6 +53,9 @@ script: - echo CC=$COMPILER python setup.py $SETUP_CMD - CC=$COMPILER python setup.py $SETUP_CMD - set -e + - conda install -y -c conda-forge nodejs + - npm install -g github-changes + - github-changes -o tardis-sn -r tardis --only-pulls --use-commit-body -f CHANGELOG.rst -k $GITHUB_CHANGES_OAUTH - python setup.py build_docs - pip install doctr - git lfs uninstall From fd57afc26546a9ae9c7fbe3d2c7b14e794c7b560 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 29 Apr 2019 17:28:08 -0400 Subject: [PATCH 023/467] Fix nlte normalization (#920) * Fix NLTE Normalization - issue #784 * Fix NLTE Normalization - issue #784 g.loc * Fix NLTE Normalization - issue #784 some more gs * Flip g_ratio in NLTE collision matrix to fit new atomic data - issue #784 * Fix NLTE Normalization - issue #784 even more gs --- tardis/io/atomic.py | 2 +- tardis/plasma/properties/partition_function.py | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/tardis/io/atomic.py b/tardis/io/atomic.py index a76174036a6..3ab59be373a 100644 --- a/tardis/io/atomic.py +++ b/tardis/io/atomic.py @@ -452,7 +452,7 @@ def _create_collision_coefficient_matrix(self): C_ul_matrix[level_number_lower, level_number_upper, :] = line.values[2:] delta_E_matrix[level_number_lower, level_number_upper] = line['delta_e'] #TODO TARDISATOMIC fix change the g_ratio to be the otherway round - I flip them now here. - g_ratio_matrix[level_number_lower, level_number_upper] = line['g_ratio'] + g_ratio_matrix[level_number_lower, level_number_upper] = 1/line['g_ratio'] self.C_ul_interpolator[species] = interpolate.interp1d( self.atom_data.collision_data_temperatures, C_ul_matrix) diff --git a/tardis/plasma/properties/partition_function.py b/tardis/plasma/properties/partition_function.py index 058dcb17bd1..cb209a123b2 100644 --- a/tardis/plasma/properties/partition_function.py +++ b/tardis/plasma/properties/partition_function.py @@ -124,7 +124,7 @@ def __init__(self, plasma_parent): def _main_nlte_calculation( self, atomic_data, nlte_data, t_electrons, j_blues, beta_sobolevs, general_level_boltzmann_factor, - previous_electron_densities): + previous_electron_densities, g): """ The core of the NLTE calculation, used with all possible config. options. @@ -189,14 +189,14 @@ def _main_nlte_calculation( 'collision data?') else: raise e - general_level_boltzmann_factor[i].loc[species] = \ - level_boltzmann_factor + general_level_boltzmann_factor[i].ix[species] = \ + level_boltzmann_factor * g.loc[species][0] / level_boltzmann_factor[0] return general_level_boltzmann_factor def _calculate_classical_nebular( self, t_electrons, lines, atomic_data, nlte_data, general_level_boltzmann_factor, j_blues, - previous_electron_densities): + previous_electron_densities, g): """ Performs NLTE calculations using the classical nebular treatment. All beta sobolev values taken as 1. @@ -210,13 +210,13 @@ def _calculate_classical_nebular( j_blues, beta_sobolevs, general_level_boltzmann_factor, - previous_electron_densities) + previous_electron_densities, g) return general_level_boltzmann_factor def _calculate_coronal_approximation( self, t_electrons, lines, atomic_data, nlte_data, general_level_boltzmann_factor, - previous_electron_densities): + previous_electron_densities, g): """ Performs NLTE calculations using the coronal approximation. All beta sobolev values taken as 1 and j_blues taken as 0. @@ -226,13 +226,13 @@ def _calculate_coronal_approximation( general_level_boltzmann_factor = self._main_nlte_calculation( atomic_data, nlte_data, t_electrons, j_blues, beta_sobolevs, general_level_boltzmann_factor, - previous_electron_densities) + previous_electron_densities, g) return general_level_boltzmann_factor def _calculate_general( self, t_electrons, lines, atomic_data, nlte_data, general_level_boltzmann_factor, j_blues, - previous_beta_sobolev, previous_electron_densities): + previous_beta_sobolev, previous_electron_densities, g): """ Full NLTE calculation without approximations. """ @@ -244,7 +244,7 @@ def _calculate_general( general_level_boltzmann_factor = self._main_nlte_calculation( atomic_data, nlte_data, t_electrons, j_blues, beta_sobolevs, general_level_boltzmann_factor, - previous_electron_densities) + previous_electron_densities, g) return general_level_boltzmann_factor From 6ecdd1e98cd3e5ff4a78fbacfd0a7e3caf0ec30e Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 29 Apr 2019 17:31:53 -0400 Subject: [PATCH 024/467] Revert "Fix nlte normalization (#920)" (#922) This reverts commit fd57afc26546a9ae9c7fbe3d2c7b14e794c7b560. --- tardis/io/atomic.py | 2 +- tardis/plasma/properties/partition_function.py | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/tardis/io/atomic.py b/tardis/io/atomic.py index 3ab59be373a..a76174036a6 100644 --- a/tardis/io/atomic.py +++ b/tardis/io/atomic.py @@ -452,7 +452,7 @@ def _create_collision_coefficient_matrix(self): C_ul_matrix[level_number_lower, level_number_upper, :] = line.values[2:] delta_E_matrix[level_number_lower, level_number_upper] = line['delta_e'] #TODO TARDISATOMIC fix change the g_ratio to be the otherway round - I flip them now here. - g_ratio_matrix[level_number_lower, level_number_upper] = 1/line['g_ratio'] + g_ratio_matrix[level_number_lower, level_number_upper] = line['g_ratio'] self.C_ul_interpolator[species] = interpolate.interp1d( self.atom_data.collision_data_temperatures, C_ul_matrix) diff --git a/tardis/plasma/properties/partition_function.py b/tardis/plasma/properties/partition_function.py index cb209a123b2..058dcb17bd1 100644 --- a/tardis/plasma/properties/partition_function.py +++ b/tardis/plasma/properties/partition_function.py @@ -124,7 +124,7 @@ def __init__(self, plasma_parent): def _main_nlte_calculation( self, atomic_data, nlte_data, t_electrons, j_blues, beta_sobolevs, general_level_boltzmann_factor, - previous_electron_densities, g): + previous_electron_densities): """ The core of the NLTE calculation, used with all possible config. options. @@ -189,14 +189,14 @@ def _main_nlte_calculation( 'collision data?') else: raise e - general_level_boltzmann_factor[i].ix[species] = \ - level_boltzmann_factor * g.loc[species][0] / level_boltzmann_factor[0] + general_level_boltzmann_factor[i].loc[species] = \ + level_boltzmann_factor return general_level_boltzmann_factor def _calculate_classical_nebular( self, t_electrons, lines, atomic_data, nlte_data, general_level_boltzmann_factor, j_blues, - previous_electron_densities, g): + previous_electron_densities): """ Performs NLTE calculations using the classical nebular treatment. All beta sobolev values taken as 1. @@ -210,13 +210,13 @@ def _calculate_classical_nebular( j_blues, beta_sobolevs, general_level_boltzmann_factor, - previous_electron_densities, g) + previous_electron_densities) return general_level_boltzmann_factor def _calculate_coronal_approximation( self, t_electrons, lines, atomic_data, nlte_data, general_level_boltzmann_factor, - previous_electron_densities, g): + previous_electron_densities): """ Performs NLTE calculations using the coronal approximation. All beta sobolev values taken as 1 and j_blues taken as 0. @@ -226,13 +226,13 @@ def _calculate_coronal_approximation( general_level_boltzmann_factor = self._main_nlte_calculation( atomic_data, nlte_data, t_electrons, j_blues, beta_sobolevs, general_level_boltzmann_factor, - previous_electron_densities, g) + previous_electron_densities) return general_level_boltzmann_factor def _calculate_general( self, t_electrons, lines, atomic_data, nlte_data, general_level_boltzmann_factor, j_blues, - previous_beta_sobolev, previous_electron_densities, g): + previous_beta_sobolev, previous_electron_densities): """ Full NLTE calculation without approximations. """ @@ -244,7 +244,7 @@ def _calculate_general( general_level_boltzmann_factor = self._main_nlte_calculation( atomic_data, nlte_data, t_electrons, j_blues, beta_sobolevs, general_level_boltzmann_factor, - previous_electron_densities, g) + previous_electron_densities) return general_level_boltzmann_factor From 1d0f495b4b50ff2740c1aa05d0b4ec2b1694ce3c Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 29 Apr 2019 17:59:41 -0400 Subject: [PATCH 025/467] add changelog more prominently. remove old tardis env --- docs/CHANGELOG.md | 1 + docs/changelog.rst | 3 --- docs/conf.py | 9 +++++++-- docs/index.rst | 2 +- tardis_env27.yml | 48 ---------------------------------------------- tardis_env3.yml | 1 + 6 files changed, 10 insertions(+), 54 deletions(-) create mode 120000 docs/CHANGELOG.md delete mode 100644 docs/changelog.rst delete mode 100644 tardis_env27.yml diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md new file mode 120000 index 00000000000..04c99a55caa --- /dev/null +++ b/docs/CHANGELOG.md @@ -0,0 +1 @@ +../CHANGELOG.md \ No newline at end of file diff --git a/docs/changelog.rst b/docs/changelog.rst deleted file mode 100644 index 76888fe1bf1..00000000000 --- a/docs/changelog.rst +++ /dev/null @@ -1,3 +0,0 @@ -.. _changelog: - -.. include:: ../CHANGELOG.rst diff --git a/docs/conf.py b/docs/conf.py index 4eeb17d705e..6a38332ed07 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -51,10 +51,15 @@ 'numpydoc', 'nbsphinx', 'sphinx.ext.autodoc', - 'sphinx-jsonschema' + 'sphinx-jsonschema', + 'recommonmark' ] -source_suffix = '.rst' +source_suffix = { + '.rst': 'restructuredtext', +# '.txt': 'markdown', + '.md': 'markdown', +} ## get's rid of many toctree contains errors: see https://github.com/phn/pytpm/issues/3#issuecomment-12133978 numpydoc_show_class_members = False extensions += ['matplotlib.sphinxext.plot_directive', diff --git a/docs/index.rst b/docs/index.rst index d91c7b8991e..249bff518c4 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -34,6 +34,7 @@ Using Tardis :maxdepth: 2 installation + CHANGELOG.md quickstart running/index examples/index @@ -62,7 +63,6 @@ Developing Tardis issues workflow/development_workflow runnints_tests - changelog ========== References diff --git a/tardis_env27.yml b/tardis_env27.yml deleted file mode 100644 index a5e219f647a..00000000000 --- a/tardis_env27.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: tardis - -channels: - - conda-forge - -dependencies: -- python=2.7 -- numpy=1.12 -- scipy=1 -- pandas=0.20 -- pytables -- h5py=2 -- matplotlib=2.0 -- astropy=1.3 -- numexpr=2.6 -- Cython=0.28.4 -- networkx=1.10 -- pytest=3.0 -- pyyaml=3.12 -- jsonschema=2.5.1 -- pyne=0.5 -- graphviz=2.38 -- pygraphviz - -# RTD requirements -- sphinx=1.5.1 -- nbconvert -- numpydoc=0.8 -- docutils=0.13.1 -- nbformat -- nbsphinx -- jupyter -#Coverage requirements -- coverage=3.7.1 -- requests=2.9.1 -- docopt=0.6.2 -- pytest-cov=2.2.1 -- codecov -#testing requirements -- git-lfs=2.4 -- pip: - - sphinx_bootstrap_theme - - sphinxcontrib-bibtex - - sphinxcontrib-tikz - - pytest-html==1.10.0 - - dokuwiki - - dot2tex - - sphinx-jsonschema diff --git a/tardis_env3.yml b/tardis_env3.yml index c757e460d5b..6095834602f 100644 --- a/tardis_env3.yml +++ b/tardis_env3.yml @@ -41,6 +41,7 @@ dependencies: - sphinx_bootstrap_theme - sphinxcontrib-bibtex - sphinx_rtd_theme +- recommonmark #Test/Coverage requirements - git-lfs From 038772449469857a39928f7cb048999473b0c04e Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 29 Apr 2019 18:02:05 -0400 Subject: [PATCH 026/467] fix the filename for changelog --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index cf227eb9146..61c059e6e49 100644 --- a/.travis.yml +++ b/.travis.yml @@ -55,7 +55,7 @@ script: - set -e - conda install -y -c conda-forge nodejs - npm install -g github-changes - - github-changes -o tardis-sn -r tardis --only-pulls --use-commit-body -f CHANGELOG.rst -k $GITHUB_CHANGES_OAUTH + - github-changes -o tardis-sn -r tardis --only-pulls --use-commit-body -f CHANGELOG.md -k $GITHUB_CHANGES_OAUTH - python setup.py build_docs - pip install doctr - git lfs uninstall From a044c55b576fc450db055af6e6fef360ddcc16e9 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 29 Apr 2019 18:03:04 -0400 Subject: [PATCH 027/467] add markdown changelog - remove rst changelog --- CHANGELOG.md | 432 +++++++++++++++++++++++++++ CHANGELOG.rst | 788 -------------------------------------------------- 2 files changed, 432 insertions(+), 788 deletions(-) create mode 100644 CHANGELOG.md delete mode 100644 CHANGELOG.rst diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000000..30f9620b1e9 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,432 @@ +## Change Log + +### upcoming (2019/04/29 20:48 +00:00) +- [#914](https://github.com/tardis-sn/tardis/pull/914) make python3 compatible (#914) (@wkerzendorf) +- [#902](https://github.com/tardis-sn/tardis/pull/902) general overhaul of the docs for 3.0 (#902) (@wkerzendorf) +- [#916](https://github.com/tardis-sn/tardis/pull/916) make python3 compatible (#916) (@wkerzendorf) +- [#915](https://github.com/tardis-sn/tardis/pull/915) Parsing STELLA files for TARDIS (#915) (@sarafina325) +- [#911](https://github.com/tardis-sn/tardis/pull/911) Use Russian roulette to kill v-packets with negligible weight (#911) (@chvogl) +- [#697](https://github.com/tardis-sn/tardis/pull/697) Relativity (#697) (@chvogl) + +### v3.0.a1 (2019/03/10 15:03 +00:00) +- [#901](https://github.com/tardis-sn/tardis/pull/901) .nojekyll added to docs (#901) (@debajyotidasgupta) +- [#897](https://github.com/tardis-sn/tardis/pull/897) add pytest azurepipelines (#897) (@wkerzendorf) +- [#896](https://github.com/tardis-sn/tardis/pull/896) Adding general build artefacts (#896) (@wkerzendorf) +- [#894](https://github.com/tardis-sn/tardis/pull/894) Azure pipeline for TARDIS (#894) (@wkerzendorf) +- [#893](https://github.com/tardis-sn/tardis/pull/893) add doctr to TARDIS (#893) (@wkerzendorf) +- [#892](https://github.com/tardis-sn/tardis/pull/892) adding azure-pipelines (#892) (@wkerzendorf) +- [#891](https://github.com/tardis-sn/tardis/pull/891) New template setup from astropy (#891) (@wkerzendorf) +- [#888](https://github.com/tardis-sn/tardis/pull/888) Update installation.rst (#888) (@nileshpatra) +- [#886](https://github.com/tardis-sn/tardis/pull/886) Pandas ix fix (#886) (@wkerzendorf) +- [#879](https://github.com/tardis-sn/tardis/pull/879) Python3 version of TARDIS (#879) (@wkerzendorf) +- [#881](https://github.com/tardis-sn/tardis/pull/881) Adds description of gcc problem to documentation (#881) (@ycamacho) +- [#859](https://github.com/tardis-sn/tardis/pull/859) Use interpolated values to do formal integral with more shells (#859) (@chvogl) +- [#873](https://github.com/tardis-sn/tardis/pull/873) Some small fixes related to the documentation and the building process (Fix #842) (#873) (@unoebauer) +- [#868](https://github.com/tardis-sn/tardis/pull/868) Add Travis Stages: Activate Integration tests (#868) (@unoebauer) +- [#866](https://github.com/tardis-sn/tardis/pull/866) Add Travis Caching and separate scripts for CI (#866) (@wkerzendorf) +- [#864](https://github.com/tardis-sn/tardis/pull/864) Unify unittest hdfs (#864) (@unoebauer) +- [#865](https://github.com/tardis-sn/tardis/pull/865) Adding CodeCov integration (#865) (@wkerzendorf) +- [#860](https://github.com/tardis-sn/tardis/pull/860) add call_back to run_tardis (#860) (@wkerzendorf) +- [#863](https://github.com/tardis-sn/tardis/pull/863) Thomson cross section: Continuation of PR #688 (#863) (@unoebauer) +- [#850](https://github.com/tardis-sn/tardis/pull/850) Add full test for formal integral method (#850) (@unoebauer) +- [#861](https://github.com/tardis-sn/tardis/pull/861) Describe refdata update and workflow refactor (#861) (@wkerzendorf) +- [#848](https://github.com/tardis-sn/tardis/pull/848) Add capability to store information about the plasma state during iterations (#848) (@unoebauer) +- [#857](https://github.com/tardis-sn/tardis/pull/857) Refactor logging (#857) (@wkerzendorf) +- [#856](https://github.com/tardis-sn/tardis/pull/856) Extend formal integral to line_interaction_type macroatom (#856) (@chvogl) +- [#855](https://github.com/tardis-sn/tardis/pull/855) Make the conda-forge channel the only channel (#855) (@wkerzendorf) +- [#853](https://github.com/tardis-sn/tardis/pull/853) Fix formal integral (#853) (@chvogl) +- [#849](https://github.com/tardis-sn/tardis/pull/849) Missing refdata (#849) (@wkerzendorf) +- [#851](https://github.com/tardis-sn/tardis/pull/851) add atomic data description (#851) (@wkerzendorf) +- [#845](https://github.com/tardis-sn/tardis/pull/845) Update Documentation: new location of tardis_example (#845) (@unoebauer) +- [#843](https://github.com/tardis-sn/tardis/pull/843) Fix issue with custom_composition reader (#843) (@unoebauer) +- [#844](https://github.com/tardis-sn/tardis/pull/844) Remove bbsampling from schema file (#844) (@pfreddy) +- [#837](https://github.com/tardis-sn/tardis/pull/837) Add json sphinx (#837) (@wkerzendorf) +- [#841](https://github.com/tardis-sn/tardis/pull/841) Fixed indentation and position of delta_treatment in plasma/standard_plasmas.py (#841) (@Heringer-Epson) +- [#838](https://github.com/tardis-sn/tardis/pull/838) fix cython version to specific commit (#838) (@wkerzendorf) +- [#821](https://github.com/tardis-sn/tardis/pull/821) Simplify convergence strategies (#821) (@unoebauer) +- [#833](https://github.com/tardis-sn/tardis/pull/833) restructure landing page to use notebooks (#833) (@wkerzendorf) +- [#832](https://github.com/tardis-sn/tardis/pull/832) Fixes #830 (#832) (@unoebauer) + +### v2_test3 (2018/06/18 20:13 +00:00) +- [#829](https://github.com/tardis-sn/tardis/pull/829) build bleeding edge cython (#829) (@wkerzendorf) +- [#828](https://github.com/tardis-sn/tardis/pull/828) trying to get travis to build (#828) (@wkerzendorf) +- [#827](https://github.com/tardis-sn/tardis/pull/827) Update travis link to miniconda (#827) (@unoebauer) +- [#826](https://github.com/tardis-sn/tardis/pull/826) Remove docu refs to tardis_example.tar.gz (#826) (@unoebauer) +- [#820](https://github.com/tardis-sn/tardis/pull/820) update of mailmap (#820) (@wkerzendorf) +- [#819](https://github.com/tardis-sn/tardis/pull/819) Reintroduce and update changelog (#819) (@unoebauer) +- [#815](https://github.com/tardis-sn/tardis/pull/815) Update and Fix Documentation (#815) (@unoebauer) +- [#816](https://github.com/tardis-sn/tardis/pull/816) Remove old and broken badges (@unoebauer) +- [#814](https://github.com/tardis-sn/tardis/pull/814) Fix numpydoc problem (@wkerzendorf, @unoebauer) + +### v2.0 (2018/04/05 13:03 +00:00) +- [#812](https://github.com/tardis-sn/tardis/pull/812) Update of documentation (@unoebauer) +- [#809](https://github.com/tardis-sn/tardis/pull/809) fix dependencies for tardis conda env (#809) (@wkerzendorf) +- [#761](https://github.com/tardis-sn/tardis/pull/761) Add caching for integrated spectrum: Fix #760 (@unoebauer) +- [#715](https://github.com/tardis-sn/tardis/pull/715) Merge 'generate_reference_path' and 'reference_path' in integration tests (bug #672) (@rinklejain) +- [#801](https://github.com/tardis-sn/tardis/pull/801) Decay of isotopes branch (@wkerzendorf, @vg3095, @pfreddy) +- [#806](https://github.com/tardis-sn/tardis/pull/806) Fix reference dictionary problem (@pfreddy) +- [#803](https://github.com/tardis-sn/tardis/pull/803) include yml files in MANIFEST (@wkerzendorf) +- [#802](https://github.com/tardis-sn/tardis/pull/802) Fix for PR #801 (@vg3095) +- [#799](https://github.com/tardis-sn/tardis/pull/799) tardis/plasma/standard_plasmas.py: old database files warning (@laudb) +- [#797](https://github.com/tardis-sn/tardis/pull/797) Minor Updates: Fixes for #521 and #699 (@unoebauer) +- [#796](https://github.com/tardis-sn/tardis/pull/796) Prevent pandas SettingWithCopyWarning by copying DataFrames when slicing (@lukeshingles) +- [#795](https://github.com/tardis-sn/tardis/pull/795) Force deactivate LaTeX in GUI - Fix #441 (@unoebauer) +- [#793](https://github.com/tardis-sn/tardis/pull/793) Add pyside to requirements (needed for GUI) (@wkerzendorf, @unoebauer) +- [#794](https://github.com/tardis-sn/tardis/pull/794) add new readthedocs.yml (@wkerzendorf) +- [#792](https://github.com/tardis-sn/tardis/pull/792) Fix compatibility with networkx 2.0 (@lukeshingles) +- [#791](https://github.com/tardis-sn/tardis/pull/791) Propagate changes to the line index into the GUI code (@yeganer) +- [#786](https://github.com/tardis-sn/tardis/pull/786) The final carsus merge (@yeganer, @ftsamis, @mishinma) +- [#782](https://github.com/tardis-sn/tardis/pull/782) Plasma write_to_tex/dot unit tests (@vg3095) +- [#781](https://github.com/tardis-sn/tardis/pull/781) Omit coverage of test related files (@vg3095) +- [#785](https://github.com/tardis-sn/tardis/pull/785) [DOC] Update Running tests doc (@vg3095) +- [#774](https://github.com/tardis-sn/tardis/pull/774) Replace Comparison values in Plasma Unit Tests with reference HDF file (@vg3095) +- [#780](https://github.com/tardis-sn/tardis/pull/780) LevelBoltzmannFactorNLTE.from_config is now a staticmethod (@yeganer) +- [#778](https://github.com/tardis-sn/tardis/pull/778) Fix NLTE (@yeganer) +- [#776](https://github.com/tardis-sn/tardis/pull/776) Fix compatibility bug in radiative_properties (@yeganer) +- [#779](https://github.com/tardis-sn/tardis/pull/779) Save coverage report when tests use tardis-refdata (@vg3095) +- [#775](https://github.com/tardis-sn/tardis/pull/775) Transition from atomic-dataset config option to tardis-refdata (@vg3095) +- [#772](https://github.com/tardis-sn/tardis/pull/772) [TEP007] CMFGEN density parser (@vg3095) +- [#771](https://github.com/tardis-sn/tardis/pull/771) [TEP007] Add cmfgen2tardis script (@vg3095) +- [#757](https://github.com/tardis-sn/tardis/pull/757) [TEP007] Decay and merge isotopic abundance dataframe (@vg3095) +- [#769](https://github.com/tardis-sn/tardis/pull/769) [TEP014] [DOC] Updated to_hdf notebook (@vg3095) +- [#759](https://github.com/tardis-sn/tardis/pull/759) Formal Integral: including electron scattering (@unoebauer, @yeganer) +- [#768](https://github.com/tardis-sn/tardis/pull/768) [TEP014] Simulation HDF and deprecated to_hdf cleanup. (@vg3095) +- [#773](https://github.com/tardis-sn/tardis/pull/773) Update Documentation (@unoebauer) +- [#767](https://github.com/tardis-sn/tardis/pull/767) [TEP007] Docs for isotope config (@vg3095) +- [#764](https://github.com/tardis-sn/tardis/pull/764) [TEP007] Isotope stratified file support (@vg3095) +- [#752](https://github.com/tardis-sn/tardis/pull/752) [TEP014] PlasmaWriterMixin (@vg3095) +- [#748](https://github.com/tardis-sn/tardis/pull/748) [TEP014] Update Runner and Spectrum classes to use HDFWriter + Unit Tests (@vg3095) +- [#762](https://github.com/tardis-sn/tardis/pull/762) [TEP007] Isotope uniform config option (@vg3095) +- [#765](https://github.com/tardis-sn/tardis/pull/765) Attempt to fix up the GUI (@ssim, @unoebauer) +- [#13](https://github.com/tardis-sn/tardis/pull/13) Introduce proper masking for GUI (addition to PR #765) (@unoebauer) +- [#1](https://github.com/tardis-sn/tardis/pull/1) Streamline the OMP implementation (@yeganer) +- [#756](https://github.com/tardis-sn/tardis/pull/756) [TEP007] [WIP] Isotope Abundances class (@vg3095, @wkerzendorf) +- [#758](https://github.com/tardis-sn/tardis/pull/758) Add new version to tardis_env27 and add pyne (@wkerzendorf) +- [#753](https://github.com/tardis-sn/tardis/pull/753) [TEP014][DOC] HDFWriter Documentation (@vg3095) +- [#740](https://github.com/tardis-sn/tardis/pull/740) [GSoC] Formal integral Project (@yeganer) +- [#747](https://github.com/tardis-sn/tardis/pull/747) [TEP014] Update Model and Density classes to use HDFWriter + Unit Tests (@vg3095) +- [#750](https://github.com/tardis-sn/tardis/pull/750) [TEP005][QOL] Add MontecarloRunner.spectrum_integrated (@yeganer) +- [#749](https://github.com/tardis-sn/tardis/pull/749) [TEP014] Change name of HDFWriter to HDFWriterMixin (@vg3095) +- [#745](https://github.com/tardis-sn/tardis/pull/745) [TEP005][DOC] Documentation (@yeganer) +- [#751](https://github.com/tardis-sn/tardis/pull/751) [QOL] Add default axis to TARDISSpectrum.plot (@yeganer) +- [#743](https://github.com/tardis-sn/tardis/pull/743) Fix bug in plasma (@yeganer) +- [#744](https://github.com/tardis-sn/tardis/pull/744) [TEP014] Added HDFWriter class + Unit Tests (@vg3095) +- [#746](https://github.com/tardis-sn/tardis/pull/746) [TEP005][CONFIG] Prevent incompatible configurations (@yeganer) +- [#741](https://github.com/tardis-sn/tardis/pull/741) Add unit tests for the formal integral (@yeganer) +- [#742](https://github.com/tardis-sn/tardis/pull/742) Fix clash in RTD dependencies (@yeganer) +- [#735](https://github.com/tardis-sn/tardis/pull/735) Move common ctest fixtures into conftest.py (@yeganer) +- [#729](https://github.com/tardis-sn/tardis/pull/729) Refactor spectrum (@yeganer) +- [#730](https://github.com/tardis-sn/tardis/pull/730) Fix test_plasma_simple not skipping properly (@yeganer) +- [#712](https://github.com/tardis-sn/tardis/pull/712) Colorize Logger (@vg3095) +- [#718](https://github.com/tardis-sn/tardis/pull/718) Unit test for untested method of montecarlo simulation code (@suyashgupta20) +- [#724](https://github.com/tardis-sn/tardis/pull/724) Rebase PR #678 (@yeganer) +- [#709](https://github.com/tardis-sn/tardis/pull/709) Add note about broken GUI to docu (@unoebauer) +- [#708](https://github.com/tardis-sn/tardis/pull/708) Add new installation instructions (@wkerzendorf) +- [#704](https://github.com/tardis-sn/tardis/pull/704) Fix ignoring model tests (@ftsamis) +- [#700](https://github.com/tardis-sn/tardis/pull/700) Add contributing guidelines (@wkerzendorf) +- [#686](https://github.com/tardis-sn/tardis/pull/686) converted spectrum_frequency (@chinmay0301) +- [#696](https://github.com/tardis-sn/tardis/pull/696) Add missing diagnostics property to runner's to_hdf list (@unoebauer) +- [#694](https://github.com/tardis-sn/tardis/pull/694) Significantly reduce peak memory usage when vpacket logging is enabled (@ftsamis) +- [#682](https://github.com/tardis-sn/tardis/pull/682) Import montecarlo.base in the __init__ module of the package. (@ftsamis) +- [#670](https://github.com/tardis-sn/tardis/pull/670) Integrate continuum interactions into cmontecarlo (@chvogl) +- [#652](https://github.com/tardis-sn/tardis/pull/652) [TEP006] Aggregate TARDIS restructure and configuration system cleanup (@ftsamis) +- [#677](https://github.com/tardis-sn/tardis/pull/677) Update link to tardis_example.yml in documentation - Fix #676 (@unoebauer) +- [#674](https://github.com/tardis-sn/tardis/pull/674) Change matplotlib backend - fix test_integration remote plotting issue (@unoebauer) +- [#664](https://github.com/tardis-sn/tardis/pull/664) Kd final test (@wkerzendorf, @kdexd, @yeganer) +- [#21](https://github.com/tardis-sn/tardis/pull/21) fKd final test (@yeganer) +- [#668](https://github.com/tardis-sn/tardis/pull/668) change to tardis atom data on git lfs (@wkerzendorf) +- [#666](https://github.com/tardis-sn/tardis/pull/666) Remove News from main TARDIS github page (@unoebauer) +- [#667](https://github.com/tardis-sn/tardis/pull/667) Update SOCIS and GSOC students credits (@unoebauer) +- [#665](https://github.com/tardis-sn/tardis/pull/665) Add to_hdf compression (@yeganer) +- [#663](https://github.com/tardis-sn/tardis/pull/663) Develop (@kdexd) +- [#657](https://github.com/tardis-sn/tardis/pull/657) Require pyyaml 3.12 (@ftsamis) +- [#659](https://github.com/tardis-sn/tardis/pull/659) Update installation docs (@ftsamis) +- [#653](https://github.com/tardis-sn/tardis/pull/653) Facility to provide per-setup atom data as well as save report locally. (@kdexd) +- [#641](https://github.com/tardis-sn/tardis/pull/641) Fix detailed radiative rates (@yeganer) +- [#642](https://github.com/tardis-sn/tardis/pull/642) Use pytest-html==1.10.0, modify DokuReport class accordingly. (@kdexd) +- [#630](https://github.com/tardis-sn/tardis/pull/630) [IntegrationTests] Overview page on Dokuwiki. Running the integration tests will update an overview page on DokuWiki. (@kdexd) +- [#620](https://github.com/tardis-sn/tardis/pull/620) Runner script to automate execution of integration tests. (@kdexd) +- [#628](https://github.com/tardis-sn/tardis/pull/628) Remove exponent property from yaml files with exponential density (@ftsamis) +- [#626](https://github.com/tardis-sn/tardis/pull/626) Revert "Add exponent as a property for exponential density" (@ftsamis) +- [#542](https://github.com/tardis-sn/tardis/pull/542) Updates to He NLTE treatment. (@aoifeboyle) +- [#612](https://github.com/tardis-sn/tardis/pull/612) Add facility to generate and accept HDF files as reference data for Integration Tests. (@kdexd) +- [#614](https://github.com/tardis-sn/tardis/pull/614) Omit the integration_tests when running coveralls (@yeganer) +- [#619](https://github.com/tardis-sn/tardis/pull/619) Fixed incorrect name in error message (@Tobychev) +- [#618](https://github.com/tardis-sn/tardis/pull/618) to_hdf: If only the last run is stored, do not add a counter in the name (@ftsamis) +- [#617](https://github.com/tardis-sn/tardis/pull/617) Add a to_hdf method on TARDISSpectrum (@ftsamis) +- [#600](https://github.com/tardis-sn/tardis/pull/600) Parametrize the Slow Test class with two setups. (@kdexd) +- [#613](https://github.com/tardis-sn/tardis/pull/613) Fix bug in montecarlo.pyx (@yeganer) +- [#595](https://github.com/tardis-sn/tardis/pull/595) Line absorption rate estimator (@Tobychev) +- [#606](https://github.com/tardis-sn/tardis/pull/606) Merge to_hdf (@ftsamis, @wkerzendorf) +- [#585](https://github.com/tardis-sn/tardis/pull/585) [TEP002] Add a to_hdf method to the MontecarloRunner (#585) (@ftsamis) +- [#597](https://github.com/tardis-sn/tardis/pull/597) Use abundances, densities filepaths relative to w7 config file. (@kdexd) +- [#569](https://github.com/tardis-sn/tardis/pull/569) Added a conda environment for tardis (@wkerzendorf) +- [#565](https://github.com/tardis-sn/tardis/pull/565) Change the way AtomData quantities are initialized (@yeganer) +- [#599](https://github.com/tardis-sn/tardis/pull/599) Update the tardis_example tar file provided in the documentation. (@ftsamis) +- [#598](https://github.com/tardis-sn/tardis/pull/598) Fix convergence handling in run_legacy_simulation - fix issue #593 (@unoebauer) +- [#590](https://github.com/tardis-sn/tardis/pull/590) Link images of comparison plots in DokuReport using hookwrapper. (@kdexd) +- [#591](https://github.com/tardis-sn/tardis/pull/591) Fix path of CSS and JS files used in html report. (@kdexd) +- [#594](https://github.com/tardis-sn/tardis/pull/594) Provide tardis.yaml_load shortcut (@yeganer) +- [#592](https://github.com/tardis-sn/tardis/pull/592) Fix virt energy (@yeganer) +- [#583](https://github.com/tardis-sn/tardis/pull/583) Subclass pytest-html's HTMLReport to DokuReport class for report generation and upload (@kdexd) +- [#587](https://github.com/tardis-sn/tardis/pull/587) Move the three spectra attributes from Radial1DModel to MontecarloRunner (@ftsamis) +- [#578](https://github.com/tardis-sn/tardis/pull/578) Shift slow test related pytest hooks in lower level conftest.py (#578) (@kdexd) +- [#581](https://github.com/tardis-sn/tardis/pull/581) Update several files to match package_template (@yeganer) +- [#576](https://github.com/tardis-sn/tardis/pull/576) [config-system] Validator rewrite: Use jsonschema (@ftsamis) +- [#575](https://github.com/tardis-sn/tardis/pull/575) Replace misused calls to yaml.load with a helper function. (@ftsamis) +- [#570](https://github.com/tardis-sn/tardis/pull/570) Enable generation of html report of integration tests, and upload to dokuwiki. (@kdexd) +- [#574](https://github.com/tardis-sn/tardis/pull/574) tardis/base.py: Remove duplicate code from run_tardis (@ftsamis) +- [#573](https://github.com/tardis-sn/tardis/pull/573) io/util.py (YAMLLoader): Use OrderedDict to store loaded YAML (@ftsamis) +- [#572](https://github.com/tardis-sn/tardis/pull/572) Change the way YAMLLoader resolves some properties (@ftsamis) +- [#532](https://github.com/tardis-sn/tardis/pull/532) Documentation overhaul (@unoebauer, @kdexd, @chvogl) +- [#571](https://github.com/tardis-sn/tardis/pull/571) data/tardis_config_definition.yml: Set the exponent property as mandatory when density is exponential. (#571) (@ftsamis) +- [#566](https://github.com/tardis-sn/tardis/pull/566) Initial laydown of comparison plots for TestW7. (#566) (@kdexd) +- [#567](https://github.com/tardis-sn/tardis/pull/567) Accept keyword arguments for Configuration.from_yaml (@yeganer) +- [#561](https://github.com/tardis-sn/tardis/pull/561) TestW7: Assertions for spectrum quantities, fixture for handling baseline data. (@kdexd) +- [#515](https://github.com/tardis-sn/tardis/pull/515) [config-system] Add a custom YAML Loader to parse astropy quantities (@ftsamis) +- [#555](https://github.com/tardis-sn/tardis/pull/555) Use pytest's monkeypatch.chdir to change the working directory in the config_reader tests (@ftsamis, @lukeshingles) +- [#558](https://github.com/tardis-sn/tardis/pull/558) Integration Test class for Stratified W7 setup. (@kdexd) +- [#557](https://github.com/tardis-sn/tardis/pull/557) Enable skipping slow tests. (@kdexd) +- [#544](https://github.com/tardis-sn/tardis/pull/544) Continue cmontecarlo tests refactor. Extend #530. (@kdexd) +- [#543](https://github.com/tardis-sn/tardis/pull/543) Fix issue #535: Treat rel. paths inside config relative to the config file (@lukeshingles, @ftsamis) +- [#1](https://github.com/tardis-sn/tardis/pull/1) Write tests for the issue #535 fix. (@ftsamis) +- [#551](https://github.com/tardis-sn/tardis/pull/551) Add SOCIS 2016 advertisement (@unoebauer) +- [#547](https://github.com/tardis-sn/tardis/pull/547) Fix Issue #548 (@kdexd) +- [#545](https://github.com/tardis-sn/tardis/pull/545) added mailmap to compile the commits for each person (#545) (@wkerzendorf) +- [#539](https://github.com/tardis-sn/tardis/pull/539) Adding OSX to our travis build (#539) (@wkerzendorf) +- [#541](https://github.com/tardis-sn/tardis/pull/541) Move progress bar update after calculation (#541) (@yeganer) +- [#540](https://github.com/tardis-sn/tardis/pull/540) Mirroring C enums in Python for CMontecarlo tests. (@kdexd) +- [#538](https://github.com/tardis-sn/tardis/pull/538) Upgrading to the new Readthedocs infrastructure (#538) (@wkerzendorf) +- [#530](https://github.com/tardis-sn/tardis/pull/530) Refactor cmontecarlo testing framework (@kdexd) +- [#537](https://github.com/tardis-sn/tardis/pull/537) Ignore invalid OpenMP nthreads values (#537) (@yeganer) +- [#533](https://github.com/tardis-sn/tardis/pull/533) Remove rpacket.recently_crossed_boundary flag (@yeganer) +- [#514](https://github.com/tardis-sn/tardis/pull/514) Performance (@yeganer) +- [#531](https://github.com/tardis-sn/tardis/pull/531) Organize headers in C-Extension (@yeganer) +- [#526](https://github.com/tardis-sn/tardis/pull/526) Docs: Include conda-requirements in installation.rst (@kdexd) +- [#519](https://github.com/tardis-sn/tardis/pull/519) Documentation:Installation modify command (@yeganer) +- [#510](https://github.com/tardis-sn/tardis/pull/510) Updates requirements to solve libgfortran error. Fixes #509 (@kdexd) +- [#495](https://github.com/tardis-sn/tardis/pull/495) Fix energy conservation (@unoebauer) +- [#486](https://github.com/tardis-sn/tardis/pull/486) Bugfix radiative rates type detailed (@chvogl, @unoebauer) +- [#488](https://github.com/tardis-sn/tardis/pull/488) Fix indentation in c extension (@yeganer) +- [#494](https://github.com/tardis-sn/tardis/pull/494) Fix #493 (@yeganer) +- [#1](https://github.com/tardis-sn/tardis/pull/1) Add simple test for j_blue_estimator (@unoebauer) +- [#491](https://github.com/tardis-sn/tardis/pull/491) Include IDE specific auto-generated files in .gitignore. Fixes #490 (@kdexd) +- [#485](https://github.com/tardis-sn/tardis/pull/485) Montecarlo progress (@yeganer) +- [#457](https://github.com/tardis-sn/tardis/pull/457) Fix Issue #454 (@yeganer) +- [#484](https://github.com/tardis-sn/tardis/pull/484) Minor improvement of vpacket logging scheme (@unoebauer) +- [#479](https://github.com/tardis-sn/tardis/pull/479) added units to test_simulation.py (@mishinma) +- [#469](https://github.com/tardis-sn/tardis/pull/469) Changed the Link for AstroPy's dev workflow (@souravsingh) +- [#481](https://github.com/tardis-sn/tardis/pull/481) Introcuding safe_malloc and safe_realloc macros: fixes #480 (@unoebauer) +- [#475](https://github.com/tardis-sn/tardis/pull/475) Reorganize import statements in atomic.py (@Pratik151) +- [#471](https://github.com/tardis-sn/tardis/pull/471) Quickfix to solve Issue #455 and #464 (@yeganer) +- [#472](https://github.com/tardis-sn/tardis/pull/472) fixed build of documentation on readthedocs (@wkerzendorf) +- [#461](https://github.com/tardis-sn/tardis/pull/461) Bugfix test cmontecarlo (@yeganer) +- [#452](https://github.com/tardis-sn/tardis/pull/452) Build fix and nthreads fix - fixes #356 (@unoebauer) +- [#450](https://github.com/tardis-sn/tardis/pull/450) Checking for zero-volume cells: Fixes issue #79 (@unoebauer) +- [#449](https://github.com/tardis-sn/tardis/pull/449) added test to verify virtual spectrum (@unoebauer) +- [#446](https://github.com/tardis-sn/tardis/pull/446) calculate virtual spectrum independently of vpacket loggin - fixes #445 (@unoebauer) +- [#440](https://github.com/tardis-sn/tardis/pull/440) started addressing issue #436 (@unoebauer) +- [#426](https://github.com/tardis-sn/tardis/pull/426) Simulation - restructure (@wkerzendorf) +- [#434](https://github.com/tardis-sn/tardis/pull/434) updated the .travis.yml file to do a rehash before executing conda (@wkerzendorf) +- [#433](https://github.com/tardis-sn/tardis/pull/433) Optional vpacket logging WIP (@tardis-sn) +- [#425](https://github.com/tardis-sn/tardis/pull/425) Updated nlte.rst (@souravsingh) +- [#424](https://github.com/tardis-sn/tardis/pull/424) added a new requirement for astropy (@wkerzendorf) +- [#1](https://github.com/tardis-sn/tardis/pull/1) Update nlte.rst (@souravsingh) +- [#375](https://github.com/tardis-sn/tardis/pull/375) made sure that atomic does not reinsert the index into the dataframe (@wkerzendorf) +- [#420](https://github.com/tardis-sn/tardis/pull/420) Memory issue (@wkerzendorf) +- [#416](https://github.com/tardis-sn/tardis/pull/416) added new version requirements for pandas and astropy (@wkerzendorf) +- [#414](https://github.com/tardis-sn/tardis/pull/414) Improvements to He approximation. (@aoifeboyle) +- [#413](https://github.com/tardis-sn/tardis/pull/413) WIP Docstrings (@wkerzendorf) +- [#412](https://github.com/tardis-sn/tardis/pull/412) Fix for zeta issues. (@wkerzendorf) +- [#3](https://github.com/tardis-sn/tardis/pull/3) Plasma/ab zeta fix (@wkerzendorf) +- [#410](https://github.com/tardis-sn/tardis/pull/410) WIP: Cleaning up plasma (@wkerzendorf) +- [#399](https://github.com/tardis-sn/tardis/pull/399) Plasma optimization (@wkerzendorf, @mreineck) +- [#2](https://github.com/tardis-sn/tardis/pull/2) fix for chi_0 problem (@wkerzendorf) +- [#19](https://github.com/tardis-sn/tardis/pull/19) Plasma optimisation fix. (@aoifeboyle) +- [#404](https://github.com/tardis-sn/tardis/pull/404) Montecarlo/new packet source (@wkerzendorf) +- [#407](https://github.com/tardis-sn/tardis/pull/407) Organising of plasma base files. (@aoifeboyle) +- [#405](https://github.com/tardis-sn/tardis/pull/405) Pandas macroatom issue fix (@wkerzendorf) +- [#406](https://github.com/tardis-sn/tardis/pull/406) Numerical He NLTE. (@aoifeboyle) +- [#401](https://github.com/tardis-sn/tardis/pull/401) Alternative fix for issue #393 (@mreineck) +- [#398](https://github.com/tardis-sn/tardis/pull/398) More cleanups (@mreineck) +- [#400](https://github.com/tardis-sn/tardis/pull/400) Change to NLTE properties (@aoifeboyle) +- [#397](https://github.com/tardis-sn/tardis/pull/397) Montecarlo/memoryview (@wkerzendorf) +- [#396](https://github.com/tardis-sn/tardis/pull/396) added virt_packet properties to to_hdf5 list (Kromer plot) (@unoebauer) +- [#391](https://github.com/tardis-sn/tardis/pull/391) More work on cmontecarlo.c and the unit tests (@mreineck) +- [#364](https://github.com/tardis-sn/tardis/pull/364) added tardis stats (@wkerzendorf) +- [#392](https://github.com/tardis-sn/tardis/pull/392) Consistency between old virtual packet arrays and new ones introduced in PR 384 (@unoebauer) +- [#389](https://github.com/tardis-sn/tardis/pull/389) changes to address issue #388 (@mreineck) +- [#386](https://github.com/tardis-sn/tardis/pull/386) improve inlining specifications and fix a few problems (@mreineck) +- [#384](https://github.com/tardis-sn/tardis/pull/384) Minor changes in Monte Carlo and model part for Kromer plots (@unoebauer) +- [#374](https://github.com/tardis-sn/tardis/pull/374) WIP: Helium approx. (@wkerzendorf) +- [#382](https://github.com/tardis-sn/tardis/pull/382) Improvements to plasma graph (@aoifeboyle) +- [#381](https://github.com/tardis-sn/tardis/pull/381) Fix to plasma issue with GUI. (@aoifeboyle) +- [#379](https://github.com/tardis-sn/tardis/pull/379) Fix of to_hdf5. (@aoifeboyle) +- [#377](https://github.com/tardis-sn/tardis/pull/377) Plasma static methods (@aoifeboyle) +- [#373](https://github.com/tardis-sn/tardis/pull/373) Removing test_plasma_nlte.py. (@aoifeboyle) +- [#372](https://github.com/tardis-sn/tardis/pull/372) Correcting some old plasma tests. (@aoifeboyle) +- [#304](https://github.com/tardis-sn/tardis/pull/304) Plasma restructure (@wkerzendorf) +- [#370](https://github.com/tardis-sn/tardis/pull/370) Removed some tests temporarily. (@aoifeboyle) +- [#369](https://github.com/tardis-sn/tardis/pull/369) Removed import plasma_array (@aoifeboyle) +- [#368](https://github.com/tardis-sn/tardis/pull/368) Fixing plasma merge (@aoifeboyle) +- [#367](https://github.com/tardis-sn/tardis/pull/367) preparing for the new container archictecture used by travis (@wkerzendorf) +- [#365](https://github.com/tardis-sn/tardis/pull/365) LTE Plasma Test (@aoifeboyle) +- [#361](https://github.com/tardis-sn/tardis/pull/361) Added formulae to graph. (@aoifeboyle) +- [#360](https://github.com/tardis-sn/tardis/pull/360) Rebasedvirtrunner (@orbitfold, @wkerzendorf) +- [#362](https://github.com/tardis-sn/tardis/pull/362) Adjusted stimulated emission factor for NLTE. (@aoifeboyle) +- [#355](https://github.com/tardis-sn/tardis/pull/355) Add with-openmp to develop (@orbitfold) +- [#354](https://github.com/tardis-sn/tardis/pull/354) added print statement for openmp (@wkerzendorf) +- [#350](https://github.com/tardis-sn/tardis/pull/350) Tidying/Testing/Documenting Plasma (@aoifeboyle) +- [#352](https://github.com/tardis-sn/tardis/pull/352) Attempt at solution. (@aoifeboyle) +- [#330](https://github.com/tardis-sn/tardis/pull/330) [GSoC 2015 WIP] Testing other montecarlo functions (@kaushik94) +- [#347](https://github.com/tardis-sn/tardis/pull/347) NLTE (@aoifeboyle) +- [#325](https://github.com/tardis-sn/tardis/pull/325) Bound-free interactions (@chvogl) +- [#344](https://github.com/tardis-sn/tardis/pull/344) Plasma/multiple outputs (@aoifeboyle) +- [#346](https://github.com/tardis-sn/tardis/pull/346) linked the plasma documentation again (@wkerzendorf) +- [#338](https://github.com/tardis-sn/tardis/pull/338) OpenMP WIP (@orbitfold) +- [#343](https://github.com/tardis-sn/tardis/pull/343) Plasma/multi output (@wkerzendorf) +- [#17](https://github.com/tardis-sn/tardis/pull/17) Fixes. (@aoifeboyle) +- [#324](https://github.com/tardis-sn/tardis/pull/324) Gui package (WIP) (@gautam1168) +- [#327](https://github.com/tardis-sn/tardis/pull/327) [GSoC 2015 MRG] Testing getters setters (@kaushik94) +- [#322](https://github.com/tardis-sn/tardis/pull/322) Updating the gui documentation. (@gautam1168) +- [#296](https://github.com/tardis-sn/tardis/pull/296) Gui with menubars(WIP) (@gautam1168) +- [#320](https://github.com/tardis-sn/tardis/pull/320) virtual packets frequency cut (@unoebauer) +- [#314](https://github.com/tardis-sn/tardis/pull/314) Installation FAQ (@wkerzendorf) +- [#310](https://github.com/tardis-sn/tardis/pull/310) A more detailed description of the montecarlo process (@wkerzendorf) +- [#301](https://github.com/tardis-sn/tardis/pull/301) [GSoC 2015 MRG] Restructuring Montecarlo (@kaushik94) +- [#234](https://github.com/tardis-sn/tardis/pull/234) Removing usage of yield in test_utils.py (@kaushik94) +- [#299](https://github.com/tardis-sn/tardis/pull/299) Test of model_reader.py (@wkerzendorf, @ssim) +- [#288](https://github.com/tardis-sn/tardis/pull/288) -fixed discrepancy concerning hold_iterations (@unoebauer) +- [#286](https://github.com/tardis-sn/tardis/pull/286) Proposal for a new to HD5 function. (@mklauser) +- [#283](https://github.com/tardis-sn/tardis/pull/283) fixed the reader for the older Paper1 format yaml files (@wkerzendorf) +- [#269](https://github.com/tardis-sn/tardis/pull/269) Miscellaneous README changes (@iKevinY) +- [#251](https://github.com/tardis-sn/tardis/pull/251) gui.py and running.rst edited for PyQt4 and PySide (@gautam1168) +- [#250](https://github.com/tardis-sn/tardis/pull/250) Docs/pip reqs (@wkerzendorf) +- [#244](https://github.com/tardis-sn/tardis/pull/244) added coverage back (@wkerzendorf) +- [#240](https://github.com/tardis-sn/tardis/pull/240) rename of pip-requirements to conda-requirements (@wkerzendorf) +- [#225](https://github.com/tardis-sn/tardis/pull/225) Test added in test_atomic.py (@vaibhav4595) +- [#223](https://github.com/tardis-sn/tardis/pull/223) Update git_workflow.rst (@ujjwalwahi) + +### 1.0rc3 (2015/03/03 12:54 +00:00) +- [#219](https://github.com/tardis-sn/tardis/pull/219) fixing run_tardis (@wkerzendorf) + +### 1.0.dev1419 (2015/02/19 13:58 +00:00) +- [#218](https://github.com/tardis-sn/tardis/pull/218) Docs/anaconda install (@wkerzendorf) +- [#217](https://github.com/tardis-sn/tardis/pull/217) Docs/fixing pip requirements (@wkerzendorf) +- [#216](https://github.com/tardis-sn/tardis/pull/216) some fixes to the gui so it works with pyside (@wkerzendorf) +- [#214](https://github.com/tardis-sn/tardis/pull/214) Preparing the docs for V1 (@wkerzendorf) +- [#210](https://github.com/tardis-sn/tardis/pull/210) a restructure of the C-file file structure (@wkerzendorf, @mklauser) +- [#7](https://github.com/tardis-sn/tardis/pull/7) include .c in montecarlo/src/ for the randomkit files (@mklauser) +- [#209](https://github.com/tardis-sn/tardis/pull/209) Testing/pandas version info (@wkerzendorf) +- [#205](https://github.com/tardis-sn/tardis/pull/205) As simpler `run_tardis` (@wkerzendorf) +- [#206](https://github.com/tardis-sn/tardis/pull/206) Minor but critical fix to binary search (reverse) (@ssim) +- [#199](https://github.com/tardis-sn/tardis/pull/199) Gnuify cmontecarlo.c and cmontecarlo.h files (@orbitfold) +- [#203](https://github.com/tardis-sn/tardis/pull/203) Docs/reporting bugs (@wkerzendorf) +- [#201](https://github.com/tardis-sn/tardis/pull/201) A critical warning was added to the model indicating that no packet has left the simulation through the outer boundary. (@mklauser) +- [#200](https://github.com/tardis-sn/tardis/pull/200) added a new location for the atomic data. (@wkerzendorf) +- [#196](https://github.com/tardis-sn/tardis/pull/196) New binary search added (@mklauser) +- [#169](https://github.com/tardis-sn/tardis/pull/169) fix for #168 (@mklauser) +- [#194](https://github.com/tardis-sn/tardis/pull/194) Setup/fix requirements (@wkerzendorf) +- [#188](https://github.com/tardis-sn/tardis/pull/188) A macro to automagically fix inline issues (@orbitfold) +- [#190](https://github.com/tardis-sn/tardis/pull/190) General/fixing unit problems (@wkerzendorf) +- [#183](https://github.com/tardis-sn/tardis/pull/183) Added colon (@sofiatti) +- [#179](https://github.com/tardis-sn/tardis/pull/179) making sure that if last_no_of_packets is not specified that it is set t... (@wkerzendorf) +- [#178](https://github.com/tardis-sn/tardis/pull/178) Atomic/fix reprepare (@wkerzendorf) +- [#177](https://github.com/tardis-sn/tardis/pull/177) added from_yaml and from_config_dict to ConfigurationNameSpace (@wkerzendorf) +- [#175](https://github.com/tardis-sn/tardis/pull/175) Fix a few problems in cmontecarlo.c (@orbitfold, @wkerzendorf) +- [#174](https://github.com/tardis-sn/tardis/pull/174) fixes added for clang compile on mac (@wkerzendorf) +- [#171](https://github.com/tardis-sn/tardis/pull/171) Fix issues when using clang compiler (issue #170) (@orbitfold) +- [#167](https://github.com/tardis-sn/tardis/pull/167) fix for #165 (@mklauser, @wkerzendorf) +- [#3](https://github.com/tardis-sn/tardis/pull/3) testing the new t_inner fix (@wkerzendorf) +- [#164](https://github.com/tardis-sn/tardis/pull/164) Config/toggle validation (@wkerzendorf) +- [#151](https://github.com/tardis-sn/tardis/pull/151) WIP Montecarlo C Rewrite (@orbitfold) +- [#160](https://github.com/tardis-sn/tardis/pull/160) how to get constant density? broken? (@wkerzendorf) + +### 0.9.2 (2014/06/12 23:37 +00:00) +- [#158](https://github.com/tardis-sn/tardis/pull/158) updated astropy_helpers version (@wkerzendorf) +- [#157](https://github.com/tardis-sn/tardis/pull/157) added yaml to pip-requirements and linked the doc pip-requirements to this (@wkerzendorf) +- [#154](https://github.com/tardis-sn/tardis/pull/154) renamed Config to ConfigurationValidator (@wkerzendorf) +- [#153](https://github.com/tardis-sn/tardis/pull/153) General mixup of 0.9.2b1 (@wkerzendorf) +- [#152](https://github.com/tardis-sn/tardis/pull/152) importing problems with new C functions? (@wkerzendorf) +- [#149](https://github.com/tardis-sn/tardis/pull/149) Edits to docs (@ssim) +- [#150](https://github.com/tardis-sn/tardis/pull/150) Montecarlo flowchart (@orbitfold) +- [#148](https://github.com/tardis-sn/tardis/pull/148) fixed config_validator log_lsun check (@wkerzendorf) +- [#142](https://github.com/tardis-sn/tardis/pull/142) WIP Porting utility functions to C (issue #131) (@orbitfold) +- [#137](https://github.com/tardis-sn/tardis/pull/137) TRAVIS passes. (@wkerzendorf) +- [#143](https://github.com/tardis-sn/tardis/pull/143) Updating configuration name space (@wkerzendorf) +- [#136](https://github.com/tardis-sn/tardis/pull/136) Updating the config reader to work with the validator (@wkerzendorf, @mklauser) +- [#145](https://github.com/tardis-sn/tardis/pull/145) Adding full spectrum generation test to TRAVIS (@wkerzendorf) +- [#144](https://github.com/tardis-sn/tardis/pull/144) Setup/switch to astropy helpers (@wkerzendorf) +- [#6](https://github.com/tardis-sn/tardis/pull/6) Pr136 (@mklauser) +- [#5](https://github.com/tardis-sn/tardis/pull/5) Pr136 (@mklauser) +- [#4](https://github.com/tardis-sn/tardis/pull/4) Pr136 (@mklauser) +- [#3](https://github.com/tardis-sn/tardis/pull/3) Pr136 (@mklauser) +- [#2](https://github.com/tardis-sn/tardis/pull/2) bug fix for the container handling. ToDo Remove remove general except in... (@mklauser) +- [#135](https://github.com/tardis-sn/tardis/pull/135) Adding documentation for d_inner and d_outer calculation (@wkerzendorf) +- [#132](https://github.com/tardis-sn/tardis/pull/132) i try to rebase the dp to the master (@mklauser) +- [#134](https://github.com/tardis-sn/tardis/pull/134) Test high temperature - outside of interpolation range of zeta factor (@wkerzendorf) +- [#129](https://github.com/tardis-sn/tardis/pull/129) Re-implement binary_search in C (@orbitfold) +- [#127](https://github.com/tardis-sn/tardis/pull/127) Docs edit only ("accessing physical quantities") (@ssim) +- [#116](https://github.com/tardis-sn/tardis/pull/116) Adding documentation for Workflow (@wkerzendorf, @ssim) +- [#112](https://github.com/tardis-sn/tardis/pull/112) NLTE fixes - discussion needed before merge - relates to #109 (@ssim, @wkerzendorf) +- [#11](https://github.com/tardis-sn/tardis/pull/11) fixing up the NLTE tests (@wkerzendorf) +- [#10](https://github.com/tardis-sn/tardis/pull/10) Plasma/fix nlte tests (@wkerzendorf) +- [#122](https://github.com/tardis-sn/tardis/pull/122) proposed restructing of binary search/line search (@ssim, @wkerzendorf, @mklauser) +- [#9](https://github.com/tardis-sn/tardis/pull/9) Issue 123two (@mklauser) +- [#124](https://github.com/tardis-sn/tardis/pull/124) updated current_public_table.rst (@wkerzendorf) +- [#7](https://github.com/tardis-sn/tardis/pull/7) Fix line search (@wkerzendorf) +- [#6](https://github.com/tardis-sn/tardis/pull/6) updated documentation to numpydoc standard (@wkerzendorf) +- [#121](https://github.com/tardis-sn/tardis/pull/121) warning added for density file readin outside tabulated range (@ssim) +- [#119](https://github.com/tardis-sn/tardis/pull/119) Fix to deal with possible problem in end of line list (@ssim) +- [#118](https://github.com/tardis-sn/tardis/pull/118) Fix for the issue #84 Pull request for fixes / documentation edits related to the profiles (@ssim, @mklauser) +- [#91](https://github.com/tardis-sn/tardis/pull/91) Documentation update to download atomic databases (@wkerzendorf) +- [#110](https://github.com/tardis-sn/tardis/pull/110) #106 suggestion for private variable names (@mklauser, @ssim) +- [#111](https://github.com/tardis-sn/tardis/pull/111) minor fixed / logger statements (@ssim) +- [#97](https://github.com/tardis-sn/tardis/pull/97) Fix for issue #81: Add warning if w > 1. (@thegyro) +- [#92](https://github.com/tardis-sn/tardis/pull/92) Adding a simple test to run a full calculation (@wkerzendorf) +- [#101](https://github.com/tardis-sn/tardis/pull/101) Fix for Issue #88: Moved test functions for tardis.util from test_config_reader (@thegyro) +- [#94](https://github.com/tardis-sn/tardis/pull/94) Fix coveralls (@wkerzendorf) +- [#87](https://github.com/tardis-sn/tardis/pull/87) Added --profile and --profiler_log_file command line arguments to enable... (@orbitfold) + +### 0.9.1 (2014/02/04 01:51 +00:00) +- [#74](https://github.com/tardis-sn/tardis/pull/74) fixed manifest to incluse ez_setup.py and setuptools_bootstrap.py. fixes... (@wkerzendorf) +- [#78](https://github.com/tardis-sn/tardis/pull/78) cosmetic fixes (@ssim) +- [#77](https://github.com/tardis-sn/tardis/pull/77) Docs edit (@ssim, @wkerzendorf) +- [#1](https://github.com/tardis-sn/tardis/pull/1) Docs fix (@wkerzendorf, @ssim) +- [#76](https://github.com/tardis-sn/tardis/pull/76) stuff with abundance profile readin (@ssim) +- [#75](https://github.com/tardis-sn/tardis/pull/75) work on gui fixing (@ssim) +- [#72](https://github.com/tardis-sn/tardis/pull/72) documentation update for release (@wkerzendorf) +- [#71](https://github.com/tardis-sn/tardis/pull/71) New configuration style (@wkerzendorf) +- [#70](https://github.com/tardis-sn/tardis/pull/70) added simple coveralls.io in there (@wkerzendorf) +- [#69](https://github.com/tardis-sn/tardis/pull/69) Atomic/atomic symbols (@wkerzendorf) +- [#67](https://github.com/tardis-sn/tardis/pull/67) Config/ascii file reader (@wkerzendorf) +- [#68](https://github.com/tardis-sn/tardis/pull/68) Tests/fixing2 (@wkerzendorf) +- [#61](https://github.com/tardis-sn/tardis/pull/61) gui fix (@ssim) +- [#60](https://github.com/tardis-sn/tardis/pull/60) General bugfixing (@wkerzendorf) +- [#59](https://github.com/tardis-sn/tardis/pull/59) General bugfixing (@wkerzendorf, @nathanielatom, @ssim, @maryampatel) +- [#54](https://github.com/tardis-sn/tardis/pull/54) Montecarlo/reflection (@ssim) +- [#52](https://github.com/tardis-sn/tardis/pull/52) Montecarlo/reflection (@ssim, @wkerzendorf, @maryampatel, @nathanielatom) +- [#51](https://github.com/tardis-sn/tardis/pull/51) Model/optimizig (@nathanielatom) +- [#50](https://github.com/tardis-sn/tardis/pull/50) Gui/span (@nathanielatom) +- [#49](https://github.com/tardis-sn/tardis/pull/49) Gui/span (@nathanielatom) +- [#48](https://github.com/tardis-sn/tardis/pull/48) Gui/span (@nathanielatom, @wkerzendorf, @maryampatel) +- [#39](https://github.com/tardis-sn/tardis/pull/39) General bugfixing (@wkerzendorf, @nathanielatom, @maryampatel) +- [#46](https://github.com/tardis-sn/tardis/pull/46) Gui/dialogue (@nathanielatom, @wkerzendorf) +- [#41](https://github.com/tardis-sn/tardis/pull/41) Gui/docs (@nathanielatom) +- [#40](https://github.com/tardis-sn/tardis/pull/40) Gui/matplotlib figure (@nathanielatom, @maryampatel) +- [#34](https://github.com/tardis-sn/tardis/pull/34) General bugfixing (@wkerzendorf) +- [#32](https://github.com/tardis-sn/tardis/pull/32) Plasma/testing2 (@maryampatel) +- [#29](https://github.com/tardis-sn/tardis/pull/29) General bugfixing looks good to me (@wkerzendorf) +- [#28](https://github.com/tardis-sn/tardis/pull/28) The same as last time but with small changes. (@mklauser) +- [#26](https://github.com/tardis-sn/tardis/pull/26) Plasma/bound free (@mklauser) +- [#25](https://github.com/tardis-sn/tardis/pull/25) Simulation/run single simulation (@wkerzendorf) + +### v0.9a (2013/02/14 21:15 +00:00) +- [#24](https://github.com/tardis-sn/tardis/pull/24) Montecarlo/extract - seems fine merging (@ssim) +- [#22](https://github.com/tardis-sn/tardis/pull/22) Montecarlo/fix convergence (@wkerzendorf, @ssim) +- [#20](https://github.com/tardis-sn/tardis/pull/20) Plasma/testing (@maryampatel) +- [#18](https://github.com/tardis-sn/tardis/pull/18) Docs/fixdocs (@maryampatel) +- [#17](https://github.com/tardis-sn/tardis/pull/17) Docs/fixdocs (@maryampatel) +- [#16](https://github.com/tardis-sn/tardis/pull/16) Doc/atomic preliminary merge (@maryampatel) +- [#14](https://github.com/tardis-sn/tardis/pull/14) Implemented all changes (@maryampatel) +- [#13](https://github.com/tardis-sn/tardis/pull/13) Changed the main documentation page (@maryampatel) \ No newline at end of file diff --git a/CHANGELOG.rst b/CHANGELOG.rst deleted file mode 100644 index c9e77b9e4f5..00000000000 --- a/CHANGELOG.rst +++ /dev/null @@ -1,788 +0,0 @@ -Change Log ----------- - -upcoming (2018/04/06 13:33 +00:00) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- `#816 `__ Remove old - and broken badges (@unoebauer) -- `#814 `__ Fix numpydoc - problem (@wkerzendorf, @unoebauer) - -v2.0 (2018/04/05 13:03 +00:00) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- `#812 `__ Update of - documentation (@unoebauer) -- `#809 `__ fix - dependencies for tardis conda env (#809) (@wkerzendorf) -- `#761 `__ Add caching - for integrated spectrum: Fix #760 (@unoebauer) -- `#715 `__ Merge - 'generate\_reference\_path' and 'reference\_path' in integration - tests (bug #672) (@rinklejain) -- `#801 `__ Decay of - isotopes branch (@wkerzendorf, @vg3095, @pfreddy) -- `#806 `__ Fix reference - dictionary problem (@pfreddy) -- `#803 `__ include yml - files in MANIFEST (@wkerzendorf) -- `#802 `__ Fix for PR - #801 (@vg3095) -- `#799 `__ - tardis/plasma/standard\_plasmas.py: old database files warning - (@laudb) -- `#797 `__ Minor - Updates: Fixes for #521 and #699 (@unoebauer) -- `#796 `__ Prevent - pandas SettingWithCopyWarning by copying DataFrames when slicing - (@lukeshingles) -- `#795 `__ Force - deactivate LaTeX in GUI - Fix #441 (@unoebauer) -- `#793 `__ Add pyside to - requirements (needed for GUI) (@wkerzendorf, @unoebauer) -- `#794 `__ add new - readthedocs.yml (@wkerzendorf) -- `#792 `__ Fix - compatibility with networkx 2.0 (@lukeshingles) -- `#791 `__ Propagate - changes to the line index into the GUI code (@yeganer) -- `#786 `__ The final - carsus merge (@yeganer, @ftsamis, @mishinma) -- `#782 `__ Plasma - write\_to\_tex/dot unit tests (@vg3095) -- `#781 `__ Omit coverage - of test related files (@vg3095) -- `#785 `__ [DOC] Update - Running tests doc (@vg3095) -- `#774 `__ Replace - Comparison values in Plasma Unit Tests with reference HDF file - (@vg3095) -- `#780 `__ - LevelBoltzmannFactorNLTE.from\_config is now a staticmethod - (@yeganer) -- `#778 `__ Fix NLTE - (@yeganer) -- `#776 `__ Fix - compatibility bug in radiative\_properties (@yeganer) -- `#779 `__ Save coverage - report when tests use tardis-refdata (@vg3095) -- `#775 `__ Transition - from atomic-dataset config option to tardis-refdata (@vg3095) -- `#772 `__ [TEP007] - CMFGEN density parser (@vg3095) -- `#771 `__ [TEP007] Add - cmfgen2tardis script (@vg3095) -- `#757 `__ [TEP007] - Decay and merge isotopic abundance dataframe (@vg3095) -- `#769 `__ [TEP014] - [DOC] Updated to\_hdf notebook (@vg3095) -- `#759 `__ Formal - Integral: including electron scattering (@unoebauer, @yeganer) -- `#768 `__ [TEP014] - Simulation HDF and deprecated to\_hdf cleanup. (@vg3095) -- `#773 `__ Update - Documentation (@unoebauer) -- `#767 `__ [TEP007] Docs - for isotope config (@vg3095) -- `#764 `__ [TEP007] - Isotope stratified file support (@vg3095) -- `#752 `__ [TEP014] - PlasmaWriterMixin (@vg3095) -- `#748 `__ [TEP014] - Update Runner and Spectrum classes to use HDFWriter + Unit Tests - (@vg3095) -- `#762 `__ [TEP007] - Isotope uniform config option (@vg3095) -- `#765 `__ Attempt to - fix up the GUI (@ssim, @unoebauer) -- `#13 `__ Introduce - proper masking for GUI (addition to PR #765) (@unoebauer) -- `#1 `__ Streamline the - OMP implementation (@yeganer) -- `#756 `__ [TEP007] - [WIP] Isotope Abundances class (@vg3095, @wkerzendorf) -- `#758 `__ Add new - version to tardis\_env27 and add pyne (@wkerzendorf) -- `#753 `__ [TEP014][DOC] - HDFWriter Documentation (@vg3095) -- `#740 `__ [GSoC] Formal - integral Project (@yeganer) -- `#747 `__ [TEP014] - Update Model and Density classes to use HDFWriter + Unit Tests - (@vg3095) -- `#750 `__ [TEP005][QOL] - Add MontecarloRunner.spectrum\_integrated (@yeganer) -- `#749 `__ [TEP014] - Change name of HDFWriter to HDFWriterMixin (@vg3095) -- `#745 `__ [TEP005][DOC] - Documentation (@yeganer) -- `#751 `__ [QOL] Add - default axis to TARDISSpectrum.plot (@yeganer) -- `#743 `__ Fix bug in - plasma (@yeganer) -- `#744 `__ [TEP014] - Added HDFWriter class + Unit Tests (@vg3095) -- `#746 `__ - [TEP005][CONFIG] Prevent incompatible configurations (@yeganer) -- `#741 `__ Add unit - tests for the formal integral (@yeganer) -- `#742 `__ Fix clash in - RTD dependencies (@yeganer) -- `#735 `__ Move common - ctest fixtures into conftest.py (@yeganer) -- `#729 `__ Refactor - spectrum (@yeganer) -- `#730 `__ Fix - test\_plasma\_simple not skipping properly (@yeganer) -- `#712 `__ Colorize - Logger (@vg3095) -- `#718 `__ Unit test for - untested method of montecarlo simulation code (@suyashgupta20) -- `#724 `__ Rebase PR - #678 (@yeganer) -- `#709 `__ Add note - about broken GUI to docu (@unoebauer) -- `#708 `__ Add new - installation instructions (@wkerzendorf) -- `#704 `__ Fix ignoring - model tests (@ftsamis) -- `#700 `__ Add - contributing guidelines (@wkerzendorf) -- `#686 `__ converted - spectrum\_frequency (@chinmay0301) -- `#696 `__ Add missing - diagnostics property to runner's to\_hdf list (@unoebauer) -- `#694 `__ Significantly - reduce peak memory usage when vpacket logging is enabled (@ftsamis) -- `#682 `__ Import - montecarlo.base in the **init** module of the package. (@ftsamis) -- `#670 `__ Integrate - continuum interactions into cmontecarlo (@chvogl) -- `#652 `__ [TEP006] - Aggregate TARDIS restructure and configuration system cleanup - (@ftsamis) -- `#677 `__ Update link - to tardis\_example.yml in documentation - Fix #676 (@unoebauer) -- `#674 `__ Change - matplotlib backend - fix test\_integration remote plotting issue - (@unoebauer) -- `#664 `__ Kd final test - (@wkerzendorf, @kdexd, @yeganer) -- `#21 `__ fKd final test - (@yeganer) -- `#668 `__ change to - tardis atom data on git lfs (@wkerzendorf) -- `#666 `__ Remove News - from main TARDIS github page (@unoebauer) -- `#667 `__ Update SOCIS - and GSOC students credits (@unoebauer) -- `#665 `__ Add to\_hdf - compression (@yeganer) -- `#663 `__ Develop - (@kdexd) -- `#657 `__ Require - pyyaml 3.12 (@ftsamis) -- `#659 `__ Update - installation docs (@ftsamis) -- `#653 `__ Facility to - provide per-setup atom data as well as save report locally. (@kdexd) -- `#641 `__ Fix detailed - radiative rates (@yeganer) -- `#642 `__ Use - pytest-html==1.10.0, modify DokuReport class accordingly. (@kdexd) -- `#630 `__ - [IntegrationTests] Overview page on Dokuwiki. Running the integration - tests will update an overview page on DokuWiki. (@kdexd) -- `#620 `__ Runner script - to automate execution of integration tests. (@kdexd) -- `#628 `__ Remove - exponent property from yaml files with exponential density (@ftsamis) -- `#626 `__ Revert "Add - exponent as a property for exponential density" (@ftsamis) -- `#542 `__ Updates to He - NLTE treatment. (@aoifeboyle) -- `#612 `__ Add facility - to generate and accept HDF files as reference data for Integration - Tests. (@kdexd) -- `#614 `__ Omit the - integration\_tests when running coveralls (@yeganer) -- `#619 `__ Fixed - incorrect name in error message (@Tobychev) -- `#618 `__ to\_hdf: If - only the last run is stored, do not add a counter in the name - (@ftsamis) -- `#617 `__ Add a to\_hdf - method on TARDISSpectrum (@ftsamis) -- `#600 `__ Parametrize - the Slow Test class with two setups. (@kdexd) -- `#613 `__ Fix bug in - montecarlo.pyx (@yeganer) -- `#595 `__ Line - absorption rate estimator (@Tobychev) -- `#606 `__ Merge to\_hdf - (@ftsamis, @wkerzendorf) -- `#585 `__ [TEP002] Add - a to\_hdf method to the MontecarloRunner (#585) (@ftsamis) -- `#597 `__ Use - abundances, densities filepaths relative to w7 config file. (@kdexd) -- `#569 `__ Added a conda - environment for tardis (@wkerzendorf) -- `#565 `__ Change the - way AtomData quantities are initialized (@yeganer) -- `#599 `__ Update the - tardis\_example tar file provided in the documentation. (@ftsamis) -- `#598 `__ Fix - convergence handling in run\_legacy\_simulation - fix issue #593 - (@unoebauer) -- `#590 `__ Link images - of comparison plots in DokuReport using hookwrapper. (@kdexd) -- `#591 `__ Fix path of - CSS and JS files used in html report. (@kdexd) -- `#594 `__ Provide - tardis.yaml\_load shortcut (@yeganer) -- `#592 `__ Fix virt - energy (@yeganer) -- `#583 `__ Subclass - pytest-html's HTMLReport to DokuReport class for report generation - and upload (@kdexd) -- `#587 `__ Move the - three spectra attributes from Radial1DModel to MontecarloRunner - (@ftsamis) -- `#578 `__ Shift slow - test related pytest hooks in lower level conftest.py (#578) (@kdexd) -- `#581 `__ Update - several files to match package\_template (@yeganer) -- `#576 `__ - [config-system] Validator rewrite: Use jsonschema (@ftsamis) -- `#575 `__ Replace - misused calls to yaml.load with a helper function. (@ftsamis) -- `#570 `__ Enable - generation of html report of integration tests, and upload to - dokuwiki. (@kdexd) -- `#574 `__ - tardis/base.py: Remove duplicate code from run\_tardis (@ftsamis) -- `#573 `__ io/util.py - (YAMLLoader): Use OrderedDict to store loaded YAML (@ftsamis) -- `#572 `__ Change the - way YAMLLoader resolves some properties (@ftsamis) -- `#532 `__ Documentation - overhaul (@unoebauer, @kdexd, @chvogl) -- `#571 `__ - data/tardis\_config\_definition.yml: Set the exponent property as - mandatory when density is exponential. (#571) (@ftsamis) -- `#566 `__ Initial - laydown of comparison plots for TestW7. (#566) (@kdexd) -- `#567 `__ Accept - keyword arguments for Configuration.from\_yaml (@yeganer) -- `#561 `__ TestW7: - Assertions for spectrum quantities, fixture for handling baseline - data. (@kdexd) -- `#515 `__ - [config-system] Add a custom YAML Loader to parse astropy quantities - (@ftsamis) -- `#555 `__ Use pytest's - monkeypatch.chdir to change the working directory in the - config\_reader tests (@ftsamis, @lukeshingles) -- `#558 `__ Integration - Test class for Stratified W7 setup. (@kdexd) -- `#557 `__ Enable - skipping slow tests. (@kdexd) -- `#544 `__ Continue - cmontecarlo tests refactor. Extend #530. (@kdexd) -- `#543 `__ Fix issue - #535: Treat rel. paths inside config relative to the config file - (@lukeshingles, @ftsamis) -- `#1 `__ Write tests for - the issue #535 fix. (@ftsamis) -- `#551 `__ Add SOCIS - 2016 advertisement (@unoebauer) -- `#547 `__ Fix Issue - #548 (@kdexd) -- `#545 `__ added mailmap - to compile the commits for each person (#545) (@wkerzendorf) -- `#539 `__ Adding OSX to - our travis build (#539) (@wkerzendorf) -- `#541 `__ Move progress - bar update after calculation (#541) (@yeganer) -- `#540 `__ Mirroring C - enums in Python for CMontecarlo tests. (@kdexd) -- `#538 `__ Upgrading to - the new Readthedocs infrastructure (#538) (@wkerzendorf) -- `#530 `__ Refactor - cmontecarlo testing framework (@kdexd) -- `#537 `__ Ignore - invalid OpenMP nthreads values (#537) (@yeganer) -- `#533 `__ Remove - rpacket.recently\_crossed\_boundary flag (@yeganer) -- `#514 `__ Performance - (@yeganer) -- `#531 `__ Organize - headers in C-Extension (@yeganer) -- `#526 `__ Docs: Include - conda-requirements in installation.rst (@kdexd) -- `#519 `__ - Documentation:Installation modify command (@yeganer) -- `#510 `__ Updates - requirements to solve libgfortran error. Fixes #509 (@kdexd) -- `#495 `__ Fix energy - conservation (@unoebauer) -- `#486 `__ Bugfix - radiative rates type detailed (@chvogl, @unoebauer) -- `#488 `__ Fix - indentation in c extension (@yeganer) -- `#494 `__ Fix #493 - (@yeganer) -- `#1 `__ Add simple test - for j\_blue\_estimator (@unoebauer) -- `#491 `__ Include IDE - specific auto-generated files in .gitignore. Fixes #490 (@kdexd) -- `#485 `__ Montecarlo - progress (@yeganer) -- `#457 `__ Fix Issue - #454 (@yeganer) -- `#484 `__ Minor - improvement of vpacket logging scheme (@unoebauer) -- `#479 `__ added units - to test\_simulation.py (@mishinma) -- `#469 `__ Changed the - Link for AstroPy's dev workflow (@souravsingh) -- `#481 `__ Introcuding - safe\_malloc and safe\_realloc macros: fixes #480 (@unoebauer) -- `#475 `__ Reorganize - import statements in atomic.py (@Pratik151) -- `#471 `__ Quickfix to - solve Issue #455 and #464 (@yeganer) -- `#472 `__ fixed build - of documentation on readthedocs (@wkerzendorf) -- `#461 `__ Bugfix test - cmontecarlo (@yeganer) -- `#452 `__ Build fix and - nthreads fix - fixes #356 (@unoebauer) -- `#450 `__ Checking for - zero-volume cells: Fixes issue #79 (@unoebauer) -- `#449 `__ added test to - verify virtual spectrum (@unoebauer) -- `#446 `__ calculate - virtual spectrum independently of vpacket loggin - fixes #445 - (@unoebauer) -- `#440 `__ started - addressing issue #436 (@unoebauer) -- `#426 `__ Simulation - - restructure (@wkerzendorf) -- `#434 `__ updated the - .travis.yml file to do a rehash before executing conda (@wkerzendorf) -- `#433 `__ Optional - vpacket logging WIP (@tardis-sn) -- `#425 `__ Updated - nlte.rst (@souravsingh) -- `#424 `__ added a new - requirement for astropy (@wkerzendorf) -- `#1 `__ Update nlte.rst - (@souravsingh) -- `#375 `__ made sure - that atomic does not reinsert the index into the dataframe - (@wkerzendorf) -- `#420 `__ Memory issue - (@wkerzendorf) -- `#416 `__ added new - version requirements for pandas and astropy (@wkerzendorf) -- `#414 `__ Improvements - to He approximation. (@aoifeboyle) -- `#413 `__ WIP - Docstrings (@wkerzendorf) -- `#412 `__ Fix for zeta - issues. (@wkerzendorf) -- `#3 `__ Plasma/ab zeta - fix (@wkerzendorf) -- `#410 `__ WIP: Cleaning - up plasma (@wkerzendorf) -- `#399 `__ Plasma - optimization (@wkerzendorf, @mreineck) -- `#2 `__ fix for chi\_0 - problem (@wkerzendorf) -- `#19 `__ Plasma - optimisation fix. (@aoifeboyle) -- `#404 `__ - Montecarlo/new packet source (@wkerzendorf) -- `#407 `__ Organising of - plasma base files. (@aoifeboyle) -- `#405 `__ Pandas - macroatom issue fix (@wkerzendorf) -- `#406 `__ Numerical He - NLTE. (@aoifeboyle) -- `#401 `__ Alternative - fix for issue #393 (@mreineck) -- `#398 `__ More cleanups - (@mreineck) -- `#400 `__ Change to - NLTE properties (@aoifeboyle) -- `#397 `__ - Montecarlo/memoryview (@wkerzendorf) -- `#396 `__ added - virt\_packet properties to to\_hdf5 list (Kromer plot) (@unoebauer) -- `#391 `__ More work on - cmontecarlo.c and the unit tests (@mreineck) -- `#364 `__ added tardis - stats (@wkerzendorf) -- `#392 `__ Consistency - between old virtual packet arrays and new ones introduced in PR 384 - (@unoebauer) -- `#389 `__ changes to - address issue #388 (@mreineck) -- `#386 `__ improve - inlining specifications and fix a few problems (@mreineck) -- `#384 `__ Minor changes - in Monte Carlo and model part for Kromer plots (@unoebauer) -- `#374 `__ WIP: Helium - approx. (@wkerzendorf) -- `#382 `__ Improvements - to plasma graph (@aoifeboyle) -- `#381 `__ Fix to plasma - issue with GUI. (@aoifeboyle) -- `#379 `__ Fix of - to\_hdf5. (@aoifeboyle) -- `#377 `__ Plasma static - methods (@aoifeboyle) -- `#373 `__ Removing - test\_plasma\_nlte.py. (@aoifeboyle) -- `#372 `__ Correcting - some old plasma tests. (@aoifeboyle) -- `#304 `__ Plasma - restructure (@wkerzendorf) -- `#370 `__ Removed some - tests temporarily. (@aoifeboyle) -- `#369 `__ Removed - import plasma\_array (@aoifeboyle) -- `#368 `__ Fixing plasma - merge (@aoifeboyle) -- `#367 `__ preparing for - the new container archictecture used by travis (@wkerzendorf) -- `#365 `__ LTE Plasma - Test (@aoifeboyle) -- `#361 `__ Added - formulae to graph. (@aoifeboyle) -- `#360 `__ - Rebasedvirtrunner (@orbitfold, @wkerzendorf) -- `#362 `__ Adjusted - stimulated emission factor for NLTE. (@aoifeboyle) -- `#355 `__ Add - with-openmp to develop (@orbitfold) -- `#354 `__ added print - statement for openmp (@wkerzendorf) -- `#350 `__ - Tidying/Testing/Documenting Plasma (@aoifeboyle) -- `#352 `__ Attempt at - solution. (@aoifeboyle) -- `#330 `__ [GSoC 2015 - WIP] Testing other montecarlo functions (@kaushik94) -- `#347 `__ NLTE - (@aoifeboyle) -- `#325 `__ Bound-free - interactions (@chvogl) -- `#344 `__ - Plasma/multiple outputs (@aoifeboyle) -- `#346 `__ linked the - plasma documentation again (@wkerzendorf) -- `#338 `__ OpenMP WIP - (@orbitfold) -- `#343 `__ Plasma/multi - output (@wkerzendorf) -- `#17 `__ Fixes. - (@aoifeboyle) -- `#324 `__ Gui package - (WIP) (@gautam1168) -- `#327 `__ [GSoC 2015 - MRG] Testing getters setters (@kaushik94) -- `#322 `__ Updating the - gui documentation. (@gautam1168) -- `#296 `__ Gui with - menubars(WIP) (@gautam1168) -- `#320 `__ virtual - packets frequency cut (@unoebauer) -- `#314 `__ Installation - FAQ (@wkerzendorf) -- `#310 `__ A more - detailed description of the montecarlo process (@wkerzendorf) -- `#301 `__ [GSoC 2015 - MRG] Restructuring Montecarlo (@kaushik94) -- `#234 `__ Removing - usage of yield in test\_utils.py (@kaushik94) -- `#299 `__ Test of - model\_reader.py (@wkerzendorf, @ssim) -- `#288 `__ -fixed - discrepancy concerning hold\_iterations (@unoebauer) -- `#286 `__ Proposal for - a new to HD5 function. (@mklauser) -- `#283 `__ fixed the - reader for the older Paper1 format yaml files (@wkerzendorf) -- `#269 `__ Miscellaneous - README changes (@iKevinY) -- `#251 `__ gui.py and - running.rst edited for PyQt4 and PySide (@gautam1168) -- `#250 `__ Docs/pip reqs - (@wkerzendorf) -- `#244 `__ added - coverage back (@wkerzendorf) -- `#240 `__ rename of - pip-requirements to conda-requirements (@wkerzendorf) -- `#225 `__ Test added in - test\_atomic.py (@vaibhav4595) -- `#223 `__ Update - git\_workflow.rst (@ujjwalwahi) - -1.0rc3 (2015/03/03 12:54 +00:00) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- `#219 `__ fixing - run\_tardis (@wkerzendorf) - -1.0.dev1419 (2015/02/19 13:58 +00:00) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- `#218 `__ Docs/anaconda - install (@wkerzendorf) -- `#217 `__ Docs/fixing - pip requirements (@wkerzendorf) -- `#216 `__ some fixes to - the gui so it works with pyside (@wkerzendorf) -- `#214 `__ Preparing the - docs for V1 (@wkerzendorf) -- `#210 `__ a restructure - of the C-file file structure (@wkerzendorf, @mklauser) -- `#7 `__ include .c in - montecarlo/src/ for the randomkit files (@mklauser) -- `#209 `__ - Testing/pandas version info (@wkerzendorf) -- `#205 `__ As simpler - ``run_tardis`` (@wkerzendorf) -- `#206 `__ Minor but - critical fix to binary search (reverse) (@ssim) -- `#199 `__ Gnuify - cmontecarlo.c and cmontecarlo.h files (@orbitfold) -- `#203 `__ - Docs/reporting bugs (@wkerzendorf) -- `#201 `__ A critical - warning was added to the model indicating that no packet has left the - simulation through the outer boundary. (@mklauser) -- `#200 `__ added a new - location for the atomic data. (@wkerzendorf) -- `#196 `__ New binary - search added (@mklauser) -- `#169 `__ fix for #168 - (@mklauser) -- `#194 `__ Setup/fix - requirements (@wkerzendorf) -- `#188 `__ A macro to - automagically fix inline issues (@orbitfold) -- `#190 `__ - General/fixing unit problems (@wkerzendorf) -- `#183 `__ Added colon - (@sofiatti) -- `#179 `__ making sure - that if last\_no\_of\_packets is not specified that it is set t... - (@wkerzendorf) -- `#178 `__ Atomic/fix - reprepare (@wkerzendorf) -- `#177 `__ added - from\_yaml and from\_config\_dict to ConfigurationNameSpace - (@wkerzendorf) -- `#175 `__ Fix a few - problems in cmontecarlo.c (@orbitfold, @wkerzendorf) -- `#174 `__ fixes added - for clang compile on mac (@wkerzendorf) -- `#171 `__ Fix issues - when using clang compiler (issue #170) (@orbitfold) -- `#167 `__ fix for #165 - (@mklauser, @wkerzendorf) -- `#3 `__ testing the new - t\_inner fix (@wkerzendorf) -- `#164 `__ Config/toggle - validation (@wkerzendorf) -- `#151 `__ WIP - Montecarlo C Rewrite (@orbitfold) -- `#160 `__ how to get - constant density? broken? (@wkerzendorf) - -0.9.2 (2014/06/12 23:37 +00:00) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- `#158 `__ updated - astropy\_helpers version (@wkerzendorf) -- `#157 `__ added yaml to - pip-requirements and linked the doc pip-requirements to this - (@wkerzendorf) -- `#154 `__ renamed - Config to ConfigurationValidator (@wkerzendorf) -- `#153 `__ General mixup - of 0.9.2b1 (@wkerzendorf) -- `#152 `__ importing - problems with new C functions? (@wkerzendorf) -- `#149 `__ Edits to docs - (@ssim) -- `#150 `__ Montecarlo - flowchart (@orbitfold) -- `#148 `__ fixed - config\_validator log\_lsun check (@wkerzendorf) -- `#142 `__ WIP Porting - utility functions to C (issue #131) (@orbitfold) -- `#137 `__ TRAVIS - passes. (@wkerzendorf) -- `#143 `__ Updating - configuration name space (@wkerzendorf) -- `#136 `__ Updating the - config reader to work with the validator (@wkerzendorf, @mklauser) -- `#145 `__ Adding full - spectrum generation test to TRAVIS (@wkerzendorf) -- `#144 `__ Setup/switch - to astropy helpers (@wkerzendorf) -- `#6 `__ Pr136 (@mklauser) -- `#5 `__ Pr136 (@mklauser) -- `#4 `__ Pr136 (@mklauser) -- `#3 `__ Pr136 (@mklauser) -- `#2 `__ bug fix for the - container handling. ToDo Remove remove general except in... - (@mklauser) -- `#135 `__ Adding - documentation for d\_inner and d\_outer calculation (@wkerzendorf) -- `#132 `__ i try to - rebase the dp to the master (@mklauser) -- `#134 `__ Test high - temperature - outside of interpolation range of zeta factor - (@wkerzendorf) -- `#129 `__ Re-implement - binary\_search in C (@orbitfold) -- `#127 `__ Docs edit - only ("accessing physical quantities") (@ssim) -- `#116 `__ Adding - documentation for Workflow (@wkerzendorf, @ssim) -- `#112 `__ NLTE fixes - - discussion needed before merge - relates to #109 (@ssim, - @wkerzendorf) -- `#11 `__ fixing up the - NLTE tests (@wkerzendorf) -- `#10 `__ Plasma/fix nlte - tests (@wkerzendorf) -- `#122 `__ proposed - restructing of binary search/line search (@ssim, @wkerzendorf, - @mklauser) -- `#9 `__ Issue 123two - (@mklauser) -- `#124 `__ updated - current\_public\_table.rst (@wkerzendorf) -- `#7 `__ Fix line search - (@wkerzendorf) -- `#6 `__ updated - documentation to numpydoc standard (@wkerzendorf) -- `#121 `__ warning added - for density file readin outside tabulated range (@ssim) -- `#119 `__ Fix to deal - with possible problem in end of line list (@ssim) -- `#118 `__ Fix for the - issue #84 Pull request for fixes / documentation edits related to the - profiles (@ssim, @mklauser) -- `#91 `__ Documentation - update to download atomic databases (@wkerzendorf) -- `#110 `__ #106 - suggestion for private variable names (@mklauser, @ssim) -- `#111 `__ minor fixed / - logger statements (@ssim) -- `#97 `__ Fix for issue - #81: Add warning if w > 1. (@thegyro) -- `#92 `__ Adding a simple - test to run a full calculation (@wkerzendorf) -- `#101 `__ Fix for Issue - #88: Moved test functions for tardis.util from test\_config\_reader - (@thegyro) -- `#94 `__ Fix coveralls - (@wkerzendorf) -- `#87 `__ Added --profile - and --profiler\_log\_file command line arguments to enable... - (@orbitfold) - -0.9.1 (2014/02/04 01:51 +00:00) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- `#74 `__ fixed manifest - to incluse ez\_setup.py and setuptools\_bootstrap.py. fixes... - (@wkerzendorf) -- `#78 `__ cosmetic fixes - (@ssim) -- `#77 `__ Docs edit - (@ssim, @wkerzendorf) -- `#1 `__ Docs fix - (@wkerzendorf, @ssim) -- `#76 `__ stuff with - abundance profile readin (@ssim) -- `#75 `__ work on gui - fixing (@ssim) -- `#72 `__ documentation - update for release (@wkerzendorf) -- `#71 `__ New - configuration style (@wkerzendorf) -- `#70 `__ added simple - coveralls.io in there (@wkerzendorf) -- `#69 `__ Atomic/atomic - symbols (@wkerzendorf) -- `#67 `__ Config/ascii - file reader (@wkerzendorf) -- `#68 `__ Tests/fixing2 - (@wkerzendorf) -- `#61 `__ gui fix (@ssim) -- `#60 `__ General - bugfixing (@wkerzendorf) -- `#59 `__ General - bugfixing (@wkerzendorf, @nathanielatom, @ssim, @maryampatel) -- `#54 `__ - Montecarlo/reflection (@ssim) -- `#52 `__ - Montecarlo/reflection (@ssim, @wkerzendorf, @maryampatel, - @nathanielatom) -- `#51 `__ Model/optimizig - (@nathanielatom) -- `#50 `__ Gui/span - (@nathanielatom) -- `#49 `__ Gui/span - (@nathanielatom) -- `#48 `__ Gui/span - (@nathanielatom, @wkerzendorf, @maryampatel) -- `#39 `__ General - bugfixing (@wkerzendorf, @nathanielatom, @maryampatel) -- `#46 `__ Gui/dialogue - (@nathanielatom, @wkerzendorf) -- `#41 `__ Gui/docs - (@nathanielatom) -- `#40 `__ Gui/matplotlib - figure (@nathanielatom, @maryampatel) -- `#34 `__ General - bugfixing (@wkerzendorf) -- `#32 `__ Plasma/testing2 - (@maryampatel) -- `#29 `__ General - bugfixing looks good to me (@wkerzendorf) -- `#28 `__ The same as - last time but with small changes. (@mklauser) -- `#26 `__ Plasma/bound - free (@mklauser) -- `#25 `__ Simulation/run - single simulation (@wkerzendorf) - -v0.9a (2013/02/14 21:15 +00:00) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- `#24 `__ - Montecarlo/extract - seems fine merging (@ssim) -- `#22 `__ Montecarlo/fix - convergence (@wkerzendorf, @ssim) -- `#20 `__ Plasma/testing - (@maryampatel) -- `#18 `__ Docs/fixdocs - (@maryampatel) -- `#17 `__ Docs/fixdocs - (@maryampatel) -- `#16 `__ Doc/atomic - preliminary merge (@maryampatel) -- `#14 `__ Implemented all - changes (@maryampatel) -- `#13 `__ Changed the - main documentation page (@maryampatel) From 19ea00a15f9da5c3b3ddeddd7167612eb5d6767c Mon Sep 17 00:00:00 2001 From: chvogl Date: Tue, 30 Apr 2019 00:08:32 +0200 Subject: [PATCH 028/467] Migrate beta_sobolev calculation from cython to numba (#924) --- .../plasma/properties/radiative_properties.py | 21 ++++++++++++++++--- tardis/plasma/properties/util/macro_atom.pyx | 16 -------------- tardis_env3.yml | 1 + 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/tardis/plasma/properties/radiative_properties.py b/tardis/plasma/properties/radiative_properties.py index c9eb98428aa..3d26f8cd9ec 100644 --- a/tardis/plasma/properties/radiative_properties.py +++ b/tardis/plasma/properties/radiative_properties.py @@ -5,6 +5,7 @@ import numexpr as ne from astropy import units as u from tardis import constants as const +from numba import jit, prange from tardis.plasma.properties.base import ProcessingPlasmaProperty from tardis.plasma.properties.util import macro_atom @@ -116,6 +117,7 @@ def calculate(self, lines, level_number_density, lines_lower_level_index, return pd.DataFrame(tau_sobolevs, index=lines.index, columns=np.array(level_number_density.columns)) + class BetaSobolev(ProcessingPlasmaProperty): """ Attributes @@ -137,11 +139,24 @@ def calculate(self, tau_sobolevs): columns=tau_sobolevs.columns ) - macro_atom.calculate_beta_sobolev( - tau_sobolevs.values.ravel(), - beta_sobolev.values.ravel()) + self.calculate_beta_sobolev(tau_sobolevs.values.ravel(), + beta_sobolev.values.ravel()) return beta_sobolev + @staticmethod + @jit(nopython=True, parallel=True) + def calculate_beta_sobolev(tau_sobolevs, beta_sobolevs): + for i in prange(len(tau_sobolevs)): + if tau_sobolevs[i] > 1e3: + beta_sobolevs[i] = tau_sobolevs[i]**-1 + elif tau_sobolevs[i] < 1e-4: + beta_sobolevs[i] = 1 - 0.5 * tau_sobolevs[i] + else: + beta_sobolevs[i] = (1 - np.exp(-tau_sobolevs[i])) / ( + tau_sobolevs[i]) + return beta_sobolevs + + class TransitionProbabilities(ProcessingPlasmaProperty): """ Attributes diff --git a/tardis/plasma/properties/util/macro_atom.pyx b/tardis/plasma/properties/util/macro_atom.pyx index 61c7f0e371d..e1c6fcceaf2 100644 --- a/tardis/plasma/properties/util/macro_atom.pyx +++ b/tardis/plasma/properties/util/macro_atom.pyx @@ -25,22 +25,6 @@ cdef double kb = constants.k_B.cgs.value cdef double inv_c2 = 1 / (c ** 2) -def calculate_beta_sobolev(np.ndarray[double, ndim=1] tau_sobolevs, np.ndarray[double, ndim=1] beta_sobolevs): - cdef double beta_sobolev - cdef double tau_sobolev - cdef int i - - for i in range(len(tau_sobolevs)): - tau_sobolev = tau_sobolevs[i] - - if tau_sobolev > 1e3: - beta_sobolev = 1 / tau_sobolev - elif tau_sobolev < 1e-4: - beta_sobolev = 1 - 0.5 * tau_sobolev - else: - beta_sobolev = (1 - exp(-tau_sobolev)) / tau_sobolev - beta_sobolevs[i] = beta_sobolev - def calculate_transition_probabilities( double [:] transition_probability_coef, double [:, ::1] beta_sobolev, double [:, ::1] j_blues, diff --git a/tardis_env3.yml b/tardis_env3.yml index 6095834602f..824e263c54f 100644 --- a/tardis_env3.yml +++ b/tardis_env3.yml @@ -11,6 +11,7 @@ dependencies: - pandas=0.24 - astropy=3 +- numba=0.43 - numexpr - Cython=0.29 From b7d486aff07d79aed518446468268fa2e13d200e Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 30 Apr 2019 15:49:06 -0400 Subject: [PATCH 029/467] add svg image in sensible system --- docs/index.rst | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index 249bff518c4..88320b7af01 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -12,13 +12,8 @@ Tardis Core Package Documentation ################################## -.. |logo_svg| image:: graphics/tardis_banner.svg +.. image:: graphics/tardis_banner.svg -.. raw:: html - - - -.. _tardis: TARDIS is an open-source Monte Carlo radiative-transfer spectral synthesis code for 1D models of supernova ejecta. It is designed for rapid spectral modelling From 9b2dccd7da54809339747cd36f22e85cdf9a1eaa Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 30 Apr 2019 22:05:22 -0400 Subject: [PATCH 030/467] Adding a TARDIS data repo (#926) * remove atom_data.h5 - probably legacy * add tardis_internal_config and downloader * update the configuration stuff * several cleaning up actions * add atomic data download structure * moving atom_data * add atom data resolver * add notebook and fix the data repo * remove unusused files and add tqdm to tardis_env3 * fix stupid quotes --- Vagrantfile | 124 -- bootstrap_trusty64.sh | 16 - docs/examples/run_simple_example.ipynb | 1222 +++++++++++++++++ .../plasma_plots/lte_ionization_balance.py | 8 +- .../nebular_ionization_balance.py | 5 +- docs/quickstart.rst | 28 +- tardis/base.py | 2 +- tardis/data/atom_data.h5 | Bin 489876 -> 0 bytes tardis/data/atomic_data_repo.yml | 5 + .../data/default_tardis_internal_config.yml | 1 + tardis/io/__init__.py | 2 +- tardis/io/atom_data/__init__.py | 1 + tardis/io/atom_data/atom_web_download.py | 38 + tardis/io/{atomic.py => atom_data/base.py} | 12 +- tardis/io/atom_data/util.py | 42 + tardis/io/config_internal.py | 43 + tardis/io/util.py | 64 +- tardis/plasma/standard_plasmas.py | 5 +- tardis/tests/fixtures/atom_data.py | 2 +- .../integration_tests/test_integration.py | 3 +- tardis/util/base.py | 12 +- tardis_env3.yml | 2 + 22 files changed, 1434 insertions(+), 203 deletions(-) delete mode 100644 Vagrantfile delete mode 100644 bootstrap_trusty64.sh create mode 100644 docs/examples/run_simple_example.ipynb delete mode 100644 tardis/data/atom_data.h5 create mode 100644 tardis/data/atomic_data_repo.yml create mode 100644 tardis/data/default_tardis_internal_config.yml create mode 100644 tardis/io/atom_data/__init__.py create mode 100644 tardis/io/atom_data/atom_web_download.py rename tardis/io/{atomic.py => atom_data/base.py} (98%) create mode 100644 tardis/io/atom_data/util.py create mode 100644 tardis/io/config_internal.py diff --git a/Vagrantfile b/Vagrantfile deleted file mode 100644 index 06d185fd4c1..00000000000 --- a/Vagrantfile +++ /dev/null @@ -1,124 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! -VAGRANTFILE_API_VERSION = "2" - -Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| - # All Vagrant configuration is done here. The most common configuration - # options are documented and commented below. For a complete reference, - # please see the online documentation at vagrantup.com. - - # Every Vagrant virtual environment requires a box to build off of. - config.vm.box = "ubuntu/trusty64" - - config.vm.provision :shell, path: "bootstrap_trusty64.sh", privileged:false - - # Disable automatic box update checking. If you disable this, then - # boxes will only be checked for updates when the user runs - # `vagrant box outdated`. This is not recommended. - # config.vm.box_check_update = false - - # Create a forwarded port mapping which allows access to a specific port - # within the machine from a port on the host machine. In the example below, - # accessing "localhost:8080" will access port 80 on the guest machine. - # config.vm.network "forwarded_port", guest: 80, host: 8080 - - # Create a private network, which allows host-only access to the machine - # using a specific IP. - # config.vm.network "private_network", ip: "192.168.33.10" - - # Create a public network, which generally matched to bridged network. - # Bridged networks make the machine appear as another physical device on - # your network. - # config.vm.network "public_network" - - # If true, then any SSH connections made will enable agent forwarding. - # Default value: false - # config.ssh.forward_agent = true - - # Share an additional folder to the guest VM. The first argument is - # the path on the host to the actual folder. The second argument is - # the path on the guest to mount the folder. And the optional third - # argument is a set of non-required options. - # config.vm.synced_folder "../data", "/vagrant_data" - - # Provider-specific configuration so you can fine-tune various - # backing providers for Vagrant. These expose provider-specific options. - # Example for VirtualBox: - # - # config.vm.provider "virtualbox" do |vb| - # # Don't boot with headless mode - # vb.gui = true - # - # # Use VBoxManage to customize the VM. For example to change memory: - # vb.customize ["modifyvm", :id, "--memory", "1024"] - # end - # - # View the documentation for the provider you're using for more - # information on available options. - - # Enable provisioning with CFEngine. CFEngine Community packages are - # automatically installed. For example, configure the host as a - # policy server and optionally a policy file to run: - # - # config.vm.provision "cfengine" do |cf| - # cf.am_policy_hub = true - # # cf.run_file = "motd.cf" - # end - # - # You can also configure and bootstrap a client to an existing - # policy server: - # - # config.vm.provision "cfengine" do |cf| - # cf.policy_server_address = "10.0.2.15" - # end - - # Enable provisioning with Puppet stand alone. Puppet manifests - # are contained in a directory path relative to this Vagrantfile. - # You will need to create the manifests directory and a manifest in - # the file default.pp in the manifests_path directory. - # - # config.vm.provision "puppet" do |puppet| - # puppet.manifests_path = "manifests" - # puppet.manifest_file = "default.pp" - # end - - # Enable provisioning with chef solo, specifying a cookbooks path, roles - # path, and data_bags path (all relative to this Vagrantfile), and adding - # some recipes and/or roles. - # - # config.vm.provision "chef_solo" do |chef| - # chef.cookbooks_path = "../my-recipes/cookbooks" - # chef.roles_path = "../my-recipes/roles" - # chef.data_bags_path = "../my-recipes/data_bags" - # chef.add_recipe "mysql" - # chef.add_role "web" - # - # # You may also specify custom JSON attributes: - # chef.json = { mysql_password: "foo" } - # end - - # Enable provisioning with chef server, specifying the chef server URL, - # and the path to the validation key (relative to this Vagrantfile). - # - # The Opscode Platform uses HTTPS. Substitute your organization for - # ORGNAME in the URL and validation key. - # - # If you have your own Chef Server, use the appropriate URL, which may be - # HTTP instead of HTTPS depending on your configuration. Also change the - # validation key to validation.pem. - # - # config.vm.provision "chef_client" do |chef| - # chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME" - # chef.validation_key_path = "ORGNAME-validator.pem" - # end - # - # If you're using the Opscode platform, your validator client is - # ORGNAME-validator, replacing ORGNAME with your organization name. - # - # If you have your own Chef Server, the default validation client name is - # chef-validator, unless you changed the configuration. - # - # chef.validation_client_name = "ORGNAME-validator" -end diff --git a/bootstrap_trusty64.sh b/bootstrap_trusty64.sh deleted file mode 100644 index b998a63517a..00000000000 --- a/bootstrap_trusty64.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -sudo apt-get install git --yes - -wget http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -O miniconda.sh -bash miniconda.sh -b - -export PATH=/home/vagrant/miniconda/bin:$PATH -conda update --yes conda - -conda create --yes -n tardis --file /vagrant/pip-requirements pip - -echo "export PATH=/home/vagrant/miniconda/bin:$PATH" >> .bashrc - -wget http://opensupernova.org/~ftsamis/tardis_example.tar.gz -tar zxvf tardis_example.tar.gz \ No newline at end of file diff --git a/docs/examples/run_simple_example.ipynb b/docs/examples/run_simple_example.ipynb new file mode 100644 index 00000000000..7cadb3d9a57 --- /dev/null +++ b/docs/examples/run_simple_example.ipynb @@ -0,0 +1,1222 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Simple Jupyter TARDIS Example ###" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/tqdm/autonotebook/__init__.py:14: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)\n", + " \" (e.g. in jupyter console)\", TqdmExperimentalWarning)\n" + ] + } + ], + "source": [ + "from tardis import run_tardis\n", + "from tardis.io.atom_data.util import download_atom_data" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.io.atom_data.atom_web_download\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Downloading atomic data from https://media.githubusercontent.com/media/tardis-sn/tardis-refdata/master/atom_data/kurucz_cd23_chianti_H_He.h5 to /Users/wkerzend/projects/tardis/tardis-data/kurucz_cd23_chianti_H_He.h5 (\u001b[1matom_web_download.py\u001b[0m:37)\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "33dd6796be49474b81854df7f5cf0778", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "HBox(children=(IntProgress(value=0, description='kurucz_cd23_chianti_H_He.h5', max=73704476, style=ProgressSty…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "# the data is automatically downloaded\n", + "download_atom_data('kurucz_cd23_chianti_H_He')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.plasma.standard_plasmas\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Reading Atomic Data from kurucz_cd23_chianti_H_He.h5 (\u001b[1mstandard_plasmas.py\u001b[0m:76)\n", + "[\u001b[1mtardis.io.atom_data.util\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Atom Data kurucz_cd23_chianti_H_He.h5 not found in local path. Exists in TARDIS Data repo /Users/wkerzend/projects/tardis/tardis-data/kurucz_cd23_chianti_H_He.h5 (\u001b[1mutil.py\u001b[0m:29)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/IPython/core/interactiveshell.py:3267: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " exec(code_obj, self.user_global_ns, self.user_ns)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mtardis.io.atom_data.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Read Atom Data with UUID=6f7b09e887a311e7a06b246e96350010 and MD5=864f1753714343c41f99cb065710cace. (\u001b[1mbase.py\u001b[0m:175)\n", + "[\u001b[1mtardis.io.atom_data.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Non provided atomic data: synpp_refs, ion_cx_th_data, ion_cx_sp_data (\u001b[1mbase.py\u001b[0m:178)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", + " AstropyDeprecationWarning)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/python/tardis/tardis/plasma/properties/ion_population.py:59: FutureWarning: \n", + "Passing list-likes to .loc or [] with any missing label will raise\n", + "KeyError in the future, you can use .reindex() as an alternative.\n", + "\n", + "See the documentation here:\n", + "https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike\n", + " partition_function.index].dropna())\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/equivalencies.py:90: RuntimeWarning: divide by zero encountered in double_scalars\n", + " (si.m, si.Hz, lambda x: _si.c.value / x),\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", + " AstropyDeprecationWarning)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 1/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 7.96915e+42 erg / s Luminosity absorbed = 2.63370e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 9926.501965 10171.209103 0.400392 0.500372\n", + "\t5 9852.611678 10306.111379 0.211205 0.191331\n", + "\t10 9779.813302 10174.379204 0.142695 0.116864\n", + "\t15 9708.082813 9910.442275 0.104556 0.085962\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 9933.952 K -- next t_inner 11453.040 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/python/tardis/tardis/plasma/properties/ion_population.py:59: FutureWarning: \n", + "Passing list-likes to .loc or [] with any missing label will raise\n", + "KeyError in the future, you can use .reindex() as an alternative.\n", + "\n", + "See the documentation here:\n", + "https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike\n", + " partition_function.index].dropna())\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 2/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.40398e+43 erg / s Luminosity absorbed = 4.68639e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10171.209103 11518.516702 0.500372 0.538298\n", + "\t5 10306.111379 11554.412119 0.191331 0.217946\n", + "\t10 10174.379204 11373.574056 0.116864 0.132935\n", + "\t15 9910.442275 11040.788763 0.085962 0.099700\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11453.040 K -- next t_inner 9948.201 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 3/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.16814e+42 erg / s Luminosity absorbed = 2.50161e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11518.516702 10501.129902 0.538298 0.438591\n", + "\t5 11554.412119 10869.940791 0.217946 0.160809\n", + "\t10 11373.574056 10558.269547 0.132935 0.103807\n", + "\t15 11040.788763 10185.648701 0.099700 0.079165\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 9948.201 K -- next t_inner 11328.896 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 4/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.34487e+43 erg / s Luminosity absorbed = 4.47931e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10501.129902 11527.008679 0.438591 0.512509\n", + "\t5 10869.940791 11706.138980 0.160809 0.196458\n", + "\t10 10558.269547 11444.208532 0.103807 0.124092\n", + "\t15 10185.648701 11085.857161 0.079165 0.093694\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11328.896 K -- next t_inner 10054.300 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 5/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.44348e+42 erg / s Luminosity absorbed = 2.68000e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11527.008679 10659.382763 0.512509 0.433573\n", + "\t5 11706.138980 11038.244897 0.196458 0.158494\n", + "\t10 11444.208532 10790.696726 0.124092 0.099660\n", + "\t15 11085.857161 10450.666394 0.093694 0.074550\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10054.300 K -- next t_inner 11261.489 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 6/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.32492e+43 erg / s Luminosity absorbed = 4.26229e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10659.382763 11507.437689 0.433573 0.499441\n", + "\t5 11038.244897 11634.568776 0.158494 0.197953\n", + "\t10 10790.696726 11418.594559 0.099660 0.124085\n", + "\t15 10450.666394 10999.619473 0.074550 0.094676\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11261.489 K -- next t_inner 10069.444 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 7/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.49858e+42 erg / s Luminosity absorbed = 2.69247e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11507.437689 10679.650246 0.499441 0.431088\n", + "\t5 11634.568776 11048.266431 0.197953 0.157179\n", + "\t10 11418.594559 10825.714870 0.124085 0.098608\n", + "\t15 10999.619473 10506.321595 0.094676 0.073794\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10069.444 K -- next t_inner 11241.826 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 8/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.30632e+43 erg / s Luminosity absorbed = 4.31719e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10679.650246 11459.828312 0.431088 0.506176\n", + "\t5 11048.266431 11688.139012 0.157179 0.193468\n", + "\t10 10825.714870 11441.768967 0.098608 0.122412\n", + "\t15 10506.321595 11099.449886 0.073794 0.090915\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11241.826 K -- next t_inner 10123.177 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 9/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.68357e+42 erg / s Luminosity absorbed = 2.75015e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11459.828312 10666.223660 0.506176 0.445097\n", + "\t5 11688.139012 11000.288585 0.193468 0.163424\n", + "\t10 11441.768967 10822.884326 0.122412 0.101641\n", + "\t15 11099.449886 10384.181273 0.090915 0.078432\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10123.177 K -- next t_inner 11180.783 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 10/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.28170e+43 erg / s Luminosity absorbed = 4.19511e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10666.223660 11427.410445 0.445097 0.500788\n", + "\t5 11000.288585 11612.349822 0.163424 0.193129\n", + "\t10 10822.884326 11373.245169 0.101641 0.121622\n", + "\t15 10384.181273 11047.955461 0.078432 0.090937\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11180.783 K -- next t_inner 10164.432 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 11/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.79074e+42 erg / s Luminosity absorbed = 2.82804e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11427.410445 10741.337822 0.500788 0.439938\n", + "\t5 11612.349822 11230.515356 0.193129 0.153637\n", + "\t10 11373.245169 10870.696315 0.121622 0.101050\n", + "\t15 11047.955461 10538.170159 0.090937 0.074680\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10164.432 K -- next t_inner 11157.711 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 12/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.27128e+43 erg / s Luminosity absorbed = 4.15415e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10741.337822 11507.877578 0.439938 0.483114\n", + "\t5 11230.515356 11808.852053 0.153637 0.181826\n", + "\t10 10870.696315 11557.412757 0.101050 0.113563\n", + "\t15 10538.170159 11117.762050 0.074680 0.087418\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11157.711 K -- next t_inner 10184.966 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 13/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.90399e+42 erg / s Luminosity absorbed = 2.80864e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11507.877578 10727.217531 0.483114 0.443706\n", + "\t5 11808.852053 11171.758889 0.181826 0.160824\n", + "\t10 11557.412757 10971.722637 0.113563 0.098588\n", + "\t15 11117.762050 10574.916600 0.087418 0.075266\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10184.966 K -- next t_inner 11108.923 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 14/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.25052e+43 erg / s Luminosity absorbed = 4.07335e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10727.217531 11413.626870 0.443706 0.489526\n", + "\t5 11171.758889 11697.006992 0.160824 0.184795\n", + "\t10 10971.722637 11424.445844 0.098588 0.116722\n", + "\t15 10574.916600 11047.434163 0.075266 0.088067\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11108.923 K -- next t_inner 10224.266 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 15/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 9.00727e+42 erg / s Luminosity absorbed = 2.88724e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11413.626870 10712.622749 0.489526 0.455660\n", + "\t5 11697.006992 11125.894032 0.184795 0.164091\n", + "\t10 11424.445844 10816.390451 0.116722 0.104037\n", + "\t15 11047.434163 10421.687097 0.088067 0.080401\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10224.266 K -- next t_inner 11087.666 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 16/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.23781e+43 erg / s Luminosity absorbed = 4.07435e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10712.622749 11352.158138 0.455660 0.500754\n", + "\t5 11125.894032 11644.968350 0.164091 0.185289\n", + "\t10 10816.390451 11320.695930 0.104037 0.119195\n", + "\t15 10421.687097 10965.228363 0.080401 0.089940\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11087.666 K -- next t_inner 10256.946 K (\u001b[1mbase.py\u001b[0m:350)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 17/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 9.18956e+42 erg / s Luminosity absorbed = 2.86249e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11352.158138 10738.799194 0.500754 0.452965\n", + "\t5 11644.968350 11210.269586 0.185289 0.160945\n", + "\t10 11320.695930 10911.463205 0.119195 0.103910\n", + "\t15 10965.228363 10545.065525 0.089940 0.078433\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10256.946 K -- next t_inner 11012.230 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 18/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20741e+43 erg / s Luminosity absorbed = 3.93375e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10738.799194 11316.665617 0.452965 0.492135\n", + "\t5 11210.269586 11599.094127 0.160945 0.183929\n", + "\t10 10911.463205 11403.508986 0.103910 0.114400\n", + "\t15 10545.065525 10958.974248 0.078433 0.087415\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11012.230 K -- next t_inner 10314.623 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 19/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 9.29848e+42 erg / s Luminosity absorbed = 3.02011e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11316.665617 10862.505720 0.492135 0.444495\n", + "\t5 11599.094127 11194.462074 0.183929 0.162842\n", + "\t10 11403.508986 11065.620645 0.114400 0.099372\n", + "\t15 10958.974248 10599.851144 0.087415 0.077690\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10314.623 K -- next t_inner 11009.102 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 20/20 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21062e+43 erg / s Luminosity absorbed = 3.88405e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Simulation finished in 20 iterations and took 23.02 s (\u001b[1mbase.py\u001b[0m:306)\n" + ] + } + ], + "source": [ + "#TARDIS now uses the data in the data repo\n", + "sim = run_tardis('tardis_example.yml')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/matplotlib/style/core.py:167: UserWarning: In /Users/wkerzend/.matplotlib/stylelib/talk_default.mplstyle: \n", + "The text.latex.unicode rcparam was deprecated in Matplotlib 2.2 and will be removed in 3.1.\n", + " styles = read_style_directory(stylelib_path)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "Populating the interactive namespace from numpy and matplotlib\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", + " AstropyDeprecationWarning)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/python/tardis/tardis/montecarlo/formal_integral.py:167: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.\n", + " result = pd.DataFrame(att_S_ul.as_matrix(), index=transitions.transition_line_id.values)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n" + ] + }, + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('
');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
');\n", + " var titletext = $(\n", + " '
');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('
');\n", + " var button = $('');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Luminosity [erg/s/$\\\\AA$]')" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%pylab notebook\n", + "\n", + "spectrum = sim.runner.spectrum_integrated\n", + "\n", + "plot(spectrum.wavelength, spectrum.luminosity_density_lambda)\n", + "xlabel('Wavelength [$\\AA$]')\n", + "ylabel('Luminosity [erg/s/$\\AA$]')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/running/access.rst b/docs/running/access.rst index ee0e7539759..69d07d21ad9 100644 --- a/docs/running/access.rst +++ b/docs/running/access.rst @@ -9,7 +9,4 @@ use cases, can be accessed. .. toctree:: - access_spectra - access_final_plasma - access_model access_iterations diff --git a/docs/running/access_model.rst b/docs/running/access_model.rst deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/docs/running/access_plasma.rst b/docs/running/access_plasma.rst deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/docs/running/access_spectra.rst b/docs/running/access_spectra.rst deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/docs/configuration/config_validator.rst b/docs/running/configuration/config_validator.rst similarity index 100% rename from docs/configuration/config_validator.rst rename to docs/running/configuration/config_validator.rst diff --git a/docs/configuration/configuration.rst b/docs/running/configuration/configuration.rst similarity index 100% rename from docs/configuration/configuration.rst rename to docs/running/configuration/configuration.rst diff --git a/docs/configuration/index.rst b/docs/running/configuration/index.rst similarity index 100% rename from docs/configuration/index.rst rename to docs/running/configuration/index.rst diff --git a/docs/configuration/read_configuration.ipynb b/docs/running/configuration/read_configuration.ipynb similarity index 100% rename from docs/configuration/read_configuration.ipynb rename to docs/running/configuration/read_configuration.ipynb diff --git a/docs/running/configuration/schemas/base.yml b/docs/running/configuration/schemas/base.yml new file mode 120000 index 00000000000..77b52a2a01e --- /dev/null +++ b/docs/running/configuration/schemas/base.yml @@ -0,0 +1 @@ +../../../../tardis/io/schemas/base.yml \ No newline at end of file diff --git a/docs/running/configuration/schemas/model.yml b/docs/running/configuration/schemas/model.yml new file mode 120000 index 00000000000..ee2c1c4086f --- /dev/null +++ b/docs/running/configuration/schemas/model.yml @@ -0,0 +1 @@ +../../../../tardis/io/schemas/model.yml \ No newline at end of file diff --git a/docs/running/configuration/schemas/montecarlo.yml b/docs/running/configuration/schemas/montecarlo.yml new file mode 120000 index 00000000000..378f1a8fefe --- /dev/null +++ b/docs/running/configuration/schemas/montecarlo.yml @@ -0,0 +1 @@ +../../../../tardis/io/schemas/montecarlo.yml \ No newline at end of file diff --git a/docs/running/configuration/schemas/plasma.yml b/docs/running/configuration/schemas/plasma.yml new file mode 120000 index 00000000000..273a6c51daf --- /dev/null +++ b/docs/running/configuration/schemas/plasma.yml @@ -0,0 +1 @@ +../../../../tardis/io/schemas/plasma.yml \ No newline at end of file diff --git a/docs/running/configuration/schemas/spectrum.yml b/docs/running/configuration/schemas/spectrum.yml new file mode 120000 index 00000000000..146d94b9ca4 --- /dev/null +++ b/docs/running/configuration/schemas/spectrum.yml @@ -0,0 +1 @@ +../../../../tardis/io/schemas/spectrum.yml \ No newline at end of file diff --git a/docs/running/configuration/schemas/supernova.yml b/docs/running/configuration/schemas/supernova.yml new file mode 120000 index 00000000000..b00bf28b35e --- /dev/null +++ b/docs/running/configuration/schemas/supernova.yml @@ -0,0 +1 @@ +../../../../tardis/io/schemas/supernova.yml \ No newline at end of file diff --git a/docs/running/index.rst b/docs/running/index.rst index 7802d2f5b94..2c9ec259c6f 100644 --- a/docs/running/index.rst +++ b/docs/running/index.rst @@ -7,15 +7,6 @@ The TARDIS code needs three components to calculate spectra: 1) an Atom Database `Carsus `_ subpackage. A quick start guide to run TARDIS can be found :ref:`here ` -Information regarding running and operating Tardis. - -.. toctree:: - :maxdepth: 2 - - ../atomic/index - ../models/index - ../configuration/index - using_formal_integral .. _quickstart: diff --git a/docs/running/using_formal_integral.rst b/docs/running/using_formal_integral.rst index 3e58cbd6735..7fa07bfdfed 100644 --- a/docs/running/using_formal_integral.rst +++ b/docs/running/using_formal_integral.rst @@ -4,9 +4,9 @@ Spectral Synthesis with the Formal Integral Method In addition to generating the final Monte Carlo spectrum from the population of Monte Carlo packets and the implemented variant of the "peeling-off" technique -(see :doc:`../montecarlo/virtualpackets`), TARDIS supports spectral synthesis with +(see :ref:`virtual_packets`), TARDIS supports spectral synthesis with so-called formal integral method by :cite:`Lucy1999a` (see a detailed -description of the method at :doc:`../montecarlo/sourceintegration`) +description of the method at :ref:`source_integration`) Using the Formal Integral Method ================================ @@ -23,4 +23,4 @@ Note that the integrated spectrum (``simulation.runner.spectrum_integrated``) is a lazy property so it will be only generated (and then cached) once it is accessed. The spectrum integration routine is Open-MP parallelized, so this process may be significantly sped-up if TARDIS is built with the -``--with-openmp`` option and more then one threas is used. +``--with-openmp`` option and more then one thread is used. diff --git a/tardis/montecarlo/formal_integral.py b/tardis/montecarlo/formal_integral.py index 72231b538f9..d2bb0496c37 100644 --- a/tardis/montecarlo/formal_integral.py +++ b/tardis/montecarlo/formal_integral.py @@ -164,7 +164,7 @@ def make_source_function(self): e_dot_u = C_frame.loc[e_dot_u.index] att_S_ul = (wave * (q_ul * e_dot_u) * t / (4 * np.pi)) - result = pd.DataFrame(att_S_ul.as_matrix(), index=transitions.transition_line_id.values) + result = pd.DataFrame(att_S_ul.values, index=transitions.transition_line_id.values) att_S_ul = result.loc[lines.index.values].values # Jredlu should already by in the correct order, i.e. by wavelength of From baec4c4d990bb60fe69d3540a799926bd957a71e Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 22 Jul 2019 11:32:47 -0400 Subject: [PATCH 054/467] update the development section update the quickstart update running --- .../{development_workflow.rst => index.rst} | 18 +++- docs/index.rst | 4 +- docs/quickstart/quickstart.ipynb | 3 + docs/running/commandline.rst | 34 +++++++ docs/running/configuration/index.rst | 4 +- docs/running/gui.rst | 58 ++++++++++-- docs/running/index.rst | 88 ++----------------- .../Custom_TARDIS_Model_Tutorial.ipynb | 0 docs/{ => running}/notebooks/data/abund.dat | 0 .../notebooks/data/config_init_trad.yml | 0 .../notebooks/data/config_no_init_trad.yml | 0 docs/{ => running}/notebooks/data/density.txt | 0 docs/{ => running}/notebooks/hdf_writer.ipynb | 0 .../notebooks/init_trad_bug.ipynb | 0 .../notebooks/isotope_pd_subclass.ipynb | 0 docs/{ => running}/notebooks/to_hdf.ipynb | 0 16 files changed, 114 insertions(+), 95 deletions(-) rename docs/development/{development_workflow.rst => index.rst} (73%) create mode 100644 docs/running/commandline.rst rename docs/{ => running}/notebooks/Custom_TARDIS_Model_Tutorial.ipynb (100%) rename docs/{ => running}/notebooks/data/abund.dat (100%) rename docs/{ => running}/notebooks/data/config_init_trad.yml (100%) rename docs/{ => running}/notebooks/data/config_no_init_trad.yml (100%) rename docs/{ => running}/notebooks/data/density.txt (100%) rename docs/{ => running}/notebooks/hdf_writer.ipynb (100%) rename docs/{ => running}/notebooks/init_trad_bug.ipynb (100%) rename docs/{ => running}/notebooks/isotope_pd_subclass.ipynb (100%) rename docs/{ => running}/notebooks/to_hdf.ipynb (100%) diff --git a/docs/development/development_workflow.rst b/docs/development/index.rst similarity index 73% rename from docs/development/development_workflow.rst rename to docs/development/index.rst index 99693e9e5c7..e4fe42e68e9 100644 --- a/docs/development/development_workflow.rst +++ b/docs/development/index.rst @@ -8,20 +8,32 @@ workflow is taken from `Astropy `_ and credit belongs to the Astropy team for designing it. +.. toctree:: + :maxdepth: 2 + + running_tests + issues .. toctree:: + :maxdepth: 2 + :caption: Git and coding workflow git_workflow - release_workflow + .. toctree:: + :maxdepth: 2 + :caption: TARDIS core team instructions + release_workflow update_refdata + continuous_integration + developer_faq + + -.. toctree:: - continuous_integration diff --git a/docs/index.rst b/docs/index.rst index 07a24b5af94..5c872f2816a 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -87,9 +87,7 @@ assistance. :caption: Developers Guide :hidden: - development/issues - development/development_workflow - running_tests + development/index CHANGELOG.md diff --git a/docs/quickstart/quickstart.ipynb b/docs/quickstart/quickstart.ipynb index b5ffc273cca..bbb8ff63a31 100644 --- a/docs/quickstart/quickstart.ipynb +++ b/docs/quickstart/quickstart.ipynb @@ -1189,6 +1189,9 @@ } ], "metadata": { + "nbsphinx": { + "execute": "auto" + }, "kernelspec": { "display_name": "Python 3", "language": "python", diff --git a/docs/running/commandline.rst b/docs/running/commandline.rst new file mode 100644 index 00000000000..e480552da88 --- /dev/null +++ b/docs/running/commandline.rst @@ -0,0 +1,34 @@ +Running TARDIS in the commandline +================================= + +.. warning:: + + This option will be removed in the next versions of TARDIS + + +After installing TARDIS just download the configuration file from the +`tardis-setups `_ and the standard +atomic data set from the `tardis-refdata +`_ repository and run TARDIS. +Assuming you have ``wget``, you could follow the procedure: + + +.. code-block:: none + + mkdir tardis_example + cd tardis_example + wget https://raw.githubusercontent.com/tardis-sn/tardis-setups/master/2014/2014_kerzendorf_sim/appendix_A1/tardis_example.yml + wget https://github.com/tardis-sn/tardis-refdata/raw/master/atom_data/kurucz_cd23_chianti_H_He.h5 + tardis tardis_example.yml output_spectrum.dat + + +Then plot the output_spectrum.dat with your favourite plotting program. Here's an example how to do this with python. +(The only thing you need to install is ipython and matplotlib - in addition to TARDIS's requirements) + +.. code-block:: python + + ipython --pylab + >>> tardis_spec = loadtxt('output_spectrum.dat') + >>> plot(tardis_spec[:,0], tardis_spec[:,1]) + +More atomic datasets can be downloaded from :ref:`atomic-data-download`. \ No newline at end of file diff --git a/docs/running/configuration/index.rst b/docs/running/configuration/index.rst index 0dfbed67cfb..96a0f931659 100644 --- a/docs/running/configuration/index.rst +++ b/docs/running/configuration/index.rst @@ -11,8 +11,8 @@ and pages provide more details concerning the TARDIS configuration process. .. toctree:: - :maxdepth: 3 + :maxdepth: 2 configuration config_validator - read_configuration.ipynb + read_configuration diff --git a/docs/running/gui.rst b/docs/running/gui.rst index a9daae55fda..d23c94ba5e5 100644 --- a/docs/running/gui.rst +++ b/docs/running/gui.rst @@ -1,23 +1,69 @@ -.. _gui_explanation: +.. _gui: ************************ Graphical User Interface ************************ - TARDIS uses the `PyQt4 framework `_ for its cross-platform interface. -The GUI runs through the `IPython Interpreter `_ which should be started with the -command ``ipython --pylab=qt4``, so that it has acess to pylab. - Creating an instance of the :class:`ModelViewer`-class requires that PyQt4/PySide has already been initialized in IPython. The above command to start IPython accomplishes this. gui.py contains all the classes used to create the GUI for Tardis. This module must be imported inside IPython console started above. The console provides the event loop and the place -to create/calculate the tardis model. So the module is basically a tool to visualize results. +to create/calculate the tardis model. So the module is basically a tool to visualize results. + +**To setup and run the GUI (under development) follow these steps:** + +The gui can use one of two python bindings for qt, namely PyQt4 +and PySide. You can choose which binding is used by setting the +environment variable QT_API in your bash. Currently, the TARDIS team uses PyQT4 + +**1**. Installing required packages + +.. code-block:: shell + + conda activate tardis + conda install pyqt=4.8.7 + + +**2**. Choosing between PySide and PyQt4 + +.. code-block:: shell + + #To choose PySide + export QT_API=pyside + + #To choose PyQt - this is what the TARDIS team does + export QT_API=pyqt + +**3**. An example of creating a model and GUI + +To show the gui from the ipython shell use the following commands. + +.. code-block:: shell + + jupyter notebook + +.. code-block:: python + + from tardis import run_tardis + from tardis.gui import interface + sim = run_tardis('yamlconfigfile.yml', 'atomdatafile.h5') + + interface.show(sim) + +If you just want to run from a configuration file and show the results, you can +do that outside the jupyter notebook. Navigate to the folder where you +installed tardis and go to tardis/tardis/gui, and use the following command. + +.. code-block:: none + + python interface.py path-to-yaml-configuration-file path-to-atomic-data-file + + Running Instructions -------------------- diff --git a/docs/running/index.rst b/docs/running/index.rst index 2c9ec259c6f..fcb17c57b3b 100644 --- a/docs/running/index.rst +++ b/docs/running/index.rst @@ -2,13 +2,19 @@ Running TARDIS ************** -The TARDIS code needs three components to calculate spectra: 1) an Atom Database +The TARDIS code needs three components to calculate spectra: 1) an atom database 2) a model 3) a configuration file. The Atom Database is created by the `Carsus `_ subpackage. A quick start guide to run TARDIS can be found :ref:`here ` +.. toctree:: + :maxdepth: 2 + + commandline + gui + .. _quickstart: @@ -24,86 +30,6 @@ have full access to the model properties (as described in :ref:`physical_quantit examples/run_simple_example.ipynb -Running TARDIS in the commandline -================================= - -After installing TARDIS just download the configuration file from the -`tardis-setups `_ and the standard -atomic data set from the `tardis-refdata -`_ repository and run TARDIS. -Assuming you have ``wget``, you could follow the procedure: - - -.. code-block:: none - - mkdir tardis_example - cd tardis_example - wget https://raw.githubusercontent.com/tardis-sn/tardis-setups/master/2014/2014_kerzendorf_sim/appendix_A1/tardis_example.yml - wget https://github.com/tardis-sn/tardis-refdata/raw/master/atom_data/kurucz_cd23_chianti_H_He.h5 - tardis tardis_example.yml output_spectrum.dat - - -Then plot the output_spectrum.dat with your favourite plotting program. Here's an example how to do this with python. -(The only thing you need to install is ipython and matplotlib - in addition to TARDIS's requirements) - -.. code-block:: python - - ipython --pylab - >>> tardis_spec = loadtxt('output_spectrum.dat') - >>> plot(tardis_spec[:,0], tardis_spec[:,1]) - -More atomic datasets can be downloaded from :ref:`atomic-data-download`. - - -Graphical User Interface -======================== - -To get a detailed explanation on gui layout go to :ref:`gui_explanation` . - -**To setup and run the GUI(under development) follow these steps:** - -The gui can use one of two python bindings for qt, namely PyQt4 -and PySide. You can choose which binding is used by setting the -environment variable QT_API in your bash. - -**1**. Installing required packages - -.. code-block:: none - - source activate tardis - conda install ipython=3.0.0 pyside=1.2.1 shiboken=1.2.1 - - -**2**. Choosing between PySide and PyQt4 - -.. code-block:: none - - #To choose PySide - export QT_API=pyside - - #To choose PyQt - export QT_API=pyqt - -**3**. An example of creating a model and GUI - -To show the gui from the ipython shell use the following commands. - -.. code-block:: none - - ipython --pylab=qt4 - -.. code-block:: python - - >>> from tardis import run_tardis - >>> mdl = run_tardis('yamlconfigfile.yml', 'atomdatafile.h5') - >>> from tardis.gui import interface - >>> interface.show(mdl) - -If you just want to run from a configuration file and show the results, you can -do that outside the ipython shell.To do this navigate to the folder where you -installed tardis and go to tardis/tardis/gui, and use the following command. -.. code-block:: none - python interface.py path-to-yaml-configuration-file path-to-atomic-data-file diff --git a/docs/notebooks/Custom_TARDIS_Model_Tutorial.ipynb b/docs/running/notebooks/Custom_TARDIS_Model_Tutorial.ipynb similarity index 100% rename from docs/notebooks/Custom_TARDIS_Model_Tutorial.ipynb rename to docs/running/notebooks/Custom_TARDIS_Model_Tutorial.ipynb diff --git a/docs/notebooks/data/abund.dat b/docs/running/notebooks/data/abund.dat similarity index 100% rename from docs/notebooks/data/abund.dat rename to docs/running/notebooks/data/abund.dat diff --git a/docs/notebooks/data/config_init_trad.yml b/docs/running/notebooks/data/config_init_trad.yml similarity index 100% rename from docs/notebooks/data/config_init_trad.yml rename to docs/running/notebooks/data/config_init_trad.yml diff --git a/docs/notebooks/data/config_no_init_trad.yml b/docs/running/notebooks/data/config_no_init_trad.yml similarity index 100% rename from docs/notebooks/data/config_no_init_trad.yml rename to docs/running/notebooks/data/config_no_init_trad.yml diff --git a/docs/notebooks/data/density.txt b/docs/running/notebooks/data/density.txt similarity index 100% rename from docs/notebooks/data/density.txt rename to docs/running/notebooks/data/density.txt diff --git a/docs/notebooks/hdf_writer.ipynb b/docs/running/notebooks/hdf_writer.ipynb similarity index 100% rename from docs/notebooks/hdf_writer.ipynb rename to docs/running/notebooks/hdf_writer.ipynb diff --git a/docs/notebooks/init_trad_bug.ipynb b/docs/running/notebooks/init_trad_bug.ipynb similarity index 100% rename from docs/notebooks/init_trad_bug.ipynb rename to docs/running/notebooks/init_trad_bug.ipynb diff --git a/docs/notebooks/isotope_pd_subclass.ipynb b/docs/running/notebooks/isotope_pd_subclass.ipynb similarity index 100% rename from docs/notebooks/isotope_pd_subclass.ipynb rename to docs/running/notebooks/isotope_pd_subclass.ipynb diff --git a/docs/notebooks/to_hdf.ipynb b/docs/running/notebooks/to_hdf.ipynb similarity index 100% rename from docs/notebooks/to_hdf.ipynb rename to docs/running/notebooks/to_hdf.ipynb From 6d359621c2321417e0a371ea1da91b645f04f885 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 22 Jul 2019 13:23:46 -0400 Subject: [PATCH 055/467] move configuration again cleanup in running --- .../configuration/config_validator.rst | 0 .../configuration/configuration.rst | 9 ++- docs/{running => }/configuration/index.rst | 0 .../configuration/read_configuration.ipynb | 0 docs/configuration/schemas/base.yml | 1 + docs/configuration/schemas/model.yml | 1 + docs/configuration/schemas/montecarlo.yml | 1 + docs/configuration/schemas/plasma.yml | 1 + docs/configuration/schemas/spectrum.yml | 1 + docs/configuration/schemas/supernova.yml | 1 + .../integration.yml | 0 docs/quickstart/quickstart.ipynb | 63 +++++++++++++------ docs/running/configuration/schemas/base.yml | 1 - docs/running/configuration/schemas/model.yml | 1 - .../configuration/schemas/montecarlo.yml | 1 - docs/running/configuration/schemas/plasma.yml | 1 - .../configuration/schemas/spectrum.yml | 1 - .../configuration/schemas/supernova.yml | 1 - docs/running/example_data.inc | 2 + docs/running/index.rst | 19 ++++-- docs/running/notebooks/index.rst | 4 ++ 21 files changed, 79 insertions(+), 30 deletions(-) rename docs/{running => }/configuration/config_validator.rst (100%) rename docs/{running => }/configuration/configuration.rst (98%) rename docs/{running => }/configuration/index.rst (100%) rename docs/{running => }/configuration/read_configuration.ipynb (100%) create mode 120000 docs/configuration/schemas/base.yml create mode 120000 docs/configuration/schemas/model.yml create mode 120000 docs/configuration/schemas/montecarlo.yml create mode 120000 docs/configuration/schemas/plasma.yml create mode 120000 docs/configuration/schemas/spectrum.yml create mode 120000 docs/configuration/schemas/supernova.yml rename docs/{yml_files => development}/integration.yml (100%) delete mode 120000 docs/running/configuration/schemas/base.yml delete mode 120000 docs/running/configuration/schemas/model.yml delete mode 120000 docs/running/configuration/schemas/montecarlo.yml delete mode 120000 docs/running/configuration/schemas/plasma.yml delete mode 120000 docs/running/configuration/schemas/spectrum.yml delete mode 120000 docs/running/configuration/schemas/supernova.yml create mode 100644 docs/running/example_data.inc create mode 100644 docs/running/notebooks/index.rst diff --git a/docs/running/configuration/config_validator.rst b/docs/configuration/config_validator.rst similarity index 100% rename from docs/running/configuration/config_validator.rst rename to docs/configuration/config_validator.rst diff --git a/docs/running/configuration/configuration.rst b/docs/configuration/configuration.rst similarity index 98% rename from docs/running/configuration/configuration.rst rename to docs/configuration/configuration.rst index 77db778ec7c..b6d1b07e7fd 100644 --- a/docs/running/configuration/configuration.rst +++ b/docs/configuration/configuration.rst @@ -7,8 +7,7 @@ Configuration File TARDIS uses the `YAML markup language `_ for its configuration files. There are several sections which allow different settings for the different aspects of the TARDIS calculation. An example -configuration file (with a small subset of the options that can be specified) can be downloaded :download:`here -<../examples/tardis_example.yml>`. +configuration file (with a small subset of the options that can be specified) can be downloaded at `example_yml`_. .. warning:: One should note that currently floats in YAML need to be specified in a special format: @@ -24,6 +23,10 @@ can be seen here: The following shows all the options (and their default settings) that are available for TARDIS. No other options are allowed or available + +.. contents:: Overview + :local: + Configuration Schema ==================== @@ -159,3 +162,5 @@ just an integer. Finally, the method option selects the final spectral synthesis interaction mode. Note also the limitations listed at the bottom of the dedicated page. + +.. include:: ../running/example_data.inc \ No newline at end of file diff --git a/docs/running/configuration/index.rst b/docs/configuration/index.rst similarity index 100% rename from docs/running/configuration/index.rst rename to docs/configuration/index.rst diff --git a/docs/running/configuration/read_configuration.ipynb b/docs/configuration/read_configuration.ipynb similarity index 100% rename from docs/running/configuration/read_configuration.ipynb rename to docs/configuration/read_configuration.ipynb diff --git a/docs/configuration/schemas/base.yml b/docs/configuration/schemas/base.yml new file mode 120000 index 00000000000..86d21969b04 --- /dev/null +++ b/docs/configuration/schemas/base.yml @@ -0,0 +1 @@ +../../../tardis/io/schemas/base.yml \ No newline at end of file diff --git a/docs/configuration/schemas/model.yml b/docs/configuration/schemas/model.yml new file mode 120000 index 00000000000..d0141ba515a --- /dev/null +++ b/docs/configuration/schemas/model.yml @@ -0,0 +1 @@ +../../../tardis/io/schemas/model.yml \ No newline at end of file diff --git a/docs/configuration/schemas/montecarlo.yml b/docs/configuration/schemas/montecarlo.yml new file mode 120000 index 00000000000..72bdd903650 --- /dev/null +++ b/docs/configuration/schemas/montecarlo.yml @@ -0,0 +1 @@ +../../../tardis/io/schemas/montecarlo.yml \ No newline at end of file diff --git a/docs/configuration/schemas/plasma.yml b/docs/configuration/schemas/plasma.yml new file mode 120000 index 00000000000..989d5be8b71 --- /dev/null +++ b/docs/configuration/schemas/plasma.yml @@ -0,0 +1 @@ +../../../tardis/io/schemas/plasma.yml \ No newline at end of file diff --git a/docs/configuration/schemas/spectrum.yml b/docs/configuration/schemas/spectrum.yml new file mode 120000 index 00000000000..3cc32e4b316 --- /dev/null +++ b/docs/configuration/schemas/spectrum.yml @@ -0,0 +1 @@ +../../../tardis/io/schemas/spectrum.yml \ No newline at end of file diff --git a/docs/configuration/schemas/supernova.yml b/docs/configuration/schemas/supernova.yml new file mode 120000 index 00000000000..d157db4f384 --- /dev/null +++ b/docs/configuration/schemas/supernova.yml @@ -0,0 +1 @@ +../../../tardis/io/schemas/supernova.yml \ No newline at end of file diff --git a/docs/yml_files/integration.yml b/docs/development/integration.yml similarity index 100% rename from docs/yml_files/integration.yml rename to docs/development/integration.yml diff --git a/docs/quickstart/quickstart.ipynb b/docs/quickstart/quickstart.ipynb index bbb8ff63a31..66464209843 100644 --- a/docs/quickstart/quickstart.ipynb +++ b/docs/quickstart/quickstart.ipynb @@ -36,6 +36,13 @@ "from tardis.io.atom_data.util import download_atom_data" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Downloading the atomic data ####" + ] + }, { "cell_type": "code", "execution_count": 2, @@ -54,6 +61,13 @@ "download_atom_data('kurucz_cd23_chianti_H_He')" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Running the simulation (long output) ####" + ] + }, { "cell_type": "code", "execution_count": 3, @@ -355,23 +369,23 @@ "sim = run_tardis('tardis_example.yml')" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Plotting the Spectrum ####" + ] + }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/matplotlib/style/core.py:167: UserWarning: In /Users/wkerzend/.matplotlib/stylelib/talk_default.mplstyle: \n", - "The text.latex.unicode rcparam was deprecated in Matplotlib 2.2 and will be removed in 3.1.\n", - " styles = read_style_directory(stylelib_path)\n", - " (\u001b[1mwarnings.py\u001b[0m:99)\n", - "Populating the interactive namespace from numpy and matplotlib\n", - "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", - " AstropyDeprecationWarning)\n", - " (\u001b[1mwarnings.py\u001b[0m:99)\n" + "Populating the interactive namespace from numpy and matplotlib\n" ] }, { @@ -1157,7 +1171,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -1169,10 +1183,10 @@ { "data": { "text/plain": [ - "Text(0, 0.5, 'Luminosity [erg/s/$\\\\AA$]')" + "(3000, 9000)" ] }, - "execution_count": 4, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -1180,18 +1194,28 @@ "source": [ "%pylab notebook\n", "\n", - "spectrum = sim.runner.spectrum_integrated\n", + "spectrum = sim.runner.spectrum\n", + "spectrum_virtual = sim.runner.spectrum_virtual\n", + "spectrum_integrated = sim.runner.spectrum_integrated\n", "\n", - "plot(spectrum.wavelength, spectrum.luminosity_density_lambda)\n", + "plot(spectrum.wavelength, spectrum.luminosity_density_lambda, label='normal packets')\n", + "plot(spectrum.wavelength, spectrum_virtual.luminosity_density_lambda, label='virtual packets')\n", + "plot(spectrum.wavelength, spectrum_integrated.luminosity_density_lambda, label='formal integral')\n", "xlabel('Wavelength [$\\AA$]')\n", - "ylabel('Luminosity [erg/s/$\\AA$]')" + "ylabel('Luminosity [erg/s/$\\AA$]')\n", + "legend()\n", + "xlim(3000, 9000)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { - "nbsphinx": { - "execute": "auto" - }, "kernelspec": { "display_name": "Python 3", "language": "python", @@ -1208,6 +1232,9 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.8" + }, + "nbsphinx": { + "execute": "auto" } }, "nbformat": 4, diff --git a/docs/running/configuration/schemas/base.yml b/docs/running/configuration/schemas/base.yml deleted file mode 120000 index 77b52a2a01e..00000000000 --- a/docs/running/configuration/schemas/base.yml +++ /dev/null @@ -1 +0,0 @@ -../../../../tardis/io/schemas/base.yml \ No newline at end of file diff --git a/docs/running/configuration/schemas/model.yml b/docs/running/configuration/schemas/model.yml deleted file mode 120000 index ee2c1c4086f..00000000000 --- a/docs/running/configuration/schemas/model.yml +++ /dev/null @@ -1 +0,0 @@ -../../../../tardis/io/schemas/model.yml \ No newline at end of file diff --git a/docs/running/configuration/schemas/montecarlo.yml b/docs/running/configuration/schemas/montecarlo.yml deleted file mode 120000 index 378f1a8fefe..00000000000 --- a/docs/running/configuration/schemas/montecarlo.yml +++ /dev/null @@ -1 +0,0 @@ -../../../../tardis/io/schemas/montecarlo.yml \ No newline at end of file diff --git a/docs/running/configuration/schemas/plasma.yml b/docs/running/configuration/schemas/plasma.yml deleted file mode 120000 index 273a6c51daf..00000000000 --- a/docs/running/configuration/schemas/plasma.yml +++ /dev/null @@ -1 +0,0 @@ -../../../../tardis/io/schemas/plasma.yml \ No newline at end of file diff --git a/docs/running/configuration/schemas/spectrum.yml b/docs/running/configuration/schemas/spectrum.yml deleted file mode 120000 index 146d94b9ca4..00000000000 --- a/docs/running/configuration/schemas/spectrum.yml +++ /dev/null @@ -1 +0,0 @@ -../../../../tardis/io/schemas/spectrum.yml \ No newline at end of file diff --git a/docs/running/configuration/schemas/supernova.yml b/docs/running/configuration/schemas/supernova.yml deleted file mode 120000 index b00bf28b35e..00000000000 --- a/docs/running/configuration/schemas/supernova.yml +++ /dev/null @@ -1 +0,0 @@ -../../../../tardis/io/schemas/supernova.yml \ No newline at end of file diff --git a/docs/running/example_data.inc b/docs/running/example_data.inc new file mode 100644 index 00000000000..7bfaa37404e --- /dev/null +++ b/docs/running/example_data.inc @@ -0,0 +1,2 @@ +.. _example_yml: https://github.com/tardis-sn/tardis-setups/blob/master/2014/2014_kerzendorf_sim/appendix_A1/tardis_example.yml +.. _example_atomic_database: https://github.com/tardis-sn/tardis-refdata/raw/master/atom_data/kurucz_cd23_chianti_H_He.h5 \ No newline at end of file diff --git a/docs/running/index.rst b/docs/running/index.rst index fcb17c57b3b..6b961c01bcd 100644 --- a/docs/running/index.rst +++ b/docs/running/index.rst @@ -2,18 +2,29 @@ Running TARDIS ************** -The TARDIS code needs three components to calculate spectra: 1) an atom database -2) a model 3) a configuration file. The Atom Database is created by the -`Carsus `_ subpackage. A quick start guide -to run TARDIS can be found :ref:`here ` +The TARDIS code needs three components to calculate spectra: +.. toctree:: + :maxdepth: 1 + :numbered: + + ../models/index.rst + ../configuration/index.rst + 3. Atom Database + + +A quick start guide to run TARDIS can be found +`here <../quickstart/quickstart.ipynb>`_. + .. toctree:: :maxdepth: 2 + :caption: Running TARDIS and interactivity commandline gui + notebooks/index.rst .. _quickstart: diff --git a/docs/running/notebooks/index.rst b/docs/running/notebooks/index.rst new file mode 100644 index 00000000000..601b9228d25 --- /dev/null +++ b/docs/running/notebooks/index.rst @@ -0,0 +1,4 @@ +Interactive TARDIS runs +======================= + +xxx \ No newline at end of file From 0149d89c2f0a1596cbefbc243d7c4df884dc75c5 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 22 Jul 2019 14:31:15 -0400 Subject: [PATCH 056/467] large cleanup operation working apidoc --- docs/conf.py | 11 +++++++-- docs/development/running_tests.rst | 2 +- docs/index.rst | 17 ++++++++------ .../images}/optical_depth_summation.png | Bin .../images}/scatter_downbranch_ma.png | Bin .../montecarlo/images}/spherical_symmetry.png | Bin docs/physics/montecarlo/lineinteraction.rst | 2 +- docs/physics/montecarlo/propagation.rst | 4 ++-- docs/physics/plasma/plasma.rst | 16 +++++-------- docs/running/index.rst | 21 +++--------------- docs/running/notebooks/index.rst | 9 +++++--- setup.cfg | 2 +- tardis/io/atom_data/atom_web_download.py | 10 +++++++++ 13 files changed, 49 insertions(+), 45 deletions(-) rename docs/{graphics => physics/montecarlo/images}/optical_depth_summation.png (100%) rename docs/{graphics => physics/montecarlo/images}/scatter_downbranch_ma.png (100%) rename docs/{graphics => physics/montecarlo/images}/spherical_symmetry.png (100%) diff --git a/docs/conf.py b/docs/conf.py index 5987c5f46a3..a601b0006b8 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -47,11 +47,12 @@ 'sphinx.ext.todo', 'sphinx.ext.mathjax', 'sphinx.ext.graphviz', + 'sphinx.ext.viewcode', 'numpydoc', 'nbsphinx', - 'sphinx.ext.autodoc', 'sphinx-jsonschema', - 'recommonmark' + 'recommonmark', + 'sphinxcontrib.apidoc' ] source_suffix = { @@ -105,6 +106,12 @@ release = tardis.__version__ +# -- APIDoc configuration ----------------------------------------------------- +apidoc_module_dir = '../tardis' +apidoc_output_dir = 'api' +apidoc_excluded_paths = ['*tests*', '*setup_package*'] +apidoc_separate_modules = True + # -- Options for HTML output --------------------------------------------------- # A NOTE ON HTML THEMES diff --git a/docs/development/running_tests.rst b/docs/development/running_tests.rst index c38cb28d84b..8680331da4b 100644 --- a/docs/development/running_tests.rst +++ b/docs/development/running_tests.rst @@ -52,7 +52,7 @@ or generate new ones. Both of of these require a configuration file for the integration tests: -.. literalinclude:: yml_files/integration.yml +.. literalinclude:: integration.yml :language: yaml Inside the atomic data directory there needs to be atomic data for each of diff --git a/docs/index.rst b/docs/index.rst index 5c872f2816a..05aae2d7f84 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -19,7 +19,7 @@ TARDIS is an open-source Monte Carlo radiative-transfer spectral synthesis code for 1D models of supernova ejecta. It is designed for rapid spectral modelling of supernovae. It is developed and maintained by a :ref:`multi-disciplinary team ` including software engineers, computer scientists, statisticians, -and astrophysicists . +and astrophysicists. `--- dsfjsdlkfjsdlf` If you use this code for any publications or presentations please follow our citation guidelines in :ref:`tardiscredits` @@ -42,17 +42,12 @@ assistance. .. toctree:: - :maxdepth: 2 + :maxdepth: 3 :caption: Using TARDIS :hidden: running/index - running/configuration/configuration - atomic/atomic_data - models/index - examples/index - scripts/index .. toctree:: @@ -90,6 +85,14 @@ assistance. development/index CHANGELOG.md +.. toctree:: + :maxdepth: 2 + :caption: API + :hidden: + + api/modules + + .. toctree:: :caption: References diff --git a/docs/graphics/optical_depth_summation.png b/docs/physics/montecarlo/images/optical_depth_summation.png similarity index 100% rename from docs/graphics/optical_depth_summation.png rename to docs/physics/montecarlo/images/optical_depth_summation.png diff --git a/docs/graphics/scatter_downbranch_ma.png b/docs/physics/montecarlo/images/scatter_downbranch_ma.png similarity index 100% rename from docs/graphics/scatter_downbranch_ma.png rename to docs/physics/montecarlo/images/scatter_downbranch_ma.png diff --git a/docs/graphics/spherical_symmetry.png b/docs/physics/montecarlo/images/spherical_symmetry.png similarity index 100% rename from docs/graphics/spherical_symmetry.png rename to docs/physics/montecarlo/images/spherical_symmetry.png diff --git a/docs/physics/montecarlo/lineinteraction.rst b/docs/physics/montecarlo/lineinteraction.rst index 8df4319efce..3d3be867e81 100644 --- a/docs/physics/montecarlo/lineinteraction.rst +++ b/docs/physics/montecarlo/lineinteraction.rst @@ -94,5 +94,5 @@ shows the situation in the resonant scatter mode, the middle one for the downbranching scheme and the right one the macro atom results. .. image:: - ../graphics/scatter_downbranch_ma.png + images/scatter_downbranch_ma.png :width: 700 diff --git a/docs/physics/montecarlo/propagation.rst b/docs/physics/montecarlo/propagation.rst index 8ea6bd635aa..1a5b98f7989 100644 --- a/docs/physics/montecarlo/propagation.rst +++ b/docs/physics/montecarlo/propagation.rst @@ -58,7 +58,7 @@ following sketch (taken from :cite:`Noebauer2014`): .. image:: - ../graphics/spherical_symmetry.png + images/spherical_symmetry.png :width: 400 @@ -182,7 +182,7 @@ the sketch below (taken from :cite:`Noebauer2014`, adapted from :cite:`Mazzali1993`): .. image:: - ../graphics/optical_depth_summation.png + images/optical_depth_summation.png :width: 400 Three possible cases are highlighted. In the first case, the drawn optical diff --git a/docs/physics/plasma/plasma.rst b/docs/physics/plasma/plasma.rst index 54346d006b7..9d2379016ac 100644 --- a/docs/physics/plasma/plasma.rst +++ b/docs/physics/plasma/plasma.rst @@ -55,19 +55,13 @@ Here's an example how to instantiate a simple base plasma:: 28 0.5 513016973.936 26 0.5 539183641.472 - - - - - - Plasma Types ------------ .. toctree:: :maxdepth: 0 - plasma_doc/lte_plasma.rst - plasma_doc/nebular_plasma.rst + lte_plasma.rst + nebular_plasma.rst .. _tau_sobolev: @@ -90,9 +84,11 @@ This function calculates the Sobolev optical depth :math:`\tau_\textrm{Sobolev}` +.. toctree:: + :maxdepth: 1 -.. include:: plasma_doc/macroatom.rst -.. include:: plasma_doc/nlte.rst + macroatom.rst + nlte.rst .. .. automodapi:: tardis.plasma_array diff --git a/docs/running/index.rst b/docs/running/index.rst index 6b961c01bcd..0528bf7b689 100644 --- a/docs/running/index.rst +++ b/docs/running/index.rst @@ -9,9 +9,9 @@ The TARDIS code needs three components to calculate spectra: :maxdepth: 1 :numbered: - ../models/index.rst - ../configuration/index.rst - 3. Atom Database + ../models/index + ../configuration/index + ../atomic/atomic_data A quick start guide to run TARDIS can be found @@ -26,21 +26,6 @@ A quick start guide to run TARDIS can be found gui notebooks/index.rst -.. _quickstart: - - -Running TARDIS interactively in a Jupyter notebook (recommended) -================================================================ - -To get more information from each run of TARDIS one can run it interactively and -have full access to the model properties (as described in :ref:`physical_quantities`) - -.. toctree:: - :maxdepth: 1 - - examples/run_simple_example.ipynb - - diff --git a/docs/running/notebooks/index.rst b/docs/running/notebooks/index.rst index 601b9228d25..f49931b0189 100644 --- a/docs/running/notebooks/index.rst +++ b/docs/running/notebooks/index.rst @@ -1,4 +1,7 @@ -Interactive TARDIS runs -======================= +TARDIS interactive runs +================================================== -xxx \ No newline at end of file +To get more information from each run of TARDIS one can run it interactively and +have full access to the model properties (as described in :ref:`physical_quantities`) + +.. examples/run_simple_example.ipynb diff --git a/setup.cfg b/setup.cfg index 9b1ec97d44d..8fdbb5fda41 100644 --- a/setup.cfg +++ b/setup.cfg @@ -36,7 +36,7 @@ author = TARDIS Collaboration author_email = wkerzendorf@gmail.com license = BSD (3 clause) url = http://tardis.readthedocs.org/ -edit_on_github = False +edit_on_github = True github_project = tardis-sn/tardis version = 3.0.dev minimum_python_version = 3.6 diff --git a/tardis/io/atom_data/atom_web_download.py b/tardis/io/atom_data/atom_web_download.py index fc6d6d3702a..a19647b08f9 100644 --- a/tardis/io/atom_data/atom_web_download.py +++ b/tardis/io/atom_data/atom_web_download.py @@ -8,6 +8,15 @@ logger = logging.getLogger(__name__) def get_atomic_repo_config(): + """ + Get the repo configuration dictionary for the atomic data + + Returns + ------- + : dict + + """ + atomic_repo_fname = get_internal_data_path('atomic_data_repo.yml') return yaml.load(open(atomic_repo_fname)) @@ -15,6 +24,7 @@ def get_atomic_repo_config(): def download_atom_data(atomic_data_name=None): """ Download the atomic data from the repository + Parameters ---------- atomic_data_name: str From e0f5a04e16b7255dcd581b6978dc7cdd248aa329 Mon Sep 17 00:00:00 2001 From: Marc Williamson Date: Mon, 22 Jul 2019 17:10:31 -0400 Subject: [PATCH 057/467] Added Model Doc Page (#26) * Added Model Doc Page * Added files for new CSVY doc page --- docs/models/examples/abundancecust.rst | 2 + docs/models/examples/csvy_full_rad.csvy | 30 ++++ docs/models/examples/densitycust.rst | 2 + docs/models/examples/modelconfig.rst | 2 + docs/models/index.rst | 43 +++++ .../configuration/schemas/csvy_model.yml | 152 ++++++++++++++++++ tardis/io/schemas/base.yml | 9 +- 7 files changed, 236 insertions(+), 4 deletions(-) create mode 100644 docs/models/examples/csvy_full_rad.csvy create mode 100644 docs/running/configuration/schemas/csvy_model.yml diff --git a/docs/models/examples/abundancecust.rst b/docs/models/examples/abundancecust.rst index 12d6c5769a9..0cdfbb6a1e3 100644 --- a/docs/models/examples/abundancecust.rst +++ b/docs/models/examples/abundancecust.rst @@ -1,3 +1,5 @@ +.. _abundancecust: + ************************************* Using a custom stratified composition ************************************* diff --git a/docs/models/examples/csvy_full_rad.csvy b/docs/models/examples/csvy_full_rad.csvy new file mode 100644 index 00000000000..f8f527c1b22 --- /dev/null +++ b/docs/models/examples/csvy_full_rad.csvy @@ -0,0 +1,30 @@ +--- +name: csvy_full +model_density_time_0: 1 day +description: Example csvy config file for TARDIS. +tardis_model_config_version: v1.0 +datatype: + fields: + - name: velocity + unit: km/s + desc: velocities of shell outer bounderies. + - name: density + unit: g/cm^3 + desc: density of shell. + - name: t_rad + unit: K + desc: radiative temperature. + - name: H + desc: fractional H abundance + - name: He + desc: fractional He abundance + - name: Ni56 + desc: fractional Ni56 abundance + +v_inner_boundary: 9000 km/s +v_outer_boundary: 12000 km/s +--- +velocity,density,t_rad,H,He,Ni56 +9000, 5e-10, 7000, 1.0, 1.0, 1.0 +10500, 2.0e-10, 7000, 0.0, 0.99, 0.01 +12000, 9e-11, 7000, 0.4, 0.58, 0.02 diff --git a/docs/models/examples/densitycust.rst b/docs/models/examples/densitycust.rst index e18c754367b..417e7de7c5c 100644 --- a/docs/models/examples/densitycust.rst +++ b/docs/models/examples/densitycust.rst @@ -1,3 +1,5 @@ +.. _densitycust: + ****************************** Using a custom density profile ****************************** diff --git a/docs/models/examples/modelconfig.rst b/docs/models/examples/modelconfig.rst index 649504f583c..d838df5499b 100644 --- a/docs/models/examples/modelconfig.rst +++ b/docs/models/examples/modelconfig.rst @@ -1,3 +1,5 @@ +.. _modelconfig: + ************************** Ejecta Model Configuration ************************** diff --git a/docs/models/index.rst b/docs/models/index.rst index 77107a157ff..d24d71e8bbc 100644 --- a/docs/models/index.rst +++ b/docs/models/index.rst @@ -2,4 +2,47 @@ Model ***** +TARDIS requires a model of the homologously expanding ejecta in order to run a simulation. +A model will include information like the velocity shell structure, abundances, density, etc. +TARDIS offers two ways of specifying the model: either directly in the configuration yaml file +or separately in a model.csvy file. See `here `_ for an explanation of +the csvy file format and :ref:`here <../running/configuration/config-file>` for a link to the csvy_model schema. +.. note:: + We highly recommend using the cleaner csvy format. + +CSVY Model +========== + +The TARDIS YAML delimiter for csvy files is ``---``. This means that each csvy model +file has the following structure: The first line of the file is the YAML delimiter, +followed by the YAML portion of the csvy model. A line consisting of only the YAML +delimiter separates the YAML portion of the csvy file from the csv part. The YAML part +of the csvy file is for setting model parameters like **v_inner_boundary** or +**model_density_time_0** while the csv part of the file is for setting profiles of +physical parameters of the model (e.g. abundances, radiative temperature, dilution factor, etc). +If you use the csvy model, then you will need to specify the path to the csvy model file +in the main TARDIS configuration file: + +.. code-block:: + + csvy_model: /path/to/model.csvy + +Example CSVY Model +================== + +Below we provide an example model.csvy file. + +.. literalinclude:: examples/csvy_full_rad.csvy + +Using the Config Model +====================== + +Although we strongly recommend using the CSVY Model, TARDIS also allows the user +to define custom density and abundance profiles in separate files and reference +these files directly in the main TARDIS configuration file. For further details, +see the following links: + +* For general information: :ref:`modelconfig` +* For defining a custom density file: :ref:`densitycust` +* For defining a custom abundance file: :ref:`abundancecust` diff --git a/docs/running/configuration/schemas/csvy_model.yml b/docs/running/configuration/schemas/csvy_model.yml new file mode 100644 index 00000000000..afafdda084f --- /dev/null +++ b/docs/running/configuration/schemas/csvy_model.yml @@ -0,0 +1,152 @@ +$schema: http://json-schema.org/draft-04/schema# +type: object +additionalProperties: false +properties: + name: + type: string + description: name of the model being run + + model_density_time_0: + type: quantity + description: Initial time for the density in the model + + model_isotope_time_0: + type: quantity + default: -1 day + description: initial time for isotope decay + + description: + type: string + description: description of the model being run + + tardis_model_config_version: + type: string + description: Version of the configuration file + +# datatype name used for consistency with astropy ecsv files. + datatype: + type: object + description: fields found in csv part of csvy file + additionalProperties: False + properties: + fields: + type: array + + v_inner_boundary: + type: quantity + description: velocity of the inner boundary + + v_outer_boundary: + type: quantity + description: velocity of the outer boundary of the last shell + + velocity: + type: object + properties: + start: + type: quantity + stop: + type: quantity + num: + type: number + multipleOf: 1.0 + + density: + oneOf: + - $ref: '#/definitions/density/branch85_w7' + - $ref: '#/definitions/density/exponential' + - $ref: '#/definitions/density/power_law' + - $ref: '#/definitions/density/uniform' + + abundance: + $ref: '#/definitions/abundance/uniform' + +required: +- tardis_model_config_version + +definitions: + density: + branch85_w7: + type: object + additionalProperties: false + properties: + type: + enum: + - branch85_w7 + w7_time_0: + type: quantity + default: 0.000231481 day + description: This needs no change - DO NOT TOUCH + w7_rho_0: + type: quantity + default: 3e29 g/cm^3 + description: This needs no change - DO NOT TOUCH + w7_v_0: + type: quantity + default: 1 km/s + description: This needs no change - DO NOT TOUCH + exponential: + type: object + additionalProperties: false + properties: + type: + enum: + - exponential + time_0: + type: quantity + description: Time at which the pure model densities are right + rho_0: + type: quantity + description: density at time_0 + v_0: + type: quantity + description: at what velocity the density rho_0 applies + required: + - rho_0 + - v_0 + power_law: + type: object + additionalProperties: false + properties: + type: + enum: + - power_law + time_0: + type: quantity + description: Time at which the pure model densities are right + rho_0: + type: quantity + description: density at time_0 + v_0: + type: quantity + description: at what velocity the density rho_0 applies + exponent: + type: number + description: exponent for exponential density profile + required: + - rho_0 + - v_0 + - exponent + uniform: + type: object + additionalProperties: false + properties: + type: + enum: + - uniform + time_0: + type: quantity + description: Time at which the pure model densities are right + value: + type: quantity + description: value for uniform density + required: + - value + abundance: + uniform: + type: object + additionalProperties: true + properties: + type: + enum: + - uniform diff --git a/tardis/io/schemas/base.yml b/tardis/io/schemas/base.yml index b1b3b5489f9..0be204420d0 100644 --- a/tardis/io/schemas/base.yml +++ b/tardis/io/schemas/base.yml @@ -5,9 +5,6 @@ properties: tardis_config_version: type: string description: Version of the configuration file. The current version is 1.0 and no other versions are allowed - csvy_model: - type: string - description: Path to the csvy model file. supernova: $ref: supernova.yml description: a section pertaining to observations of the supernova @@ -17,9 +14,13 @@ properties: plasma: $ref: plasma.yml description: configuration of the plasma microphysics + csvy_model: + type: string + $ref: csvy_model.yml + description: defining the model using csvy format model: $ref: model.yml - description: defining the model + description: defining the model in the config yaml file montecarlo: $ref: montecarlo.yml description: configuring the physics of the monte carlo radiative transfer From cf35dfcd0557b12adc54c9b72c9e537ef8830e64 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 22 Jul 2019 17:30:49 -0400 Subject: [PATCH 058/467] add converters --- docs/index.rst | 2 +- docs/models/examples/index.rst | 2 +- docs/models/index.rst | 13 ++++++++++--- docs/{scripts => running/converters}/cmfgen.rst | 0 docs/running/converters/index.rst | 13 +++++++++++++ .../examples => running/converters}/mesa.stella.dat | 0 .../converters}/stella_to_tardis.ipynb | 0 docs/running/index.rst | 9 +++++++-- .../Custom_TARDIS_Model_Tutorial.ipynb | 0 docs/running/{ => interaction}/access.rst | 0 .../running/{ => interaction}/access_iterations.rst | 0 .../{notebooks => interaction}/data/abund.dat | 0 .../data/config_init_trad.yml | 0 .../data/config_no_init_trad.yml | 0 .../{notebooks => interaction}/data/density.txt | 0 .../{notebooks => interaction}/hdf_writer.ipynb | 0 docs/running/{notebooks => interaction}/index.rst | 4 ++-- .../{notebooks => interaction}/init_trad_bug.ipynb | 0 .../interaction}/integrator.ipynb | 0 .../isotope_pd_subclass.ipynb | 0 .../running/{notebooks => interaction}/to_hdf.ipynb | 0 21 files changed, 34 insertions(+), 9 deletions(-) rename docs/{scripts => running/converters}/cmfgen.rst (100%) create mode 100644 docs/running/converters/index.rst rename docs/{models/examples => running/converters}/mesa.stella.dat (100%) rename docs/{models/examples => running/converters}/stella_to_tardis.ipynb (100%) rename docs/running/{notebooks => interaction}/Custom_TARDIS_Model_Tutorial.ipynb (100%) rename docs/running/{ => interaction}/access.rst (100%) rename docs/running/{ => interaction}/access_iterations.rst (100%) rename docs/running/{notebooks => interaction}/data/abund.dat (100%) rename docs/running/{notebooks => interaction}/data/config_init_trad.yml (100%) rename docs/running/{notebooks => interaction}/data/config_no_init_trad.yml (100%) rename docs/running/{notebooks => interaction}/data/density.txt (100%) rename docs/running/{notebooks => interaction}/hdf_writer.ipynb (100%) rename docs/running/{notebooks => interaction}/index.rst (73%) rename docs/running/{notebooks => interaction}/init_trad_bug.ipynb (100%) rename docs/{models/examples => running/interaction}/integrator.ipynb (100%) rename docs/running/{notebooks => interaction}/isotope_pd_subclass.ipynb (100%) rename docs/running/{notebooks => interaction}/to_hdf.ipynb (100%) diff --git a/docs/index.rst b/docs/index.rst index 05aae2d7f84..d7646934154 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -19,7 +19,7 @@ TARDIS is an open-source Monte Carlo radiative-transfer spectral synthesis code for 1D models of supernova ejecta. It is designed for rapid spectral modelling of supernovae. It is developed and maintained by a :ref:`multi-disciplinary team ` including software engineers, computer scientists, statisticians, -and astrophysicists. `--- dsfjsdlkfjsdlf` +and astrophysicists. If you use this code for any publications or presentations please follow our citation guidelines in :ref:`tardiscredits` diff --git a/docs/models/examples/index.rst b/docs/models/examples/index.rst index bcf9b7673c6..9feb2709537 100644 --- a/docs/models/examples/index.rst +++ b/docs/models/examples/index.rst @@ -13,7 +13,7 @@ applications. modelconfig tardis_example - stella_to_tardis + Simple Parametrized Models ========================== diff --git a/docs/models/index.rst b/docs/models/index.rst index d24d71e8bbc..b0bb864dabb 100644 --- a/docs/models/index.rst +++ b/docs/models/index.rst @@ -43,6 +43,13 @@ to define custom density and abundance profiles in separate files and reference these files directly in the main TARDIS configuration file. For further details, see the following links: -* For general information: :ref:`modelconfig` -* For defining a custom density file: :ref:`densitycust` -* For defining a custom abundance file: :ref:`abundancecust` +.. toctree:: + :maxdepth: 1 + + examples/modelconfig + examples/densityexp + examples/densitypow + examples/densitycust + examples/abundanceuni + examples/abundancecust + diff --git a/docs/scripts/cmfgen.rst b/docs/running/converters/cmfgen.rst similarity index 100% rename from docs/scripts/cmfgen.rst rename to docs/running/converters/cmfgen.rst diff --git a/docs/running/converters/index.rst b/docs/running/converters/index.rst new file mode 100644 index 00000000000..1d813a0a0d0 --- /dev/null +++ b/docs/running/converters/index.rst @@ -0,0 +1,13 @@ +========== +Converters +========== + +There are a variety of formats for models from other codes +(both hydro and radiative transfer) that can be converted to TARDIS input files. +Here we aim to provide converters for the most commonly used file formats. + +.. toctree:: + :maxdepth: 2 + + stella_to_tardis + cmfgen \ No newline at end of file diff --git a/docs/models/examples/mesa.stella.dat b/docs/running/converters/mesa.stella.dat similarity index 100% rename from docs/models/examples/mesa.stella.dat rename to docs/running/converters/mesa.stella.dat diff --git a/docs/models/examples/stella_to_tardis.ipynb b/docs/running/converters/stella_to_tardis.ipynb similarity index 100% rename from docs/models/examples/stella_to_tardis.ipynb rename to docs/running/converters/stella_to_tardis.ipynb diff --git a/docs/running/index.rst b/docs/running/index.rst index 0528bf7b689..1368a1c8c25 100644 --- a/docs/running/index.rst +++ b/docs/running/index.rst @@ -7,7 +7,6 @@ The TARDIS code needs three components to calculate spectra: .. toctree:: :maxdepth: 1 - :numbered: ../models/index ../configuration/index @@ -24,7 +23,13 @@ A quick start guide to run TARDIS can be found commandline gui - notebooks/index.rst + interaction/index + + +.. toctree:: + :maxdepth: 2 + + converters/index diff --git a/docs/running/notebooks/Custom_TARDIS_Model_Tutorial.ipynb b/docs/running/interaction/Custom_TARDIS_Model_Tutorial.ipynb similarity index 100% rename from docs/running/notebooks/Custom_TARDIS_Model_Tutorial.ipynb rename to docs/running/interaction/Custom_TARDIS_Model_Tutorial.ipynb diff --git a/docs/running/access.rst b/docs/running/interaction/access.rst similarity index 100% rename from docs/running/access.rst rename to docs/running/interaction/access.rst diff --git a/docs/running/access_iterations.rst b/docs/running/interaction/access_iterations.rst similarity index 100% rename from docs/running/access_iterations.rst rename to docs/running/interaction/access_iterations.rst diff --git a/docs/running/notebooks/data/abund.dat b/docs/running/interaction/data/abund.dat similarity index 100% rename from docs/running/notebooks/data/abund.dat rename to docs/running/interaction/data/abund.dat diff --git a/docs/running/notebooks/data/config_init_trad.yml b/docs/running/interaction/data/config_init_trad.yml similarity index 100% rename from docs/running/notebooks/data/config_init_trad.yml rename to docs/running/interaction/data/config_init_trad.yml diff --git a/docs/running/notebooks/data/config_no_init_trad.yml b/docs/running/interaction/data/config_no_init_trad.yml similarity index 100% rename from docs/running/notebooks/data/config_no_init_trad.yml rename to docs/running/interaction/data/config_no_init_trad.yml diff --git a/docs/running/notebooks/data/density.txt b/docs/running/interaction/data/density.txt similarity index 100% rename from docs/running/notebooks/data/density.txt rename to docs/running/interaction/data/density.txt diff --git a/docs/running/notebooks/hdf_writer.ipynb b/docs/running/interaction/hdf_writer.ipynb similarity index 100% rename from docs/running/notebooks/hdf_writer.ipynb rename to docs/running/interaction/hdf_writer.ipynb diff --git a/docs/running/notebooks/index.rst b/docs/running/interaction/index.rst similarity index 73% rename from docs/running/notebooks/index.rst rename to docs/running/interaction/index.rst index f49931b0189..5218f2b3658 100644 --- a/docs/running/notebooks/index.rst +++ b/docs/running/interaction/index.rst @@ -1,5 +1,5 @@ -TARDIS interactive runs -================================================== +Interacting with TARDIS +======================= To get more information from each run of TARDIS one can run it interactively and have full access to the model properties (as described in :ref:`physical_quantities`) diff --git a/docs/running/notebooks/init_trad_bug.ipynb b/docs/running/interaction/init_trad_bug.ipynb similarity index 100% rename from docs/running/notebooks/init_trad_bug.ipynb rename to docs/running/interaction/init_trad_bug.ipynb diff --git a/docs/models/examples/integrator.ipynb b/docs/running/interaction/integrator.ipynb similarity index 100% rename from docs/models/examples/integrator.ipynb rename to docs/running/interaction/integrator.ipynb diff --git a/docs/running/notebooks/isotope_pd_subclass.ipynb b/docs/running/interaction/isotope_pd_subclass.ipynb similarity index 100% rename from docs/running/notebooks/isotope_pd_subclass.ipynb rename to docs/running/interaction/isotope_pd_subclass.ipynb diff --git a/docs/running/notebooks/to_hdf.ipynb b/docs/running/interaction/to_hdf.ipynb similarity index 100% rename from docs/running/notebooks/to_hdf.ipynb rename to docs/running/interaction/to_hdf.ipynb From 415d5e4cd954b55965bd409329d8f8d9b7dc5582 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 22 Jul 2019 17:48:36 -0400 Subject: [PATCH 059/467] add apidoc to env file --- tardis_env3.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/tardis_env3.yml b/tardis_env3.yml index 27d94f7afa8..1bb2df59eca 100644 --- a/tardis_env3.yml +++ b/tardis_env3.yml @@ -43,6 +43,7 @@ dependencies: - nbsphinx - sphinx_bootstrap_theme - sphinxcontrib-bibtex +- sphinxcontrib-apidoc - sphinx_rtd_theme - recommonmark From 1435ff16d90db01c7fd0e333dd9315038ec0fb0a Mon Sep 17 00:00:00 2001 From: Marc Williamson Date: Mon, 22 Jul 2019 23:21:53 -0400 Subject: [PATCH 060/467] Base schema fix (#952) * Fixed symlinks * Fixed csvy_model schema type to be string --- docs/models/examples/abund.dat | 2 +- docs/models/examples/density.dat | 2 +- tardis/io/schemas/base.yml | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/models/examples/abund.dat b/docs/models/examples/abund.dat index 7fc5f39eb0a..8693c42a3be 120000 --- a/docs/models/examples/abund.dat +++ b/docs/models/examples/abund.dat @@ -1 +1 @@ -../../tardis/io/tests/data/abund.dat \ No newline at end of file +../../../tardis/io/tests/data/abund.dat \ No newline at end of file diff --git a/docs/models/examples/density.dat b/docs/models/examples/density.dat index c8ade6bb665..2a61eca290b 120000 --- a/docs/models/examples/density.dat +++ b/docs/models/examples/density.dat @@ -1 +1 @@ -../../tardis/io/tests/data/density.dat \ No newline at end of file +../../../tardis/io/tests/data/density.dat \ No newline at end of file diff --git a/tardis/io/schemas/base.yml b/tardis/io/schemas/base.yml index 0be204420d0..5bfdc0e774d 100644 --- a/tardis/io/schemas/base.yml +++ b/tardis/io/schemas/base.yml @@ -16,7 +16,6 @@ properties: description: configuration of the plasma microphysics csvy_model: type: string - $ref: csvy_model.yml description: defining the model using csvy format model: $ref: model.yml From 0d69f672b38c2141b3c0bcaec49435d08f85dee3 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 23 Jul 2019 21:08:08 -0400 Subject: [PATCH 061/467] add code comparison --- docs/research/code_comparison/index.rst | 4 + .../toy_models/reading blondin toymodel.ipynb | 2635 +++++++++++++++++ 2 files changed, 2639 insertions(+) create mode 100644 docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb diff --git a/docs/research/code_comparison/index.rst b/docs/research/code_comparison/index.rst index 0eaeb23a7d6..da2ec52f850 100644 --- a/docs/research/code_comparison/index.rst +++ b/docs/research/code_comparison/index.rst @@ -6,3 +6,7 @@ codes to understand systematics uncertainties and different strategies. The first meeting is summarized `here `_. +.. toctree:: + + toy_models/reading blondin toymodel + diff --git a/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb b/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb new file mode 100644 index 00000000000..3769031248d --- /dev/null +++ b/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb @@ -0,0 +1,2635 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Compare Blondin Toy Models ###" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/tqdm/autonotebook/__init__.py:14: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)\n", + " \" (e.g. in jupyter console)\", TqdmExperimentalWarning)\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "import re\n", + "from tardis.util.base import parse_quantity\n", + "import numpy as np\n", + "import yaml\n", + "from tardis import run_tardis\n", + "from astropy import units as u" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "pattern_remove_bracket = re.compile('\\[.+\\]')\n", + "t0_pattern = re.compile('tend = (.+)\\n')\n", + "\n", + "\n", + "def read_blondin_toymodel(fname):\n", + " with open(fname, 'r') as fh:\n", + " for line in fh:\n", + " if line.startswith(\"#idx\"):\n", + " break\n", + " else:\n", + " raise ValueError('File {0} does not conform to Toy Model format as it does not contain #idx')\n", + " columns = [pattern_remove_bracket.sub('', item) for item in line[1:].split()]\n", + " \n", + " raw_blondin_csv = pd.read_csv(fname, delim_whitespace=True, comment='#', header=None, names=columns)\n", + " raw_blondin_csv.set_index('idx', inplace=True)\n", + " \n", + " blondin_csv = raw_blondin_csv.loc[:, ['vel', 'dens', 'temp', 'X_56Ni0', 'X_Ti', 'X_Ca', 'X_S', 'X_Si', 'X_O', 'X_C']]\n", + " rename_col_dict = {'vel':'velocity', 'dens':'density', 'temp':'t_electron'}\n", + " rename_col_dict.update({item:item[2:] for item in blondin_csv.columns[3:]})\n", + " rename_col_dict['X_56Ni0'] = 'Ni56'\n", + " blondin_csv.rename(columns=rename_col_dict, inplace=True)\n", + " blondin_csv.iloc[:, 3:] = blondin_csv.iloc[:,3:].divide(blondin_csv.iloc[:,3:].sum(axis=1), axis=0)\n", + " \n", + " \n", + " #changing velocities to outer boundary\n", + " new_velocities = 0.5 * (blondin_csv.velocity.iloc[:-1].values + blondin_csv.velocity.iloc[1:].values)\n", + " new_velocities = np.hstack((new_velocities, [2 * new_velocities[-1] - new_velocities[-2]]))\n", + " blondin_csv['velocity'] = new_velocities\n", + " \n", + " \n", + " \n", + " with open(fname, 'r') as fh:\n", + " t0_string = t0_pattern.findall(fh.read())[0]\n", + " \n", + " t0 = parse_quantity(t0_string.replace('DAYS', 'day'))\n", + " blondin_dict = {}\n", + " blondin_dict['model_density_time_0'] = str(t0)\n", + " blondin_dict['description'] = 'Converted {0} to csvy format'.format(fname)\n", + " blondin_dict['tardis_model_config_version'] = 'v1.0'\n", + " blondin_dict_fields = [dict(name='velocity', unit='km/s', desc='velocities of shell outer bounderies.')]\n", + " blondin_dict_fields.append(dict(name='density', unit='g/cm^3', desc='mean density of shell.'))\n", + " blondin_dict_fields.append(dict(name='t_electron', unit='K', desc='electron temperature.'))\n", + " \n", + " for abund in blondin_csv.columns[3:]:\n", + " blondin_dict_fields.append(dict(name=abund, desc='Fraction {0} abundance'.format(abund)))\n", + " blondin_dict['datatype'] = {'fields':blondin_dict_fields}\n", + " \n", + " return blondin_dict, blondin_csv" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "blondin_dict, blondin_csv = read_blondin_toymodel('snia_toy01.dat')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "blondin_dict['v_inner_boundary'] = '9000 km/s'\n", + "blondin_dict['v_outer_boundary'] = '20000 km/s'\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "csvy_file = '---\\n{0}\\n---\\n{1}'.format(yaml.dump(blondin_dict, default_flow_style=False), blondin_csv.to_csv(index=False))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "with open('blondin_compare.csvy', 'w') as fh:\n", + " fh.write(csvy_file)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/importlib/_bootstrap.py:219: QAWarning: pyne.data is not yet QA compliant.\n", + " return f(*args, **kwds)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/importlib/_bootstrap.py:219: QAWarning: pyne.material is not yet QA compliant.\n", + " return f(*args, **kwds)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", + " AstropyDeprecationWarning)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mtardis.plasma.standard_plasmas\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Reading Atomic Data from kurucz_cd23_chianti_H_He.h5 (\u001b[1mstandard_plasmas.py\u001b[0m:74)\n", + "[\u001b[1mtardis.io.atom_data.util\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Atom Data kurucz_cd23_chianti_H_He.h5 not found in local path. Exists in TARDIS Data repo /Users/wkerzend/projects/tardis/tardis-data/kurucz_cd23_chianti_H_He.h5 (\u001b[1mutil.py\u001b[0m:29)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/IPython/core/interactiveshell.py:3267: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " exec(code_obj, self.user_global_ns, self.user_ns)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mtardis.io.atom_data.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Read Atom Data with UUID=6f7b09e887a311e7a06b246e96350010 and MD5=864f1753714343c41f99cb065710cace. (\u001b[1mbase.py\u001b[0m:184)\n", + "[\u001b[1mtardis.io.atom_data.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Non provided atomic data: synpp_refs, photoionization_data (\u001b[1mbase.py\u001b[0m:187)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", + " AstropyDeprecationWarning)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/python/tardis/tardis/plasma/properties/atomic.py:195: FutureWarning: .labels was deprecated in version 0.24.0. Use .codes instead.\n", + " zeta_data['atomic_number'] = zeta_data.index.labels[0] + 1\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/python/tardis/tardis/plasma/properties/atomic.py:196: FutureWarning: .labels was deprecated in version 0.24.0. Use .codes instead.\n", + " zeta_data['ion_number'] = zeta_data.index.labels[1] + 1\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mtardis.plasma.properties.atomic\u001b[0m][\u001b[1;33mWARNING\u001b[0m] Zeta_data missing - replaced with 1s. Missing ions: [(14, 15), (16, 17), (20, 21), (26, 27), (27, 28), (28, 29)] (\u001b[1matomic.py\u001b[0m:215)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/python/tardis/tardis/plasma/properties/ion_population.py:63: FutureWarning: \n", + "Passing list-likes to .loc or [] with any missing label will raise\n", + "KeyError in the future, you can use .reindex() as an alternative.\n", + "\n", + "See the documentation here:\n", + "https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike\n", + " partition_function.index].dropna())\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/equivalencies.py:90: RuntimeWarning: divide by zero encountered in double_scalars\n", + " (si.m, si.Hz, lambda x: _si.c.value / x),\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", + " AstropyDeprecationWarning)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 1/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22587e+43 erg / s Luminosity absorbed = 8.12489e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 12998.916007 13061.816463 0.462810 0.567717\n", + "\t5 12988.086012 13056.730857 0.379149 0.480626\n", + "\t10 12977.274048 13025.637830 0.336294 0.428170\n", + "\t15 12966.480071 13033.048290 0.304883 0.382503\n", + "\t20 12955.704034 13065.468766 0.279753 0.343327\n", + "\t25 12944.945893 13026.575503 0.258765 0.318805\n", + "\t30 12934.205605 13031.454768 0.240774 0.290452\n", + "\t35 12923.483123 13012.104561 0.225078 0.269456\n", + "\t40 12912.778405 12984.321293 0.211205 0.251158\n", + "\t45 12902.091406 12960.901645 0.198821 0.232334\n", + "\t50 12891.422083 12941.563429 0.187679 0.217530\n", + "\t55 12880.770390 12921.758766 0.177588 0.203183\n", + "\t60 12870.136285 12942.591441 0.168399 0.186982\n", + "\t65 12859.519724 12916.751988 0.159992 0.176438\n", + "\t70 12848.920665 12981.212652 0.152269 0.162411\n", + "\t75 12838.339062 12932.407924 0.145148 0.153813\n", + "\t80 12827.774874 12916.331855 0.138563 0.145349\n", + "\t85 12817.228057 12917.001822 0.132453 0.136457\n", + "\t90 12806.698569 12887.128678 0.126772 0.129621\n", + "\t95 12796.186367 12888.946086 0.121475 0.122397\n", + "\t100 12785.691409 12881.697128 0.116527 0.116324\n", + "\t105 12775.213651 12895.681422 0.111894 0.109162\n", + "\t110 12764.753053 12851.913702 0.107550 0.105005\n", + "\t115 12754.309570 12795.235678 0.103468 0.101558\n", + "\t120 12743.883163 12778.835290 0.099626 0.097184\n", + "\t125 12733.473789 12747.043599 0.096006 0.093453\n", + "\t130 12723.081405 12743.322681 0.092589 0.089142\n", + "\t135 12712.705972 12704.356267 0.089359 0.085928\n", + "\t140 12702.347446 12731.984118 0.086303 0.081671\n", + "\t145 12692.005787 12690.395130 0.083408 0.079170\n", + "\t150 12681.680954 12675.569081 0.080662 0.075764\n", + "\t155 12671.372906 12673.798388 0.078054 0.072396\n", + "\t160 12661.081601 12688.321977 0.075575 0.069417\n", + "\t165 12650.807000 12602.489519 0.073217 0.068280\n", + "\t170 12640.549060 12575.649977 0.070971 0.066077\n", + "\t175 12630.307743 12552.103659 0.068830 0.064002\n", + "\t180 12620.083007 12524.123590 0.066787 0.062033\n", + "\t185 12609.874813 12470.157871 0.064837 0.060517\n", + "\t190 12599.683119 12452.067488 0.062973 0.058731\n", + "\t195 12589.507887 12415.450898 0.061191 0.057065\n", + "\t200 12579.349076 12377.598670 0.059485 0.055637\n", + "\t205 12569.206647 12369.427919 0.057852 0.053812\n", + "\t210 12559.080559 12308.221817 0.056286 0.052806\n", + "\t215 12548.970775 12274.329208 0.054785 0.051496\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/python/tardis/tardis/plasma/properties/ion_population.py:63: FutureWarning: \n", + "Passing list-likes to .loc or [] with any missing label will raise\n", + "KeyError in the future, you can use .reindex() as an alternative.\n", + "\n", + "See the documentation here:\n", + "https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike\n", + " partition_function.index].dropna())\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 2/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.24347e+43 erg / s Luminosity absorbed = 7.94642e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13061.816463 13117.652070 0.567717 0.613290\n", + "\t5 13056.730857 13128.710972 0.480626 0.520966\n", + "\t10 13025.637830 13087.946452 0.428170 0.469492\n", + "\t15 13033.048290 13117.221906 0.382503 0.416974\n", + "\t20 13065.468766 13114.807782 0.343327 0.377475\n", + "\t25 13026.575503 13096.095422 0.318805 0.347216\n", + "\t30 13031.454768 13094.720257 0.290452 0.315541\n", + "\t35 13012.104561 13060.231563 0.269456 0.292868\n", + "\t40 12984.321293 13059.642743 0.251158 0.267728\n", + "\t45 12960.901645 13036.502049 0.232334 0.248840\n", + "\t50 12941.563429 13088.971015 0.217530 0.225795\n", + "\t55 12921.758766 13057.048962 0.203183 0.211304\n", + "\t60 12942.591441 13012.342405 0.186982 0.197369\n", + "\t65 12916.751988 13011.652080 0.176438 0.182820\n", + "\t70 12981.212652 13053.319564 0.162411 0.169516\n", + "\t75 12932.407924 13074.224102 0.153813 0.156755\n", + "\t80 12916.331855 13029.565434 0.145349 0.147823\n", + "\t85 12917.001822 13042.421261 0.136457 0.137239\n", + "\t90 12887.128678 12990.734303 0.129621 0.130452\n", + "\t95 12888.946086 12973.415343 0.122397 0.122766\n", + "\t100 12881.697128 12959.651664 0.116324 0.116410\n", + "\t105 12895.681422 12960.317508 0.109162 0.109050\n", + "\t110 12851.913702 12929.769910 0.105005 0.103908\n", + "\t115 12795.235678 12913.972612 0.101558 0.098979\n", + "\t120 12778.835290 12886.386512 0.097184 0.094654\n", + "\t125 12747.043599 12843.837749 0.093453 0.090621\n", + "\t130 12743.322681 12816.084072 0.089142 0.086600\n", + "\t135 12704.356267 12790.203288 0.085928 0.082578\n", + "\t140 12731.984118 12796.350067 0.081671 0.078901\n", + "\t145 12690.395130 12791.502994 0.079170 0.075382\n", + "\t150 12675.569081 12704.857834 0.075764 0.073887\n", + "\t155 12673.798388 12655.990720 0.072396 0.070855\n", + "\t160 12688.321977 12610.883401 0.069417 0.068569\n", + "\t165 12602.489519 12558.138741 0.068280 0.066569\n", + "\t170 12575.649977 12553.564630 0.066077 0.063869\n", + "\t175 12552.103659 12520.095372 0.064002 0.061832\n", + "\t180 12524.123590 12457.646020 0.062033 0.060085\n", + "\t185 12470.157871 12434.132208 0.060517 0.058028\n", + "\t190 12452.067488 12380.739186 0.058731 0.056670\n", + "\t195 12415.450898 12353.512233 0.057065 0.054970\n", + "\t200 12377.598670 12315.990345 0.055637 0.053348\n", + "\t205 12369.427919 12289.918274 0.053812 0.051717\n", + "\t210 12308.221817 12224.340350 0.052806 0.050777\n", + "\t215 12274.329208 12164.080107 0.051496 0.049729\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 3/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.23675e+43 erg / s Luminosity absorbed = 8.01326e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13117.652070 13122.102732 0.613290 0.641024\n", + "\t5 13128.710972 13164.042522 0.520966 0.543481\n", + "\t10 13087.946452 13113.990367 0.469492 0.494977\n", + "\t15 13117.221906 13173.538351 0.416974 0.432339\n", + "\t20 13114.807782 13144.097172 0.377475 0.392818\n", + "\t25 13096.095422 13164.934622 0.347216 0.356523\n", + "\t30 13094.720257 13184.070310 0.315541 0.319199\n", + "\t35 13060.231563 13136.832241 0.292868 0.297554\n", + "\t40 13059.642743 13136.025386 0.267728 0.273157\n", + "\t45 13036.502049 13155.265509 0.248840 0.249419\n", + "\t50 13088.971015 13166.480491 0.225795 0.228277\n", + "\t55 13057.048962 13166.079767 0.211304 0.210512\n", + "\t60 13012.342405 13127.443828 0.197369 0.197161\n", + "\t65 13011.652080 13141.214262 0.182820 0.181772\n", + "\t70 13053.319564 13174.463561 0.169516 0.167142\n", + "\t75 13074.224102 13150.237468 0.156755 0.157056\n", + "\t80 13029.565434 13097.524561 0.147823 0.147829\n", + "\t85 13042.421261 13127.609151 0.137239 0.137357\n", + "\t90 12990.734303 13040.008757 0.130452 0.130839\n", + "\t95 12973.415343 13029.856575 0.122766 0.122425\n", + "\t100 12959.651664 12982.871415 0.116410 0.116097\n", + "\t105 12960.317508 12979.071109 0.109050 0.109282\n", + "\t110 12929.769910 12943.014800 0.103908 0.104322\n", + "\t115 12913.972612 12927.071313 0.098979 0.098592\n", + "\t120 12886.386512 12886.480175 0.094654 0.094474\n", + "\t125 12843.837749 12864.414625 0.090621 0.089431\n", + "\t130 12816.084072 12874.140628 0.086600 0.084479\n", + "\t135 12790.203288 12818.832488 0.082578 0.081002\n", + "\t140 12796.350067 12826.258359 0.078901 0.076974\n", + "\t145 12791.502994 12795.258432 0.075382 0.073890\n", + "\t150 12704.857834 12722.903444 0.073887 0.072095\n", + "\t155 12655.990720 12672.627773 0.070855 0.069298\n", + "\t160 12610.883401 12629.678970 0.068569 0.066939\n", + "\t165 12558.138741 12586.628880 0.066569 0.064793\n", + "\t170 12553.564630 12573.279154 0.063869 0.062097\n", + "\t175 12520.095372 12536.734639 0.061832 0.059908\n", + "\t180 12457.646020 12499.514570 0.060085 0.057760\n", + "\t185 12434.132208 12489.203566 0.058028 0.055605\n", + "\t190 12380.739186 12388.978106 0.056670 0.054919\n", + "\t195 12353.512233 12311.880538 0.054970 0.054015\n", + "\t200 12315.990345 12300.791731 0.053348 0.051990\n", + "\t205 12289.918274 12254.716475 0.051717 0.050505\n", + "\t210 12224.340350 12226.649994 0.050777 0.049039\n", + "\t215 12164.080107 12126.030478 0.049729 0.048560\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 4/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.23576e+43 erg / s Luminosity absorbed = 8.01378e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13122.102732 13166.764592 0.641024 0.647005\n", + "\t5 13164.042522 13160.763682 0.543481 0.557020\n", + "\t10 13113.990367 13167.628696 0.494977 0.498091\n", + "\t15 13173.538351 13190.751769 0.432339 0.444245\n", + "\t20 13144.097172 13184.024122 0.392818 0.401907\n", + "\t25 13164.934622 13227.151619 0.356523 0.359620\n", + "\t30 13184.070310 13180.743685 0.319199 0.331947\n", + "\t35 13136.832241 13204.580495 0.297554 0.300127\n", + "\t40 13136.025386 13194.812326 0.273157 0.275673\n", + "\t45 13155.265509 13230.326739 0.249419 0.248915\n", + "\t50 13166.480491 13234.880733 0.228277 0.229173\n", + "\t55 13166.079767 13233.024725 0.210512 0.211402\n", + "\t60 13127.443828 13173.721736 0.197161 0.199245\n", + "\t65 13141.214262 13236.160576 0.181772 0.180157\n", + "\t70 13174.463561 13220.204788 0.167142 0.166780\n", + "\t75 13150.237468 13206.871230 0.157056 0.156329\n", + "\t80 13097.524561 13191.695756 0.147829 0.146271\n", + "\t85 13127.609151 13132.044552 0.137357 0.138585\n", + "\t90 13040.008757 13107.559438 0.130839 0.129874\n", + "\t95 13029.856575 13096.184312 0.122425 0.121443\n", + "\t100 12982.871415 13051.565010 0.116097 0.115060\n", + "\t105 12979.071109 13026.202501 0.109282 0.108914\n", + "\t110 12943.014800 12971.433048 0.104322 0.103877\n", + "\t115 12927.071313 12951.898476 0.098592 0.098483\n", + "\t120 12886.480175 12938.304729 0.094474 0.093136\n", + "\t125 12864.414625 12899.761435 0.089431 0.088597\n", + "\t130 12874.140628 12882.151103 0.084479 0.084103\n", + "\t135 12818.832488 12882.960846 0.081002 0.079350\n", + "\t140 12826.258359 12869.549641 0.076974 0.075580\n", + "\t145 12795.258432 12842.281777 0.073890 0.072636\n", + "\t150 12722.903444 12749.157914 0.072095 0.070611\n", + "\t155 12672.627773 12703.241916 0.069298 0.067873\n", + "\t160 12629.678970 12670.297608 0.066939 0.065557\n", + "\t165 12586.628880 12636.895690 0.064793 0.063296\n", + "\t170 12573.279154 12597.918830 0.062097 0.061002\n", + "\t175 12536.734639 12550.742876 0.059908 0.058575\n", + "\t180 12499.514570 12528.304583 0.057760 0.056474\n", + "\t185 12489.203566 12475.332811 0.055605 0.054925\n", + "\t190 12388.978106 12397.080100 0.054919 0.054007\n", + "\t195 12311.880538 12372.673017 0.054015 0.052291\n", + "\t200 12300.791731 12355.614341 0.051990 0.050307\n", + "\t205 12254.716475 12286.492951 0.050505 0.049312\n", + "\t210 12226.649994 12227.262848 0.049039 0.048146\n", + "\t215 12126.030478 12110.655363 0.048560 0.047822\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 5/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.23135e+43 erg / s Luminosity absorbed = 8.05807e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13166.764592 13133.133359 0.647005 0.661105\n", + "\t5 13160.763682 13180.154270 0.557020 0.561426\n", + "\t10 13167.628696 13187.356843 0.498091 0.499942\n", + "\t15 13190.751769 13230.009983 0.444245 0.443721\n", + "\t20 13184.024122 13221.404988 0.401907 0.401814\n", + "\t25 13227.151619 13279.927924 0.359620 0.358538\n", + "\t30 13180.743685 13213.416642 0.331947 0.331098\n", + "\t35 13204.580495 13307.286771 0.300127 0.293396\n", + "\t40 13194.812326 13257.000678 0.275673 0.272724\n", + "\t45 13230.326739 13266.454328 0.248915 0.249218\n", + "\t50 13234.880733 13285.344929 0.229173 0.228049\n", + "\t55 13233.024725 13311.193287 0.211402 0.209753\n", + "\t60 13173.721736 13279.875959 0.199245 0.194716\n", + "\t65 13236.160576 13264.863530 0.180157 0.180622\n", + "\t70 13220.204788 13336.570629 0.166780 0.162591\n", + "\t75 13206.871230 13264.422259 0.156329 0.154915\n", + "\t80 13191.695756 13249.784141 0.146271 0.144610\n", + "\t85 13132.044552 13218.036151 0.138585 0.135840\n", + "\t90 13107.559438 13177.846374 0.129874 0.127847\n", + "\t95 13096.184312 13175.012522 0.121443 0.119499\n", + "\t100 13051.565010 13135.169311 0.115060 0.112385\n", + "\t105 13026.202501 13096.897799 0.108914 0.106725\n", + "\t110 12971.433048 13083.418933 0.103877 0.100297\n", + "\t115 12951.898476 13056.777956 0.098483 0.095490\n", + "\t120 12938.304729 13032.014535 0.093136 0.090889\n", + "\t125 12899.761435 13018.849241 0.088597 0.086436\n", + "\t130 12882.151103 12981.466541 0.084103 0.082128\n", + "\t135 12882.960846 12920.917764 0.079350 0.078529\n", + "\t140 12869.549641 12909.860356 0.075580 0.074552\n", + "\t145 12842.281777 12851.799676 0.072636 0.072046\n", + "\t150 12749.157914 12782.647581 0.070611 0.069667\n", + "\t155 12703.241916 12738.044835 0.067873 0.066928\n", + "\t160 12670.297608 12706.411554 0.065557 0.064376\n", + "\t165 12636.895690 12647.891447 0.063296 0.062578\n", + "\t170 12597.918830 12625.602574 0.061002 0.059937\n", + "\t175 12550.742876 12555.971329 0.058575 0.058448\n", + "\t180 12528.304583 12552.544848 0.056474 0.055863\n", + "\t185 12475.332811 12498.211140 0.054925 0.054189\n", + "\t190 12397.080100 12456.284077 0.054007 0.052761\n", + "\t195 12372.673017 12363.777196 0.052291 0.051798\n", + "\t200 12355.614341 12365.014946 0.050307 0.049562\n", + "\t205 12286.492951 12267.941719 0.049312 0.048978\n", + "\t210 12227.262848 12211.404200 0.048146 0.047722\n", + "\t215 12110.655363 12156.535212 0.047822 0.046684\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 6/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22714e+43 erg / s Luminosity absorbed = 8.09114e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13133.133359 13196.025024 0.661105 0.650910\n", + "\t5 13180.154270 13255.698653 0.561426 0.556263\n", + "\t10 13187.356843 13239.518470 0.499942 0.494814\n", + "\t15 13230.009983 13288.479637 0.443721 0.438216\n", + "\t20 13221.404988 13326.424072 0.401814 0.392288\n", + "\t25 13279.927924 13327.703183 0.358538 0.357912\n", + "\t30 13213.416642 13290.593772 0.331098 0.326841\n", + "\t35 13307.286771 13379.166431 0.293396 0.290233\n", + "\t40 13257.000678 13332.043792 0.272724 0.269385\n", + "\t45 13266.454328 13342.544624 0.249218 0.245700\n", + "\t50 13285.344929 13393.368804 0.228049 0.223222\n", + "\t55 13311.193287 13405.465136 0.209753 0.205613\n", + "\t60 13279.875959 13337.444936 0.194716 0.192957\n", + "\t65 13264.863530 13322.573830 0.180622 0.179129\n", + "\t70 13336.570629 13376.807762 0.162591 0.162838\n", + "\t75 13264.422259 13341.931624 0.154915 0.152609\n", + "\t80 13249.784141 13323.359370 0.144610 0.142282\n", + "\t85 13218.036151 13320.624255 0.135840 0.132022\n", + "\t90 13177.846374 13276.335581 0.127847 0.124791\n", + "\t95 13175.012522 13291.680639 0.119499 0.116002\n", + "\t100 13135.169311 13231.017853 0.112385 0.110371\n", + "\t105 13096.897799 13210.946440 0.106725 0.104111\n", + "\t110 13083.418933 13207.592577 0.100297 0.097619\n", + "\t115 13056.777956 13119.069100 0.095490 0.094113\n", + "\t120 13032.014535 13109.529071 0.090889 0.088884\n", + "\t125 13018.849241 13095.270885 0.086436 0.084279\n", + "\t130 12981.466541 13033.700377 0.082128 0.080103\n", + "\t135 12920.917764 12957.809294 0.078529 0.077480\n", + "\t140 12909.860356 12931.802369 0.074552 0.073862\n", + "\t145 12851.799676 12925.100614 0.072046 0.070224\n", + "\t150 12782.647581 12855.814961 0.069667 0.068059\n", + "\t155 12738.044835 12839.979057 0.066928 0.064786\n", + "\t160 12706.411554 12827.797549 0.064376 0.061897\n", + "\t165 12647.891447 12755.000233 0.062578 0.060413\n", + "\t170 12625.602574 12693.096249 0.059937 0.058603\n", + "\t175 12555.971329 12601.717780 0.058448 0.057507\n", + "\t180 12552.544848 12615.109130 0.055863 0.054529\n", + "\t185 12498.211140 12586.653068 0.054189 0.052663\n", + "\t190 12456.284077 12537.507236 0.052761 0.051090\n", + "\t195 12363.777196 12473.427562 0.051798 0.049878\n", + "\t200 12365.014946 12477.999050 0.049562 0.047867\n", + "\t205 12267.941719 12362.115770 0.048978 0.047396\n", + "\t210 12211.404200 12253.089156 0.047722 0.046878\n", + "\t215 12156.535212 12180.868013 0.046684 0.045927\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 7/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22118e+43 erg / s Luminosity absorbed = 8.15225e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13196.025024 13210.192507 0.650910 0.651204\n", + "\t5 13255.698653 13279.272431 0.556263 0.553787\n", + "\t10 13239.518470 13325.730308 0.494814 0.485617\n", + "\t15 13288.479637 13305.186251 0.438216 0.438444\n", + "\t20 13326.424072 13343.413094 0.392288 0.392317\n", + "\t25 13327.703183 13329.023277 0.357912 0.358184\n", + "\t30 13290.593772 13327.705187 0.326841 0.323893\n", + "\t35 13379.166431 13366.676710 0.290233 0.291474\n", + "\t40 13332.043792 13347.637776 0.269385 0.270268\n", + "\t45 13342.544624 13391.584255 0.245700 0.243847\n", + "\t50 13393.368804 13371.818600 0.223222 0.224589\n", + "\t55 13405.465136 13429.111170 0.205613 0.205312\n", + "\t60 13337.444936 13385.068591 0.192957 0.190720\n", + "\t65 13322.573830 13377.164416 0.179129 0.177522\n", + "\t70 13376.807762 13389.265265 0.162838 0.162714\n", + "\t75 13341.931624 13335.296594 0.152609 0.152417\n", + "\t80 13323.359370 13317.898827 0.142282 0.142520\n", + "\t85 13320.624255 13328.550643 0.132022 0.131243\n", + "\t90 13276.335581 13310.694565 0.124791 0.123615\n", + "\t95 13291.680639 13291.914034 0.116002 0.115864\n", + "\t100 13231.017853 13270.160350 0.110371 0.108953\n", + "\t105 13210.946440 13206.626648 0.104111 0.103936\n", + "\t110 13207.592577 13204.813252 0.097619 0.096775\n", + "\t115 13119.069100 13133.099872 0.094113 0.092629\n", + "\t120 13109.529071 13152.191134 0.088884 0.087390\n", + "\t125 13095.270885 13119.431535 0.084279 0.082767\n", + "\t130 13033.700377 13054.659703 0.080103 0.079317\n", + "\t135 12957.809294 13030.381168 0.077480 0.075530\n", + "\t140 12931.802369 12994.145013 0.073862 0.072263\n", + "\t145 12925.100614 12958.166533 0.070224 0.069155\n", + "\t150 12855.814961 12883.286594 0.068059 0.066754\n", + "\t155 12839.979057 12863.007784 0.064786 0.064032\n", + "\t160 12827.797549 12827.137770 0.061897 0.061571\n", + "\t165 12755.000233 12799.473800 0.060413 0.059162\n", + "\t170 12693.096249 12717.620831 0.058603 0.057730\n", + "\t175 12601.717780 12641.557351 0.057507 0.056527\n", + "\t180 12615.109130 12613.094183 0.054529 0.054178\n", + "\t185 12586.653068 12581.699392 0.052663 0.052259\n", + "\t190 12537.507236 12556.326916 0.051090 0.050396\n", + "\t195 12473.427562 12463.328882 0.049878 0.049704\n", + "\t200 12477.999050 12421.543590 0.047867 0.048312\n", + "\t205 12362.115770 12339.759839 0.047396 0.047358\n", + "\t210 12253.089156 12243.798783 0.046878 0.046663\n", + "\t215 12180.868013 12163.326591 0.045927 0.045862\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 8/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22375e+43 erg / s Luminosity absorbed = 8.12095e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13210.192507 13194.127608 0.651204 0.656434\n", + "\t5 13279.272431 13228.388565 0.553787 0.559574\n", + "\t10 13325.730308 13289.414493 0.485617 0.489004\n", + "\t15 13305.186251 13346.761126 0.438444 0.433787\n", + "\t20 13343.413094 13363.742432 0.392317 0.390643\n", + "\t25 13329.023277 13385.269116 0.358184 0.351372\n", + "\t30 13327.705187 13359.128491 0.323893 0.321469\n", + "\t35 13366.676710 13398.262188 0.291474 0.291795\n", + "\t40 13347.637776 13415.204376 0.270268 0.266293\n", + "\t45 13391.584255 13428.721895 0.243847 0.242985\n", + "\t50 13371.818600 13413.695497 0.224589 0.222309\n", + "\t55 13429.111170 13406.001338 0.205312 0.206976\n", + "\t60 13385.068591 13406.277223 0.190720 0.191089\n", + "\t65 13377.164416 13447.307416 0.177522 0.174859\n", + "\t70 13389.265265 13427.486749 0.162714 0.162477\n", + "\t75 13335.296594 13400.407701 0.152417 0.150796\n", + "\t80 13317.898827 13381.691224 0.142520 0.140777\n", + "\t85 13328.550643 13371.963378 0.131243 0.131026\n", + "\t90 13310.694565 13375.266319 0.123615 0.121836\n", + "\t95 13291.914034 13356.498239 0.115864 0.114540\n", + "\t100 13270.160350 13323.180618 0.108953 0.107497\n", + "\t105 13206.626648 13246.701015 0.103936 0.102790\n", + "\t110 13204.813252 13208.360067 0.096775 0.097150\n", + "\t115 13133.099872 13148.966352 0.092629 0.092266\n", + "\t120 13152.191134 13174.872225 0.087390 0.086782\n", + "\t125 13119.431535 13142.241261 0.082767 0.082443\n", + "\t130 13054.659703 13072.396994 0.079317 0.079388\n", + "\t135 13030.381168 13051.399307 0.075530 0.075497\n", + "\t140 12994.145013 13026.259101 0.072263 0.071752\n", + "\t145 12958.166533 12996.797161 0.069155 0.068470\n", + "\t150 12883.286594 12925.202949 0.066754 0.065936\n", + "\t155 12863.007784 12864.354520 0.064032 0.064026\n", + "\t160 12827.137770 12859.747285 0.061571 0.061331\n", + "\t165 12799.473800 12793.706958 0.059162 0.059341\n", + "\t170 12717.620831 12733.667948 0.057730 0.057447\n", + "\t175 12641.557351 12669.138594 0.056527 0.055941\n", + "\t180 12613.094183 12647.126180 0.054178 0.053803\n", + "\t185 12581.699392 12589.173650 0.052259 0.052224\n", + "\t190 12556.326916 12550.587983 0.050396 0.050632\n", + "\t195 12463.328882 12450.144160 0.049704 0.049861\n", + "\t200 12421.543590 12405.865846 0.048312 0.048493\n", + "\t205 12339.759839 12351.709722 0.047358 0.047307\n", + "\t210 12243.798783 12253.994038 0.046663 0.046529\n", + "\t215 12163.326591 12193.782185 0.045862 0.045482\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 9/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21908e+43 erg / s Luminosity absorbed = 8.16872e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13194.127608 13207.712484 0.656434 0.655960\n", + "\t5 13228.388565 13224.770429 0.559574 0.562303\n", + "\t10 13289.414493 13275.361500 0.489004 0.494601\n", + "\t15 13346.761126 13317.607311 0.433787 0.435487\n", + "\t20 13363.742432 13352.395556 0.390643 0.391052\n", + "\t25 13385.269116 13386.828235 0.351372 0.350598\n", + "\t30 13359.128491 13410.026678 0.321469 0.315679\n", + "\t35 13398.262188 13389.009476 0.291795 0.290711\n", + "\t40 13415.204376 13418.441455 0.266293 0.263041\n", + "\t45 13428.721895 13378.162118 0.242985 0.245205\n", + "\t50 13413.695497 13443.730262 0.222309 0.220039\n", + "\t55 13406.001338 13424.303697 0.206976 0.205223\n", + "\t60 13406.277223 13419.555276 0.191089 0.188897\n", + "\t65 13447.307416 13460.875005 0.174859 0.172920\n", + "\t70 13427.486749 13450.337756 0.162477 0.160245\n", + "\t75 13400.407701 13448.630047 0.150796 0.148399\n", + "\t80 13381.691224 13438.668160 0.140777 0.138444\n", + "\t85 13371.963378 13419.643621 0.131026 0.130018\n", + "\t90 13375.266319 13410.569390 0.121836 0.121143\n", + "\t95 13356.498239 13411.775288 0.114540 0.112150\n", + "\t100 13323.180618 13345.602702 0.107497 0.106578\n", + "\t105 13246.701015 13309.641634 0.102790 0.100505\n", + "\t110 13208.360067 13267.237025 0.097150 0.095508\n", + "\t115 13148.966352 13245.989409 0.092266 0.089846\n", + "\t120 13174.872225 13192.393305 0.086782 0.086280\n", + "\t125 13142.241261 13206.993275 0.082443 0.081211\n", + "\t130 13072.396994 13109.780991 0.079388 0.078693\n", + "\t135 13051.399307 13105.515227 0.075497 0.074463\n", + "\t140 13026.259101 13080.013791 0.071752 0.070828\n", + "\t145 12996.797161 13034.310835 0.068470 0.067873\n", + "\t150 12925.202949 12954.520922 0.065936 0.065855\n", + "\t155 12864.354520 12892.530978 0.064026 0.063870\n", + "\t160 12859.747285 12871.554047 0.061331 0.061258\n", + "\t165 12793.706958 12829.332539 0.059341 0.058871\n", + "\t170 12733.667948 12764.372956 0.057447 0.057038\n", + "\t175 12669.138594 12758.719713 0.055941 0.054577\n", + "\t180 12647.126180 12643.886903 0.053803 0.053704\n", + "\t185 12589.173650 12584.799996 0.052224 0.052303\n", + "\t190 12550.587983 12539.090757 0.050632 0.050683\n", + "\t195 12450.144160 12482.487445 0.049861 0.049185\n", + "\t200 12405.865846 12385.358724 0.048493 0.048675\n", + "\t205 12351.709722 12362.404518 0.047307 0.046954\n", + "\t210 12253.994038 12303.329057 0.046529 0.045802\n", + "\t215 12193.782185 12217.514244 0.045482 0.045041\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 10/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21621e+43 erg / s Luminosity absorbed = 8.18951e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13207.712484 13250.044474 0.655960 0.648306\n", + "\t5 13224.770429 13268.260885 0.562303 0.554688\n", + "\t10 13275.361500 13343.630262 0.494601 0.485191\n", + "\t15 13317.607311 13372.127852 0.435487 0.433539\n", + "\t20 13352.395556 13394.404128 0.391052 0.387859\n", + "\t25 13386.828235 13423.447190 0.350598 0.348268\n", + "\t30 13410.026678 13435.790768 0.315679 0.315451\n", + "\t35 13389.009476 13459.456710 0.290711 0.284964\n", + "\t40 13418.441455 13459.066834 0.263041 0.262896\n", + "\t45 13378.162118 13429.157522 0.245205 0.244167\n", + "\t50 13443.730262 13447.760292 0.220039 0.221943\n", + "\t55 13424.303697 13475.944820 0.205223 0.203639\n", + "\t60 13419.555276 13456.185170 0.188897 0.187987\n", + "\t65 13460.875005 13505.405683 0.172920 0.171399\n", + "\t70 13450.337756 13471.586824 0.160245 0.159227\n", + "\t75 13448.630047 13509.654307 0.148399 0.146613\n", + "\t80 13438.668160 13485.367813 0.138444 0.136661\n", + "\t85 13419.643621 13459.486003 0.130018 0.128842\n", + "\t90 13410.569390 13413.151984 0.121143 0.120975\n", + "\t95 13411.775288 13372.719193 0.112150 0.113967\n", + "\t100 13345.602702 13347.397283 0.106578 0.107160\n", + "\t105 13309.641634 13357.042867 0.100505 0.099694\n", + "\t110 13267.237025 13292.283955 0.095508 0.095070\n", + "\t115 13245.989409 13254.313335 0.089846 0.089742\n", + "\t120 13192.393305 13203.352329 0.086280 0.086462\n", + "\t125 13206.993275 13200.112218 0.081211 0.081222\n", + "\t130 13109.780991 13116.657467 0.078693 0.078214\n", + "\t135 13105.515227 13120.957986 0.074463 0.073713\n", + "\t140 13080.013791 13117.413156 0.070828 0.070116\n", + "\t145 13034.310835 13042.554199 0.067873 0.067352\n", + "\t150 12954.520922 12983.088194 0.065855 0.065417\n", + "\t155 12892.530978 12953.555946 0.063870 0.062668\n", + "\t160 12871.554047 12916.451771 0.061258 0.060032\n", + "\t165 12829.332539 12858.080133 0.058871 0.058206\n", + "\t170 12764.372956 12812.042920 0.057038 0.056128\n", + "\t175 12758.719713 12747.638758 0.054577 0.054594\n", + "\t180 12643.886903 12709.889498 0.053704 0.052654\n", + "\t185 12584.799996 12659.454233 0.052303 0.050867\n", + "\t190 12539.090757 12603.737771 0.050683 0.049698\n", + "\t195 12482.487445 12542.866664 0.049185 0.048387\n", + "\t200 12385.358724 12457.714659 0.048675 0.047626\n", + "\t205 12362.404518 12404.158500 0.046954 0.046263\n", + "\t210 12303.329057 12314.481431 0.045802 0.045468\n", + "\t215 12217.514244 12219.633343 0.045041 0.044806\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 11/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22099e+43 erg / s Luminosity absorbed = 8.14722e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13250.044474 13230.303793 0.648306 0.653347\n", + "\t5 13268.260885 13278.921453 0.554688 0.557141\n", + "\t10 13343.630262 13297.867380 0.485191 0.494971\n", + "\t15 13372.127852 13338.977010 0.433539 0.437654\n", + "\t20 13394.404128 13388.041689 0.387859 0.389896\n", + "\t25 13423.447190 13399.607318 0.348268 0.352616\n", + "\t30 13435.790768 13402.658723 0.315451 0.318820\n", + "\t35 13459.456710 13450.995960 0.284964 0.286188\n", + "\t40 13459.066834 13448.503156 0.262896 0.263254\n", + "\t45 13429.157522 13465.392891 0.244167 0.240151\n", + "\t50 13447.760292 13467.648960 0.221943 0.221032\n", + "\t55 13475.944820 13475.701645 0.203639 0.202742\n", + "\t60 13456.185170 13493.350980 0.187987 0.185672\n", + "\t65 13505.405683 13518.310710 0.171399 0.170532\n", + "\t70 13471.586824 13494.025081 0.159227 0.158113\n", + "\t75 13509.654307 13539.078602 0.146613 0.144461\n", + "\t80 13485.367813 13548.423948 0.136661 0.133634\n", + "\t85 13459.486003 13467.039561 0.128842 0.127736\n", + "\t90 13413.151984 13451.638423 0.120975 0.119543\n", + "\t95 13372.719193 13457.248316 0.113967 0.111862\n", + "\t100 13347.397283 13412.863481 0.107160 0.105685\n", + "\t105 13357.042867 13398.455904 0.099694 0.098452\n", + "\t110 13292.283955 13302.921440 0.095070 0.094659\n", + "\t115 13254.313335 13282.193580 0.089742 0.089329\n", + "\t120 13203.352329 13219.401175 0.086462 0.086073\n", + "\t125 13200.112218 13201.420216 0.081222 0.081001\n", + "\t130 13116.657467 13139.211214 0.078214 0.077949\n", + "\t135 13120.957986 13164.116084 0.073713 0.073320\n", + "\t140 13117.413156 13143.426144 0.070116 0.069725\n", + "\t145 13042.554199 13072.451666 0.067352 0.067062\n", + "\t150 12983.088194 13012.224631 0.065417 0.064803\n", + "\t155 12953.555946 12948.682525 0.062668 0.062814\n", + "\t160 12916.451771 12932.493342 0.060032 0.059969\n", + "\t165 12858.080133 12837.412003 0.058206 0.058573\n", + "\t170 12812.042920 12822.790631 0.056128 0.056038\n", + "\t175 12747.638758 12754.419790 0.054594 0.054566\n", + "\t180 12709.889498 12690.188142 0.052654 0.052906\n", + "\t185 12659.454233 12657.419216 0.050867 0.051031\n", + "\t190 12603.737771 12567.241073 0.049698 0.050083\n", + "\t195 12542.866664 12506.494295 0.048387 0.048923\n", + "\t200 12457.714659 12458.719247 0.047626 0.047384\n", + "\t205 12404.158500 12402.111064 0.046263 0.046297\n", + "\t210 12314.481431 12309.834715 0.045468 0.045563\n", + "\t215 12219.633343 12225.965187 0.044806 0.044749\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 12/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21227e+43 erg / s Luminosity absorbed = 8.22264e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13230.303793 13208.849994 0.653347 0.659598\n", + "\t5 13278.921453 13272.158210 0.557141 0.561212\n", + "\t10 13297.867380 13342.748204 0.494971 0.488881\n", + "\t15 13338.977010 13390.263252 0.437654 0.432805\n", + "\t20 13388.041689 13424.191029 0.389896 0.388292\n", + "\t25 13399.607318 13458.184819 0.352616 0.348057\n", + "\t30 13402.658723 13470.170887 0.318820 0.314842\n", + "\t35 13450.995960 13486.075663 0.286188 0.284269\n", + "\t40 13448.503156 13522.925178 0.263254 0.259422\n", + "\t45 13465.392891 13497.508334 0.240151 0.239422\n", + "\t50 13467.648960 13489.284340 0.221032 0.220600\n", + "\t55 13475.701645 13512.115225 0.202742 0.202209\n", + "\t60 13493.350980 13496.883357 0.185672 0.186368\n", + "\t65 13518.310710 13519.225487 0.170532 0.172357\n", + "\t70 13494.025081 13459.411751 0.158113 0.160356\n", + "\t75 13539.078602 13486.183066 0.144461 0.147243\n", + "\t80 13548.423948 13486.241355 0.133634 0.136797\n", + "\t85 13467.039561 13451.472664 0.127736 0.128289\n", + "\t90 13451.638423 13456.663239 0.119543 0.119819\n", + "\t95 13457.248316 13468.237878 0.111862 0.111512\n", + "\t100 13412.863481 13417.948513 0.105685 0.105811\n", + "\t105 13398.455904 13361.202313 0.098452 0.099821\n", + "\t110 13302.921440 13316.056762 0.094659 0.094989\n", + "\t115 13282.193580 13243.700355 0.089329 0.090345\n", + "\t120 13219.401175 13243.163337 0.086073 0.085463\n", + "\t125 13201.420216 13250.057352 0.081001 0.080080\n", + "\t130 13139.211214 13164.311347 0.077949 0.077706\n", + "\t135 13164.116084 13184.287993 0.073320 0.072553\n", + "\t140 13143.426144 13154.157361 0.069725 0.069428\n", + "\t145 13072.451666 13079.781830 0.067062 0.067008\n", + "\t150 13012.224631 13030.156864 0.064803 0.064555\n", + "\t155 12948.682525 12944.264398 0.062814 0.062676\n", + "\t160 12932.493342 12949.815017 0.059969 0.059988\n", + "\t165 12837.412003 12897.310883 0.058573 0.057579\n", + "\t170 12822.790631 12922.159742 0.056038 0.054708\n", + "\t175 12754.419790 12821.949007 0.054566 0.053511\n", + "\t180 12690.188142 12730.870651 0.052906 0.052254\n", + "\t185 12657.419216 12722.247624 0.051031 0.050018\n", + "\t190 12567.241073 12642.740779 0.050083 0.048842\n", + "\t195 12506.494295 12560.850177 0.048923 0.048038\n", + "\t200 12458.719247 12511.262912 0.047384 0.046644\n", + "\t205 12402.111064 12421.083202 0.046297 0.045961\n", + "\t210 12309.834715 12344.680043 0.045563 0.044970\n", + "\t215 12225.965187 12226.871851 0.044749 0.044510\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 13/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21689e+43 erg / s Luminosity absorbed = 8.18137e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13208.849994 13221.314409 0.659598 0.656564\n", + "\t5 13272.158210 13266.903886 0.561212 0.559145\n", + "\t10 13342.748204 13343.312042 0.488881 0.485847\n", + "\t15 13390.263252 13396.321205 0.432805 0.432258\n", + "\t20 13424.191029 13431.814773 0.388292 0.387402\n", + "\t25 13458.184819 13514.656129 0.348057 0.342639\n", + "\t30 13470.170887 13503.249569 0.314842 0.311340\n", + "\t35 13486.075663 13497.806703 0.284269 0.285753\n", + "\t40 13522.925178 13536.387470 0.259422 0.259071\n", + "\t45 13497.508334 13526.018045 0.239422 0.237719\n", + "\t50 13489.284340 13479.479891 0.220600 0.222196\n", + "\t55 13512.115225 13531.789695 0.202209 0.199924\n", + "\t60 13496.883357 13524.251543 0.186368 0.185102\n", + "\t65 13519.225487 13531.626249 0.172357 0.170451\n", + "\t70 13459.411751 13491.592574 0.160356 0.159119\n", + "\t75 13486.183066 13491.954060 0.147243 0.148060\n", + "\t80 13486.241355 13493.132689 0.136797 0.136837\n", + "\t85 13451.472664 13485.073739 0.128289 0.127372\n", + "\t90 13456.663239 13466.187776 0.119819 0.119361\n", + "\t95 13468.237878 13451.422770 0.111512 0.111297\n", + "\t100 13417.948513 13454.427565 0.105811 0.103878\n", + "\t105 13361.202313 13386.326056 0.099821 0.099301\n", + "\t110 13316.056762 13366.800827 0.094989 0.093696\n", + "\t115 13243.700355 13306.582006 0.090345 0.088835\n", + "\t120 13243.163337 13245.016932 0.085463 0.084972\n", + "\t125 13250.057352 13255.717688 0.080080 0.080067\n", + "\t130 13164.311347 13246.575711 0.077706 0.075900\n", + "\t135 13184.287993 13181.247980 0.072553 0.072767\n", + "\t140 13154.157361 13122.812683 0.069428 0.069772\n", + "\t145 13079.781830 13037.707680 0.067008 0.068075\n", + "\t150 13030.156864 13026.386344 0.064555 0.064898\n", + "\t155 12944.264398 12925.145144 0.062676 0.063013\n", + "\t160 12949.815017 12885.376665 0.059988 0.060850\n", + "\t165 12897.310883 12861.447381 0.057579 0.058018\n", + "\t170 12922.159742 12833.429801 0.054708 0.056175\n", + "\t175 12821.949007 12783.510362 0.053511 0.054147\n", + "\t180 12730.870651 12717.340806 0.052254 0.052455\n", + "\t185 12722.247624 12680.884053 0.050018 0.050573\n", + "\t190 12642.740779 12654.520515 0.048842 0.048821\n", + "\t195 12560.850177 12556.882955 0.048038 0.048179\n", + "\t200 12511.262912 12509.126284 0.046644 0.046719\n", + "\t205 12421.083202 12446.538483 0.045961 0.045501\n", + "\t210 12344.680043 12344.694905 0.044970 0.044970\n", + "\t215 12226.871851 12231.908348 0.044510 0.044500\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 14/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21370e+43 erg / s Luminosity absorbed = 8.21618e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13221.314409 13248.085322 0.656564 0.652078\n", + "\t5 13266.903886 13271.262850 0.559145 0.557217\n", + "\t10 13343.312042 13323.100432 0.485847 0.488675\n", + "\t15 13396.321205 13364.000693 0.432258 0.434756\n", + "\t20 13431.814773 13415.622861 0.387402 0.388410\n", + "\t25 13514.656129 13519.302099 0.342639 0.342131\n", + "\t30 13503.249569 13522.659188 0.311340 0.309502\n", + "\t35 13497.806703 13549.670505 0.285753 0.280875\n", + "\t40 13536.387470 13564.411362 0.259071 0.258257\n", + "\t45 13526.018045 13547.677730 0.237719 0.236120\n", + "\t50 13479.479891 13531.242465 0.222196 0.217546\n", + "\t55 13531.789695 13562.478514 0.199924 0.199222\n", + "\t60 13524.251543 13560.618390 0.185102 0.183767\n", + "\t65 13531.626249 13595.350076 0.170451 0.168717\n", + "\t70 13491.592574 13583.685267 0.159119 0.155018\n", + "\t75 13491.954060 13568.688277 0.148060 0.144394\n", + "\t80 13493.132689 13511.447091 0.136837 0.136209\n", + "\t85 13485.073739 13524.307991 0.127372 0.126028\n", + "\t90 13466.187776 13518.242204 0.119361 0.116933\n", + "\t95 13451.422770 13473.696003 0.111297 0.110181\n", + "\t100 13454.427565 13470.970672 0.103878 0.103747\n", + "\t105 13386.326056 13439.625097 0.099301 0.097789\n", + "\t110 13366.800827 13341.589885 0.093696 0.094411\n", + "\t115 13306.582006 13284.506102 0.088835 0.088979\n", + "\t120 13245.016932 13212.934919 0.084972 0.085421\n", + "\t125 13255.717688 13236.311034 0.080067 0.079694\n", + "\t130 13246.575711 13209.300239 0.075900 0.076463\n", + "\t135 13181.247980 13147.404552 0.072767 0.072989\n", + "\t140 13122.812683 13123.191470 0.069772 0.069362\n", + "\t145 13037.707680 13062.442351 0.068075 0.067216\n", + "\t150 13026.386344 13002.501066 0.064898 0.064495\n", + "\t155 12925.145144 12941.430006 0.063013 0.062345\n", + "\t160 12885.376665 12885.248161 0.060850 0.060475\n", + "\t165 12861.447381 12856.926441 0.058018 0.057861\n", + "\t170 12833.429801 12831.914851 0.056175 0.055705\n", + "\t175 12783.510362 12783.093570 0.054147 0.053784\n", + "\t180 12717.340806 12690.757185 0.052455 0.052567\n", + "\t185 12680.884053 12641.084383 0.050573 0.050898\n", + "\t190 12654.520515 12572.460696 0.048821 0.049764\n", + "\t195 12556.882955 12516.398175 0.048179 0.048572\n", + "\t200 12509.126284 12454.357431 0.046719 0.047301\n", + "\t205 12446.538483 12367.350498 0.045501 0.046470\n", + "\t210 12344.694905 12318.940270 0.044970 0.045142\n", + "\t215 12231.908348 12221.586509 0.044500 0.044518\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 15/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20596e+43 erg / s Luminosity absorbed = 8.28887e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13248.085322 13269.950479 0.652078 0.645755\n", + "\t5 13271.262850 13301.816652 0.557217 0.549777\n", + "\t10 13323.100432 13356.938920 0.488675 0.484341\n", + "\t15 13364.000693 13387.126609 0.434756 0.432017\n", + "\t20 13415.622861 13474.324367 0.388410 0.380816\n", + "\t25 13519.302099 13530.987543 0.342131 0.342549\n", + "\t30 13522.659188 13531.828247 0.309502 0.310338\n", + "\t35 13549.670505 13545.706924 0.280875 0.281759\n", + "\t40 13564.411362 13546.619910 0.258257 0.258598\n", + "\t45 13547.677730 13498.710008 0.236120 0.240528\n", + "\t50 13531.242465 13568.778885 0.217546 0.215732\n", + "\t55 13562.478514 13606.052514 0.199222 0.195722\n", + "\t60 13560.618390 13624.818819 0.183767 0.178910\n", + "\t65 13595.350076 13619.048574 0.168717 0.166233\n", + "\t70 13583.685267 13592.981823 0.155018 0.154182\n", + "\t75 13568.688277 13620.893813 0.144394 0.141796\n", + "\t80 13511.447091 13597.052224 0.136209 0.133395\n", + "\t85 13524.307991 13585.058724 0.126028 0.123785\n", + "\t90 13518.242204 13591.535826 0.116933 0.114551\n", + "\t95 13473.696003 13520.772286 0.110181 0.108313\n", + "\t100 13470.970672 13457.777873 0.103747 0.103595\n", + "\t105 13439.625097 13454.673879 0.097789 0.097445\n", + "\t110 13341.589885 13422.703934 0.094411 0.091966\n", + "\t115 13284.506102 13389.027818 0.088979 0.086189\n", + "\t120 13212.934919 13309.391317 0.085421 0.083230\n", + "\t125 13236.311034 13240.145769 0.079694 0.079493\n", + "\t130 13209.300239 13204.256727 0.076463 0.076387\n", + "\t135 13147.404552 13181.230898 0.072989 0.072152\n", + "\t140 13123.191470 13140.558809 0.069362 0.068672\n", + "\t145 13062.442351 13100.506478 0.067216 0.066137\n", + "\t150 13002.501066 13031.203765 0.064495 0.063556\n", + "\t155 12941.430006 13001.184124 0.062345 0.060949\n", + "\t160 12885.248161 12942.508886 0.060475 0.059074\n", + "\t165 12856.926441 12912.024518 0.057861 0.056502\n", + "\t170 12831.914851 12891.299428 0.055705 0.054352\n", + "\t175 12783.093570 12829.756525 0.053784 0.052885\n", + "\t180 12690.757185 12724.080499 0.052567 0.051865\n", + "\t185 12641.084383 12693.543905 0.050898 0.050000\n", + "\t190 12572.460696 12633.066604 0.049764 0.048720\n", + "\t195 12516.398175 12597.395784 0.048572 0.047184\n", + "\t200 12454.357431 12524.995233 0.047301 0.046111\n", + "\t205 12367.350498 12411.617488 0.046470 0.045838\n", + "\t210 12318.940270 12367.171116 0.045142 0.044366\n", + "\t215 12221.586509 12267.188024 0.044518 0.043741\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 16/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21019e+43 erg / s Luminosity absorbed = 8.24203e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13269.950479 13294.332464 0.645755 0.639894\n", + "\t5 13301.816652 13334.225375 0.549777 0.545794\n", + "\t10 13356.938920 13341.731754 0.484341 0.489215\n", + "\t15 13387.126609 13392.884162 0.432017 0.433385\n", + "\t20 13474.324367 13449.916507 0.380816 0.384548\n", + "\t25 13530.987543 13504.961340 0.342549 0.345200\n", + "\t30 13531.828247 13515.546456 0.310338 0.311512\n", + "\t35 13545.706924 13519.588682 0.281759 0.284215\n", + "\t40 13546.619910 13540.852305 0.258598 0.259600\n", + "\t45 13498.710008 13551.504707 0.240528 0.237025\n", + "\t50 13568.778885 13595.189072 0.215732 0.214145\n", + "\t55 13606.052514 13640.400297 0.195722 0.194052\n", + "\t60 13624.818819 13650.180777 0.178910 0.178014\n", + "\t65 13619.048574 13682.597008 0.166233 0.163665\n", + "\t70 13592.981823 13628.687357 0.154182 0.153787\n", + "\t75 13620.893813 13686.415370 0.141796 0.140718\n", + "\t80 13597.052224 13667.638767 0.133395 0.131648\n", + "\t85 13585.058724 13614.508146 0.123785 0.123306\n", + "\t90 13591.535826 13592.293834 0.114551 0.115055\n", + "\t95 13520.772286 13591.458834 0.108313 0.106462\n", + "\t100 13457.777873 13516.525837 0.103595 0.102804\n", + "\t105 13454.673879 13493.432984 0.097445 0.097303\n", + "\t110 13422.703934 13506.262863 0.091966 0.089921\n", + "\t115 13389.027818 13462.951218 0.086189 0.084904\n", + "\t120 13309.391317 13401.175756 0.083230 0.081100\n", + "\t125 13240.145769 13329.876751 0.079493 0.077521\n", + "\t130 13204.256727 13274.552132 0.076387 0.074636\n", + "\t135 13181.230898 13253.288405 0.072152 0.070750\n", + "\t140 13140.558809 13181.363752 0.068672 0.068530\n", + "\t145 13100.506478 13181.575930 0.066137 0.064852\n", + "\t150 13031.203765 13082.422101 0.063556 0.062904\n", + "\t155 13001.184124 13062.551665 0.060949 0.060169\n", + "\t160 12942.508886 12987.751942 0.059074 0.058697\n", + "\t165 12912.024518 12945.550201 0.056502 0.056124\n", + "\t170 12891.299428 12940.320268 0.054352 0.053558\n", + "\t175 12829.756525 12896.507466 0.052885 0.051976\n", + "\t180 12724.080499 12797.825337 0.051865 0.050767\n", + "\t185 12693.543905 12735.338727 0.050000 0.049307\n", + "\t190 12633.066604 12652.175435 0.048720 0.048346\n", + "\t195 12597.395784 12589.600635 0.047184 0.047215\n", + "\t200 12524.995233 12547.627424 0.046111 0.045773\n", + "\t205 12411.617488 12449.180372 0.045838 0.045101\n", + "\t210 12367.171116 12369.571510 0.044366 0.044203\n", + "\t215 12267.188024 12289.644346 0.043741 0.043363\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 17/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20561e+43 erg / s Luminosity absorbed = 8.28570e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13294.332464 13244.460538 0.639894 0.649708\n", + "\t5 13334.225375 13313.132071 0.545794 0.550698\n", + "\t10 13341.731754 13348.350349 0.489215 0.487904\n", + "\t15 13392.884162 13404.499117 0.433385 0.433249\n", + "\t20 13449.916507 13430.748739 0.384548 0.385039\n", + "\t25 13504.961340 13499.884145 0.345200 0.346484\n", + "\t30 13515.546456 13504.716737 0.311512 0.313246\n", + "\t35 13519.588682 13513.576476 0.284215 0.284651\n", + "\t40 13540.852305 13560.463567 0.259600 0.257079\n", + "\t45 13551.504707 13582.157063 0.237025 0.233521\n", + "\t50 13595.189072 13587.075628 0.214145 0.214888\n", + "\t55 13640.400297 13627.976702 0.194052 0.195310\n", + "\t60 13650.180777 13631.544645 0.178014 0.179027\n", + "\t65 13682.597008 13648.868190 0.163665 0.164849\n", + "\t70 13628.687357 13643.698829 0.153787 0.152570\n", + "\t75 13686.415370 13645.078826 0.140718 0.141862\n", + "\t80 13667.638767 13627.262692 0.131648 0.132550\n", + "\t85 13614.508146 13566.681998 0.123306 0.124692\n", + "\t90 13592.293834 13530.395581 0.115055 0.117295\n", + "\t95 13591.458834 13521.840968 0.106462 0.109117\n", + "\t100 13516.525837 13506.642129 0.102804 0.103689\n", + "\t105 13493.432984 13492.251957 0.097303 0.097032\n", + "\t110 13506.262863 13451.600943 0.089921 0.091607\n", + "\t115 13462.951218 13436.119810 0.084904 0.085909\n", + "\t120 13401.175756 13371.241690 0.081100 0.081890\n", + "\t125 13329.876751 13311.937285 0.077521 0.078795\n", + "\t130 13274.552132 13252.648553 0.074636 0.075308\n", + "\t135 13253.288405 13169.998818 0.070750 0.072800\n", + "\t140 13181.363752 13174.222148 0.068530 0.068996\n", + "\t145 13181.575930 13153.212857 0.064852 0.065518\n", + "\t150 13082.422101 13095.618126 0.062904 0.062932\n", + "\t155 13062.551665 13094.553925 0.060169 0.059735\n", + "\t160 12987.751942 13003.530962 0.058697 0.058432\n", + "\t165 12945.550201 12966.608407 0.056124 0.056056\n", + "\t170 12940.320268 12949.402109 0.053558 0.053719\n", + "\t175 12896.507466 12862.494358 0.051976 0.052531\n", + "\t180 12797.825337 12769.340474 0.050767 0.051329\n", + "\t185 12735.338727 12709.306732 0.049307 0.049652\n", + "\t190 12652.175435 12652.964504 0.048346 0.048401\n", + "\t195 12589.600635 12584.816637 0.047215 0.047114\n", + "\t200 12547.627424 12545.414915 0.045773 0.045822\n", + "\t205 12449.180372 12449.480425 0.045101 0.045031\n", + "\t210 12369.571510 12384.011229 0.044203 0.044008\n", + "\t215 12289.644346 12284.916605 0.043363 0.043442\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 18/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21325e+43 erg / s Luminosity absorbed = 8.21131e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13244.460538 13215.252735 0.649708 0.654200\n", + "\t5 13313.132071 13331.428875 0.550698 0.548599\n", + "\t10 13348.350349 13337.370576 0.487904 0.489688\n", + "\t15 13404.499117 13409.016011 0.433249 0.430614\n", + "\t20 13430.748739 13410.672754 0.385039 0.388442\n", + "\t25 13499.884145 13501.090419 0.346484 0.345055\n", + "\t30 13504.716737 13505.531068 0.313246 0.314231\n", + "\t35 13513.576476 13530.755819 0.284651 0.284280\n", + "\t40 13560.463567 13609.596856 0.257079 0.253643\n", + "\t45 13582.157063 13618.753022 0.233521 0.232414\n", + "\t50 13587.075628 13597.159113 0.214888 0.214130\n", + "\t55 13627.976702 13610.530973 0.195310 0.197545\n", + "\t60 13631.544645 13623.810035 0.179027 0.180485\n", + "\t65 13648.868190 13661.772054 0.164849 0.165192\n", + "\t70 13643.698829 13641.503930 0.152570 0.153796\n", + "\t75 13645.078826 13645.600774 0.141862 0.142685\n", + "\t80 13627.262692 13622.954322 0.132550 0.132334\n", + "\t85 13566.681998 13639.296322 0.124692 0.122790\n", + "\t90 13530.395581 13547.268529 0.117295 0.116846\n", + "\t95 13521.840968 13569.531356 0.109117 0.108375\n", + "\t100 13506.642129 13515.502271 0.103689 0.103755\n", + "\t105 13492.251957 13508.172150 0.097032 0.096633\n", + "\t110 13451.600943 13416.524575 0.091607 0.092537\n", + "\t115 13436.119810 13426.995476 0.085909 0.086135\n", + "\t120 13371.241690 13365.275241 0.081890 0.082669\n", + "\t125 13311.937285 13358.631205 0.078795 0.077631\n", + "\t130 13252.648553 13268.178553 0.075308 0.075116\n", + "\t135 13169.998818 13223.649500 0.072800 0.071572\n", + "\t140 13174.222148 13220.602955 0.068996 0.068243\n", + "\t145 13153.212857 13164.065526 0.065518 0.065354\n", + "\t150 13095.618126 13095.126934 0.062932 0.062998\n", + "\t155 13094.553925 13063.058963 0.059735 0.060406\n", + "\t160 13003.530962 13006.990221 0.058432 0.058529\n", + "\t165 12966.608407 12986.943190 0.056056 0.056053\n", + "\t170 12949.402109 12932.955739 0.053719 0.054015\n", + "\t175 12862.494358 12870.860913 0.052531 0.052642\n", + "\t180 12769.340474 12790.514749 0.051329 0.051470\n", + "\t185 12709.306732 12728.490336 0.049652 0.049786\n", + "\t190 12652.964504 12670.148291 0.048401 0.048367\n", + "\t195 12584.816637 12570.559127 0.047114 0.047467\n", + "\t200 12545.414915 12551.141851 0.045822 0.045916\n", + "\t205 12449.480425 12451.950510 0.045031 0.045138\n", + "\t210 12384.011229 12423.828932 0.044008 0.043706\n", + "\t215 12284.916605 12275.821494 0.043442 0.043662\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 19/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20640e+43 erg / s Luminosity absorbed = 8.27703e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13215.252735 13275.593833 0.654200 0.641575\n", + "\t5 13331.428875 13320.464125 0.548599 0.550550\n", + "\t10 13337.370576 13370.286171 0.489688 0.486018\n", + "\t15 13409.016011 13423.974251 0.430614 0.431285\n", + "\t20 13410.672754 13405.029898 0.388442 0.388908\n", + "\t25 13501.090419 13480.899554 0.345055 0.347041\n", + "\t30 13505.531068 13493.738929 0.314231 0.313299\n", + "\t35 13530.755819 13526.947308 0.284280 0.285034\n", + "\t40 13609.596856 13573.130852 0.253643 0.256411\n", + "\t45 13618.753022 13564.868422 0.232414 0.235894\n", + "\t50 13597.159113 13596.162820 0.214130 0.215532\n", + "\t55 13610.530973 13606.961834 0.197545 0.197586\n", + "\t60 13623.810035 13613.799866 0.180485 0.180924\n", + "\t65 13661.772054 13670.974200 0.165192 0.165513\n", + "\t70 13641.503930 13609.754866 0.153796 0.155721\n", + "\t75 13645.600774 13620.099801 0.142685 0.142833\n", + "\t80 13622.954322 13622.149138 0.132334 0.131837\n", + "\t85 13639.296322 13622.629367 0.122790 0.123216\n", + "\t90 13547.268529 13550.206611 0.116846 0.116628\n", + "\t95 13569.531356 13576.442824 0.108375 0.108370\n", + "\t100 13515.502271 13550.661291 0.103755 0.101730\n", + "\t105 13508.172150 13553.415275 0.096633 0.095153\n", + "\t110 13416.524575 13440.968288 0.092537 0.092355\n", + "\t115 13426.995476 13449.937711 0.086135 0.085928\n", + "\t120 13365.275241 13406.827159 0.082669 0.081735\n", + "\t125 13358.631205 13387.097490 0.077631 0.076855\n", + "\t130 13268.178553 13293.561247 0.075116 0.074028\n", + "\t135 13223.649500 13246.846989 0.071572 0.071086\n", + "\t140 13220.602955 13249.313571 0.068243 0.067556\n", + "\t145 13164.065526 13155.060691 0.065354 0.065304\n", + "\t150 13095.126934 13129.179399 0.062998 0.062308\n", + "\t155 13063.058963 13105.788762 0.060406 0.059735\n", + "\t160 13006.990221 13052.993533 0.058529 0.057324\n", + "\t165 12986.943190 13049.537481 0.056053 0.054732\n", + "\t170 12932.955739 12964.141616 0.054015 0.053309\n", + "\t175 12870.860913 12873.365866 0.052642 0.052182\n", + "\t180 12790.514749 12837.826363 0.051470 0.050638\n", + "\t185 12728.490336 12704.945462 0.049786 0.050011\n", + "\t190 12670.148291 12654.429611 0.048367 0.048416\n", + "\t195 12570.559127 12591.048933 0.047467 0.047031\n", + "\t200 12551.141851 12538.868881 0.045916 0.045828\n", + "\t205 12451.950510 12478.435159 0.045138 0.044770\n", + "\t210 12423.828932 12404.402526 0.043706 0.043784\n", + "\t215 12275.821494 12299.938075 0.043662 0.043250\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 20/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20984e+43 erg / s Luminosity absorbed = 8.24688e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13275.593833 13272.361297 0.641575 0.643131\n", + "\t5 13320.464125 13304.764532 0.550550 0.550883\n", + "\t10 13370.286171 13353.155833 0.486018 0.485906\n", + "\t15 13423.974251 13390.303881 0.431285 0.431612\n", + "\t20 13405.029898 13414.224321 0.388908 0.389333\n", + "\t25 13480.899554 13455.091925 0.347041 0.351015\n", + "\t30 13493.738929 13513.943048 0.313299 0.313074\n", + "\t35 13526.947308 13521.764429 0.285034 0.284974\n", + "\t40 13573.130852 13574.404278 0.256411 0.258177\n", + "\t45 13564.868422 13603.410987 0.235894 0.232270\n", + "\t50 13596.162820 13612.094041 0.215532 0.213702\n", + "\t55 13606.961834 13617.408271 0.197586 0.197195\n", + "\t60 13613.799866 13610.013488 0.180924 0.180863\n", + "\t65 13670.974200 13673.552054 0.165513 0.164200\n", + "\t70 13609.754866 13631.831420 0.155721 0.153669\n", + "\t75 13620.099801 13628.628207 0.142833 0.142200\n", + "\t80 13622.149138 13616.815750 0.131837 0.132482\n", + "\t85 13622.629367 13599.203244 0.123216 0.124053\n", + "\t90 13550.206611 13557.210091 0.116628 0.116238\n", + "\t95 13576.442824 13594.203419 0.108370 0.107687\n", + "\t100 13550.661291 13555.614817 0.101730 0.101546\n", + "\t105 13553.415275 13536.865702 0.095153 0.095418\n", + "\t110 13440.968288 13441.150339 0.092355 0.092386\n", + "\t115 13449.937711 13445.885394 0.085928 0.086177\n", + "\t120 13406.827159 13382.034029 0.081735 0.082523\n", + "\t125 13387.097490 13356.909386 0.076855 0.077689\n", + "\t130 13293.561247 13315.234449 0.074028 0.074039\n", + "\t135 13246.846989 13228.514457 0.071086 0.071362\n", + "\t140 13249.313571 13218.647649 0.067556 0.067926\n", + "\t145 13155.060691 13184.008520 0.065304 0.064832\n", + "\t150 13129.179399 13121.121278 0.062308 0.062483\n", + "\t155 13105.788762 13076.788591 0.059735 0.060584\n", + "\t160 13052.993533 13054.043317 0.057324 0.057635\n", + "\t165 13049.537481 13019.828137 0.054732 0.055219\n", + "\t170 12964.141616 12904.410073 0.053309 0.054136\n", + "\t175 12873.365866 12845.416495 0.052182 0.052463\n", + "\t180 12837.826363 12800.187003 0.050638 0.050817\n", + "\t185 12704.945462 12730.751566 0.050011 0.049486\n", + "\t190 12654.429611 12717.490013 0.048416 0.047431\n", + "\t195 12591.048933 12616.635162 0.047031 0.046664\n", + "\t200 12538.868881 12576.252299 0.045828 0.045482\n", + "\t205 12478.435159 12495.955151 0.044770 0.044613\n", + "\t210 12404.402526 12378.250834 0.043784 0.044170\n", + "\t215 12299.938075 12289.662367 0.043250 0.043437\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 21/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21090e+43 erg / s Luminosity absorbed = 8.23618e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13272.361297 13238.110707 0.643131 0.650874\n", + "\t5 13304.764532 13287.753370 0.550883 0.555871\n", + "\t10 13353.155833 13374.524718 0.485906 0.483023\n", + "\t15 13390.303881 13434.237643 0.431612 0.425922\n", + "\t20 13414.224321 13473.045124 0.389333 0.380603\n", + "\t25 13455.091925 13494.400242 0.351015 0.346455\n", + "\t30 13513.943048 13534.656312 0.313074 0.311422\n", + "\t35 13521.764429 13561.340870 0.284974 0.283608\n", + "\t40 13574.404278 13602.879384 0.258177 0.256415\n", + "\t45 13603.410987 13634.222625 0.232270 0.231800\n", + "\t50 13612.094041 13652.488522 0.213702 0.211430\n", + "\t55 13617.408271 13599.228313 0.197195 0.198330\n", + "\t60 13610.013488 13628.648194 0.180863 0.180805\n", + "\t65 13673.552054 13670.725712 0.164200 0.164859\n", + "\t70 13631.831420 13654.266746 0.153669 0.152613\n", + "\t75 13628.628207 13629.745042 0.142200 0.142187\n", + "\t80 13616.815750 13665.134288 0.132482 0.130750\n", + "\t85 13599.203244 13630.062407 0.124053 0.123503\n", + "\t90 13557.210091 13549.894759 0.116238 0.116418\n", + "\t95 13594.203419 13581.793685 0.107687 0.107581\n", + "\t100 13555.614817 13535.666076 0.101546 0.102364\n", + "\t105 13536.865702 13525.411134 0.095418 0.095427\n", + "\t110 13441.150339 13411.374333 0.092386 0.092997\n", + "\t115 13445.885394 13436.288355 0.086177 0.086271\n", + "\t120 13382.034029 13390.614836 0.082523 0.081941\n", + "\t125 13356.909386 13362.603164 0.077689 0.077358\n", + "\t130 13315.234449 13301.473749 0.074039 0.074348\n", + "\t135 13228.514457 13241.489428 0.071362 0.071113\n", + "\t140 13218.647649 13233.411060 0.067926 0.067449\n", + "\t145 13184.008520 13191.107749 0.064832 0.064329\n", + "\t150 13121.121278 13049.165675 0.062483 0.063520\n", + "\t155 13076.788591 13051.818930 0.060584 0.060553\n", + "\t160 13054.043317 12981.109020 0.057635 0.058468\n", + "\t165 13019.828137 12939.117333 0.055219 0.056205\n", + "\t170 12904.410073 12872.061882 0.054136 0.054645\n", + "\t175 12845.416495 12826.919565 0.052463 0.052669\n", + "\t180 12800.187003 12774.051094 0.050817 0.051284\n", + "\t185 12730.751566 12712.958930 0.049486 0.049636\n", + "\t190 12717.490013 12723.636192 0.047431 0.047333\n", + "\t195 12616.635162 12607.550913 0.046664 0.046856\n", + "\t200 12576.252299 12557.223085 0.045482 0.045825\n", + "\t205 12495.955151 12496.316576 0.044613 0.044607\n", + "\t210 12378.250834 12359.901379 0.044170 0.044432\n", + "\t215 12289.662367 12291.488426 0.043437 0.043549\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 22/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20712e+43 erg / s Luminosity absorbed = 8.27261e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13238.110707 13242.589560 0.650874 0.650661\n", + "\t5 13287.753370 13302.236433 0.555871 0.553883\n", + "\t10 13374.524718 13384.295437 0.483023 0.482708\n", + "\t15 13434.237643 13461.126863 0.425922 0.422022\n", + "\t20 13473.045124 13470.826671 0.380603 0.381236\n", + "\t25 13494.400242 13484.247273 0.346455 0.347424\n", + "\t30 13534.656312 13508.470387 0.311422 0.313096\n", + "\t35 13561.340870 13543.424565 0.283608 0.283193\n", + "\t40 13602.879384 13580.176047 0.256415 0.255980\n", + "\t45 13634.222625 13614.362136 0.231800 0.233483\n", + "\t50 13652.488522 13644.537532 0.211430 0.212147\n", + "\t55 13599.228313 13614.396375 0.198330 0.196233\n", + "\t60 13628.648194 13645.330715 0.180805 0.179325\n", + "\t65 13670.725712 13671.254373 0.164859 0.164136\n", + "\t70 13654.266746 13646.107424 0.152613 0.154460\n", + "\t75 13629.745042 13616.420307 0.142187 0.143180\n", + "\t80 13665.134288 13666.532072 0.130750 0.130676\n", + "\t85 13630.062407 13575.991311 0.123503 0.125264\n", + "\t90 13549.894759 13537.593047 0.116418 0.116523\n", + "\t95 13581.793685 13519.324997 0.107581 0.109037\n", + "\t100 13535.666076 13533.503766 0.102364 0.102218\n", + "\t105 13525.411134 13524.296286 0.095427 0.095472\n", + "\t110 13411.374333 13408.597159 0.092997 0.093029\n", + "\t115 13436.288355 13433.139621 0.086271 0.086510\n", + "\t120 13390.614836 13346.445735 0.081941 0.082582\n", + "\t125 13362.603164 13314.078372 0.077358 0.078528\n", + "\t130 13301.473749 13292.870438 0.074348 0.074822\n", + "\t135 13241.489428 13212.983843 0.071113 0.071947\n", + "\t140 13233.411060 13187.883546 0.067449 0.068256\n", + "\t145 13191.107749 13154.962528 0.064329 0.064997\n", + "\t150 13049.165675 13089.139849 0.063520 0.063208\n", + "\t155 13051.818930 13028.832892 0.060553 0.061212\n", + "\t160 12981.109020 12955.890317 0.058468 0.058877\n", + "\t165 12939.117333 12919.786297 0.056205 0.056736\n", + "\t170 12872.061882 12831.233593 0.054645 0.055147\n", + "\t175 12826.919565 12821.111309 0.052669 0.052650\n", + "\t180 12774.051094 12755.985754 0.051284 0.051381\n", + "\t185 12712.958930 12699.330423 0.049636 0.049963\n", + "\t190 12723.636192 12658.081446 0.047333 0.048248\n", + "\t195 12607.550913 12616.588836 0.046856 0.046843\n", + "\t200 12557.223085 12520.004285 0.045825 0.046220\n", + "\t205 12496.316576 12469.494651 0.044607 0.044840\n", + "\t210 12359.901379 12336.831445 0.044432 0.044645\n", + "\t215 12291.488426 12292.263511 0.043549 0.043399\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 23/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21436e+43 erg / s Luminosity absorbed = 8.20267e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13242.589560 13258.427166 0.650661 0.646781\n", + "\t5 13302.236433 13299.514381 0.553883 0.554208\n", + "\t10 13384.295437 13387.580308 0.482708 0.480070\n", + "\t15 13461.126863 13417.789738 0.422022 0.427611\n", + "\t20 13470.826671 13478.947649 0.381236 0.380802\n", + "\t25 13484.247273 13483.853992 0.347424 0.346575\n", + "\t30 13508.470387 13481.971326 0.313096 0.315613\n", + "\t35 13543.424565 13537.341581 0.283193 0.283614\n", + "\t40 13580.176047 13545.349426 0.255980 0.258512\n", + "\t45 13614.362136 13606.415720 0.233483 0.234589\n", + "\t50 13644.537532 13633.155825 0.212147 0.212564\n", + "\t55 13614.396375 13620.012253 0.196233 0.196128\n", + "\t60 13645.330715 13634.573954 0.179325 0.179370\n", + "\t65 13671.254373 13674.376989 0.164136 0.163591\n", + "\t70 13646.107424 13696.720677 0.154460 0.151282\n", + "\t75 13616.420307 13628.110866 0.143180 0.142235\n", + "\t80 13666.532072 13664.116070 0.130676 0.130906\n", + "\t85 13575.991311 13593.787168 0.125264 0.123801\n", + "\t90 13537.593047 13574.594978 0.116523 0.115843\n", + "\t95 13519.324997 13545.986411 0.109037 0.109125\n", + "\t100 13533.503766 13541.716260 0.102218 0.102313\n", + "\t105 13524.296286 13557.042736 0.095472 0.095252\n", + "\t110 13408.597159 13528.911716 0.093029 0.090217\n", + "\t115 13433.139621 13477.779105 0.086510 0.085821\n", + "\t120 13346.445735 13422.628881 0.082582 0.081440\n", + "\t125 13314.078372 13348.244204 0.078528 0.078169\n", + "\t130 13292.870438 13320.460508 0.074822 0.074200\n", + "\t135 13212.983843 13253.512286 0.071947 0.071233\n", + "\t140 13187.883546 13192.120721 0.068256 0.068204\n", + "\t145 13154.962528 13155.656117 0.064997 0.064981\n", + "\t150 13089.139849 13077.428673 0.063208 0.063336\n", + "\t155 13028.832892 13036.653378 0.061212 0.060716\n", + "\t160 12955.890317 13014.311099 0.058877 0.057776\n", + "\t165 12919.786297 12900.924993 0.056736 0.056904\n", + "\t170 12831.233593 12849.453995 0.055147 0.054912\n", + "\t175 12821.111309 12859.855508 0.052650 0.052202\n", + "\t180 12755.985754 12760.002356 0.051381 0.051311\n", + "\t185 12699.330423 12700.724143 0.049963 0.050006\n", + "\t190 12658.081446 12650.853146 0.048248 0.048460\n", + "\t195 12616.588836 12569.990044 0.046843 0.047719\n", + "\t200 12520.004285 12505.132653 0.046220 0.046542\n", + "\t205 12469.494651 12440.163243 0.044840 0.045558\n", + "\t210 12336.831445 12347.349436 0.044645 0.044723\n", + "\t215 12292.263511 12297.391221 0.043399 0.043441\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 24/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21096e+43 erg / s Luminosity absorbed = 8.23273e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13258.427166 13278.010763 0.646781 0.641648\n", + "\t5 13299.514381 13348.641733 0.554208 0.549116\n", + "\t10 13387.580308 13389.995159 0.480070 0.480928\n", + "\t15 13417.789738 13420.336267 0.427611 0.429481\n", + "\t20 13478.947649 13465.269674 0.380802 0.385639\n", + "\t25 13483.853992 13432.804473 0.346575 0.352148\n", + "\t30 13481.971326 13478.152260 0.315613 0.315732\n", + "\t35 13537.341581 13546.768152 0.283614 0.281819\n", + "\t40 13545.349426 13627.278155 0.258512 0.251783\n", + "\t45 13606.415720 13604.882965 0.234589 0.232319\n", + "\t50 13633.155825 13625.845890 0.212564 0.211901\n", + "\t55 13620.012253 13602.102375 0.196128 0.197460\n", + "\t60 13634.573954 13666.469517 0.179370 0.178943\n", + "\t65 13674.376989 13631.745802 0.163591 0.166107\n", + "\t70 13696.720677 13632.637553 0.151282 0.154189\n", + "\t75 13628.110866 13585.427048 0.142235 0.143931\n", + "\t80 13664.116070 13609.745816 0.130906 0.133334\n", + "\t85 13593.787168 13624.246108 0.123801 0.122952\n", + "\t90 13574.594978 13590.553890 0.115843 0.115902\n", + "\t95 13545.986411 13594.756383 0.109125 0.107573\n", + "\t100 13541.716260 13549.898466 0.102313 0.102064\n", + "\t105 13557.042736 13581.169680 0.095252 0.094850\n", + "\t110 13528.911716 13545.934037 0.090217 0.090058\n", + "\t115 13477.779105 13474.183557 0.085821 0.085789\n", + "\t120 13422.628881 13394.318438 0.081440 0.081967\n", + "\t125 13348.244204 13350.571807 0.078169 0.078213\n", + "\t130 13320.460508 13348.176678 0.074200 0.073127\n", + "\t135 13253.512286 13248.295587 0.071233 0.071241\n", + "\t140 13192.120721 13223.932093 0.068204 0.067701\n", + "\t145 13155.656117 13196.467541 0.064981 0.064614\n", + "\t150 13077.428673 13086.152871 0.063336 0.063554\n", + "\t155 13036.653378 13042.460884 0.060716 0.060771\n", + "\t160 13014.311099 13046.647251 0.057776 0.057615\n", + "\t165 12900.924993 12940.265617 0.056904 0.056227\n", + "\t170 12849.453995 12889.311505 0.054912 0.054381\n", + "\t175 12859.855508 12849.617688 0.052202 0.052379\n", + "\t180 12760.002356 12778.700141 0.051311 0.050977\n", + "\t185 12700.724143 12705.841566 0.050006 0.050094\n", + "\t190 12650.853146 12649.616025 0.048460 0.048563\n", + "\t195 12569.990044 12616.346040 0.047719 0.047103\n", + "\t200 12505.132653 12531.869670 0.046542 0.046301\n", + "\t205 12440.163243 12465.741589 0.045558 0.045231\n", + "\t210 12347.349436 12411.682924 0.044723 0.043975\n", + "\t215 12297.391221 12321.315541 0.043441 0.043216\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 25/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21222e+43 erg / s Luminosity absorbed = 8.22471e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13278.010763 13270.696022 0.641648 0.642908\n", + "\t5 13348.641733 13322.383942 0.549116 0.552644\n", + "\t10 13389.995159 13347.242864 0.480928 0.485565\n", + "\t15 13420.336267 13374.912459 0.429481 0.433836\n", + "\t20 13465.269674 13432.753510 0.385639 0.389339\n", + "\t25 13432.804473 13457.984438 0.352148 0.351032\n", + "\t30 13478.152260 13472.554559 0.315732 0.317566\n", + "\t35 13546.768152 13504.185333 0.281819 0.286299\n", + "\t40 13627.278155 13558.293549 0.251783 0.258565\n", + "\t45 13604.882965 13517.497337 0.232319 0.238954\n", + "\t50 13625.845890 13556.174094 0.211901 0.217968\n", + "\t55 13602.102375 13576.181423 0.197460 0.197895\n", + "\t60 13666.469517 13645.945023 0.178943 0.178924\n", + "\t65 13631.745802 13615.151776 0.166107 0.167639\n", + "\t70 13632.637553 13628.125067 0.154189 0.154651\n", + "\t75 13585.427048 13622.936479 0.143931 0.143012\n", + "\t80 13609.745816 13578.172623 0.133334 0.134668\n", + "\t85 13624.246108 13627.023042 0.122952 0.122788\n", + "\t90 13590.553890 13561.024079 0.115902 0.116892\n", + "\t95 13594.756383 13579.888510 0.107573 0.107658\n", + "\t100 13549.898466 13534.426606 0.102064 0.102287\n", + "\t105 13581.169680 13502.800064 0.094850 0.096255\n", + "\t110 13545.934037 13492.870611 0.090058 0.091280\n", + "\t115 13474.183557 13490.398325 0.085789 0.085011\n", + "\t120 13394.318438 13395.721908 0.081967 0.081828\n", + "\t125 13350.571807 13350.634171 0.078213 0.078078\n", + "\t130 13348.176678 13327.064866 0.073127 0.073579\n", + "\t135 13248.295587 13255.401860 0.071241 0.070985\n", + "\t140 13223.932093 13256.925404 0.067701 0.066957\n", + "\t145 13196.467541 13201.182229 0.064614 0.064230\n", + "\t150 13086.152871 13093.443767 0.063554 0.063075\n", + "\t155 13042.460884 13030.185698 0.060771 0.060808\n", + "\t160 13046.647251 13023.151556 0.057615 0.057750\n", + "\t165 12940.265617 12962.788653 0.056227 0.055743\n", + "\t170 12889.311505 12850.336719 0.054381 0.055013\n", + "\t175 12849.617688 12862.277714 0.052379 0.052236\n", + "\t180 12778.700141 12754.450331 0.050977 0.051508\n", + "\t185 12705.841566 12704.562044 0.050094 0.050137\n", + "\t190 12649.616025 12631.226174 0.048563 0.048881\n", + "\t195 12616.346040 12617.823980 0.047103 0.047068\n", + "\t200 12531.869670 12502.116047 0.046301 0.046602\n", + "\t205 12465.741589 12448.945824 0.045231 0.045355\n", + "\t210 12411.682924 12392.114495 0.043975 0.044175\n", + "\t215 12321.315541 12313.877904 0.043216 0.043334\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 26/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21673e+43 erg / s Luminosity absorbed = 8.18157e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13270.696022 13271.530613 0.642908 0.644373\n", + "\t5 13322.383942 13336.456993 0.552644 0.550015\n", + "\t10 13347.242864 13390.353000 0.485565 0.479866\n", + "\t15 13374.912459 13423.306105 0.433836 0.428565\n", + "\t20 13432.753510 13450.367080 0.389339 0.385605\n", + "\t25 13457.984438 13487.378370 0.351032 0.345360\n", + "\t30 13472.554559 13493.026147 0.317566 0.313875\n", + "\t35 13504.185333 13474.848725 0.286299 0.288170\n", + "\t40 13558.293549 13541.466576 0.258565 0.259858\n", + "\t45 13517.497337 13545.038773 0.238954 0.237364\n", + "\t50 13556.174094 13572.532271 0.217968 0.216331\n", + "\t55 13576.181423 13580.512176 0.197895 0.198667\n", + "\t60 13645.945023 13612.481505 0.178924 0.180448\n", + "\t65 13615.151776 13634.562335 0.167639 0.166978\n", + "\t70 13628.125067 13656.348500 0.154651 0.153620\n", + "\t75 13622.936479 13648.706367 0.143012 0.142383\n", + "\t80 13578.172623 13614.335979 0.134668 0.132803\n", + "\t85 13627.023042 13624.661577 0.122788 0.123129\n", + "\t90 13561.024079 13601.743908 0.116892 0.116093\n", + "\t95 13579.888510 13596.847242 0.107658 0.107682\n", + "\t100 13534.426606 13537.100559 0.102287 0.101815\n", + "\t105 13502.800064 13528.220122 0.096255 0.095814\n", + "\t110 13492.870611 13494.146708 0.091280 0.091091\n", + "\t115 13490.398325 13473.791902 0.085011 0.084878\n", + "\t120 13395.721908 13387.298820 0.081828 0.082027\n", + "\t125 13350.634171 13385.907140 0.078078 0.077395\n", + "\t130 13327.064866 13331.066428 0.073579 0.073484\n", + "\t135 13255.401860 13303.936110 0.070985 0.069917\n", + "\t140 13256.925404 13224.287619 0.066957 0.067565\n", + "\t145 13201.182229 13189.834245 0.064230 0.064769\n", + "\t150 13093.443767 13130.766284 0.063075 0.062414\n", + "\t155 13030.185698 13079.978377 0.060808 0.060190\n", + "\t160 13023.151556 13006.542174 0.057750 0.058257\n", + "\t165 12962.788653 12994.794135 0.055743 0.055493\n", + "\t170 12850.336719 12917.381157 0.055013 0.054132\n", + "\t175 12862.277714 12871.990795 0.052236 0.052206\n", + "\t180 12754.450331 12787.392876 0.051508 0.051257\n", + "\t185 12704.562044 12739.362606 0.050137 0.049526\n", + "\t190 12631.226174 12654.117488 0.048881 0.048597\n", + "\t195 12617.823980 12621.624550 0.047068 0.046930\n", + "\t200 12502.116047 12517.729051 0.046602 0.046454\n", + "\t205 12448.945824 12475.287394 0.045355 0.045014\n", + "\t210 12392.114495 12421.244417 0.044175 0.043767\n", + "\t215 12313.877904 12305.788275 0.043334 0.043532\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 27/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20760e+43 erg / s Luminosity absorbed = 8.26883e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13271.530613 13267.229895 0.644373 0.644613\n", + "\t5 13336.456993 13309.957848 0.550015 0.552350\n", + "\t10 13390.353000 13362.599180 0.479866 0.484647\n", + "\t15 13423.306105 13416.485413 0.428565 0.430518\n", + "\t20 13450.367080 13452.533705 0.385605 0.385570\n", + "\t25 13487.378370 13480.877666 0.345360 0.345231\n", + "\t30 13493.026147 13534.801383 0.313875 0.309576\n", + "\t35 13474.848725 13562.348057 0.288170 0.280234\n", + "\t40 13541.466576 13556.692056 0.259858 0.257486\n", + "\t45 13545.038773 13561.290843 0.237364 0.235385\n", + "\t50 13572.532271 13548.608594 0.216331 0.218351\n", + "\t55 13580.512176 13525.096450 0.198667 0.201994\n", + "\t60 13612.481505 13602.430049 0.180448 0.180981\n", + "\t65 13634.562335 13604.584566 0.166978 0.167370\n", + "\t70 13656.348500 13633.088350 0.153620 0.154084\n", + "\t75 13648.706367 13626.329192 0.142383 0.142836\n", + "\t80 13614.335979 13619.696143 0.132803 0.132119\n", + "\t85 13624.661577 13631.876027 0.123129 0.122202\n", + "\t90 13601.743908 13607.669741 0.116093 0.114933\n", + "\t95 13596.847242 13580.712969 0.107682 0.107904\n", + "\t100 13537.100559 13558.070068 0.101815 0.101611\n", + "\t105 13528.220122 13513.642542 0.095814 0.096155\n", + "\t110 13494.146708 13484.539851 0.091091 0.090864\n", + "\t115 13473.791902 13518.564728 0.084878 0.083821\n", + "\t120 13387.298820 13442.773703 0.082027 0.080492\n", + "\t125 13385.907140 13428.879039 0.077395 0.076252\n", + "\t130 13331.066428 13348.870947 0.073484 0.073431\n", + "\t135 13303.936110 13288.319864 0.069917 0.070795\n", + "\t140 13224.287619 13295.534754 0.067565 0.066347\n", + "\t145 13189.834245 13199.387702 0.064769 0.064713\n", + "\t150 13130.766284 13144.816061 0.062414 0.061923\n", + "\t155 13079.978377 13097.206394 0.060190 0.059794\n", + "\t160 13006.542174 13083.035223 0.058257 0.057139\n", + "\t165 12994.794135 13015.077160 0.055493 0.055308\n", + "\t170 12917.381157 12939.781727 0.054132 0.053766\n", + "\t175 12871.990795 12889.826041 0.052206 0.051931\n", + "\t180 12787.392876 12815.502907 0.051257 0.050555\n", + "\t185 12739.362606 12731.737958 0.049526 0.049591\n", + "\t190 12654.117488 12662.180603 0.048597 0.048226\n", + "\t195 12621.624550 12656.423731 0.046930 0.046356\n", + "\t200 12517.729051 12533.340286 0.046454 0.045948\n", + "\t205 12475.287394 12492.138421 0.045014 0.044581\n", + "\t210 12421.244417 12451.936111 0.043767 0.043184\n", + "\t215 12305.788275 12322.819248 0.043532 0.043061\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 28/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21615e+43 erg / s Luminosity absorbed = 8.17960e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13267.229895 13238.322676 0.644613 0.649373\n", + "\t5 13309.957848 13286.184894 0.552350 0.556429\n", + "\t10 13362.599180 13340.900794 0.484647 0.488148\n", + "\t15 13416.485413 13393.757553 0.430518 0.432761\n", + "\t20 13452.533705 13470.248408 0.385570 0.382713\n", + "\t25 13480.877666 13514.190373 0.345231 0.343651\n", + "\t30 13534.801383 13533.440429 0.309576 0.311547\n", + "\t35 13562.348057 13560.082221 0.280234 0.281544\n", + "\t40 13556.692056 13552.468579 0.257486 0.259401\n", + "\t45 13561.290843 13585.031702 0.235385 0.235486\n", + "\t50 13548.608594 13576.630341 0.218351 0.217249\n", + "\t55 13525.096450 13594.171150 0.201994 0.198141\n", + "\t60 13602.430049 13634.500032 0.180981 0.180635\n", + "\t65 13604.584566 13662.297529 0.167370 0.166281\n", + "\t70 13633.088350 13584.906890 0.154084 0.157331\n", + "\t75 13626.329192 13634.212626 0.142836 0.143265\n", + "\t80 13619.696143 13631.150560 0.132119 0.132716\n", + "\t85 13631.876027 13621.164051 0.122202 0.123512\n", + "\t90 13607.669741 13580.266266 0.114933 0.116573\n", + "\t95 13580.712969 13604.376545 0.107904 0.107431\n", + "\t100 13558.070068 13567.082796 0.101611 0.101743\n", + "\t105 13513.642542 13543.001457 0.096155 0.095716\n", + "\t110 13484.539851 13487.048499 0.090864 0.091156\n", + "\t115 13518.564728 13478.088798 0.083821 0.085159\n", + "\t120 13442.773703 13443.911065 0.080492 0.081045\n", + "\t125 13428.879039 13364.123108 0.076252 0.078233\n", + "\t130 13348.870947 13352.151229 0.073431 0.074123\n", + "\t135 13288.319864 13285.766577 0.070795 0.070851\n", + "\t140 13295.534754 13282.190208 0.066347 0.066687\n", + "\t145 13199.387702 13188.937557 0.064713 0.065227\n", + "\t150 13144.816061 13140.181851 0.061923 0.062637\n", + "\t155 13097.206394 13076.784967 0.059794 0.060149\n", + "\t160 13083.035223 13062.198936 0.057139 0.057810\n", + "\t165 13015.077160 12985.941742 0.055308 0.056064\n", + "\t170 12939.781727 12903.272755 0.053766 0.054406\n", + "\t175 12889.826041 12874.062323 0.051931 0.052334\n", + "\t180 12815.502907 12786.132777 0.050555 0.051414\n", + "\t185 12731.737958 12752.988933 0.049591 0.049518\n", + "\t190 12662.180603 12689.779763 0.048226 0.048065\n", + "\t195 12656.423731 12652.130967 0.046356 0.046490\n", + "\t200 12533.340286 12558.648843 0.045948 0.045720\n", + "\t205 12492.138421 12520.764854 0.044581 0.044458\n", + "\t210 12451.936111 12404.766604 0.043184 0.043961\n", + "\t215 12322.819248 12304.711932 0.043061 0.043405\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 29/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20884e+43 erg / s Luminosity absorbed = 8.25550e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 13238.322676 13226.520939 0.649373 0.651729\n", + "\t5 13286.184894 13303.405286 0.556429 0.555673\n", + "\t10 13340.900794 13318.466941 0.488148 0.494104\n", + "\t15 13393.757553 13411.400215 0.432761 0.431949\n", + "\t20 13470.248408 13488.042544 0.382713 0.381133\n", + "\t25 13514.190373 13542.705706 0.343651 0.339527\n", + "\t30 13533.440429 13568.331422 0.311547 0.306915\n", + "\t35 13560.082221 13551.572869 0.281544 0.281839\n", + "\t40 13552.468579 13592.277138 0.259401 0.255392\n", + "\t45 13585.031702 13589.751369 0.235486 0.232627\n", + "\t50 13576.630341 13632.800307 0.217249 0.212804\n", + "\t55 13594.171150 13640.303834 0.198141 0.194787\n", + "\t60 13634.500032 13677.204511 0.180635 0.177897\n", + "\t65 13662.297529 13681.215583 0.166281 0.164354\n", + "\t70 13584.906890 13597.256415 0.157331 0.155568\n", + "\t75 13634.212626 13607.327783 0.143265 0.143908\n", + "\t80 13631.150560 13613.045200 0.132716 0.132719\n", + "\t85 13621.164051 13595.524194 0.123512 0.123664\n", + "\t90 13580.266266 13572.564003 0.116573 0.115506\n", + "\t95 13604.376545 13595.132272 0.107431 0.106680\n", + "\t100 13567.082796 13546.383010 0.101743 0.101658\n", + "\t105 13543.001457 13544.145309 0.095716 0.095267\n", + "\t110 13487.048499 13506.548914 0.091156 0.089785\n", + "\t115 13478.088798 13474.167961 0.085159 0.085114\n", + "\t120 13443.911065 13452.053813 0.081045 0.080430\n", + "\t125 13364.123108 13399.637044 0.078233 0.077133\n", + "\t130 13352.151229 13372.115285 0.074123 0.073564\n", + "\t135 13285.766577 13329.206300 0.070851 0.070258\n", + "\t140 13282.190208 13242.263561 0.066687 0.067495\n", + "\t145 13188.937557 13211.178475 0.065227 0.064506\n", + "\t150 13140.181851 13203.869308 0.062637 0.061557\n", + "\t155 13076.784967 13115.889609 0.060149 0.059769\n", + "\t160 13062.198936 13039.682821 0.057810 0.057924\n", + "\t165 12985.941742 13009.593050 0.056064 0.055611\n", + "\t170 12903.272755 12944.363874 0.054406 0.053647\n", + "\t175 12874.062323 12919.678296 0.052334 0.051682\n", + "\t180 12786.132777 12835.572161 0.051414 0.050506\n", + "\t185 12752.988933 12766.745125 0.049518 0.049311\n", + "\t190 12689.779763 12689.244008 0.048065 0.048149\n", + "\t195 12652.130967 12608.255163 0.046490 0.046950\n", + "\t200 12558.648843 12520.624767 0.045720 0.046167\n", + "\t205 12520.764854 12493.746296 0.044458 0.044625\n", + "\t210 12404.766604 12405.512267 0.043961 0.043934\n", + "\t215 12304.711932 12314.490441 0.043405 0.043273\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 30/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20889e+43 erg / s Luminosity absorbed = 8.25019e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Simulation finished in 30 iterations and took 356.68 s (\u001b[1mbase.py\u001b[0m:306)\n" + ] + } + ], + "source": [ + "sim = run_tardis('blondin_model_compare.yml')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "spec_artis_toy = pd.read_csv('spec_artis_toy.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/matplotlib/style/core.py:167: UserWarning: In /Users/wkerzend/.matplotlib/stylelib/talk_default.mplstyle: \n", + "The text.latex.unicode rcparam was deprecated in Matplotlib 2.2 and will be removed in 3.1.\n", + " styles = read_style_directory(stylelib_path)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "Populating the interactive namespace from numpy and matplotlib\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", + " AstropyDeprecationWarning)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n" + ] + }, + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "window.mpl = {};\n", + "\n", + "\n", + "mpl.get_websocket_type = function() {\n", + " if (typeof(WebSocket) !== 'undefined') {\n", + " return WebSocket;\n", + " } else if (typeof(MozWebSocket) !== 'undefined') {\n", + " return MozWebSocket;\n", + " } else {\n", + " alert('Your browser does not have WebSocket support.' +\n", + " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", + " 'Firefox 4 and 5 are also supported but you ' +\n", + " 'have to enable WebSockets in about:config.');\n", + " };\n", + "}\n", + "\n", + "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", + " this.id = figure_id;\n", + "\n", + " this.ws = websocket;\n", + "\n", + " this.supports_binary = (this.ws.binaryType != undefined);\n", + "\n", + " if (!this.supports_binary) {\n", + " var warnings = document.getElementById(\"mpl-warnings\");\n", + " if (warnings) {\n", + " warnings.style.display = 'block';\n", + " warnings.textContent = (\n", + " \"This browser does not support binary websocket messages. \" +\n", + " \"Performance may be slow.\");\n", + " }\n", + " }\n", + "\n", + " this.imageObj = new Image();\n", + "\n", + " this.context = undefined;\n", + " this.message = undefined;\n", + " this.canvas = undefined;\n", + " this.rubberband_canvas = undefined;\n", + " this.rubberband_context = undefined;\n", + " this.format_dropdown = undefined;\n", + "\n", + " this.image_mode = 'full';\n", + "\n", + " this.root = $('
');\n", + " this._root_extra_style(this.root)\n", + " this.root.attr('style', 'display: inline-block');\n", + "\n", + " $(parent_element).append(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", + " fig.send_message(\"send_image_mode\", {});\n", + " if (mpl.ratio != 1) {\n", + " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", + " }\n", + " fig.send_message(\"refresh\", {});\n", + " }\n", + "\n", + " this.imageObj.onload = function() {\n", + " if (fig.image_mode == 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function() {\n", + " fig.ws.close();\n", + " }\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "}\n", + "\n", + "mpl.figure.prototype._init_header = function() {\n", + " var titlebar = $(\n", + " '
');\n", + " var titletext = $(\n", + " '
');\n", + " titlebar.append(titletext)\n", + " this.root.append(titlebar);\n", + " this.header = titletext[0];\n", + "}\n", + "\n", + "\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._init_canvas = function() {\n", + " var fig = this;\n", + "\n", + " var canvas_div = $('
');\n", + "\n", + " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + "\n", + " function canvas_keyboard_event(event) {\n", + " return fig.key_event(event, event['data']);\n", + " }\n", + "\n", + " canvas_div.keydown('key_press', canvas_keyboard_event);\n", + " canvas_div.keyup('key_release', canvas_keyboard_event);\n", + " this.canvas_div = canvas_div\n", + " this._canvas_extra_style(canvas_div)\n", + " this.root.append(canvas_div);\n", + "\n", + " var canvas = $('');\n", + " canvas.addClass('mpl-canvas');\n", + " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + "\n", + " this.canvas = canvas[0];\n", + " this.context = canvas[0].getContext(\"2d\");\n", + "\n", + " var backingStore = this.context.backingStorePixelRatio ||\n", + "\tthis.context.webkitBackingStorePixelRatio ||\n", + "\tthis.context.mozBackingStorePixelRatio ||\n", + "\tthis.context.msBackingStorePixelRatio ||\n", + "\tthis.context.oBackingStorePixelRatio ||\n", + "\tthis.context.backingStorePixelRatio || 1;\n", + "\n", + " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband = $('');\n", + " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + "\n", + " var pass_mouse_events = true;\n", + "\n", + " canvas_div.resizable({\n", + " start: function(event, ui) {\n", + " pass_mouse_events = false;\n", + " },\n", + " resize: function(event, ui) {\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " stop: function(event, ui) {\n", + " pass_mouse_events = true;\n", + " fig.request_resize(ui.size.width, ui.size.height);\n", + " },\n", + " });\n", + "\n", + " function mouse_event_fn(event) {\n", + " if (pass_mouse_events)\n", + " return fig.mouse_event(event, event['data']);\n", + " }\n", + "\n", + " rubberband.mousedown('button_press', mouse_event_fn);\n", + " rubberband.mouseup('button_release', mouse_event_fn);\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + "\n", + " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", + " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", + "\n", + " canvas_div.on(\"wheel\", function (event) {\n", + " event = event.originalEvent;\n", + " event['data'] = 'scroll'\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " mouse_event_fn(event);\n", + " });\n", + "\n", + " canvas_div.append(canvas);\n", + " canvas_div.append(rubberband);\n", + "\n", + " this.rubberband = rubberband;\n", + " this.rubberband_canvas = rubberband[0];\n", + " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", + " this.rubberband_context.strokeStyle = \"#000000\";\n", + "\n", + " this._resize_canvas = function(width, height) {\n", + " // Keep the size of the canvas, canvas container, and rubber band\n", + " // canvas in synch.\n", + " canvas_div.css('width', width)\n", + " canvas_div.css('height', height)\n", + "\n", + " canvas.attr('width', width * mpl.ratio);\n", + " canvas.attr('height', height * mpl.ratio);\n", + " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", + "\n", + " rubberband.attr('width', width);\n", + " rubberband.attr('height', height);\n", + " }\n", + "\n", + " // Set the figure to an initial 600x600px, this will subsequently be updated\n", + " // upon first draw.\n", + " this._resize_canvas(600, 600);\n", + "\n", + " // Disable right mouse context menu.\n", + " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", + " return false;\n", + " });\n", + "\n", + " function set_focus () {\n", + " canvas.focus();\n", + " canvas_div.focus();\n", + " }\n", + "\n", + " window.setTimeout(set_focus, 100);\n", + "}\n", + "\n", + "mpl.figure.prototype._init_toolbar = function() {\n", + " var fig = this;\n", + "\n", + " var nav_element = $('
')\n", + " nav_element.attr('style', 'width: 100%');\n", + " this.root.append(nav_element);\n", + "\n", + " // Define a callback function for later on.\n", + " function toolbar_event(event) {\n", + " return fig.toolbar_button_onclick(event['data']);\n", + " }\n", + " function toolbar_mouse_event(event) {\n", + " return fig.toolbar_button_onmouseover(event['data']);\n", + " }\n", + "\n", + " for(var toolbar_ind in mpl.toolbar_items) {\n", + " var name = mpl.toolbar_items[toolbar_ind][0];\n", + " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", + " var image = mpl.toolbar_items[toolbar_ind][2];\n", + " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", + "\n", + " if (!name) {\n", + " // put a spacer in here.\n", + " continue;\n", + " }\n", + " var button = $('');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('
');\n", + " var button = $('');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "(0, 1000000000000000.0)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%pylab notebook\n", + "\n", + "plot(sim.runner.spectrum_integrated.frequency, sim.runner.spectrum_integrated.luminosity_density_nu, label='TARDIS')\n", + "#plot(sim.runner.spectrum_integrated.wavelength, sim.runner.spectrum_integrated.luminosity_density_lambda)\n", + "plot(spec_artis_toy['nu'], spec_artis_toy.iloc[:,53] * np.pi * 4 * u.Mpc.to(u.cm)**2, label='ARTIS') \n", + "legend()\n", + "xlim(0, 1e15)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From ff39c5e48646ec2a14ed67840ebcee2a3f520e9b Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 1 Aug 2019 10:51:42 +0800 Subject: [PATCH 063/467] added download link --- .../toy_models/reading blondin toymodel.ipynb | 88 +++++++++++-- tardis/io/parsers/blondin_toymodel.py | 117 ++++++++++++++++++ 2 files changed, 192 insertions(+), 13 deletions(-) create mode 100644 tardis/io/parsers/blondin_toymodel.py diff --git a/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb b/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb index 3769031248d..0f92a754bc1 100644 --- a/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb +++ b/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb @@ -9,18 +9,9 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 26, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/tqdm/autonotebook/__init__.py:14: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)\n", - " \" (e.g. in jupyter console)\", TqdmExperimentalWarning)\n" - ] - } - ], + "outputs": [], "source": [ "import pandas as pd\n", "import re\n", @@ -28,15 +19,40 @@ "import numpy as np\n", "import yaml\n", "from tardis import run_tardis\n", - "from astropy import units as u" + "from astropy import units as u\n", + "import base64\n", + "from IPython.display import HTML\n", + "\n" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ + "\n", + "def create_df_download_link( df, title=\"Download CSV file\", filename=\"data.csv\", type='zip'):\n", + " if type != 'zip':\n", + " csv = df.to_csv()\n", + " b64 = base64.b64encode(csv.encode())\n", + " payload = b64.decode()\n", + " else:\n", + " payload = df.decode()\n", + " html = '{title}'\n", + " html = html.format(payload=payload,title=title,filename=filename)\n", + " return HTML(html)\n", + "\n", + "def create_download_link(download_data, title=\"Download CSV file\", filename=\"data.csv\", type='zip'):\n", + " if type != 'zip':\n", + " csv = df.to_csv()\n", + " b64 = base64.b64encode(csv.encode())\n", + " payload = b64.decode()\n", + " else:\n", + " payload = df.decode()\n", + " html = '{title}'\n", + " html = html.format(payload=payload,title=title,filename=filename)\n", + " return HTML(html)\n", "\n", "pattern_remove_bracket = re.compile('\\[.+\\]')\n", "t0_pattern = re.compile('tend = (.+)\\n')\n", @@ -117,6 +133,26 @@ "csvy_file = '---\\n{0}\\n---\\n{1}'.format(yaml.dump(blondin_dict, default_flow_style=False), blondin_csv.to_csv(index=False))" ] }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'5e-05 km / s'" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "str(u.Quantity(5 * u.cm/u.s, u.km / u.s))" + ] + }, { "cell_type": "code", "execution_count": 6, @@ -2603,6 +2639,32 @@ "xlim(0, 1e15)\n" ] }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Download Spectrum" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "spectrum = pd.DataFrame(data = sim.runner.spectrum_integrated.frequency.value, columns=['frequency'])\n", + "spectrum['luminosity'] = sim.runner.spectrum_integrated.luminosity_density_nu.value\n", + "\n", + "create_df_download_link(spectrum, title='Download Spectrum', filename='spectrum.csv', type='csv')" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/tardis/io/parsers/blondin_toymodel.py b/tardis/io/parsers/blondin_toymodel.py new file mode 100644 index 00000000000..fe8280d65ed --- /dev/null +++ b/tardis/io/parsers/blondin_toymodel.py @@ -0,0 +1,117 @@ +import re + +import yaml + +import numpy as np +import pandas as pd + +from astropy import units as u + +from tardis.util.base import parse_quantity + + + +PATTERN_REMOVE_BRACKET = re.compile('\[.+\]') +T0_PATTERN = re.compile('tend = (.+)\n') + +def read_blondin_toymodel(fname): + """ + Reading the Blondin toy-model format and returns a dictionary and a + dataframe + + Parameters + ---------- + fname: str + path or filename to blondin toymodel + + Returns + ------- + + blondin_dict: dict + dictionary containing most of the meta data of the model + + blondin_csv: pandas.DataFrame + DataFrame containing the csv part of the toymodel + + """ + with open(fname, 'r') as fh: + for line in fh: + if line.startswith("#idx"): + break + else: + raise ValueError( + 'File {0} does not conform to Toy Model format as it does ' + 'not contain #idx') + columns = [PATTERN_REMOVE_BRACKET.sub('', item) for item in + line[1:].split()] + + raw_blondin_csv = pd.read_csv(fname, delim_whitespace=True, comment='#', + header=None, names=columns) + raw_blondin_csv.set_index('idx', inplace=True) + + blondin_csv = raw_blondin_csv.loc[:, + ['vel', 'dens', 'temp', 'X_56Ni0', 'X_Ti', 'X_Ca', 'X_S', + 'X_Si', 'X_O', 'X_C']] + rename_col_dict = {'vel': 'velocity', 'dens': 'density', + 'temp': 't_electron'} + rename_col_dict.update({item: item[2:] for item in blondin_csv.columns[3:]}) + rename_col_dict['X_56Ni0'] = 'Ni56' + blondin_csv.rename(columns=rename_col_dict, inplace=True) + blondin_csv.iloc[:, 3:] = blondin_csv.iloc[:, 3:].divide( + blondin_csv.iloc[:, 3:].sum(axis=1), axis=0) + + # changing velocities to outer boundary + new_velocities = 0.5 * (blondin_csv.velocity.iloc[ + :-1].values + blondin_csv.velocity.iloc[1:].values) + new_velocities = np.hstack( + (new_velocities, [2 * new_velocities[-1] - new_velocities[-2]])) + blondin_csv['velocity'] = new_velocities + + with open(fname, 'r') as fh: + t0_string = T0_PATTERN.findall(fh.read())[0] + + t0 = parse_quantity(t0_string.replace('DAYS', 'day')) + blondin_dict = {} + blondin_dict['model_density_time_0'] = str(t0) + blondin_dict['description'] = 'Converted {0} to csvy format'.format(fname) + blondin_dict['tardis_model_config_version'] = 'v1.0' + blondin_dict_fields = [dict(name='velocity', unit='km/s', + desc='velocities of shell outer bounderies.')] + blondin_dict_fields.append( + dict(name='density', unit='g/cm^3', desc='mean density of shell.')) + blondin_dict_fields.append( + dict(name='t_electron', unit='K', desc='electron temperature.')) + + for abund in blondin_csv.columns[3:]: + blondin_dict_fields.append( + dict(name=abund, desc='Fraction {0} abundance'.format(abund))) + blondin_dict['datatype'] = {'fields': blondin_dict_fields} + + return blondin_dict, blondin_csv + + +def convert_blondin_toymodel(in_fname, out_fname, v_inner, v_outer): + """ + + Parameters + ---------- + in_fname + out_fname + v_inner + v_outer + + Returns + ------- + + """ + blondin_dict, blondin_csv = read_blondin_toymodel(in_fname) + blondin_dict['v_inner_boundary'] = str(u.Quantity(v_inner, u.km / u.s)) + blondin_dict['v_outer_boundary'] = str(u.Quantity(v_outer, u.km / u.s)) + + csvy_file = '---\n{0}\n---\n{1}'.format( + yaml.dump(blondin_dict, default_flow_style=False), + blondin_csv.to_csv(index=False)) + + with open(out_fname, 'w') as fh: + fh.write(csvy_file) + From c63440bfa536cf44aa2bd5e50047d6192dbce9a6 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 4 Aug 2019 20:09:17 +0200 Subject: [PATCH 064/467] add plasma comparison --- docs/conf.py | 2 + docs/research/code_comparison/index.rst | 1 + .../plasma_compare/plasma_compare.ipynb | 475 ++++++++++++++++++ .../plasma_compare/tardis_example.yml | 81 +++ tardis/io/parsers/blondin_toymodel.py | 2 +- 5 files changed, 560 insertions(+), 1 deletion(-) create mode 100644 docs/research/code_comparison/plasma_compare/plasma_compare.ipynb create mode 100644 docs/research/code_comparison/plasma_compare/tardis_example.yml diff --git a/docs/conf.py b/docs/conf.py index a601b0006b8..56506d78e17 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -152,6 +152,8 @@ # Output file base name for HTML help builder. htmlhelp_basename = project + 'doc' +#html_extra_path = ['research/code_comparison/plasma_compare/tardis_example.yml'] + # -- Options for LaTeX output -------------------------------------------------- diff --git a/docs/research/code_comparison/index.rst b/docs/research/code_comparison/index.rst index da2ec52f850..2b26737bf3a 100644 --- a/docs/research/code_comparison/index.rst +++ b/docs/research/code_comparison/index.rst @@ -9,4 +9,5 @@ The first meeting is summarized .. toctree:: toy_models/reading blondin toymodel + plasma_compare/plasma_compare diff --git a/docs/research/code_comparison/plasma_compare/plasma_compare.ipynb b/docs/research/code_comparison/plasma_compare/plasma_compare.ipynb new file mode 100644 index 00000000000..63c2b103361 --- /dev/null +++ b/docs/research/code_comparison/plasma_compare/plasma_compare.ipynb @@ -0,0 +1,475 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Plasma comparison ###" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "from tardis.simulation import Simulation\n", + "from tardis.io.config_reader import Configuration\n", + "from IPython.display import FileLinks" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**The example tardis_example can be downloaded here**\n", + "\n", + "[tardis_example.yml](tardis_example.yml)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", + " AstropyDeprecationWarning)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mtardis.plasma.standard_plasmas\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Reading Atomic Data from kurucz_cd23_chianti_H_He.h5 (\u001b[1mstandard_plasmas.py\u001b[0m:74)\n", + "[\u001b[1mtardis.io.atom_data.util\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Atom Data kurucz_cd23_chianti_H_He.h5 not found in local path. Exists in TARDIS Data repo /Users/wkerzend/projects/tardis/tardis-data/kurucz_cd23_chianti_H_He.h5 (\u001b[1mutil.py\u001b[0m:29)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/IPython/core/interactiveshell.py:3185: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " if (yield from self.run_code(code, result)):\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mtardis.io.atom_data.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Read Atom Data with UUID=6f7b09e887a311e7a06b246e96350010 and MD5=864f1753714343c41f99cb065710cace. (\u001b[1mbase.py\u001b[0m:184)\n", + "[\u001b[1mtardis.io.atom_data.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Non provided atomic data: synpp_refs, photoionization_data (\u001b[1mbase.py\u001b[0m:187)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", + " AstropyDeprecationWarning)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/python/tardis/tardis/plasma/properties/ion_population.py:63: FutureWarning: \n", + "Passing list-likes to .loc or [] with any missing label will raise\n", + "KeyError in the future, you can use .reindex() as an alternative.\n", + "\n", + "See the documentation here:\n", + "https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike\n", + " partition_function.index].dropna())\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/equivalencies.py:90: RuntimeWarning: divide by zero encountered in double_scalars\n", + " (si.m, si.Hz, lambda x: _si.c.value / x),\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", + " AstropyDeprecationWarning)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n" + ] + } + ], + "source": [ + "config = Configuration.from_yaml('tardis_example.yml')\n", + "sim = Simulation.from_config(config)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Accessing the plasma states ####\n", + "In this example, we are accessing Si and also the unionized number density (0)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0
ion_number
03.406539e-13
19.307653e-04
22.293418e+04
32.468681e+08
48.681218e+08
50.000000e+00
60.000000e+00
70.000000e+00
80.000000e+00
90.000000e+00
100.000000e+00
110.000000e+00
120.000000e+00
130.000000e+00
140.000000e+00
\n", + "
" + ], + "text/plain": [ + " 0\n", + "ion_number \n", + "0 3.406539e-13\n", + "1 9.307653e-04\n", + "2 2.293418e+04\n", + "3 2.468681e+08\n", + "4 8.681218e+08\n", + "5 0.000000e+00\n", + "6 0.000000e+00\n", + "7 0.000000e+00\n", + "8 0.000000e+00\n", + "9 0.000000e+00\n", + "10 0.000000e+00\n", + "11 0.000000e+00\n", + "12 0.000000e+00\n", + "13 0.000000e+00\n", + "14 0.000000e+00" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# All Si ionization states\n", + "sim.plasma.ion_number_density.loc[14]" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0
ion_number
03.055157e-22
18.347575e-13
22.056853e-05
32.214038e-01
47.785756e-01
50.000000e+00
60.000000e+00
70.000000e+00
80.000000e+00
90.000000e+00
100.000000e+00
110.000000e+00
120.000000e+00
130.000000e+00
140.000000e+00
\n", + "
" + ], + "text/plain": [ + " 0\n", + "ion_number \n", + "0 3.055157e-22\n", + "1 8.347575e-13\n", + "2 2.056853e-05\n", + "3 2.214038e-01\n", + "4 7.785756e-01\n", + "5 0.000000e+00\n", + "6 0.000000e+00\n", + "7 0.000000e+00\n", + "8 0.000000e+00\n", + "9 0.000000e+00\n", + "10 0.000000e+00\n", + "11 0.000000e+00\n", + "12 0.000000e+00\n", + "13 0.000000e+00\n", + "14 0.000000e+00" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Normalizing by si number density\n", + "sim.plasma.ion_number_density.loc[14] / sim.plasma.number_density.loc[14]" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 0.000931\n", + "Name: (14, 1), dtype: float64" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Accessing the first ionization state\n", + "\n", + "sim.plasma.ion_number_density.loc[14, 1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Updating the plasma state ####\n", + "\n", + "It is possible to update the plasma state with different temperatures or dilution factors (as well as different densities.). We are updating the radiative temperatures and plotting the evolution of the ionization state" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/python/tardis/tardis/plasma/properties/ion_population.py:63: FutureWarning: \n", + "Passing list-likes to .loc or [] with any missing label will raise\n", + "KeyError in the future, you can use .reindex() as an alternative.\n", + "\n", + "See the documentation here:\n", + "https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike\n", + " partition_function.index].dropna())\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n" + ] + } + ], + "source": [ + "si_ionization_state = None\n", + "for cur_t_rad in range(1000, 20000, 100):\n", + " sim.plasma.update(t_rad=[cur_t_rad])\n", + " if si_ionization_state is None:\n", + " si_ionization_state = sim.plasma.ion_number_density.loc[14].copy()\n", + " si_ionization_state.columns = [cur_t_rad]\n", + " else:\n", + " si_ionization_state[cur_t_rad] = sim.plasma.ion_number_density.loc[14].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + }, + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Number density [1/cm$^3$]')" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmoAAAJXCAYAAAAjNngMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xuc3GV99//XNaed0543yc7u5kQgJIFgOCQKqIBowUOlglKR3lbFaj30Z28rVn+9q9S7Vq3aaiu2t63+6qHi4a4orVSBCgUEDCEICknklMMmG5LseXd2d2Z3rt8f35nJJmw2M7vfme98J+/n47GP2Zmdnfm4mM07n+t7fS5jrUVEREREak/A6wJEREREZG4KaiIiIiI1SkFNREREpEYpqImIiIjUKAU1ERERkRqloCYiIiJSo+oqqBljvmaMOWSM+XUJz11pjPkvY8zjxph7jDE91ahRREREpFR1FdSAfwGuLPG5nwO+Ya09B/gE8KlKFSUiIiKyEHUV1Ky19wIDsx8zxqwxxvzEGPOIMeY+Y8y6/Jc2AP+V//xu4KoqlioiIiJyUnUV1E7gK8AfWWvPBz4EfDn/+GPANfnP3wA0GmPaPahPREREZE4hrwuoJGNMErgI+L4xpvBwQ/72Q8CXjDFvA+4F9gPT1a5RRERE5ETqOqjhdAyHrLWbjv+CtfYAcDUUA9011trhKtcnIiIickJ1vfRprR0BnjPGvAnAOF6U/7zDGFP43/9R4GselSkiIiIyp7oKasaYW4AHgTONMb3GmBuA64EbjDGPAU9wdNPApcAuY8xvgGXAJz0oWUREROSEjLXW6xpEREREZA511VETERERqSd1s5mgo6PDrlq1yusyRERERE7qkUceOWKtXXKy59VNUFu1ahXbtm3zugwRERGRkzLG7CnleVr6FBEREalRCmoiIiIiNUpBTURERKRG1c01aiIiIlI7stksvb29TE5Oel2Kp6LRKD09PYTD4QV9v4KaiIiIuK63t5fGxkZWrVrFrPO2TynWWvr7++nt7WX16tULeg0tfYqIiIjrJicnaW9vP2VDGoAxhvb29kV1FRXUREREpCJO5ZBWsNifgYKaiIiISI1SUBMRERGpUQpqIiIiUhUXXXSR1yWU5KabbuJzn/uc12UACmoiIiJSJQ888IDXJVSctZZcLufa6ymoiYiISFUkk0nACTM33ngjZ599Nhs3buS73/0uAPfccw+XXnopb3zjG1m3bh3XX3891toTvt6qVav4+Mc/znnnncfGjRvZuXMn8MKO2Nlnn83u3bvZvXs369at453vfCdnn302119/PXfddRcXX3wxZ5xxBlu3bi1+z2OPPcYrXvEKzjjjDP7pn/6p+PhnP/tZNm/ezDnnnMPHP/5xAHbv3s369et573vfy3nnnce+fftc+5kpqImIiEhV/eAHP+CXv/wljz32GHfddRc33ngjfX19ADz66KN84Qtf4Mknn+TZZ5/l5z//+byv1dHRwfbt23nPe95T0nLl008/zQc+8AEef/xxdu7cybe//W3uv/9+Pve5z/FXf/VXxec9/vjj/PjHP+bBBx/kE5/4BAcOHOCOO+7gqaeeYuvWrfzyl7/kkUce4d577wVg165dvPWtb+XRRx9l5cqVi/jpHEtBTURERKrq/vvv57rrriMYDLJs2TIuueQSHn74YQC2bNlCT08PgUCATZs2sXv37nlf6+qrrwbg/PPPP+lzAVavXs3GjRsJBAKcddZZXH755Rhj2Lhx4zHff9VVVxGLxejo6OCyyy5j69at3HHHHdxxxx2ce+65nHfeeezcuZOnnnoKgJUrV/KSl7xkQT+P+ehkAhEREamq+ZYzGxoaip8Hg0Gmp6fnfa3C82c/NxQKHXOd2OyBs7NfPxAIFO8HAoFj3uv4+WfGGKy1fPSjH+Xd7373MV/bvXs3iURi3joXSh01ERERqaqXv/zlfPe732VmZobDhw9z7733smXLFtdef9WqVWzfvh2A7du389xzz5X9Gj/60Y+YnJykv7+fe+65h82bN3PFFVfwta99jbGxMQD279/PoUOHXKt7LuqoiYiISFW94Q1v4MEHH+RFL3oRxhj++q//ms7OzuJmgMW65ppr+MY3vsGmTZvYvHkza9euLfs1tmzZwmtf+1r27t3Ln//5n9PV1UVXVxc7duzgwgsvBJzNEd/61rcIBoOu1D0XM1/70U8uuOACu23bNq/LEBEREWDHjh2sX7/e6zJqwlw/C2PMI9baC072vVr6FBEREalRWvoUERGRmvaGN7zhBdeZfeYzn+GKK67wqKLqUVATERGRmnbrrbd6XYJntPQpIiIiUqPqpqP2m+dHufzz9xzz2PEzUACOf2SOp2A4fnZKaTW8YObKcV8PBgyxSJB4JEhbPMKapUnOWJpk04oWljZGS3sTP5sYhJE+mBxyPp/I304OQWYcZjL5j2z+I3P0NpeF4ze+GEPxp1z82c+6H4o6H+E4hKMQjjmfx1oh3u58tKyElhUQilTrpyAustYyMT1Bejrt3Gad29mPZWeyZHNZpnPTzod1bguPzeRmsNji6xVfm7k/NxjCgTCRYIRIMHL080D+fjBMPBSnKdJEU0MTzZFmmhqaCAfC1fvBiEjdqJugFg0HWZdqOvrAHJtZ7XEPzrXh9fjHjv+eE35fCc+ZzuWYyMwwMJ5h18FRfvDofgAiwQDXbVnO+y47naVNdRDYrIXDu6B3K+zbCs//GgaecwLZXEwAwgkIhiEYyX8UPg85t4EwBIKzfrD22M8L7zv7azOHITsB2UnIpmE6fzvX+zcvh+7zYfmLYeWF0HlO6QldXJfOpukd66V31Pk4MnGEgckBBqcGGZzMf0wNMp4dX9T7hEyIYCBIwMy9uDD7H22Ff4jlbK4Y8soRD8Vpi7axLLGMzkQnXYkuVjevZnXzak5rPo14OL7w/yEiUrfqJqitaItz81vO87qMsoxOZnnq0Bjf39bLv/5iL9/dto//+cq1vPuSNV6XtjAjB+CxW+DRb8HAs85jsVZIbYKzr4G21dDU7TwWa4VYC0RboKEJAlVahc/lnMCYHoDxQzC4x6n1yG+cUPnED5znta6CjW+Cc34XOs6oTm2noHQ2zRP9T7BzYCc7B3aye3g3vWO9DEwOHPO8SCBCa7SVtmgbLQ0tLG9cTmu0lWQ4STwcJxaKEQ/F5/w8HAgTCoSKt8UPE5qz616qnM2RmcmQyWXIzGTIzmSLn09MTzCSGWF4arh4Ozw1TP9kP8+PP88vD/2Sn4z/hBk7A0DABDit+TQ2tG/gvKXncXH3xXQmOhf1sxWRhfnJT37CBz7wAWZmZnjnO9/JRz7yEU/r0Ry1GrGnf5y//PEO7nzyef7+unP57Rd1eV1S6TLjcNdN8PA/g83ByovhnGud2/bT/dWZGu6FZ/8bfvV9eO6/nf89G6+FV34cmnu8rs73ZnIzbD+0nfv338+2g9t4ov+JYljpiHWwpnkNPY09xY/lyeV0J7tpbmheVKiqRdmZLPtG9/HcyHPsGtjFE/1P8Osjvy6G1NXNq3nF8lfw+jWv57SW0zyuVqR8fpyjNjMzw9q1a7nzzjvp6elh8+bN3HLLLWzYsGFRr7uYOWoKajUkM53jun96iJ19I/zo/Rdz+tJGr0s6uT0PwA/fA4O7YfM74SXvhXafdgSPN3oQtn4FHviSszx68Qfg5Tc6y7FSMmstjx56lH9/9t/52d6fMTA5QMiEOLvjbDZ3bmbT0k2sb1vPkvgSr0v1nLWWZ4ae4YEDD3D//vvZenArM3aGDe0bePOZb+Z1a16na93EN/wY1B588EFuuukmfvrTnwLwqU99CoCPfvSji3rdxQQ1/Y1TQyKhADe/5Txe+3f38Yff2s6P3ncxiYYa/k+0/Ztw2x85F+O/7cew6qVeV+Suxk64/GNw/tvgzo/Df38aDu+Ea/7ZuYZO5jU1M8Xtz97OLTtvYcfADmKhGJf0XMKrVr6Kl3a/VNdkzcEYw+mtp3N66+m89ay3cmTiCP/53H9y69O38rEHPsY/PPYPvOPsd3D1GVcTCWoDjNSvv/j3J3jywIirr7mhq4mP//ZZ8z5n//79LF++vHi/p6eHX/ziF67WUS6N56gxnc1R/u66c3n28Bif+PcnvS7nxPY8CP/xP+G0S+A9D9RfSJutZQW86f+D3/pLePKH8L3fh+kpr6uqWdZafvLcT3j9ra/nYw98jGwuy8cu/Bj3XHsPn73ks/zWqt9SSCtRR6yD/7Hhf/Bvv/1v3Hz5zSyNL+WTv/gk19x2DdsO+nsFQaQWzbXK6PVlFzXcrjl1XXx6B9e/eCXf3baP//c162mO11j3ZmgffPf38gHmX6Ah6XVF1XHRHznjPm7/EHznerjuO1oGPc6ugV385UN/yS8P/5K1rWv5xwv/kYu6LvL8F53fGWN4ec/LeVn3y7h///188hef5O0/fTvXnHENf3LBn9AY8cFlEiJlOFnnq1J6enrYt29f8X5vby9dXd5eM66OWo269oLlZKZz/PhXfV6XcqxMGr7zFme22XXfcXZvnkq2/AG89vPw9J3w4N97XU3NsNbyvV3f4y0/fgt7R/dy04U38b3XfY+Luy9WSHORMYaX9byMH7z+B7z9rLfzw6d/yFt+/BZ2D+/2ujSRurB582aeeuopnnvuOTKZDN/5znd4/etf72lNCmo16uzuJs5YmuQH23u9LuVYD94MBx93rtNastbrarxxwQ2w/rfh7k/Bkae8rsZz49lxPnzvh/nfD/1vNndu5tarbuWatdcQDAS9Lq1uxcNxPnjBB/nqFV9leGqYt9z+Fh448IDXZYn4XigU4ktf+hJXXHEF69ev59prr+Wss7zp7hUoqNUoYwxvOK+bbXsG2dO/uKGersmMw0NfhjOugLX1fxDuCRkDr/m8c9LBbX/kzGY7RY1kRviDO/6AO/fcyQfO+wBffuWXaYu2eV3WKeP8Zedzy+tuoTPRyXvvei+3PXOb1yWJ+N5rXvMafvOb3/DMM8/wZ3/2Z16Xo6BWy35nUzfGwA+27/e6FMf2b8DEALzsg15X4r3GZXDlp2Hvg878uFPQSGaEd9/xbnYM7OBvL/1b3rnxnSec8C+V053s5luv/habOzfz5z//c+7ac5fXJYmIi/RbtYZ1tcS4aE07tz66f86dKFU1nYEH/h5WXAQrXuJtLbXiRW+G01/pDPtND5z06fVkJDPCu+54FzsHd/K3l/4tl624zOuSTmnxcJwvXvZFNnZs5MZ7b+SB/VoGFakXCmo17upze9g7kOaRPYPeFvKr78HIfnjZn3hbRy0xxhnZkR13uo2niJzN8ZF7P8KuwV184dIvcOnyS70uSXDC2pdf+WXWNK/hj+/5Y3595NdelyQiLlBQq3FXnt1JLBwsHuDuidwM3P8F56Dy0y/3ro5atHQ9rHoZPPxV5+d0Cvjar7/Gffvv4083/ymXLL/E63JklqZIE//4qn+ktaGVD/33hxjNjHpdkogskoJajUs0hLhoTTsPP+fh0tozd0P/U/DSP/bXuZ3V8uJ3w/Be2PWfXldScdsObuNLj36JK1ddye+e+btelyNz6Ih18JmXf4aD4we56YGbvL9sQkQWRUHNB87qauLZI+NMZj3q2Dx7NwQb4MzXevP+tW7tq6GpB7b+H68rqaj+iX4+fO+H6Wns4eMXflzz0WrYpqWbeP+57+eOPXfwb0/9m9fliMgiKKj5wIauJmZylt8879Eyxu77oGczhKPevH+tC4Zg8w3w3L1waKfX1VTM3zzyNwxNDfH5Sz5PMnKKnEbhY+84+x28JPUSPr310zw79KzX5Yj4wjve8Q6WLl3K2Wef7XUpRQpqPrAh1Qzg+gG1JZkYgr7HYfXLqv/efnLe7ztdx61f8bqSinii/wlue+Y2fm/D73Fm25lelyMlCJgAn3rZp4gEI3x666e1BCpSgre97W385Cc/8bqMYyio+UBPa4xkQ4gn+zwIansfBGx9H7ruhkQ7bHwjPPYdyE54XY2rrLX89da/pi3axrs2vsvrcqQMHbEO3rfpfTzY9yB377vb63JEat7LX/5y2tpqa2i3TpT2gUDAsD7VyA4vgtru+51OUfcF1X9vvznravjlv8Kenzvz1erEnXvuZPuh7Xzswo9pydOHrj3zWr6/6/t89uHPcnH3xTQEG7wuSeTk/vMjcPBX7r5m50Z49afdfc0qUEfNJzakmtjRN0ouV+Xli933wfItuj6tFKsuhlAUnqqfyfBTM1P8zSN/w9rWtVx9+tVelyMLEA6E+fCWD9M71ss3n/ym1+WISJnUUfOJDV1NfP3BPewbTLOyPVGdNy1cn3bpR6rzfn4XjjlLxE/XT1C79alb2T+2n6+86is6ZN3HLuq6iMuWX8ZXHv8KV625iiXxJV6XJDI/H3a+KkUdNZ9Yn2oCqryhQNenle/0Vzoz5wZ3e13JouVsjm/v/DYbOzZyYdeFXpcji/ShCz5EZibD15/4uteliEgZFNR8Yu2yRoIBU90NBbo+rXynv8q5fepOb+twwUMHHuK54ee4bt11XpciLljRtILfWvVbfP8332d4atjrckRq0nXXXceFF17Irl276Onp4atf/arXJSmo+UU0HGTNkkR1NxQ8d6+uTytX+xpoWQlP/5fXlSzat3d+m/ZoO1esusLrUsQl7zj7HaSn03z/N9/3uhSRmnTLLbfQ19dHNpult7eXG264weuSFNT8ZH2qqXpLnxODzo6bVZqfVhZj4IxXOSF3esrrahZs38g+7u29lzed+SYiwYjX5YhL1rWt46Kui/jWk99iasa///8UOZUoqPnIhlQTB4YnGRzPVP7N9m8HLKzUtUllO/1VkB3PX+PnT7fsuoWgCfKmtW/yuhRx2TvOfgf9k/386OkfeV2KiJRAQc1HNnQ5Gwqqsvw5kD9ypkNT6Mu2+mUQjPj2OrV0Ns0Pn/ohr1r1KpbGl3pdjrhsS+cWzmo/i68/8XVmch6dHywiJVNQ85Hizs9qBbVwApL6i7pskQSsvMi3Yzru3HMno9lRbSKoU8YY3n7229k7upf79t/ndTkichIKaj7SkWxgaWND9YJa22nONVdSvtWXwOGdkB7wupKy3bX3LlKJFJuWbPK6FKmQV6x4BW3RNi1/iviAgprPrGpP0DtQhbMkB56FttWVf5961ZMfabL/EW/rKNN4dpwH9j/A5Ssuxyik161wIMxrT3st9/Tew+DkoNfliMg8FNR8JtUSpW+kwkEtN+MMbG07rbLvU8+6zgUTgN5tXldSlvt67yOTy/DKlfVzVqnM7ao1VzGdm+b25273uhSRmrFv3z4uu+wy1q9fz1lnncUXv/hFr0tSUPObVHOMg8OTlT3zc2Q/zGQU1BajoRGWrIf9/gpqd+29i/Zou5Y9TwFntp3J+rb1Wv4UmSUUCvH5z3+eHTt28NBDD3HzzTfz5JNPelqTgprPdLVEyc5YjoxXcAZSYcengtri9JzvLH3aCoZqF01OT3Jv771cvuJynet5irjq9KvYMbCDXQO7vC5FpCakUinOO+88ABobG1m/fj379+/3tCYdyu4zqeYYAH1DkyxtrNCJAQpq7ui+ALZ/w/l5tq/xupqTevDAg0xMT3D5ysu9LkWq5DWrX8Pntn2O2565jRvbbvS6HJGiz2z9DDsHdrr6muva1vGnW/605Ofv3r2bRx99lBe/+MWu1lEuddR8JtXshLO+4QpepzbwLISi0Jiq3HucCgobCnxyndpde++iKdLE5s7NXpciVdIabeWSnkv4j2f/g2wu63U5IjVjbGyMa665hi984Qs0NTV5Wos6aj5zNKhNVu5NBp6D1tUQUI5flCXrIJKE3ofhRb/rdTXzys5kuXvf3Vy2/DLCgbDX5UgVvX7N6/mvvf/F1r6tXNx9sdfliACU1flyWzab5ZprruH666/n6quv9qyOAv1N7DNtiQgNoUCFg9qzWvZ0QyDo7P70wYaC7Ye2M5oZ5ZUrtNvzVHNR10XEQjHu3ne316WIeM5ayw033MD69ev54Ac/6HU5gIKa7xhjSDVHOTBUoaXPXM7pqGmGmju6z4eDv4ZsBYO1Cx4++DBBE2RLaovXpUiVRUNRLkxdyD377sH6ZOOLSKX8/Oc/55vf/CY/+9nP2LRpE5s2beL2270dYaOlTx9KNccq11EbOwjTE+qouaXnAshl4eDjsLx2Q9C257exvm09iXDC61LEA5etuIyf7fsZTw48yVntZ3ldjohnXvrSl9bcP1jUUfOhVEuUvkp11Io7PtVRc0V37W8omJqZ4leHf8UFnRd4XYp45OU9LydgAty9V8ufIrVGQc2HuppjPD86xUwlht5qNIe7mlLQ1F3T16k9fvhxMrkM5y873+tSxCNt0TY2LdnEPfvu8boUETmOgpoPdTZHmclZDo9WYOht/zMQCENTj/uvfarqPr+mz/x85PlHMBjOW3ae16WIhy5bfhm7Bnexf8zb4Z5SX2ptGdELi/0ZKKj5UFeLM6LjQCVmqQ08C60rIajLF12z7GwY3APZCp/RukDbnt/GmW1n0hTxdlaQeOuyFZcBqKsmrolGo/T395/SYc1aS39/P9HowgfU629jH5p9OgErXH7xgee07Om29jWAdX62yzZ4Xc0xsjNZHjv0GG9c+0avSxGPrWxayWnNp3H3vru5fv31XpcjdaCnp4fe3l4OHz7sdSmeikaj9PQsfJVKQc2HugpBze2OmrVOR22Vhl66qv1057b/6ZoLak/0P8HkzKSuTxMALl1+Kd944huMZEbUYZVFC4fDrF6tjWmLpaVPH2qKhYhHghwYcnlEx9ghyI6ro+a2wjmf/U97W8cctj3vbHJQUBNwdn9O22kePviw16WISJ6Cmg8Vht4eHHG5oza017ltWenu657qGhoh2els1Kgx257fxuktp9MabfW6FKkBGzs2Eg1GFdREakjVg5ox5mvGmEPGmF+f4OvGGPN3xpinjTGPG2O0FW0OqeaY+x218fx1BMkl7r6uOMufNdZRm85N8+jzj6qbJkWRYIRzl57LL/p+4XUpIpLnRUftX4Ar5/n6q4Ez8h/vAv6hCjX5Tqo56v41aul+5zbe4e7rirP8WWNBbdfgLtLTaS5YpkG3ctSW1BaeHnqa/ol+r0sRETwIatbae4GBeZ5yFfAN63gIaDHGpKpTnX+kWmIcGp0iO5Nz70XTR5zbhIKa69pPd36+E4NeV1K0s38nAGd16MggOWpLp3PU2cPPa/lTpBbU4jVq3cC+Wfd784+9gDHmXcaYbcaYbafa9t+u5ijWwvMjLi5/pvshFIVw3L3XFEfHGc5tDV2ntmNgB8lwku7knH+85BS1oX0DiXCCrX1bvS5FRKjNoGbmeGzOaXnW2q9Yay+w1l6wZMmpdV1VqqUwosPFoDbe7yx7mrn+E8iizB7RUSN2DexibetaAqYWfw2IV0KBEOcvO18bCkRqRC3+hu4Fls+63wMc8KiWmtXV7Ew5djWopY9Aot2915OjWlaCCdZMUMvZHLsGd7G+fb3XpUgN2tK5hd0ju3l+/HmvSxE55dViULsNeGt+9+dLgGFrbZ/XRdWazkJQG3JxQ0G6H+IKahURijhHc9VIUNs7speJ6QnObD3T61KkBhWuU9t6UMufIl7zYjzHLcCDwJnGmF5jzA3GmD80xvxh/im3A88CTwP/BLy32jX6QWM0TGNDyOWlzyPa8VlJNTSiY+egs5FgXds6jyuRWlQ4+1VBTcR7VT9Cylp73Um+boH3VakcX1vS1MDhsSn3XjDdrx2fldR+Ouy+3zmqy+PrAHcN7CJkQqxpWeNpHVKbAibA5s7Nuk5NpAbU4tKnlKg1HmFwPOPOi2UnITMG8TZ3Xk9eqH0NZNMw6v1K/o6BHaxpWUMkGPG6FKlRmzs3s39sPwfGdImwiJcU1HysNR5mMJ1158U07Lbyamjn566BXZzZpuvT5MQ2Ld0EwOOHH/e4EpFTm4Kaj7XGIwylXeqoadht5dVIUDsycYQjE0d0fZrMa23rWhqCDTx+REFNxEsKaj7Wmogw6FpQK3TUtOuzYhq7nGHCHg+93TWwC9BGAplfOBBmQ/sGfnX4V16XInJKU1DzsZZ4mMlsjonMzOJfbFxLnxUXCECb92d+7hjYAaClTzmpjR0bebL/SbIzLl1iISJlU1Dzsda4cyG4K101LX1WR/tpnge1XQO76E520xRp8rQOqX0bl2wkk8vwm8HfeF2KyClLQc3HWuNhwK2g1g8mANGWxb+WnFjLShjaB7mcZyXsHNipQbdSkhd1vAiAxw4/5nElIqcuBTUfa8l31Ibc2Pk5fgRibc7ynFROywqYmYLxQ568fTqbZs/IHta16/o0ObnORCcdsQ5+dUTXqYl4RX8r+1hbwuWlTy17Vl7LCud2aJ8nb//s8LNYLGtb1nry/uIvxhjO6ThHIzpEPKSg5mMtxaVPFzpq6QHt+KyG5uXO7fBeT95+98huAFY1r/Lk/cV/Ni7ZyN7RvQxNDnldisgpSUHNx1pi+aVPN04nGD+ioFYNLfmgNuRNUNszsgeDYXnjck/eX/znnI5zALT8KeIRBTUfi4QCJBtCDLi1mUBLn5XX0AixVs+WPveM7KEr2aWjo6RkZ3WcRcAENPhWxCMKaj7XEg8vfjNBLgcTWvqsmublMOxdUFvVtMqT9xZ/SoQTrGlZo8G3Ih5RUPO51rgLpxNMDILNadhttbSs8GTp01rLnpE9rGhaUfX3Fn87p+McHj/yODnr3VgZkVOVgprPOcdILbKjVjg+Skuf1dGywln6tLaqb9s/2c94dpyVTSur+r7if2d3nM1oZpT9o/u9LkXklKOg5nOt8fDiD2YvnEoQb1t8QXJyzcshO+50Mqtoz8geAC19StkK58LuHNzpcSUipx4FNZ9rjUcYXOyuz/FCUFNHrSqKOz/3VPVtC0FNHTUp1+ktpxMwAXYN7PK6FJFTjoKaz7XEw4xMTjM9s4hrRwpLn9pMUB0eDb3dPbKbcCBMKpGq6vuK/0VDUVY3rVZQE/GAgprPFQ5mH5pYxHVqOpC9uopDb6sb1PaO7GV543KCgWBV31fqw9qN6ah/AAAgAElEQVS2tVr6FPGAgprPFU4nWNR1auP9EGmEUINLVcm8Yq0QSVZ95+eekT1a9pQFW9e2joPjBxmeGva6FJFTioKazx0973MxHbV+bSSoJmOcrloVlz5zNsfekb3aSCALtq7V2VCg5U+R6lJQ87nC0ueiNhToQPbqa1lR1fM+D44fJJPLqKMmC7a2bS0AOwe0/ClSTQpqPnf0YPbFLH0e0Y7PamtZXtWlz8Jh7Bp2KwvVEetgSWwJuwbVUROpJgU1nyt21Ba19Knjo6queTlMDsPkSFXeTjPUxA1r29Zq6VOkyhTUfC4eCRIJBhbeUbM2v/SpoFZVhREdVdr5uWdkD/FQnI6YOqeycOta1/HM8DNkZxZ5GoqIlExBzeeMMc7B7OML/MWZTcP0pJY+q604S606y5+FHZ/GmKq8n9SndW3rmM5N88zwM16XInLKUFCrA22JRRzMXjyVQB21qirMUqvSzk+N5hA3nNl2JqANBSLVpKBWB1riYYYWeo3a5JBzG2t1ryA5ueRSCEWrsvMzO5Nl/9h+BTVZtBWNK4gGo7pOTaSKFNTqQGs8wsBCO2qFi9mjTe4VJCdnDDT3VGXp88D4AXI2px2fsmjBQJC1rWu181OkihTU6kBLPLLwkwmmRp3bhkb3CpLSVGnobd94H4DO+BRXnNl2JjsHdmKt9boUkVOCglodaM0vfS7oF2cxqKmjVnVNXTD2fMXfpm9MQU3cs6ZlDaOZUfon+70uReSUoKBWB1rjEaZzltGp6fK/eSq/9KmgVn3JpTB2CHK5ir5N33gfBsOyxLKKvo+cGgrXOhZm84lIZSmo1YHW/HmfCxrRUQxqWvqsuuQyyGWPbuiokL7xPpbElxAOhCv6PnJqUFATqS4FtTrQuphjpKZGIRiBcNTlquSkkkud2wovf/aN92nZU1yTSqQIBUIKaiJVoqBWB1ryx0gtaOfn5Ii6aV5J5pciKx3UxhTUxD2hQIjljcvZO1K9s2pFTmUKanWg0FFb0M7PqVEFNa8Ug9qhir1FzuY4OH5QQU1ctbJxJbtHdntdhsgpQUGtDhQPZl/QNWqj2kjglSosfQ5MDpDJZUglFdTEPSuaVrBvdB85W9mNMCKioFYXmmJhAmahHbURBTWvNDQ5pxNUMKgdHD8IaDSHuGtl00qmZqY4lK5cN1hEHApqdSAYMDTFwgxNLHDXp5Y+vWHM0REdFXJg7ACgoCbuKuz81PKnSOUpqNWJZEOIsckFzFGbHNHxUV5KLqtoR61wKkFnorNi7yGnnkJQ04YCkcpTUKsTyYYQYwsaeKvNBJ5KLqtoR+3g+EHioThNEYVxcc/S+FKiwahGdIhUgYJanVhQULNWQc1ryaUV76h1JbswxlTsPeTUEzABljctV1ATqQIFtTqRaAgxXm5Qm550JuNrM4F3kssg3Q8zC7i+sAQHxg5o2VMqYmXjSgU1kSpQUKsTyWio/LM+iweyq6PmmcKIjvHDFXl5zVCTSlnZtJLesV6mcwu45EJESqagVieSkQV01IpBTR01z1TwdIKJ6QkGpwYV1KQiVjatZDo3Td9Yn9eliNQ1BbU6kYwuYNfn5LBzq12f3qng6QSFGWpa+pRKWNG0AoA9o1r+FKkkBbU6kWgIMZ6ZIZezpX+Tlj69V8HTCQqdjq5kl+uvLVIY0aHr1EQqS0GtTjQ2hABIZ2dK/yYFNe8lKhjU8jPUtPQpldAebScRTiioiVSYglqdSOSDWlnLn1Mjzq2uUfNOOArR5oosffaN9xEwAZbEl7j+2iLGGFY0rtDQW5EKU1CrE4mGIEB5s9S0maA2VOh0gr7xPpbElhAOhF1/bRGAVU2r1FETqTAFtTrRGM131MoKaoWOmpY+PVWh0wn6xvu07CkVtaJpBQfGD5Ct0BxAEVFQqxuJiBPUyhrRMTkCoSiEIhWqSkpSodMJ+sb6SCUV1KRyVjatJGdz7Bvb53UpInVLQa1OJPMdtdGyrlHT8VE1oQIdtZzNcTCtYbdSWTqcXaTyFNTqRLJhAR01BbXakFwKmTGYGnPtJQcmB5jOTbMsvsy11xQ5nkZ0iFSeglqdKAa1TJnXqGkjgfcKQ2/H3euqHU47R1ItjS917TVFjtfc0ExLQ4uCmkgFKajVicJ4Di19+lBx6K2LQW3CCWodsQ7XXlNkLiuaViioiVSQglqdaAgFCAfNApY+1VHzXAXO+zwycQRAM9Sk4lY2rlRQE6kgBbU6YYwh0RAqbzzH5IjO+awFFTjvs7D0qY6aVNrKppU8n36eiekJr0sRqUsKanUkESkzqE2NaOmzFsTbwQRc7agdnjhMU6SJhmCDa68pMhft/BSpLAW1OtIYDZV+hJS1ukatVgSCEO9wfelzSUzLnlJ5K5pWALB3VEFNpBIU1OpIoiFU+q7PbBrsjK5RqxUuz1I7PHFYy55SFRrRIVJZCmp1JNkQYmxqprQnF8/5VEetJiSXuBrU+if66YgrqEnlJcIJOmIdCmoiFaKgVkeSDSHGJks8c2+ycM6nOmo1Id4B6X5XXspay+H0YS19StWsaFyha9REKkRBrY4kG0KMl9tR067P2hBvdy2ojWRGyOQyWvqUqlnVvEodNZEKUVCrI2WN55gqdNS09FkTEu3OMVLZyUW/VHGGmjpqUiUrGlfQP9nPWMa9Y9BExKGgVkeSUWczQS5nT/5kBbXaEm93bicGFv1ShVMJNOxWqmVV0yoA9oyqqybiNgW1OpJsCGItpLMlLH8WNxNo6bMmFC78Hz+y6JfSsFuptuKIDl2nJuI6BbU6Ujjvs6RjpLTrs7YUOmouXKempU+ptuWNywHYPbLb20JE6pCCWh1J5oNaSdepTWrps6Yk8t0vF4La4YnDxEIxEuHEol9LpBTRUJRUIqWOmkgFKKjVkWJQK+V0gqkRCMchGK5wVVISNztq6SN0xDowxiz6tURKtaJJIzpEKkFBrY4ky136VDetdsRaAeNaR03LnlJtKxtXajOBSAUoqNWRwjVqoyUFNR3IXlMCQSesubCZ4MjEEW0kkKpb3ric4alhRjIjXpciUlcU1OpIY7Tcjpp2fNYUl4be6pxP8UJPYw8A+0f3e1yJSH1RUKsjiXI2E2jps/YkFn+MVDqbZjw7rhlqUnWFoNY71utxJSL1RUGtjpS961NBrba40FHrn3C+Xx01qbbuZDcAvaMKaiJuUlCrIw2hAKGAKXHX5yhEmytflJQu3rbooFY8lUCbCaTKGiONtDS0KKiJuExBrY4YY0g0hLTr06/i+aVPW8IRYCdQCGrqqIkXepI9WvoUcZmCWp1JNoQYmzrJEVK5nHZ91qJ4O+SmYXJ4wS9RPJVA16iJB3oae9RRE3GZglqdcYJadv4nZccBq12ftcaF0wkOpw8TMiFaGlpcKkqkdD2NPRwYP8BMroTzhkWkJApqdSYZDTF+so5a8ZzPZOULktK5cDrB4YnDtMfaCRj90Zbq60n2MJ2b5lD6kNeliNQNT36bG2OuNMbsMsY8bYz5yBxfX2GMudsY86gx5nFjzGu8qNOPEg2hkw+8zYw7txEtfdYUF4LakYkj2kggntGIDhH3VT2oGWOCwM3Aq4ENwHXGmA3HPe1/Ad+z1p4LvBn4cnWr9K/GUjYTFINavPIFSekKQW0RpxMcnjhMR1wbCcQbxaCm69REXONFR20L8LS19llrbQb4DnDVcc+xQOECqmbgQBXr87VEQ/Dk4zmyaec2rKBWU9zoqKXVURPvLIsvI2RC7Bvd53UpInXDi6DWDcz+U9ybf2y2m4DfM8b0ArcDfzTXCxlj3mWM2WaM2Xb48OFK1Oo7JY3nyOSDWiRR+YKkdJEEhKKQXlhHLZvLMjg1qNEc4plQIEQqmdLSp4iLvAhqZo7Hjh8cdR3wL9baHuA1wDeNeeHV0dbar1hrL7DWXrBkiboI4Cx9jmWmsfPN4srmlz7VUastxuRPJxhY0LcPTQ4B0B5td7MqkbL0JHt03qeIi7wIar3A8ln3e3jh0uYNwPcArLUPAlFAbYISJBpCWAvpzDw7P4sdNQW1mrOIY6QGJp2A1xptdbMikbL0NGrorYibvAhqDwNnGGNWG2MiOJsFbjvuOXuBywGMMetxgprWNkuQjDrnfc67/JkZc27DWvqsOfH2BW8mUFCTWtDT2MPA5ADjhc69iCxK1YOatXYaeD/wU2AHzu7OJ4wxnzDGvD7/tD8B/sAY8xhwC/A2O+9anhQUDmafd0RHVh21mrWIjtrg5CCgpU/xVk9SOz9F3BTy4k2ttbfjbBKY/djHZn3+JHBxteuqB4WgNn9HTbs+a1aiQ0uf4muzZ6md2Xamx9WI+J/Gl9eZRD6ozTuiIzvu7C4MBKtUlZQs3u6cwzqdKftbByYHCJgAzQ3NFShMpDSapSbiLgW1OlPoqI2drKOmblptWsQstcGpQVoaWnR8lHiqKdJEU6RJQU3EJfqNXmeKS5+Zk1yjphlqtWkRQW1gYoC2aJvLBYmUTzs/RdyjoFZnSlr6zIyro1arEvkpNAvsqCmoSS3oTnaroybiEgW1OtMYLSx9zjNHLZvWjs9aVeyolT+iY3ByUBsJpCb0JHvoG++bf/C2iJREQa3ONIQCBAOGsansiZ+USWuGWq0qBrXyTyfon+yntUFBTbzXlexiamaK/smFn1srIg4FtTpjjCEeCc5/MkF2XB21WhXLL12WOfQ2m8symhmlLaalT/FeV7ILgP1jOkpKZLEU1OpQPBJk4mRHSOkatdoUDEG0pexr1ArnfLY1KKiJ97oSTlA7MHb86YAiUi4FtToUj4RO0lHTrs+atoChtxp2K7Wk0FFTUBNZPAW1OhQLn2TpU7s+a1u8vezNBIWgpl2fUgvi4TitDa0KaiIuUFCrQ/FIkInsyeaoKajVrFgrTAyW9S2Fcz4V1KRWdCW72D+ua9REFktBrQ7FIkHGTzSeY2YaZjLa9VnLYm0wMVTWt2jpU2pNV7JLHTURFyio1aF5NxNkx51bddRqV6y17PEcOudTak1Xoou+Mc1SE1ksBbU6FI+ESJ9o6TOTdm51jVrtirU6gXp6quRvGZgc0DmfUlO6kl1MzkwWu70isjD6rV6HYvN21PJBTbs+a1c8v3xZxvLn4KSOj5La0p3sBrTzU2SxFNTqUHy+XZ+Z/NKnOmq1K1YIaqV3InTOp9SaVDIFoA0FIoukoFaHnF2fM3NfG1LsqCmo1azC6QJl7PwcmBzQRgKpKRp6K+IOBbU6FIuEsBYms7kXfrHYUdPSZ80qdNTK2FAwMDmgjprUlGQkSXNDs4KayCIpqNWheCQIQDozx4YCddRqX3Hps7SOWnbGOedTHTWpNV0JjegQWSwFtToUKwa1Oa5TK+76VEetZsXLW/ocnMoPu9U5n1JjupPdCmoii6SgVocKHbWJ7BxBTXPUal8kCYFQyZsJiqcSxBTUpLakkikOjB/QLDWRRVBQq0PxkjpqCmo1y5j86QSlddSKpxI0aOlTakt3spuJ6Yli11dEyqegVodi4RBwsmvUtPRZ08o4nUAHskut0s5PkcVTUKtDxaXPOTtq4xCMQDBc5aqkLPHSO2o6kF1qVVdSQU1ksRTU6tC8S5/ZtJY9/SDWWvLJBAOTAwRNkKaGpgoXJVIeBTWRxVNQq0OxeTtqaS17+kGsteTNBDrnU2pVY6SRxkgj+8d0OoHIQuk3ex2KR+a7Rm1cHTU/iLWWtfSpGWpSq7qT3RwYV0dNZKEU1OpQcelzrvEcmbRGc/hBrNVZps5OnvSpOudTalkqkdLSp8giKKjVoYZQAGNOsPSZTWvYrR+UMfRWx0dJLetKdnFw/KDXZYj4loJaHTLGEA8HTzBHbVwdNT8o4xgpHcgutSyVSDGWHWM0M+p1KSK+pKBWp2KRkHZ9+lkxqM2/oSCby5/zqWG3UqM6E52Adn6KLJSCWp2KR4JMzLWZQLs+/SFW2tLn8NQwAC3RlkpXJLIgqUQKQMufIgukoFan4pETLH1q16c/FDpqJzmdoBjUGhTUpDYVglrfeJ/HlYj4k4JanYpFgnMfyq5dn/5Q4maCoSlnKG5zQ3OlKxJZkPZYO6FASEFNZIEU1OrUnB21XA6mJ7Tr0w/CceeorxKDmjpqUqsCJkBnvFNBTWSBFNTqVCw8x2aC4oHs6qjVPGNKOp1gaFJBTWpfKpnSNWoiC6SgVqfm3ExQCGq6Rs0fYic/mF0dNfGDVCKljprIAimo1ak5lz4zY86tdn36Q6wV0iff9RkJRIiFYlUqSqR8qUSKQ+lDTOfm2IkuIvNSUKtTsUjwhScTZNRR85V4aR21loYWjDFVKkqkfKlEipzNcTh92OtSRHxHQa1OxSNB0tkZrLVHHyxeo6aOmi/EWkoKas1R7fiU2qYRHSILp6BWp+KREDM5S2Ymd/TBzLhzq46aP5SymSDfUROpZZ1J53QCBTWR8imo1alYOAgcdzC7dn36S6wNpichO3HCpyioiR90xhXURBZKQa1OJRqcoHbMhoLiNWpa+vSFEk4nGJ4aVlCTmhcPx2lpaNGIDpEFCJXyJGNMWwlPy1lrhxZZj7gkFnH+0x4T1LL5pU911Pxh9ukEzd0v+LK1VkFNfCOVSOlgdpEFKCmoAQfyH/NtLQsCKxZdkbgiHi501GZth9euT38pdNROcJ3aaHaUGTuj46PEFzoTnewb3ed1GSK+U2pQ22GtPXe+JxhjHnWhHnFJPDLH0mexo6alT1+IzX/ep04lED9JJVI8fPBhr8sQ8Z1Sr1G70KXnSJXEInNsJsikwQSdMySl9hU7aicIavlTCVqjrdWqSGTBUokUY9kxRjOjXpci4isnDWrGmD8E/t4Y82ZjzH8YY94z1/OstZOuVycLFp/zGrW0003TcFR/OMlmgkJQ09Kn+IFGdIgsTCkdtVcA7wLeb619HfCiypYkbji69Dn7GrVxXZ/mJ5E4hKIn7KgNTw0DWvoUfygMvdXOT5HylBLU+q0z3v4z+ftTFaxHXFJc+swe31FTUPOVeYbeDk46AU5BTfygeDrBmDpqIuUoJah9EcBa++/5+z+oXDniljk3E2TSmqHmN7E2mJh76s3Q1BABE6Ax0ljlokTK1xHrIBQIaelTpEwnDWrW2p3H3f/vypUjbomGTrDrUx01f4m1nDCoDU8N0xxpJmA0t1pqX8AE6Ix3KqiJlKnU8RwAGGMuAP4MWJn/XgNYa+05FahNFiEQMMTCQSaOn6PWoO6Lr8RaYeC5Ob80NDWkjQTiK6lkSteoiZSprKAG/CtwI/ArIHeS54rH4pHgC3d9NnZ6V5CUL9oy72YCXZ8mfqJZaiLlKzeoHbbW3laRSsR1sUjwuDlq2vXpO7EWmJx76XNwapCuRFeVCxJZuM5EJ4fSh5jOTRMKlPvXj8ipqdw/KR83xvwz8F/M2v1prdUGgxo0Z0dN16j5S6zF+e82PQWhhmO+NDQ1xIb2DR4VJlK+VCLFjJ3hyMQROhPq7ouUotyg9nZgHRDm6NKnRTtBa1IsEiKdPW7XZyTpXUFSvuLpBEPQuOyYL2npU/ymOKJjvE9BTaRE5Qa1F1lrN1akEnFdfPZmAmudzoyWPv1l9jFSs4LaxPQEUzNT2kwgvlIIagfGDnDu0nmPjxaRvHL39T9kjNFai08cs/SZnQCslj79JprvmB23oUAHsosfFbpoGtEhUrpyO2ovBX7fGPMczjVqGs9Rw47ZTJBNO7caeOsvhY7acRsKCud8KqiJn8TDcZobmjWiQ6QM5Qa1KytShVTEMR21zLhzq46av8RO0FFTUBOfSiVS6qiJlKGsoGat3VOpQsR98Ujo6KHsxY6agpqvzN5MMIsOZBe/6kx0sn9sv9dliPhGWdeoGWO+boxpmXW/1RjzNffLEjfEIsGjh7Jn8kEtoqVPX2loBsyJO2pRBTXxl1QixcExLX2KlKrczQTnWGuL/7S31g4C2rpTo+LhINkZS3Ym55zzCeqo+U0gANHmFwS1wSnnfnNEuz7FX1KJFKPZUUYzo16XIuIL5Qa1gDGmtXDHGNNG+de5SZXEIrMOZi921BTUfCfW+oLNBMNTwyTCCcLBsEdFiSxMYUSHNhSIlKbckPV54EFjzPdxBt1eC3zS9arEFfGI8593IjNDc7GjpqVP34m98LzPoakhXZ8mvjR7RMcZrWd4XI1I7SspqBljLgQestZ+wxizDXgFzmiOq621T1ayQFm4eLGjNq2Omp/FWl+wmUBBTfyqK+mcT6uOmkhpSu2o/T5wszHmN8BPgP9rrdWfshp3zNKn5qj5V7QFBo/dcD00qaAm/tQR6yAUCGlEh0iJSgpq1to/BDDGrANeDfyLMaYZuBsnuP3cWjszz0uIBwodtYnsjOao+Vmsdc6lz5VNKz0qSGThAibAsvgyBTWREpW1mcBau9Na+7fW2itxlj/vB94E/KISxcnixF/QUTMQinpblJSvsJkglys+NDw1TGu0dZ5vEqldqUSKvjEFNZFSlLvrs8haO2GtvR3Ybq29wMWaxCWxcGEzQf4atUgCjPG4KilbrAVsDvLjDLK5LGPZMR3ILr6l0wlESrfgoDbLX7jwGlIBx3bUxjVDza+OO51ApxKI33UmOjmUPsR0btrrUkRqXqm7Ph8/0ZeAZe6VI26KHz9HTden+VN01nmfrSsZmtQ5n+JvqWSKGTvDkYkjxXEdIjK3Und9LgOuAAaPe9wAD7hakbimsOtzonCNmnZ8+lOxo+b88SscH6WlT/GrwtDbvvE+BTWRkyh16fM/gKS1ds9xH7uBeypWnSxKYeCt01EbV0fNr2L5ztnksUufrQ3aTCD+VAxq2lAgclKljue4YZ6vvcW9csRNwYAhEgqQzk7nO2oKar50go6alj7Fr2afTiAi83NjM4HUsHgk6Cx9FnZ9iv8ct5mgeCC7lj7FpxLhBE2RJgU1kRKUFNSMMdvdeI5UXzwc1K5PvwvHINhQ7KgNTw0TCUSIhWIeFyaycBrRIVKaUjcTrJ9n5yc4mwr0z/saFIsE82d96ho1X5t1OkHhnE+jmXjiY93JbvaO7vW6DJGaV2pQW1fCc0o+QsoYcyXwRSAI/LO19tNzPOda4CbAAo/pWriFiUdCR8dzaNenf8VaipsJhqaGaInq+jTxt57GHh448ADWWv2jQ2QepW4m2HPyZ5XGGBMEbgZeBfQCDxtjbrPWPjnrOWcAHwUuttYOGmOWuvX+p5pYJEh6atpZ+lRHzb9irccMvNVGAvG77mQ3kzOT9E/20xHr8LockZrlxWaCLcDT1tpnrbUZ4DvAVcc95w+Am621gwDW2kNVrrFuxCNBpjOTzhFEukbNv6ItxaXPwclBbSQQ3+tp7AGgd7TX40pEapsXQa0b2Dfrfm/+sdnWAmuNMT83xjyUXyp9AWPMu4wx24wx2w4fPlyhcv0tHgliM2POHe369C911KTOFIPamIKayHzKCmrGmPcbYxY7ZXOuixHscfdDwBnApcB1wD8bY17wN5O19ivW2gustRcsWbJkkWXVp3gk5FyfBuqo+Vl+M0HO5hjOKKiJ/3UnnX+fq6MmMr9yO2qdONeUfc8Yc6VZ2BWgvcDyWfd7gANzPOdH1tqstfY5YBdOcJMyxSNBZ9gtqKPmZ7EWyI4zmh4gZ3MKauJ7DcEGlsaWKqiJnERZQc1a+79wAtNXgbcBTxlj/soYs6aMl3kYOMMYs9oYEwHeDNx23HN+CFwGYIzpwFkKfbacWsURiwQxWXXUfC8/9HZoxBlnoF2fUg96Gnu09ClyEmVfo2attcDB/Mc00Ar8X2PMX5f4/dPA+4GfAjuA71lrnzDGfMIY8/r8034K9BtjngTuBm601vaXW6tAPBwiPDPp3NGuT//KB7Oh0f2Ajo+S+tDT2MP+sf1elyFS00qdowaAMeb/AX4fOAL8M06AyhpjAsBTwIdLeR1r7e3A7cc99rFZn1vgg/kPWYR4JEjM5IOa5qj5V76jNjx2ENDxUVIfupPdPD/+PJmZDJFgxOtyRGpSWUEN6ACuPn6umrU2Z4x5nXtliVtikSBxppw76qj5V2HpM/08oI6a1Ieexh4slgNjB1jVvMrrckRqUrlLnw3HhzRjzGcArLU7XKtKXBOPBImbfFDTNWr+FcsvfU44VwAoqEk96Ek6Izq0/ClyYuUGtVfN8dir3ShEKiMeCRIrdtSS3hYjC1foqE0OEDABGiONHhcksngaeityciUtfRpj3gO8FzjtuMPZG4GfV6IwcUcsEtLSZz2IOtekDWVGaI40EzBezKoWcVdHrINIIKKdnyLzKPUatW8D/wl8CvjIrMdHrbUDrlclrjlm6TMU87YYWbhAEBqaGcqM0RzVRgKpDwEToLuxWx01kXmUeij7MDCMc0qA+Egs7Cx9TgdjhALqwvharIXhmTSt0ZTXlYi4piepER0i8ynpb25jzP3521FjzEj+Y7Rwv7IlymLEI0HiTDITVDfN9+JtDM1MajSH1JWexh72je7DmcokIscrKahZa1+av2201jblPxoL9ytboixGPBIiZqbIKqj5X6yNIZvVjk+pK93JbsayY4xk9G9+kbmUeyj7m4wxjfnP/5cx5gfGmHMrU5q4oTBHLROIel2KLJKNtTKEVVCTuqKdnyLzK/eipT+31o4aY14KXAF8HfhH98sSt8QV1OrGRKyZjNGpBFJfCrPUtPNTZG7lBrWZ/O1rgX+w1v4I0LkfNSwcDBA3U0wZBTW/G25w5uC1hnW1gdQPddRE5lduUNtvjPk/wLXA7caYhgW8hlRZMpBhEgU1vxsMNwDQQtDjSkTckwgnaG1oVUdN5ATKDVnXAj8FrrTWDgFtwI2uVyWuijPFhGnwugxZpKGQM01HC59Sb7qT3ewf1YgOkbmUdSi7tTYN/GDW/T6gz+2ixF1xM8V+q6Dmd8NBp5PWMpPzuBIRd6WSKZ4afMrrMkRqUllBLb/UeQ2warGpY1YAACAASURBVPb3Wms/4W5Z4qYYk6QV1HxvyDhzplqmsx5XIuKuVCLFfb33Ya3FGON1OSI1pdylzx8BVwHTwPisD6lhUTvFuIKa7w3hdNKas5MeVyLirq5kF5MzkwxODXpdikjNKaujBvRYa6+sSCVSGTNZQkwzmtPmXL8byk2RzOUITwx5XYqIq1IJ51i0vrE+2qJtHlcjUlvK7ag9YIzZWJFKpDIyTsNzTEHN94ay4zTncjAx4HUpIq4qBLUD4wc8rkSk9pTbUXsp8HZjzLPAFGAAa609x/XKxB3ZNAAjMwpqfjc8NUyLDUBay0NSX7qSXQAcGFNQEzleuUHt1RWpQionkw9q02GPC5HFGpoaoiUQVkdN6k5TpIl4KM7B8YNelyJSc8pd+twLvAz4fWvtHsACy1yvStyTdZY+h6bVUfO7oakhmgMNkFZQk/pijKEr2aWOmsgcyg1qXwYuBK7L3x8Fbna1InFXvqM2NBMml7MeFyOLMTI1QksoAel+r0sRcV1nopO+cY3lFDleuUHtxdba9wGTANbaQXTWZ23Ld9TStoHJ6ZmTPFlq1UxuhtHsKE3hpJY+pS51JboU1ETmUG5QyxpjgjhLnhhjlgAak17L8h21CRpIZxTU/Go0MwpAc0MzTAxCTn/spL6kkimGpoZI5zdAiYij3KD2d8CtwDJjzCeB+4G/cr0qcU/+l16aBtJTCmp+NZwZBqA51gY2B1PDHlck4q7iLDV11USOUe5Zn/9qjHkEuDz/0O9Ya3e4X5a4JnN06TOdnfa4GFmokakRAJpi7c4D6QGItXpYkYi7Zo/oWNOyxuNqRGpHSUHNGPPBE3zp1caYV1tr/8bFmsRNWS191oNiRy2R32SdHoB2/WUm9UMdNZG5ldpRa8zfnglsBm7L3/9t4F63ixIXZQpLn1EmFNR8azi/1NmU6HQe0IYCqTNLYksImZCCmshxSgpq1tq/ADDG3AGcZ60dzd+/Cfh+xaqTxcuOkws2kCOgjpqPjWTyS59NPc4DmqUmdSYYCLIssUyz1ESOU+5mghVAZtb9DLDKtWrEfZk0NhQDIJ3RNWp+VeioNTctdx5QR03qUCqR0ukEIscp9wipbwJbjTG34ozoeAPwdderEvdk09hIAkBLnz42khkhFooRjneACWjordSlrmQXWw9u9boMkZpS7q7PTxpj/hPnGCmAt1trH3W/LHFNZgwTjgNo6dPHhqeGnRlqgYCz21NLn1KHOhOdHEofIpvLEg7ofGIRKL+jhrV2O7C9ArVIJWTSmEJHLaug5lcjUyM0RZqcO7E2LX1KXepKdJGzOQ6lD9Gd7Pa6HJGaUO41auI32TSmIU7A6Bo1PxvJjDgdNYB4uzpqUpdSyfyIjjHt/BQpKDmoGcfyShYjFZAZx4QTxCMhLX362PDUMM2RQlBrc46REqkzXQln6K1GdIgcVXJQs9Za4IcVrEUqIZuGSJxYJKjNBD42khmhqWHW0qc2E0gd6szPCdSIDpGjyl36fMgYs7kilUhlZNIQSZKIBNVR87FjO2r5zQTWeluUiMuioSht0TZ11ERmKXczwWXAu40xe4BxwOA0285xvTJxR3YcwnFiWvr0rcnpSTK5zLEdtZmpfLc04W1xIi7rSnQpqInMUm5Qe3VFqpDKyThLn/FIkAkdyu5LxeOjCrs+47MOZldQkzqTSqZ4avApr8sQqRnlzlHbU6lCpAJyM07nJZwgHgkyNqWg5kfFA9kbZm0mAGdER4v290h9SSVS3Nd7H9ZajDFelyPiubKuUcvv/Pw9Y8zH8vdXGGO2VKY0WbTMuHMbiRMLazOBX41M5c/5nD1HDbShQOpSV7KLyZlJBqe0s1kEyt9M8GXgQuC6/P1R4GZXKxL3ZNPObdhZ+tQ1av50wo6aZqlJHSrs/NQsNRFHuUHtxdba9wGTANbaQSDielXijmJHLaHNBD5W6KgdM/AWNEtN6lJhltqBcY3oEIHyg1rWGBPEOZAdY8wSIOd6VeKO4zpqEzqZwJdGMscvfbY6t+qoSR3qSuaH3qqjJgKUH9T+DrgVWGaM+SRwP/BXrlcl7sjkg1p+12c6O4PV7C3fGZ4aJmiCJMNJ54FgGBqadN6n1KWmSBPxUFwjOkTyyt31+a/GmEeAy/MP/Y61dof7ZYkrsvmlz3CCWCSItTA1nSMaDnpbl5RlJDNCY6Tx2B1wsVZtJpC6ZIwhlUjpdAKRvLKCmjEmCrwGeBnOkmfEGPOctXayEsXJIs3uqOXDWTozo6DmM8NTw0evTyuIt2npU+pWKplSR00kr9ylz28AZ+EsgX4JWA980+2ixCXFa9ScQ9kB0rpOzXdGMiNHj48qiLdr6VPqlk4nEDmq3JMJzrTWvmjW/buNMY+5WZC4aPYctfzeXM1S85/hqWFaoi3HPhhrgyOa3i71KZVMMTQ1RDqbJh6Oe12OiKfK7ag9aox5SeGOMebFwM/dLUlcc9yuT0AjOnxo7o6alj6lfqUSKQB11UQosaNmjPkVzkiOMPBWY8ze/P2VwJOVK08WpXiNWoJYxFnyVFDzn+Gp4aOjOQpibZAZhekMhDTKUOpLcUTHeB9rWtZ4XI2It0pd+nxdRauQysiOQyAMwXDxGjUdzO4vOZtjNDM692YCcIbeNi6rfmEiFVToqGnnp0iJQU2HsftUJg0R5/oOLX3602hmFIudJ6gNKKhJ3VkSW0LIhLT0KUL54zkuAP4MZ8kzBBjAWmvPqUBtsljZcQgnAIiFFdT86AUHshfEdN6n1K9gIMiyxDIFNRHK3/X5r8CNwK/Q0VG1b46OmnZ9+kvh+KgTdtQ09FbqVCqR0jFSIpQf1A5ba2+rSCXivmwawoWgVpijpqDmJ8NTw8A8HTXNUpM6lfr/27vvKMfu+v7/z7c00sxo2s7ObG+zxV6X9bp3m26DMTYE+MYmAfxNA0w4gYT8EjjkmxASggklCSGJISS0hNgOBmIHG8c2JRhwL7tui3e9s73NTm+aos/vj3s1q92dopmRdK+uXo9zdK50dXX11l3NzHs/7V23jMcOPRZ0GCKBm22i9mdm9hXgQSCd3emc+05Bo5LCGBmApNf1WZOIYYYKs5eZqVvUWrytuj4lopbVL+PwzsOMZkZJxBJBhyMSmNkmar8BnIa3TEe269MBStTCaHQQ/IVSzYzaRFwtamUm26J2UqKWTEFVjVrUJLKW1y0n4zIcGTwysVyHSCWabaJ2tnPurKJEIoU3MgiNx37BpZJxBpSolZWekSm6PsHr/hzsKnFEIqWxrP7YEh1K1KSSzbYywcNmdkZRIpHCy5n1CVCbjKvrs8z0pnupraolGZ9kUdvUQk0mkMhSdQIRz2xb1K4A/q+ZvYw3Rk3Lc4RZzqxPgFSiSl2fZaZnpIeGZMPkT6YWqutTIkuJmohntonaG4oShRRHzqxP8FvURpWolZPedO/J49OyahfCoedKG5BIidRU1bCwZqGqE0jFm22idtMU+z8x30CkwDIZL1FLHuv6TCU1maDc9Iz0nFyQPUstahJxK+tXsrd/b9BhiARqtmPUBnJu48A1QFuBY5JCGBvytjktakrUyk/vSO/kEwnAa1Eb6vKScpEIWlG/gn19+4IOQyRQs2pRc859LvexmX0W0AK4YTQy6G2TuZMJqjSZoMz0DPewqWXT5E+mFoLLwHD3sUoFIhGyomEF9++6n/HMOPFYPOhwRAIx2xa1E6WAdYUIRApsdMDb5raoaR21stMz0sOC6gWTP5ld9HZIS3RINK2oX8GYG+PQ4KGgQxEJzGyLsm/FW+AWIA4sAv6i0EFJAUy0qJ0wmUCJWtkYGhsiPZ6msXqark/wqhO0rC9dYCIlsqJ+BQD7+vdpLTWpWLOdTPCmnPtjwCHnnPrSwmjUT9QSJ0wmGB3HOYeZBRSY5CtblWDqFjXV+5RoW1m/EoC9fXu5cOmFAUcjEoy8EjUz+9NpnnPOObWqhc2I3/WZPH4ywXjGMTKeobpK4z3CbsryUVm1zd5Wi95KRC2tW4ph7OvXhAKpXPmOURuY5OaA3wL+uDihybxMtKjldn16ebm6P8vDRKI25fIcKswu0ZaIJ1hSt0SJmlS0vFrUcmd7mlkD8EHgN4HbgM9N9ToJ0ESLWv3ErlTSa0UbHBlnQWqyF0mYZOt8TtmiVtMEFlfXp0TaivoVStSkouU969PMFprZXwJb8BK885xzf+ycO1y06GTuRk+eTJCbqEn4dae7gWkSNTOv+1MtahJhWktNKl2+Y9Q+A7wV+DJwlnOuv6hRyfyNnLw8R23CS9TU9VkeZpxMAKpOIJG3sn4lh4cOkx5PUx2vDjockZLLt0Xtw8By4E+A/WbW69/6zKy3eOHJnE10febO+vTy8kEtelsWetI9VMerqamqmfqg2oVqUZNIW9HgLdGhmp9SqfIdozbfhXGl1EYHvfFL8eTErtps16cKs5eFnnTP1N2eWakW6GovSTwiQchdS21t09qAoxEpPSVgUTXiF2TPWS8tO0ZNXZ/lIb9ErVldnxJpE4maxqlJhVKiFlWjA8eNTwNNJig33enuqZfmyMp2fTo3/XEiZWpxajGJWEIzP6ViKVGLqpHB42Z8wrExairMXh56R3qnn0gA3mSC8fSxWb4iEROzGMvrlytRk4qlRC2qRgePKx8FalErN93p7pm7Pifqfao6gUSX1lKTSqZELapGBk5qUcsuz6FELfycc/lPJgDN/JRIU6ImlSyQRM3M3mBm28xsu5l9ZJrj3m5mzswuKGV8kTA6eNIYtVjMqEnEGNKsz9AbGhtiNDOaR6KmwuwSfSvqV9Cd7mZgdCDoUERKruSJmpnFgX8ArgHOAN5hZmdMclwD8HvAI6WNMCKysz5PkEpWaR21MjBjnc+sia5PJWoSXdm11Pb27Q04EpHSC6JF7SJgu3PuZefcCF690DdPctxfAH8NDJcyuMiYZNYneN2f6voMv2ydz7wmEwAMdRU5IpHgrKxfCaDuT6lIQSRqK4A9OY/3+vsmmNm5wCrn3H9PdyIze4+ZPW5mjx85cqTwkZazSWZ9gjehQOuohV+2zmdjdeP0B9Y2e1tNJpAIy130VqTSBJGo2ST7JhaBMrMY8Dd4Zaum5Zz7snPuAufcBYsWLSpgiBEwyaxP8BI1taiFX151PgHiCahpUqImkbagegF1iTp1fUpFCiJR2wusynm8Esgt4tYAbAJ+bGbtwCXAXZpQMAvOTTrrE7wyUmpRC7+JMWozTSYASLXCQEeRIxIJjpmxqmEVe/r2zHywSMQEkag9BpxiZmvNLAncCNyVfdI51+Oca3XOtTnn2oCHgeudc48HEGt5GhsG3KRj1FLJKgZHNZkg7GaVqNUtggF1/Uu0KVGTSlXyRM05NwZ8ALgPeAG4wzn3nJl9wsyuL3U8kTTir1I/yazPWnV9loWedA+1VbVUx6tnPriuVV2fEnkrG1ayt38v4xn9/pLKUhXEmzrn7gHuOWHfn05x7KtKEVOkZNcamqxFLaGuz3LQne6mMTnDRIKsVAvsebS4AYkEbHXDasYyYxwaPMTy+uVBhyNSMqpMEEUTLWqTz/pUi1r49Yz0zDyRIKtukdeilskUNyiRAK1q8IY27+7bHXAkIqWlRC2KJlrUJuv6rFKLWhnoTffmNz4NvK5PNw7D3cUNSiRA2URN49Sk0ihRi6IZWtRGxjOMjqv1JczyKsielWr1tppQIBG2JLWERCyhRE0qjhK1KBr1E7Up1lEDFWYPu7wKsmfVZRM1LdEh0RWPxVlRv0JrqUnFUaIWRSN+1+cU66gB6v4MMeecl6jNVOczK5uoDSpRk2hb1bCK3b0aoyaVRYlaFE20qE3e9QmoMHuIDY4NMubG8p9MoK5PqRCrG1ezp28PzrmZDxaJCCVqUTTdOmoJb0UWdX2GV7bOZ/5j1Fq87YDWUpNoW9WwisGxQTqHO4MORaRklKhF0XTrqGW7PkeVqIVVtirBjAXZs6qSfr1PdX1KtGnmp1QiJWpRNDIIGCRqT3pKkwnCL++C7LlSrer6lMhToiaVSIlaFI0Oeq1pZic9dWwygcaohdVEnc98JxOAX+9TLWoSbSvqV2CYEjWpKErUomhkYNIZn+AVZQe1qIXZRItazSxa1FTvUypAMp5kad1SVSeQiqJELYqyLWqTUNdn+GUnE+Rd6xO8CQXq+pQKsLphtVrUpKIoUYuikYFJZ3yC1lErBz0jPdRW1ZKMJ/N/kep9SoVY2bBSi95KRVGiFkXTtagl1KIWdj3pWRRkz6prBZeBoa7iBCUSEqsaVtE53En/SH/QoYiUhBK1KBoZnLJFrSoeIxmPMTiqyQRhNavyUVl1i7ytluiQiFvduBrQzE+pHErUomh06q5P8Lo/1fUZXrMqH5U1seitEjWJNi3RIZVGiVoUjUzd9QnehAJ1fYZXd7qb5prm2b2oTmWkpDJkEzXN/JRKoUQtikYHp1yeA9SiFnadw51zGKOmrk+pDHWJOlprW9nVuyvoUERKQolaFI0MQmLqrk+vRU1j1MJoLDNG70jv7FvUVO9TKsiaxjVK1KRiKFGLGudgpH/aFrVUokpdnyGVXUNt1olaPOHV+1TXp1SAtsY22nvagw5DpCSUqEXN2DC4cahumPKQ2mRcRdlDqnvYT9SqZ5mogb+Wmro+JfraGtvoSndNVPEQiTIlalGT7vO2yfopD9FkgvDqSnvroM26RQ38wuxK1CT62praAGjvbQ80DpFSUKIWNdlErXrq8kOaTBBeXcNeojbryQTgzfxUoiYVYE3jGgCNU5OKoEQtarKrdVfP1KKmyQRhNOcxauAXZleiJtG3smElcYtrnJpUBCVqUZNX16cmE4RV53AnMMcxaqlW1fuUipCIJVjZsFJdn1IRlKhFTTrbojbNZIJEnPRYhvGMK1FQkq/udDf1iXoS8cTsX6x6n1JB2hrblKhJRVCiFjUTY9SmTtRSSa8wu2Z+hk/ncOfcuj1Bi95KRVnTuIbdvbvJOLUgS7QpUYuakfwTNY1TC5/u4e65dXtCzqK3WktNoq+tqY30eJpDA4eCDkWkqJSoRU2eY9QAzfwMoTnV+cyaqPepFjWJvrbGNgB29u4MNhCRIlOiFjXpfsAgOX0JKUATCkJoTnU+s9T1KRUkm6hpiQ6JOiVqUZPu87o9zaY8pFaJWig55+bXopbt+uxX16dEX2ttK6mqlJbokMhTohY1I33TdnuCuj7DamhsiPR4eu6JWjzhJWv9GrMj0WdmtDW1qUVNIk+JWtSk+6edSACaTBBWE+Wj5jqZAKB+qRI1qRhrGtdoiQ6JPCVqUZPum7YqARzr+tTyHOEyUZB9ri1qAA1LoO9ggSISCbe1jWvZ37+f9Hg66FBEikaJWtSMzNyiVud3ffan1aIWJtmqBHOeTABqUZOKsqZxDQ7H7t7dQYciUjRK1KImPfMYtfoaL1EbUKIWKvOq85nVsMRL1FRGSipAW1MboJmfEm1K1KIm3Q/VjdMekkrEMYO+YSVqYTJR53M+iVr9UsiMwVBngaISCa/sEh0v97wcbCAiRaRELWrSvTOOUYvFjPrqKiVqIdOd7qbKqmhITN91Pa2GJd5W49SkAqQSKZbVLVOiJpGmRC1KnPPGqM3Q9QnQUF2lMWoh0zXcxYKaBdg0a+DNqH6pt+1XoiaVYd2Cdezo3hF0GCJFo0QtSsaGvW6vGSYTgDdOrW94tARBSb66hrvmN5EAclrUNKFAKsOGpg3s7NnJeEaz2CWalKhFSbrf2+aRqDXUJNSiFjLzqkqQVe8nampRkwqxfsF60uNp9vfvDzoUkaJQohYlI35B9nxa1Kqr6NcYtVDpHO6c32K34NV4TTZA/+HCBCUScusXrAdge/f2gCMRKQ4lalGS9hO1PMaoeV2fStTCpCAtaqBFb6WirGtaB8COHo1Tk2hSohYls+j6bKypok9dn6ExnhmnJ91TmERNi95KBalP1rMktUQTCiSylKhFSbZFbYblOUBdn2HTM9KDw81/MgGoRU0qzoYFG5SoSWQpUYuSkWyL2vQL3gLUVycYGh1ndFwr2IfBRJ3P+Y5Rg2Mtas7N/1wiZWDdgnXs7NlJxun3mUSPErUoSfd623zWUVMZqVApSFWCrIYlMDp4rIVVJOLWN61neHyYff37gg5FpOCUqEXJxBi1/CYTgMpIhUVB6nxmTSx6q3FqUhmyMz9f7laFAokeJWpRMtIPGCTqZjy0oVqJWphMtKgVoutTZaSkwqxb4M381BIdEkVK1KIk3ed1e8Zm/mdtqEkAaNHbkMi2qC2oKcBkArWoSYVpTDayOLVYNT8lkpSoRUm6L6+lOeBY12d/WmWkwqBruItUVYrqePX8T6YWNalA65vWa+anRJIStShJ9+U1Pg285TlAXZ9h0ZXuKsz4NICaBRCvVhkpqSjrF6zn5Z6XNfNTIkeJWpSM9OfdotaoyQSh0jXcVZjxaQBm/lpq6vqUyrF+wXqGxoY4MHAg6FBECkqJWpRkx6jl4VjXpxK1MDg6dJSW2pbCnbB+icaoSUXJzvxU96dEjRK1KEnn36JWm4gTjxl9wxqjFgYdQx201rYW7oRK1KTCZBO1X3b9MuBIRApLiVqUzGIygZmpjFRIjGfG6Up3FbZFrWGpJhNIRWlMNrK8bjm/7FSiJtGiRC1KRvLv+gRvQoEKswevK91FxmUK3KK2FIa7YXS4cOcUCblTF57Ktq5tQYchUlBK1KLCuVl1fYJXRkqTCYJ3dOgoQGETtewSHer+lApy2sLTaO9tZ3hM/0GR6FCiFhVjaciM5r08B3iJmro+g9cx1AEUOFHTordSgTY2byTjMqpQIJGiRC0qRrJ1Phvzfkl9dZVmfYbARKJWU4QWNY1TkwqysXkjANs61f0p0aFELSrSvd52FmPUGmoSmvUZAtlErbDLc/gtakrUpIKsaFhBqirFi50vBh2KSMEoUYuKdLZFbRaTCWrUohYGHUMdpKpSpBKpwp20bhHEEtC7r3DnFAm5mMXYuHCjluiQSFGiFhXpPm87m8kE1ZpMEAZHh44WdnwaQCwGTSugZ29hzysScqc2ezM/VUpKokKJWlRkx6glZzfrMz2WYWRMv9CC1DFc4MVus5pWKVGTirNx4UYGRgfY16/WZIkGJWpRMYcWtWxhdnV/BqtjqKOw49OymlZBz57Cn1ckxE5rPg1AC99KZChRi4qJRG02Y9QSAFqiI2AFLx+V1bQS+g7AuCaMSOXY0LyBmMW08K1EhhK1qJhYnmN2XZ8AvZr5GZj0eJq+kb7iJWou4yVrIhWitqqW1Q2rNfNTIkOJWlRkW9QSdXm/pEFdn4ErSlWCrKaV3lbj1KTCnLbwNM38lMhQohYV6X5vDbVY/v+k9X6Lmro+g1OUqgRZC1Z7226NU5PKsnHhRvb176N3pDfoUETmTYlaVKR7Z9XtCd6CtwB9aXV9BqUoi91mNa7wtppQIBXm1OZTAU0okGhQohYVI/2zqkoAObM+1aIWmKKUj8pKpiDVoq5PqTinLzwdgBc6Xwg4EpH5U6IWFem+ObSoeYlan8aoBSY7Rm1h7cLivEHTSiVqUnEWpRaxJLWErR1bgw5FZN6UqEVFun9WS3MAVFfFSMRN1QkC1DHUQXN1M4lYojhvoEVvpUJtat3Ecx3PBR2GyLwpUYuKkX6obpzVS8yM+uoqdX0GqGiL3WZlF711rnjvIRJCm1o3sbtvNz3pnqBDEZkXJWpRke6d9Rg1UGH2oBWtfFRW00oviR/uLt57iITQptZNAGpVk7KnRC0q5jBGDaChOkGfFrwNTFEKsufSWmpSoc5oOQOAZ48+G3AkIvOjRC0KMuMw3AO1zbN+aX1NlcaoBcQ5V7zyUVkLVnlbJWpSYRqTjbQ1tmlCgZQ9JWpRMNzjlQpKzX7mYKO6PgPTP9pPejxd5BY1JWpSuTShQKJAiVoUDHZ62zks8VBfrRa1oBR1sdusVCvEq6F7d/HeQySkNrVu4sjQEQ4NHAo6FJE5CyRRM7M3mNk2M9tuZh+Z5Pk/MLPnzWyLmT1oZmuCiLNsDPmJ2hxa1DSZIDhFLR+VFYtB0wq1qElFyk4oeLZD49SkfJU8UTOzOPAPwDXAGcA7zOyMEw57CrjAObcZ+Dbw16WNsswMzj1Ra6hJaHmOgEwUZC9GVYJcWktNKtRpC0+jyqo0oUDKWhAtahcB251zLzvnRoDbgDfnHuCc+5FzbtB/+DCwssQxlpeh+XV9joxnGB4dL3BQMpOStKiBEjWpWNXxak5pPkUTCqSsBZGorQByq0Tv9fdN5beAeyd7wszeY2aPm9njR44cKWCIZWbQa5mZW4uaX+9T3Z8l1zHUQVWsisZZLlQ8a00roe8AjGsZFqk8m1o38XzH82RcJuhQROYkiETNJtk36bLpZvZO4ALgM5M975z7snPuAufcBYsWLSpgiGVmsBNiVbOuTAA5iZq6P0uuY6iDlpoWYlbkH8OmlYCD3n3FfR+RENrUuom+0T529e4KOhSROQkiUdsLrMp5vBLYf+JBZvY64GPA9c65dIliK09Dnd4aajZZDjy9+mqvxqRmfpbe4cHDLKotwX8wtJaaVLCzWs8CYMuRLQFHIjI3QSRqjwGnmNlaM0sCNwJ35R5gZucCX8JL0g4HEGN5Geyc0/g08MaoAfSl1S1WagcGDrCsflnx3yi7llr3numPE4mg9QvW05hs5MnDTwYdisiclDxRc86NAR8A7gNeAO5wzj1nZp8ws+v9wz4D1AP/aWZPm9ldU5xOAIa6IDW3tbiyXZ9qUSst5xwHBg6won664ZkF0rQKLAadLxf/vURCJmYxzl18Lk8eUqIm5akqiDd1zt0D3HPCvj/Nuf+6kgdVzgY7YeHaOb20qdbr+uwZVItaKR0dPkp6PM2yuhK0qFUlYcEaOLq9+O8lEkLnLTmPn+z9SfFLtokUgSoTRMHg0TnVwcGQ9AAAIABJREFU+QRoqU8C0Dk4UsiIZAb7+71hmcvrl5fmDVs2QOeO0ryXSMict/g8AJ4+/HTAkYjMnhK1cuecN5lgDktzANQm4lRXxegcUKJWSvsHSp2orYejO7zvi0iFObPlTKrj1Txx6ImgQxGZNSVq5W5kAMZH5jyZwMxoqUtytF+JWilNtKjVlbBFbaQf+lXzUCpPIp7grNazNKFAypIStXI3jzqfWc11SbrU9VlS+/v305BsoD5ZX5o3bFnvbTVOTSrUeUvO48XOFxkYHQg6FJFZUaJW7ibqfM5t1ifAwrokR9X1WVIlm/GZ1bLB2x7VODWpTOcvPp+My/DM4WeCDkVkVpSolbt51PnMaqlL0jmgNYVLaX///tLM+MxqXAnxarWoScXavGgzMYvxxGGNU5PyokSt3A0WqOtzQMtzlIpzjv39+0s3kQAgFoOF69SiJhWrPlnPxuaNPHX4qaBDEZkVJWrlbrAwLWr96THSY+MFCkqm0zvSy+DYYOkmEmS1rFeLmlS085ecz5YjWxgd139MpXwoUSt3E12fc1tHDWBhXTWAlugokZKvoZbVsh66dkJGCblUpvOWnEd6PM2zR58NOhSRvClRK3eDnVDTBPG5F5lYWOdVJ1CiVhrZRK0kdT5ztWzwlnLpUc1PqUwXLrkQw3h4/8NBhyKSNyVq5W5o7gXZs9SiVlrZxW5X1JVw1ifkzPxU96dUpgU1Czij5Qx+ceAXQYcikjclauVucO5VCbIW1vllpJSolcT+/v3UVtXSVN1U2jfWEh0iXLb8MrYc2ULfSF/QoYjkRYlauRs8WoAWNSVqpbS/fz/L65ZjZqV947pFkGxQi5pUtEuXX8q4G+fRg48GHYpIXpSolbt51PnMWlCbIGZK1ErlwMCB0k8kADA7VvNTpEKds+gcaqtq+cV+dX9KeVCiVu4Gu+bdohaLGc2ppBK1Etk/UOI11HK1bFCLmlS0RDzBhUsvVKImZUOJWjkbG4GRvnmVj8pqrlOiVgoDowP0pHtKW5UgV8t66N4NY6pEIZXrsuWXsbtvN3v6NANawk+JWjkb6vK2qbmvoZalep+lkV2ao6R1PnO1bAAcdO4M5v1FQuDS5ZcCqFVNyoIStXJWgDqfWQtTSbqUqBXdgYEDQABrqGW1rPe2R18K5v1FQmBt41qW1i1VoiZlQYlaORs86m3nOZkAYGG9uj5LYaIqQanLR2W1bgQMDj0fzPuLhICZcdnyy3jk4COMZcaCDkdkWkrUylkB6nxmtdQl6RocIZNx8z6XTG1//36SsSQttfMfVzgn1fVe9+fBLcG8v0hIXLr8UvpG+tjasTXoUESmpUStnGW7PgvQotacSpJx0DOkYsXFtLd/L8vqlxGzAH/0lp6lRE0q3uXLL6cqVsUPd/8w6FBEpqVErZwVskWt3lv0VhMKimt3727WNK4JNoilZ3kzP4e6g41DJEANyQYuXnoxD+5+EOfUkyDhpUStnA11QlUtJFPzPpWqExRfxmXY3bebtsa2YANZttnbHlSXj1S216x+DXv69rC9W2sLSngpUStng10F6fYEr+sTlKgV0+HBwwyNDYWgRU2JmgjAq1e9GkDdnxJqStTKWQHqfGZluz6VqBVPe287QPAtavWLoX6JEjWpeItSi9i8aDMP7n4w6FBEpqRErZwNdRZksVvIbVHTivXFsqtnF0DwLWrgTyhQoiby2tWv5YXOFzjQfyDoUEQmpUStnA12FqR8FEBNIk5dMk7ngGZ9Fkt7bzu1VbUsTi0OOhSv+/PICyolJRXvNateA8AP96j7U8JJiVo56z8EdYX7o+8teqs/3MWyq3cXaxrXYGZBh+K1qGXG4MiLQUciEqi2pjbWN63XODUJLSVq5Wq4F9K90FS4mpEL66q1PEcRZRO1UNCEApEJr1n9Gp449ARdw11BhyJyEiVq5arXK0VEYwETtVSCrkElasUwOj7Kvv594UnUFq6DRJ0SNRHg6rarGXfj3Nd+X9ChiJxEiVq56t3rbQuZqNVV09mvRK0Y9vbvZdyNBz/jMysWg6Wb4IAqFIhsbN7IKc2ncPeOu4MOReQkStTKVc8+b1vArs+W+iRHB0a0SncR7OoN0YzPrOzMz0wm6EhEAmVmXLfuOrZ0bKG9pz3ocESOo0StXPXuAwwalhXslM2pJOmxDEOj4wU7p3iyv/zDlahthpE+6N4VdCQigbt23bXELMbdL6tVTcJFiVq56tkHDUshnijYKVv8MlJH1f1ZcO297TRXN9NU3RR0KMdkS0ntfzLYOERCYHFqMRcvvZjvv/x9Mk6tzBIeStTKVe/ego5PA2hWvc+i2dW7i7amtqDDON6SsyDZALt+HnQkIqFw3frr2Ne/jycP6T8vEh5K1MpV7/6Cjk+DY2WkOvq1llqhhWppjqx4Fay+GNp/FnQkIqHw2tWvpbaqlv9++b+DDkVkghK1cuSc1/VZ4Ba1lc21AOzpHCzoeSvdwOgAR4aOhC9RA1hzmVehYOBo0JGIBC6VSHHVmqu4r/0+hsaGgg5HBFCiVp6Gu2F0oOCJ2qL6alLJOO1HlagVUnbGZ2iW5si15gpvu0utaiIAb9nwFvpH+7l3571BhyICKFErT0VYmgO8KeprWurYdXSgoOetdKFcmiNr+blQVatxaiK+C5ZcwIYFG/jWC9/SUkUSCkrUylGvn6g1riz4qdtaUuxSi1pBtfe2YxirGlYFHcrJqpKw6iLY9VDQkYiEgpnxa6f/Gtu6tvHkYU0qkOApUStHPX5VggK3qAGsaaljT9cgY+Oanl4oL3W9xIr6FdRU1QQdyuTaroCDz8KQ6hyKAFy79loakg1864VvBR2KiBK1stS7HywO9UsKfuq1rSlGxx0HeoYLfu5KteXIFs5qPSvoMKa25jLAwe6Hg45EJBRSiRRv3fBWHtz9IAcHDgYdjlQ4JWrlqHefV5EgFi/4qde01AHQrnFqBXF48DCHBg9x1qIQJ2orLoB4tSYUiOS44bQbyLgMd2y7I+hQpMIpUStHPXuL0u0J0OYnahqnVhhbj2wFCHeLWqIGVl6g9dREcqxqWMUrV76SO1+6k+Ex9TBIcJSolaPewq+hlrW4oZqaREwzPwtkS8cWqmJVnN5yetChTG/N5XDgGUj3BR2JSGi8+8x30zncyZ0v3Rl0KFLBlKiVG+eKUpUgKxYz1iys01pqBbK1YysbmzdSHa8OOpTptV0Bbhx2/jToSERC48KlF3Lh0gv5l63/olY1CYwStXIzeBTGhouyNEfWmpaUWtQKYDwzznMdz4W72zNr9aVQ0wQv3B10JCKhcvPZN3Nk6Iha1SQwStTKzcQaasuL9hZtrXXsOjpIJqPFHudjR88OBscG2bxoc9ChzKwqCRvfCNvugfHRoKMRCY3cVrX0uOogS+kpUSs3RapKkGtNS4r0WIZDfWrqn4+ymEiQ6/TrvfJk7er+FMmVbVX79i+/HXQoUoGUqJWbIlYlyMrO/Gzv0Di1+djasZXGZGM4S0dNZv2rIVGn7k+RE+S2qg2O6veilJYStXLTsxdiCahbVLS3WNOSAtA4tXna0uEtdGtmQYeSn0QtnHo1vPDfkBkPOhqRUPm9c3+PI0NH+MrWrwQdilQYJWrlpnefNz4tVrx/umVNtSTjMc38nIfB0UF2dO8I90K3kzn9Ohg4DHseCToSkVA5Z/E5vGndm/jac19jT++eoMORCqJErdz0FG8Ntax4zFi1sFYtavPw3NHnyLhM+YxPyzrlaq9Kgbo/RU7y++f/PlWxKj7z+GeCDkUqiBK1ctP5MjQXf8xTW4vWUpuPZ448A5TRRIKs6gbY8FovUXOa9SuSa3FqMe/d/F5+tOdH/GyfKnlIaShRKyf9R6D/ICwt/h//NS117Do6gNMf6zl55MAjrG9aT3NNc9ChzN7p10HPHnV/ikziXWe8i9UNq7nl0Vu0CK6UhBK1cnLIW+6BJZuK/lZtrSkGR8Y50q91g2ZrcHSQJw49wRUrrgg6lLk5/XqoboJH/znoSERCJxlP8rGLP0Z7bztfeOoLQYcjFUCJWjk56CdqJWhRyy7Rsf1wf9HfK2oeO/gYo5lRLl9xedChzE11PZz7Tnj+e9B7IOhoRELnshWXccPGG/jm89/k0QOPBh2ORJwStXJycKu3flpqYdHf6uyVCzCDx3Z2Ff29ouan+35KbVUt5y85P+hQ5u6i3/aW6Hjiq0FHIhJKf3D+H7CmcQ1/8rM/oW+kL+hwJMKUqJWTg8+WpDUNoCmV4IxljTz88tGSvF9UOOd4aN9DXLz0YpLxZNDhzN3CdXDq6+Hxr8KYur9FTpRKpPjkFZ/k0OAhPvXIpzSeV4pGiVq5GB2Cjl/C0uKPT8u6dF0LT+zuYnhUi5/ma1fvLvb17yvfbs9cF73HW1Ptue8FHYlIKJ296Gzeu/m93P3y3dy+7fagw5GIUqJWLg6/AG68ZC1qAJesa2FkLMPTe7pL9p7l7qF9DwFEI1Fb/xpoPRUe/VLQkYiE1ns3v5dXrHwFn3700zx28LGgw5EIUqJWLg49621LmKhduHYhZqj7cxYe2v8QbY1trGpYFXQo82fmtartewJ2/CjoaERCKR6Lc8uVt7CqcRUf/vGH2de/L+iQJGKUqJWLg1sh2QAL2kr2lk21Cc5crnFq+RoeG+bxg4+X77Ickzn3XbBgNdz3MdX/FJlCQ7KBL7z6C4xlxvjAgx+ge1i9EFI4StTKxcGt3vi0Itb4nMwla1t4cne3xqnl4fFDj5MeT0crUUvUwFV/AYefgye/EXQ0IqHV1tTG51/9eXb37uZ9D7xPM0GlYJSolYNMxpvxWYKFbk+kcWr5+8HOH5T/shyTOePNsPoy+OFfwnBP0NGIhNYlyy7h86/6PNs6t/H+B97P4KjK8Mn8KVErB927YKSvpOPTsjROLT9dw13cu/Nerl9/PTVVNUGHU1hm8Ia/gsGj8NPPBR2NSKi9ctUr+fQrPs2Wji3c/MDN9I70Bh2SlDklauWghBUJTpQdp/aLHUrUpnPnS3cykhnhHae9I+hQimP5uXD2O+Dhfzr2fRSRSV3ddjW3XHkLWzq2cNO9N3GgXxU+ZO6UqJWDg1vB4rD49EDe/tJ1LTy1R+PUpjKWGeP2bbdz8dKLWb9gfdDhFM9Vn4BUC9xxEwyrlUBkOtesvYZbX3crBwcO8s573smLnS8GHZKUKSVq5eDgFmg9BRK1gbz95RtaGRnLcP/zhwJ5/7D7yZ6fcHDgIO84PaKtaVn1i+Bt/wJd7XD3B0ErsYtM6+JlF/P1a76OmfGue97Fd176jioYyKwpUQu7dD/s/F9YfWlgIVx5yiLWLarjn368Q79kJvGtF7/F8rrlvGrlq4IOpfjaLofX/Ak89x147CtBRyMSeqc2n8ptb7qNsxefzZ/9/M/46EMfZWB0IOiwpIwoUQu7F+6G0UE4+8bAQojHjPe9cj3PH+jlJ788ElgcYbS9azuPHnyUG067gXgsHnQ4pXH5h+CUq+EHH4VtPwg6GpHQa61t5Uuv+xK/e87vcu/Oe3nbXW+bqGIiMhMlamH3zH9AcxusujjQMN5yzgqWNdXwjz/aEWgcYeKc47NPfJbaqlreuuGtQYdTOrEYvPWfvXX9bn8nbLs36IhEQi8ei/O+s9/HV1//VRKxBDc/cDN/9L9/RMdQR9ChScgpUQuznr1et+fmG70lEgKUrIrxO1eu49H2Th5v7ww0lrC4++W7+dm+n/HB8z7IgpoFQYdTWrUL4F3f82Yi3/4uePGeoCMSKQvnLTmPO6+/k/ef/X4e2PUAb/zOG/niU1+kf6Q/6NAkpJSohdmWOwAHZ98QdCQA3HjRKppTCf7xx2pV6xjq4NOPfppzF58b3SU5ZlK7AN79PVi22WtZ++nnvMWZRWRayXiSm8+5me+++bu8YuUr+NKWL3HNd67hK1u/Qk9ai0rL8ZSohZVzsOV2WHUJLFwXdDQApJJV/Obla/nhi4f54YuVPQP0kw9/kuGxYf78sj8nZhX8Y1TTBO/+L696wYOfgH9/O/RrHKNIPtY0ruGzr/wst117G2e2nMnfPfl3XPXtq/jUI5+ivac96PAkJCr4L0zIHXgajrwY6CSCyfz2les4c3kjH/yPp9l+uDJr2d2x7Q4e2P0AN59zM2ub1gYdTvCqG+Dt/wpv+htofwj+6VJ44msq4i6SpzNbz+TWq27l29d9m6vWXMUd2+7guu9dx0333sR3X/quukUrnEVluYULLrjAPf7440GHUTjf/zA8+U34w21Q2xx0NMfZ1z3Em7/4EA01Cb73/stpSiWCDqlk/uPF/+CvHvkrrlhxBX//mr+nKlYVdEjhcnCr993d84hXm/Z1fw4bXhv4GEuRcnJk8Ah37biL723/Hu297SRiCS5dfimvW/06rlx5Ja21rUGHKAVgZk845y6Y8TglaiH08o/hm78C5/w6vPmLQUczqcfaO/m1f36Yi9e2cOu7zqe+OvoJy9ef+zqfffyzvHrVq/nsKz9LMp4MOqRwcg6e+y7c/2fQsxsWnQ4Xvwc23wDJuqCjEykbzjmeOfIM9++6nwd2PcD+gf0AbGzeyGXLL+Pcxedy1qKzlLiVKSVq5ap3P9x6pVeq53d+CNX1QUc0pTse28Mff2cLKxbU8pm3n82l61uCDqko9vfv52+f+Fvubb+Xq9dczS2vuIVErHJaEedsdBievRMeudWrrpGog1Ov9sazbbgq1N9tkbBxzvFi54v8bP/P+Pn+n/PU4acYy4wBsLxuOWctOouzWs9i86LNbFiwgYZkQ8ARy0yUqJWjsRH42rVw+Hn4nR/BolODjmhGj+7s5P/79jPsOjrIuy5Zw29dsZa21mi0mnQMdfCtF77FN57/BgC/sek3eO/m96q7c7ac87pCn7nNW8B5sANiVbD8PFh7pTdhZtlmaFgadKQiZWNobIjnjz7P1iNb2dKxha0dWzk4cHDi+UW1i1jbtHbi1tbYxrK6ZSytW0oqkQowcskKdaJmZm8A/g6IA19xzt1ywvPVwDeA84GjwA3Oufbpzln2idrRHfA//w+2fR/e/lXYVD4LqA6OjPHpe1/kmw/vIuPgoraFvOXcFVy0diHrWuuIxcpnfNLBgYM8cuAR7tl5Dw8feJiMy3Dtumv50HkfYmmdEol5y4zDrp/Djge9iQf7ngTnTzqoWwyLT/MWeD7uttYbp6lxbiLTOjJ4hGc7nmVn70529ni3l3tepm/k+IlfjclGltYtZWndUpakltBc00xzdTNN1U0T9xfULKC5upnaqlpMP3tFEdpEzcziwC+Bq4C9wGPAO5xzz+cc835gs3PufWZ2I/ArzrlpFxMry0RtuAeObIOn/s27xZPw6o/C5R8MOrI5OdQ7zJ1P7uU/H9/Lzg6vll1TbYKzVjSxpiXFmpYUy5pqWZBKsKA2SVNtgqbaBA01VSVL5pxz9I320TXcRedwJ3v79rK7bzftPe08c+QZDgwcAGBF/QquXXct1667lnVN4VgeJZLS/XDgGa9r9MAWOPqSV/R94IQlPuLV3nCAuhZItUJdq/e4utEb95asg2Q9JFM59+sgkYKqaoglIO7fYgnvZy2mSe8Sfc45Ooc72dW7iwMDBzg4cPDYbfAghwcP053uJuMmXwMxEUvQVN1EXaKOVFXK2yZS1FV521TC21dbVUt1vJpkPEkyljx2P37sfnW8mmTM25eIJYjH4sQtTjwWp8qqjj22eEUkh2FO1C4FPu6ce73/+KMAzrlP5Rxzn3/ML8ysCjgILHLTBLt0XYP79U+cc9y+k4+e/OVuikeTHe0mecJNcfTJb+/AjXmtCuMjMDrk7Y7FoGkVLFzv/VGZeP0k55zkEkx23JT7J92V3/tMeewkF2RwdIy+oTH60mMMpMcYHh1nLOMmDwCvnmjMwDDMvMaTmIGZ9ziGgf9ze9yPrx37UCf+WDsbI8OIf0sz7m9PjsGopoUGW0cDG2iyU6ljTWh+UYQkjFmxk/41Zqc6M8TC0YO0ju6ndXQ/TeNHqR/roT7TQ/14N/Xj3rY2Mzjn98gQY8yqGLcqxvG3VoXDcBbDYWSIHffYEcNZzn7/sTvuOCYeZywG2AnfuGPXxp10nXKey3lq2uOmudZuquNO+FLlH59EUQbHoGXoj2Xot3H6Yhn6bJz+mHd/wMYZNsewZXK2/v1YhrQVPo+IOYhjxIC4836jxIGYM2+LTezPfkuz//UyDHNMPHfsefOfz7k5m+T1/jlg4jyQ+5Mx2b2T/wbl7pvsua+999G8ErUgBtusAPbkPN4LnFjIcuIY59yYmfUALcBxRdHM7D3AewAa19SwfeSEFZ3Nu8gnOv4P/fS/iKa78DPt8/af8IzFsHgMEvVQ3wJVNd7/+uMJGOmBkRMOnyS+yf4ITvWHMd/XT75rinNO9v4nvE9VHBbWx1lYHwe85HMsk2F03DGecYyNO8YyjrFMhvGMYzzjJYcOL5/NOOfltTmPyT7OfSMHzmV/5I5Pss2lMLeAmEsQJ0kyk8RIYpkUMVdPzNVTNd5CPLMQw5scMOzfYGDSz15q5TiEtHAht/q3zd7D7G/q+LEjzGWoZoQaN0Qtw9S6YWrcsH9/iBqXJsEoVYwRd+MkGKMqe3PjxBmjyo3ipWpjVLkxL8VyXhrmpWAZzPnbbArmjqVqx9K23H3jxx032dWxE9KgqVKnqdO8E5/L77gTz0eex033OqlsGSBtMJpzGzEYxd/m7Ms+HjPvdeMG40DG33qPzX/scvYdOya7HfO/5M6PAf+56fa53Ofs+H25z7lJnjvR8f+ZOn573HFT3M9XEInaZH/9T27imPkYnHNfBr4MXtfnf/1mmXV9ioiISEWy9+TXYh3EII29wKqcxyuB/VMd43d9NgGqBC4iIiIVJYhE7THgFDNba2ZJ4EbgrhOOuQu4yb//duCH041PExEREYmiknd9+mPOPgDchzfa5F+dc8+Z2SeAx51zdwH/AnzTzLbjtaSFq+CliIiISAkEsnKnc+4e4J4T9v1pzv1h4P+UOi4RERGRMNFCQiIiIiIhpURNREREJKSUqImIiIiElBI1ERERkZBSoiYiIiISUkrUREREREJKiZqIiIhISClRExEREQkpJWoiIiIiIaVETURERCSklKiJiIiIhJQSNREREZGQUqImIiIiElJK1ERERERCSomaiIiISEgpURMREREJKSVqIiIiIiGlRE1EREQkpJSoiYiIiISUOeeCjqEgzOwIsCvoOGahFegIOogyoOuUH12n/Og6zUzXKD+6TvnRdZraGufcopkOikyiVm7M7HHn3AVBxxF2uk750XXKj67TzHSN8qPrlB9dp/lT16eIiIhISClRExEREQkpJWrB+XLQAZQJXaf86DrlR9dpZrpG+dF1yo+u0zxpjJqIiIhISKlFTURERCSklKiJiIiIhJQStQIxs1Vm9iMze8HMnjOzD/r7P25m+8zsaf/2xpzXfNTMtpvZNjN7fc7+N/j7tpvZR4L4PMVkZu1mttW/Ho/7+xaa2f1m9pK/bfb3m5l9wb8WW8zsvJzz3OQf/5KZ3RTU5ykGM9uY85152sx6zexD+j6Bmf2rmR02s2dz9hXs+2Nm5/vfz+3+a620n7AwprhOnzGzF/1r8V0zW+DvbzOzoZzv1a05r5n0ekx1zcvNFNepYD9nZrbWzB7xr9PtZpYs3acrjCmu0e0516fdzJ7291fsd6lonHO6FeAGLAPO8+83AL8EzgA+DvzhJMefATwDVANrgR1A3L/tANYBSf+YM4L+fAW+Vu1A6wn7/hr4iH//I8Cn/ftvBO4FDLgEeMTfvxB42d82+/ebg/5sRbpeceAgsEbfJwfwCuA84NlifH+AR4FL/dfcC1wT9Gcu4HW6Gqjy73865zq15R53wnkmvR5TXfNyu01xnQr2cwbcAdzo378VuDnoz1yIa3TC858D/rTSv0vFuqlFrUCccwecc0/69/uAF4AV07zkzcBtzrm0c24nsB24yL9td8697JwbAW7zj426NwNf9+9/HXhLzv5vOM/DwAIzWwa8HrjfOdfpnOsC7gfeUOqgS+S1wA7n3HSVNyrm++Sc+1+g84TdBfn++M81Oud+4by/Gt/IOVdZmew6Oef+xzk35j98GFg53TlmuB5TXfOyMsX3aSqz+jnzW4xeA3zbf31ZXqfprpH/GX8V+I/pzlEJ36ViUaJWBGbWBpwLPOLv+oDf1fCvOU26K4A9OS/b6++ban+UOOB/zOwJM3uPv2+Jc+4AeEkvsNjfX8nXKetGjv8lqO/TyQr1/Vnh3z9xfxT9Jl6rRtZaM3vKzH5iZlf6+6a7HlNd86goxM9ZC9CdkxxH8ft0JXDIOfdSzj59lwpIiVqBmVk9cCfwIedcL/BPwHrgHOAAXhMxeE2/J3LT7I+Sy51z5wHXAL9rZq+Y5thKvk7441muB/7T36Xv0+zM9rpUxPUys48BY8C/+7sOAKudc+cCfwB8y8waqZDrMYlC/ZxVwvV7B8f/R1LfpQJTolZAZpbAS9L+3Tn3HQDn3CHn3LhzLgP8M14TOXj/m1iV8/KVwP5p9keGc26/vz0MfBfvmhzym8azTeSH/cMr9jr5rgGedM4dAn2fplGo789eju8OjNz18idOvAn4db8LCr8r76h//wm88VanMv31mOqal70C/px14HW3V52wPxL8z/VW4PbsPn2XCk+JWoH4/fT/ArzgnPt8zv5lOYf9CpCdNXMXcKOZVZvZWuAUvIGWjwGn+DOFknjdXneV4jOUgpnVmVlD9j7e4OZn8T5jdubdTcB/+ffvAt5tnkuAHr9p/D7gajNr9rslrvb3Rc1x/1vV92lKBfn++M/1mdkl/s/0u3POVfbM7A3AHwPXO+cGc/YvMrO4f38d3vfn5Rmux1TXvOwV6ufMT4R/BLzdf32krhPwOuBF59xEl6Yc3h9lAAAGK0lEQVS+S0UQ9GyGqNyAK/CacbcAT/u3NwLfBLb6++8CluW85mN4/9vYRs7MMv91v/Sf+1jQn63A12kd3oyoZ4Dnsp8PbyzHg8BL/nahv9+Af/CvxVbggpxz/SbeYN7twG8E/dmKcK1SwFGgKWdfxX+f8BLXA8Ao3v/Sf6uQ3x/gArw/zDuAL+JXcCm32xTXaTveWKrs76hb/WPf5v88PgM8CVw30/WY6pqX222K61SwnzP/d96j/rX/T6A66M9ciGvk7/8a8L4Tjq3Y71KxbiohJSIiIhJS6voUERERCSklaiIiIiIhpURNREREJKSUqImIiIiElBI1ERERkZBSoiYiBWdmrzKz//bvX29mH8nj+MtyHr/PzN49zxg+ZmZP+7fxnPu/N5/zFpOZrTOzG4t4/n8zs51m9tv+4780sw/592vN7If+dWvwr9WImS0oVjwiMrOqmQ8REZlY1Nmct1p73pxzdzHzIruvAvqBn/uvuXUuMZ7wvp8EPglgZv3OuXPme85CMLMqd6z244nW4S2Wetsszxl3zo3nefjvO+e+d8Lrq/GqhPzcv24A55jZ3pNeLSIlpRY1EZmSmbWZ2Qtm9o94i1euMrN/MrPHzew5M/vznGPfYGYvmtlDeGVlsvv/r5l90b9/nZk94hdsfsDMlphZG/A+4Pf9VpwrzezjZvaHZna6mT16Qjxb/Pvnm1f0+Qkzu++E1eRn+lxLzOw7/ud41K9akG1h+pqZ/Y+ZtZvZW8zsc2b2rJl93/xSQGa218xu8V/7iL8C+0zn/ZKZ3Q981czWm9lP/evwhJld7Id2C/DqbMufmf22mf1tTtw/MLMrzKzKzLr98z4KXGRmF+Zcj3vNbEmelyMB3AE855z7k3yvoYiUhhI1EZnJRuAbzrlznXO78FZdvwDYDLzSzDabWQ1eTcTrgCuBpVOc6yHgEucVbL4N+CPnXDtwK/A3zrlznHM/zR7snHsBSGYTIeAG4A7z6ur+PfB259z5wL/it57l6QvAX/uf41eBr+Q8txZvlfm3Ad8CfuCc2wRkgDfkHNflnLsI+BKQLRs33XnPxVul/V14q7xf5V+HX/dfB/AR4Ef+dfgC02vCqwN7EV4S/XfA2/zr8W/AX+R3KfgoMOCc+3Cex4tICanrU0Rmsss593DO4181s/fg/f5YBpyB95++nc65l8AbCwW8Z5JzrQRu91u/ksDOPN7/Dryk5xa8RO0GvORxE3C/1yNLHC/5ydfrgI3+awGazazWv3+Pc27MzLYCOOfu9/dvBdpyzpGtwfrvfmwznfe/nHPD/v1q4ItmdjYwBqyfRexZI3jdlQCnA2cCD+Rcj3y7Lf8XuMLMNjjnts8hDhEpIiVqIjKTgewd8wpR/yFwoXOuy8y+BtT4T+dTj+7vgc875+4ys1cBH8/jNbcD/2lm3wGcc+4lMzsLr6vu0vw/xnEMuMg5N3LcTi/JSfsPM3jJEDmPc39nTvZ5pzvvQM6uD+PV3HwnXtdj/xRxjnF8z0dNzv0hd6wGoAFbnHNXTnGe6fwYL+m818yudM4dnMM5RKRI1PUpIrPRiJdw9PhjoK7x978IrDWzbMvQO6Z4fROwz79/U87+PqBhshc453YA48D/w0vawCuIvcjMLgUws4SZnTmLz/EA8LvZB2Y2l4kGN/jbdwA/m+V5m4ADfqJ1E16iBSdfh3bgXPO0AedPcb7ngRVmdpH/vsnZXA/n3O14Xaf3mlljvq8TkeJToiYieXPOPQM8BTyHNy7sZ/7+Ybyuzu/7kwl2TXGKj+O1jv0U6MjZfzfwK9nJBJO87na81qc7/PcbAd4OfNrMngGeBi6b5HVT+V3gcjPbYmbPA78zi9dmpfyB/DfjtZDN5rxfBH7bzB4G1nCsFe8pIG5mz5i3jMhP8BLbrXjdq09PdjLnXBrvenzevx5PARdPduxUnHNfBL4P/Jd5s0BFJATsWMu5iIjkw7xlKzY557qDjmU2/LGD3z5xeY5pji/LzykSJWpRExGpHN3Ap8xf8HYq5i94i9clO6t180SksNSiJiIiIhJSalETERERCSklaiIiIiIhpURNREREJKSUqImIiIiElBI1ERERkZD6/wHwZLy0MFdVwgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%pylab inline\n", + "\n", + "fig = figure(0, figsize=(10, 10))\n", + "ax = fig.add_subplot(111)\n", + "si_ionization_state.T.iloc[:, :3].plot(ax=ax)\n", + "xlabel('radiative Temperature [K]')\n", + "ylabel('Number density [1/cm$^3$]')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.8" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/research/code_comparison/plasma_compare/tardis_example.yml b/docs/research/code_comparison/plasma_compare/tardis_example.yml new file mode 100644 index 00000000000..1cf7cab151d --- /dev/null +++ b/docs/research/code_comparison/plasma_compare/tardis_example.yml @@ -0,0 +1,81 @@ +# Example YAML configuration for TARDIS +tardis_config_version: v1.0 + +supernova: + luminosity_requested: 9.44 log_lsun + time_explosion: 13 day + #distance: 24.2 Mpc + +# standard atomic data base; get it from the tardis-refdata repository +atom_data: kurucz_cd23_chianti_H_He.h5 + +model: + structure: + type: specific + velocity: + start: 1.1e4 km/s + stop: 20000 km/s + num: 1 + density: + # showing different configuration options separated by comments + # simple uniform + #--------------- + type: uniform + value: 1e-13 g/cm^3 + #--------------- + # branch85_w7 - fit of seven order polynomial to W7 (like Branch 85) + #--------------- + #type: branch85_w7 + # default, no need to change + #w7_time_0: 19.9999584 s + # default, no need to change + #w7_rho_0: 3e29 g/cm^3 + #--------------- + + abundances: + type: uniform + O: 0.19 + Mg: 0.03 + Si: 0.52 + S: 0.19 + Ar: 0.04 + Ca: 0.03 + +plasma: + #initial_t_inner: 10000 K + #initial_t_rad: 10000 K + disable_electron_scattering: no + ionization: lte + excitation: lte + # radiative_rates_type - currently supported are dilute-blackbody, detailed and blackbody + radiative_rates_type: dilute-blackbody + # line_interaction_type - currently supported are scatter, downbranch and macroatom + line_interaction_type: macroatom + +montecarlo: + seed: 23111963 + no_of_packets: 4.0e+4 + iterations: 20 + # Number of threads used in OMP mode; uncomment if you want to control the + # OMP behaviour via the config; otherwise the maximum available number of + # threads is used or the number specified in the OMP_NUM_THREADS environment + # variable + # -------- + #nthreads: 1 + + last_no_of_packets: 1.e+5 + no_of_virtual_packets: 10 + + convergence_strategy: + type: damped + damping_constant: 1.0 + threshold: 0.05 + fraction: 0.8 + hold_iterations: 3 + t_inner: + damping_constant: 1.0 + +spectrum: + start: 500 angstrom + stop: 20000 angstrom + num: 10000 diff --git a/tardis/io/parsers/blondin_toymodel.py b/tardis/io/parsers/blondin_toymodel.py index fe8280d65ed..7b9d248069c 100644 --- a/tardis/io/parsers/blondin_toymodel.py +++ b/tardis/io/parsers/blondin_toymodel.py @@ -92,7 +92,7 @@ def read_blondin_toymodel(fname): def convert_blondin_toymodel(in_fname, out_fname, v_inner, v_outer): """ - + Parameters ---------- in_fname From 067751f114a0cbf4f92d4e269abb861f2c31afc2 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 5 Aug 2019 10:58:16 +0200 Subject: [PATCH 065/467] add blondin compare files --- .../toy_models/blondin_compare.csvy | 841 ++++++++++++++++++ .../toy_models/blondin_model_compare.yml | 44 + .../toy_models/reading blondin toymodel.ipynb | 20 + 3 files changed, 905 insertions(+) create mode 100644 docs/research/code_comparison/toy_models/blondin_compare.csvy create mode 100644 docs/research/code_comparison/toy_models/blondin_model_compare.yml diff --git a/docs/research/code_comparison/toy_models/blondin_compare.csvy b/docs/research/code_comparison/toy_models/blondin_compare.csvy new file mode 100644 index 00000000000..8c33c171a3e --- /dev/null +++ b/docs/research/code_comparison/toy_models/blondin_compare.csvy @@ -0,0 +1,841 @@ +--- +datatype: + fields: + - desc: velocities of shell outer bounderies. + name: velocity + unit: km/s + - desc: mean density of shell. + name: density + unit: g/cm^3 + - desc: electron temperature. + name: t_electron + unit: K + - desc: Fraction Ni56 abundance + name: Ni56 + - desc: Fraction Ti abundance + name: Ti + - desc: Fraction Ca abundance + name: Ca + - desc: Fraction S abundance + name: S + - desc: Fraction Si abundance + name: Si + - desc: Fraction O abundance + name: O + - desc: Fraction C abundance + name: C +description: Converted snia_toy01.dat to csvy format +model_density_time_0: 2.0 d +tardis_model_config_version: v1.0 +v_inner_boundary: 9000 km/s +v_outer_boundary: 20000 km/s + +--- +velocity,density,t_electron,Ni56,Ti,Ca,S,Si,O,C +50.0,6.2419e-10,125320.0,0.9999993831453803,0.0,6.168496194932278e-08,2.158998668210876e-07,3.392697907197332e-07,0.0,0.0 +100.0,6.1502e-10,124860.0,0.9999993831453803,0.0,6.168496194932278e-08,2.158998668210876e-07,3.392697907197332e-07,0.0,0.0 +150.0,6.0492e-10,124340.0,0.9999993831453803,0.0,6.168496194932278e-08,2.158998668210876e-07,3.392697907197332e-07,0.0,0.0 +200.0,5.9475e-10,123820.0,0.9999993831453803,0.0,6.168496194932278e-08,2.158998668210876e-07,3.392697907197332e-07,0.0,0.0 +250.0,5.846799999999999e-10,123290.0,0.9999993586334114,0.0,6.41369588646711e-08,2.244798560260282e-07,3.5274977375793583e-07,0.0,0.0 +300.0,5.7473e-10,122760.0,0.9999975325760884,0.0,2.46739391187824e-07,8.63587869157384e-07,1.3570966514590096e-06,0.0,0.0 +350.0,5.649299999999999e-10,122240.0,0.9999953445816728,0.0,4.6553783271655196e-07,1.6293924144613778e-06,2.5604880798013736e-06,0.0,0.0 +400.0,5.5529e-10,121710.0,0.9999911759896231,0.0,8.824010377036204e-07,3.0884036319626717e-06,4.853205707369912e-06,0.0,0.0 +450.0,5.4581e-10,121190.0,0.999982271759725,0.0,1.7728040274561896e-06,6.204914096323844e-06,9.750522151236223e-06,0.0,0.0 +500.0,5.3648e-10,120670.0,0.9999689256333862,0.0,3.107396661413027e-06,1.0875988314838153e-05,1.7090981637449326e-05,0.0,0.0 +550.0,5.273099999999999e-10,120150.0,0.9999474790324105,0.0,5.252086758964071e-06,1.8381953657256634e-05,2.88869271731679e-05,0.0,0.0 +600.0,5.1829e-10,119630.0,0.9999130797322856,0.0,8.692026771442457e-06,3.0422093700048593e-05,4.7806147242933506e-05,0.0,0.0 +650.0,5.0942e-10,119110.0,0.9998640994428076,0.0,1.3590055719228446e-05,4.756519501729957e-05,7.474530645575646e-05,0.0,0.0 +700.0,5.0071e-10,118600.0,0.9997916916475422,0.0,2.0831035246111633e-05,7.290712335885273e-05,0.000114570193852768,0.0,0.0 +750.0,4.9214e-10,118080.0,0.9996930210723097,0.0,3.069809276963636e-05,0.00010744032468466121,0.00016884051023602193,0.0,0.0 +800.0,4.837200000000001e-10,117570.0,0.999556402596507,0.0,4.435884035253356e-05,0.00015525944122127104,0.00024397912191914022,0.0,0.0 +850.0,4.754400000000001e-10,117060.0,0.9993764572104591,0.0,6.235477895230861e-05,0.00021823922634194262,0.0003429487842465599,0.0,0.0 +900.0,4.6731e-10,116550.0,0.9991384913008782,0.0,8.614986991369643e-05,0.00030152954469038755,0.0004738292845177804,0.0,0.0 +950.0,4.5931e-10,116040.0,0.9988340552662643,0.0,0.00011659047335732184,0.0004080816568115267,0.0006412726035667705,0.0,0.0 +1000.0,4.5145e-10,115530.0,0.9984468349235334,0.0,0.0001553195076371608,0.0005436082767617628,0.0008542372920677843,0.0,0.0 +1050.0,4.4372e-10,115020.0,0.9979622054964741,0.0,0.00020378045035479526,0.0007132115761975834,0.001120802476973474,0.0,0.0 +1100.0,4.3612e-10,114500.0,0.9973646975877256,0.0,0.0002635312412321462,0.0009223643443360618,0.001449406826706154,0.0,0.0 +1150.0,4.2866e-10,113990.0,0.9966314451155953,0.0,0.0003368504884332082,0.0011790017095524787,0.0018527026864188954,0.0,0.0 +1200.0,4.2132000000000005e-10,113470.0,0.9957463555683387,0.0,0.00042535844318809796,0.0014887945510119434,0.002339491437461339,0.0,0.0 +1250.0,4.1411000000000003e-10,112950.0,0.9946851359896851,0.0,0.0005314874010266091,0.0018601909036664813,0.0029231857056219,0.0,0.0 +1300.0,4.0701999999999996e-10,112430.0,0.9934245300158568,0.0,0.0006575429983960726,0.0023014104944318542,0.0036165164913152,0.0,0.0 +1350.0,4.0005e-10,111900.0,0.9919371233823422,0.0,0.000806297661736781,0.002821991816223733,0.004434587139697296,0.0,0.0 +1400.0,3.932e-10,111370.0,0.990198128525537,0.0,0.0009801881474444012,0.003430693515989254,0.0053909898110292565,0.0,0.0 +1450.0,3.8647e-10,110840.0,0.9881760472958109,0.0,0.0011823952704189185,0.0041383834464662145,0.006503173987304051,0.0,0.0 +1500.0,3.7985000000000004e-10,110290.0,0.9858444362999633,0.0,0.0014156063702286661,0.004954422294900327,0.007785535034907658,0.0,0.0 +1550.0,3.7335e-10,109740.0,0.9831648175076059,0.0,0.0016835082491904213,0.005892328872411476,0.009259345370792316,0.0,0.0 +1600.0,3.6695e-10,109190.0,0.9801123522696454,0.0,0.0019888047731314554,0.006960816705960094,0.010938026251263002,0.0,0.0 +1650.0,3.6067e-10,108620.0,0.9766436135813703,0.0,0.0023356086417519743,0.008174730246501912,0.012846047530375864,0.0,0.0 +1700.0,3.545e-10,108040.0,0.972734085483159,0.0,0.0027266114517680976,0.009543240081608343,0.014996062983464533,0.0,0.0 +1750.0,3.4843e-10,107460.0,0.9683378696566868,0.0,0.0031661930343753245,0.011081975619653637,0.017413961689284285,0.0,0.0 +1800.0,3.4245999999999997e-10,106860.0,0.9634242390666519,0.0,0.003657616093510811,0.012801056324647828,0.020117088515189466,0.0,0.0 +1850.0,3.366e-10,106250.0,0.9579531612454322,0.0,0.00420471387555579,0.01471604856296026,0.023126076316051847,0.0,0.0 +1900.0,3.3083000000000004e-10,105620.0,0.9518909518909519,0.0,0.004811004811004811,0.016838016838016834,0.02646002646002646,0.0,0.0 +1950.0,3.2517000000000003e-10,104980.0,0.9451968808502933,0.0,0.0054802819150696815,0.019180936702908883,0.03014190053172825,0.0,0.0 +2000.0,3.196e-10,104320.0,0.9378330948492131,0.0,0.006216720515177701,0.021758071801636948,0.03419211283397236,0.0,0.0 +2050.0,3.1413e-10,103650.0,0.9297709297709297,0.0,0.007023007023007022,0.024580024580024576,0.03862603862603862,0.0,0.0 +2100.0,3.0875e-10,102960.0,0.9209689869341142,0.0,0.007903091306599563,0.027660969572933465,0.04346695218635258,0.0,0.0 +2150.0,3.0346e-10,102250.0,0.9113920962018212,0.0,0.008860720379656874,0.03101307133006406,0.04873411208845781,0.0,0.0 +2200.0,2.9827e-10,101520.0,0.901017026643812,0.0,0.00989826733571779,0.03464388567517727,0.05444082034529285,0.0,0.0 +2250.0,2.9316e-10,100760.0,0.8898091101908898,0.0,0.01101898898101102,0.038566961433038574,0.0606049393950606,0.0,0.0 +2300.0,2.8814e-10,99987.0,0.8777373667878996,0.0,0.012225963322110034,0.04279187162438513,0.0672447982656052,0.0,0.0 +2350.0,2.8321e-10,99186.0,0.8647843239216196,0.0,0.013522067610338053,0.04732523662618314,0.07436837184185921,0.0,0.0 +2400.0,2.7836e-10,98361.0,0.8509291490708509,0.0,0.014906985093014908,0.05217494782505218,0.08198891801108199,0.0,0.0 +2450.0,2.7359e-10,97509.0,0.8361425084275252,0.0,0.016386049158147474,0.05735017205051615,0.0901212703638111,0.0,0.0 +2500.0,2.6891e-10,96630.0,0.8204308204308204,0.0,0.017957017957017957,0.06284906284906286,0.09876309876309877,0.0,0.0 +2550.0,2.643e-10,95721.0,0.8037659811700941,0.0,0.01962290188549057,0.06868165659171704,0.10792946035269824,0.0,0.0 +2600.0,2.5976999999999997e-10,94782.0,0.7861623584870755,0.0,0.021384064152192458,0.07484322452967358,0.11761035283105849,0.0,0.0 +2650.0,2.5533e-10,93812.0,0.7676130704522818,0.0,0.023239092956371825,0.08133732534930141,0.12781051124204496,0.0,0.0 +2700.0,2.5095e-10,92809.0,0.7481147631966576,0.0,0.0251878236852342,0.08815838289131975,0.1385390302267884,0.0,0.0 +2750.0,2.4666e-10,91772.0,0.7277036385181926,0.0,0.027230136150680755,0.09530547652738264,0.14976074880374401,0.0,0.0 +2800.0,2.4243e-10,90700.0,0.7063785872428254,0.0,0.029361941276117444,0.10276979446041107,0.16148967702064598,0.0,0.0 +2850.0,2.3828e-10,89591.0,0.6841786316427367,0.0,0.031581936836126326,0.11053977892044217,0.17369965260069478,0.0,0.0 +2900.0,2.342e-10,88444.0,0.6611253721223951,0.0,0.03388676279266045,0.11860916973581183,0.18637869534913254,0.0,0.0 +2950.0,2.3019e-10,87258.0,0.6372787254425492,0.0,0.03627192745614509,0.1269497461005078,0.199499601000798,0.0,0.0 +3000.0,2.2625e-10,86031.0,0.612668161995514,0.0,0.038732883801348594,0.13556959329122012,0.2130293609119173,0.0,0.0 +3050.0,2.2238e-10,84761.0,0.5873470632646837,0.0,0.041264793676031614,0.14442927785361073,0.22695886520567396,0.0,0.0 +3100.0,2.1856999999999998e-10,83448.0,0.5614,0.0,0.04386,0.15350999999999998,0.24123000000000003,0.0,0.0 +3150.0,2.1483000000000002e-10,82088.0,0.5348683953948138,0.0,0.046512860461418615,0.1627995116014652,0.2558192325423024,0.0,0.0 +3200.0,2.1115000000000002e-10,80682.0,0.5078420313681254,0.0,0.04921619686478746,0.172250689002756,0.27069108276433107,0.0,0.0 +3250.0,2.0753e-10,79227.0,0.48041048041048046,0.0,0.05195905195905196,0.18186018186018185,0.28577028577028574,0.0,0.0 +3300.0,2.0398e-10,77721.0,0.45265818936724256,0.0,0.05473378106487574,0.1915692337230651,0.30103879584481663,0.0,0.0 +3350.0,2.0048e-10,76162.0,0.42468957531042467,0.0,0.05753094246905753,0.20135979864020137,0.3164196835803164,0.0,0.0 +3400.0,1.9705e-10,74548.0,0.3966,0.0,0.06034,0.21119000000000002,0.33187,0.0,0.0 +3450.0,1.9368e-10,72876.0,0.3685103685103685,0.0,0.06314906314906314,0.221020221020221,0.3473203473203473,0.0,0.0 +3500.0,1.9036e-10,71143.0,0.3405310215930648,0.0,0.06594719784159353,0.2308106924320773,0.3627110881332644,0.0,0.0 +3550.0,1.871e-10,69347.0,0.3127793744412511,0.0,0.06872186255627488,0.24052951894096214,0.37796924406151183,0.0,0.0 +3600.0,1.839e-10,67485.0,0.2853925685331168,0.0,0.07146164315478838,0.2501122510102591,0.39303353730183566,0.0,0.0 +3650.0,1.8075e-10,65551.0,0.25848974151025844,0.0,0.07415092584907414,0.2595297404702595,0.4078295921704078,0.0,0.0 +3700.0,1.7765e-10,63542.0,0.23220000000000002,0.0,0.07678000000000001,0.2687300000000001,0.42229,0.0,0.0 +3750.0,1.7461e-10,61452.0,0.20666937999186002,0.0,0.07933276200171399,0.277669166992499,0.43632869101392696,0.0,0.0 +3800.0,1.7162e-10,59276.0,0.18202872579891943,0.0,0.08179642742500805,0.28628799598402815,0.4498868507920445,0.0,0.0 +3850.0,1.6868e-10,57005.0,0.1584085743228311,0.0,0.08415824257581682,0.29455734898385916,0.462875834117493,0.0,0.0 +3900.0,1.6579e-10,54630.0,0.1359493202533987,0.0,0.0864045679771601,0.30241848790756043,0.4752276238618807,0.0,0.0 +3950.0,1.6295000000000002e-10,52141.0,0.11477977044045913,0.0,0.08852182295635411,0.30982938034123936,0.4868690262619475,0.0,0.0 +4000.0,1.6016e-10,49523.0,0.09503209503209503,0.0,0.0904970904970905,0.3167403167403167,0.4977304977304977,0.0,0.0 +4050.0,1.5741999999999998e-10,46758.0,0.07683861580692097,0.0,0.09231553842230789,0.3231083844580777,0.5077374613126934,0.0,0.0 +4100.0,1.5473e-10,43823.0,0.06031481905554283,0.0,0.0939677180968457,0.32888901333296,0.5168284495146515,0.0,0.0 +4150.0,1.5208e-10,40683.0,0.0455818176727293,0.0,0.09544161823352705,0.33404866380534476,0.5249279002883988,0.0,0.0 +4200.0,1.4947e-10,37293.0,0.032744967255032745,0.0,0.09672590327409672,0.3385396614603386,0.531989468010532,0.0,0.0 +4250.0,1.4690999999999999e-10,33583.0,0.021908065724197172,0.0,0.09780929342788029,0.342331026993081,0.5379516138548416,0.0,0.0 +4300.0,1.444e-10,29439.0,0.013162052648210592,0.0,0.09868439473757895,0.34539138156552623,0.5427621710486842,0.0,0.0 +4350.0,1.4191999999999999e-10,24658.0,0.0065915494366207755,0.0,0.09934174506308796,0.3476926076945577,0.5463740978057335,0.0,0.0 +4400.0,1.3949e-10,18803.0,0.0022676984126111114,0.0,0.09977293015894889,0.3492097555531711,0.5487496158752688,0.0,0.0 +4450.0,1.371e-10,10781.0,0.00024935140883545993,0.0,0.09997556486194147,0.34991197700267007,0.549863106726553,0.0,0.0 +4500.0,1.3475999999999998e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4550.0,1.3245e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4600.0,1.3018e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4650.0,1.2795e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4700.0,1.2576000000000001e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4750.0,1.2361e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4800.0,1.2149e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4850.0,1.1941e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4900.0,1.1737e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4950.0,1.1535999999999999e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5000.0,1.1337999999999999e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5050.0,1.1143999999999999e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5100.0,1.0953000000000001e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5150.0,1.0765e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5200.0,1.0581000000000001e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5250.0,1.0399999999999999e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5300.0,1.0222e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5350.0,1.0047e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5400.0,9.874799999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5450.0,9.7057e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5500.0,9.5395e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5550.0,9.376100000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5600.0,9.215499999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5650.0,9.057700000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5700.0,8.902600000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5750.0,8.750200000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5800.0,8.600299999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5850.0,8.4531e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5900.0,8.3083e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5950.0,8.165999999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6000.0,8.026200000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6050.0,7.888800000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6100.0,7.753699999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6150.0,7.6209e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6200.0,7.490399999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6250.0,7.362100000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6300.0,7.2361e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6350.0,7.1121e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6400.0,6.9903e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6450.0,6.8706e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6500.0,6.753e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6550.0,6.6373e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6600.0,6.5237e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6650.0,6.412000000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6700.0,6.3022e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6750.0,6.194300000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6800.0,6.0882e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6850.0,5.983899999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6900.0,5.881499999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6950.0,5.7807e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7000.0,5.6817e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7050.0,5.5844e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7100.0,5.4888e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7150.0,5.3948e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7200.0,5.3024e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7250.0,5.2116e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7300.0,5.1224e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7350.0,5.0347000000000006e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7400.0,4.9485e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7450.0,4.8637000000000006e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7500.0,4.7803999999999995e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7550.0,4.698600000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7600.0,4.618100000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7650.0,4.539e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7700.0,4.4612999999999995e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7750.0,4.3849e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7800.0,4.3098e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7850.0,4.236e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7900.0,4.1634999999999994e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7950.0,4.0922e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8000.0,4.0221e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8050.0,3.9531999999999996e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8100.0,3.8855e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8150.0,3.819e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8200.0,3.7536000000000005e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8250.0,3.6893e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8300.0,3.6260999999999995e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8350.0,3.564e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8400.0,3.503e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8450.0,3.443e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8500.0,3.3841e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8550.0,3.326099999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8600.0,3.2692e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8650.0,3.2132e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8700.0,3.1582e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8750.0,3.1041e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8800.0,3.0509e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8850.0,2.9987e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8900.0,2.9473e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8950.0,2.8968e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9000.0,2.8471999999999997e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9050.0,2.7984999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9100.0,2.7506000000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9150.0,2.7035e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9200.0,2.6571999999999996e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9250.0,2.6116999999999996e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9300.0,2.5669e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9350.0,2.523e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9400.0,2.4798000000000003e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9450.0,2.4373000000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9500.0,2.3956e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9550.0,2.3546e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9600.0,2.3141999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9650.0,2.2746e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9700.0,2.2356999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9750.0,2.1973999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9800.0,2.1596999999999995e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9850.0,2.1228000000000003e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9900.0,2.0863999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9950.0,2.0507e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10000.0,2.0155999999999996e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10050.0,1.9809999999999997e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10100.0,1.9471e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10150.0,1.9137999999999997e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10200.0,1.8809999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10250.0,1.8488e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10300.0,1.8171e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10350.0,1.786e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10400.0,1.7554000000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10450.0,1.7254e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10500.0,1.6957999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10550.0,1.6667999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10600.0,1.6382000000000004e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10650.0,1.6102e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10700.0,1.5826e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10750.0,1.5555e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10800.0,1.5289e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10850.0,1.5027e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10900.0,1.477e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10950.0,1.4517000000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11000.0,1.4268e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11050.0,1.4024000000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11100.0,1.3784000000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11150.0,1.3548e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11200.0,1.3315999999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11250.0,1.3087999999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11300.0,1.2863e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11350.0,1.2643e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11400.0,1.2427e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11450.0,1.2214000000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11500.0,1.2005000000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11550.0,1.1799000000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11600.0,1.1597e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11650.0,1.1398000000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11700.0,1.1202999999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11750.0,1.1010999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11800.0,1.0823e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11850.0,1.0637999999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11900.0,1.0455e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11950.0,1.0276e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12000.0,1.0100000000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12050.0,9.9274e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12100.0,9.7574e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12150.0,9.5903e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12200.0,9.4261e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12250.0,9.2647e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12300.0,9.106e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12350.0,8.9501e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12400.0,8.7968e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12450.0,8.6462e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12500.0,8.4981e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12550.0,8.3526e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12600.0,8.2095e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12650.0,8.069e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12700.0,7.9308e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12750.0,7.795e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12800.0,7.6615e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12850.0,7.5303e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12900.0,7.4013e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12950.0,7.2746e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13000.0,7.15e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13050.0,7.0276e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13100.0,6.9072e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13150.0,6.789e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13200.0,6.6727e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13250.0,6.5584e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13300.0,6.4461e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13350.0,6.3357e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13400.0,6.2272e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13450.0,6.1206e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13500.0,6.0158e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13550.0,5.9128e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13600.0,5.8115e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13650.0,5.712e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13700.0,5.6142e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13750.0,5.518e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13800.0,5.4236e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13850.0,5.3307e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13900.0,5.2394e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13950.0,5.1497e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14000.0,5.0615e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14050.0,4.9748e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14100.0,4.8896e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14150.0,4.8059e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14200.0,4.7236e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14250.0,4.6427e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14300.0,4.5632e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14350.0,4.4851e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14400.0,4.4083e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14450.0,4.3328e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14500.0,4.2586e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14550.0,4.1856e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14600.0,4.114e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14650.0,4.0435e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14700.0,3.9743e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14750.0,3.9062e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14800.0,3.8393e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14850.0,3.7736e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14900.0,3.709e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14950.0,3.6454e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15000.0,3.583e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15050.0,3.5217e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15100.0,3.4614e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15150.0,3.4021e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15200.0,3.3438e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15250.0,3.2866e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15300.0,3.2303e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15350.0,3.175e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15400.0,3.1206e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15450.0,3.0672e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15500.0,3.0146e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15550.0,2.963e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15600.0,2.9123e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15650.0,2.8624e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15700.0,2.8134e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15750.0,2.7652e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15800.0,2.7178e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15850.0,2.6713e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15900.0,2.6256e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15950.0,2.5806e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16000.0,2.5364e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16050.0,2.493e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16100.0,2.4503e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16150.0,2.4083e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16200.0,2.3671e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16250.0,2.3265e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16300.0,2.2867e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16350.0,2.2475e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16400.0,2.2091e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16450.0,2.1712e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16500.0,2.134e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16550.0,2.0975e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16600.0,2.0616e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16650.0,2.0263e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16700.0,1.9916e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16750.0,1.9575e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16800.0,1.924e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16850.0,1.891e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16900.0,1.8586e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16950.0,1.8268e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17000.0,1.7955e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17050.0,1.7648e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17100.0,1.7346e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17150.0,1.7048e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17200.0,1.6757e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17250.0,1.647e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17300.0,1.6188e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17350.0,1.591e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17400.0,1.5638e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17450.0,1.537e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17500.0,1.5107e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17550.0,1.4848e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17600.0,1.4594e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17650.0,1.4344e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17700.0,1.4098e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17750.0,1.3857e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17800.0,1.362e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17850.0,1.3386e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17900.0,1.3157e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17950.0,1.2932e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18000.0,1.271e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18050.0,1.2493e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18100.0,1.2279e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18150.0,1.2069e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18200.0,1.1862e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18250.0,1.1659e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18300.0,1.1459e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18350.0,1.1263e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18400.0,1.107e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18450.0,1.088e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18500.0,1.0694e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18550.0,1.0511e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18600.0,1.0331e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18650.0,1.0154e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18700.0,9.9802e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18750.0,9.8093e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18800.0,9.641299999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18850.0,9.476200000000002e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18900.0,9.3139e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18950.0,9.1544e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19000.0,8.997700000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19050.0,8.843600000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19100.0,8.692200000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19150.0,8.5433e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19200.0,8.397e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19250.0,8.253200000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19300.0,8.1119e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19350.0,7.973e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19400.0,7.8364e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19450.0,7.7022e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19500.0,7.570300000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19550.0,7.4407e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19600.0,7.3133e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19650.0,7.1881e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19700.0,7.065e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19750.0,6.944e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19800.0,6.8251e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19850.0,6.7082e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19900.0,6.5933e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19950.0,6.480399999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20000.0,6.3694e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20050.0,6.260399999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20100.0,6.153199999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20150.0,6.0478e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20200.0,5.9442e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20250.0,5.842399999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20300.0,5.7424e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20350.0,5.644e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20400.0,5.547399999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20450.0,5.4524e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20500.0,5.359e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20550.0,5.2673e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20600.0,5.1771e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20650.0,5.0884e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20700.0,5.0013e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20750.0,4.915600000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20800.0,4.8315e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20850.0,4.7487e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20900.0,4.6674e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20950.0,4.5875e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21000.0,4.5088999999999996e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21050.0,4.4316999999999997e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21100.0,4.3558e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21150.0,4.2812e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21200.0,4.2078999999999997e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21250.0,4.1358000000000004e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21300.0,4.065e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21350.0,3.9954000000000003e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21400.0,3.927e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21450.0,3.8596999999999997e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21500.0,3.7936e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21550.0,3.7287e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21600.0,3.6648e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21650.0,3.6021e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21700.0,3.5404e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21750.0,3.4798e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21800.0,3.4202e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21850.0,3.3616e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21900.0,3.304e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21950.0,3.2475e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22000.0,3.1918e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22050.0,3.1372e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22100.0,3.0835e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22150.0,3.0307e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22200.0,2.9788000000000004e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22250.0,2.9278000000000004e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22300.0,2.8776e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22350.0,2.8283e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22400.0,2.7799e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22450.0,2.7323000000000004e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22500.0,2.6855e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22550.0,2.6395e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22600.0,2.5943000000000004e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22650.0,2.5499e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22700.0,2.5062e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22750.0,2.4633e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22800.0,2.4211e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22850.0,2.3797e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22900.0,2.3389000000000003e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22950.0,2.2989e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23000.0,2.2595e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23050.0,2.2208000000000002e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23100.0,2.1828000000000003e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23150.0,2.1454000000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23200.0,2.1087e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23250.0,2.0725e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23300.0,2.0371e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23350.0,2.0022e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23400.0,1.9679000000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23450.0,1.9342e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23500.0,1.9010999999999998e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23550.0,1.8685e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23600.0,1.8365e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23650.0,1.8050999999999998e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23700.0,1.7742000000000002e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23750.0,1.7437999999999998e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23800.0,1.7139000000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23850.0,1.6846e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23900.0,1.6557e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23950.0,1.6274000000000002e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24000.0,1.5995e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24050.0,1.5721e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24100.0,1.5452e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24150.0,1.5187000000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24200.0,1.4927e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24250.0,1.4672e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24300.0,1.442e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24350.0,1.4173e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24400.0,1.3931e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24450.0,1.3692e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24500.0,1.3458e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24550.0,1.3227e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24600.0,1.3001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24650.0,1.2777999999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24700.0,1.2559e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24750.0,1.2344e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24800.0,1.2133e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24850.0,1.1925e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24900.0,1.1720999999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24950.0,1.152e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25000.0,1.1323e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25050.0,1.1129000000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25100.0,1.0938e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25150.0,1.0750999999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25200.0,1.0567e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25250.0,1.0385999999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25300.0,1.0207999999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25350.0,1.0033e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25400.0,9.861499999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25450.0,9.6926e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25500.0,9.5266e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25550.0,9.3635e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25600.0,9.2031e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25650.0,9.045499999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25700.0,8.8906e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25750.0,8.7384e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25800.0,8.5887e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25850.0,8.441699999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25900.0,8.297100000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25950.0,8.155e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26000.0,8.015399999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26050.0,7.878099999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26100.0,7.743200000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26150.0,7.610599999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26200.0,7.4803e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26250.0,7.3522e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26300.0,7.2263e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26350.0,7.1025e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26400.0,6.9809e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26450.0,6.8614e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26500.0,6.7439e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26550.0,6.628400000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26600.0,6.5149e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26650.0,6.403300000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26700.0,6.2937e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26750.0,6.1859e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26800.0,6.079900000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26850.0,5.975800000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26900.0,5.8735e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26950.0,5.7729e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27000.0,5.6740999999999996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27050.0,5.576900000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27100.0,5.4814e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27150.0,5.3875e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27200.0,5.2953e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27250.0,5.2046000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27300.0,5.1155000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27350.0,5.0279000000000005e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27400.0,4.9418e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27450.0,4.8571e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27500.0,4.774e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27550.0,4.6922000000000003e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27600.0,4.6119e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27650.0,4.5329000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27700.0,4.4553e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27750.0,4.3789999999999996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27800.0,4.304e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27850.0,4.2302999999999997e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27900.0,4.1578e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27950.0,4.0866e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28000.0,4.0167000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28050.0,3.9479e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28100.0,3.8803e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28150.0,3.8138e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28200.0,3.7485000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28250.0,3.6843e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28300.0,3.6212e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28350.0,3.5592e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28400.0,3.4982999999999996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28450.0,3.4384e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28500.0,3.3794999999999996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28550.0,3.3216000000000003e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28600.0,3.2647e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28650.0,3.2088e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28700.0,3.1539e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28750.0,3.0999000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28800.0,3.0468e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28850.0,2.9945999999999996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28900.0,2.9433e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28950.0,2.8929e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29000.0,2.8434e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29050.0,2.7947000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29100.0,2.7468000000000002e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29150.0,2.6998000000000002e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29200.0,2.6536e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29250.0,2.6081e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29300.0,2.5635000000000003e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29350.0,2.5196e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29400.0,2.4764e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29450.0,2.434e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29500.0,2.3923e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29550.0,2.3513999999999998e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29600.0,2.3111000000000002e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29650.0,2.2715e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29700.0,2.2326e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29750.0,2.1944e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29800.0,2.1568e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29850.0,2.1199e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29900.0,2.0836e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29950.0,2.0479e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30000.0,2.0128e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30050.0,1.9784e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30100.0,1.9445e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30150.0,1.9112e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30200.0,1.8784e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30250.0,1.8463e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30300.0,1.8147e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30350.0,1.7836e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30400.0,1.7530000000000002e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30450.0,1.7230000000000003e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30500.0,1.6935e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30550.0,1.6644999999999998e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30600.0,1.636e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30650.0,1.6080000000000003e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30700.0,1.5805000000000002e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30750.0,1.5534e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30800.0,1.5268e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30850.0,1.5006999999999998e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30900.0,1.475e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30950.0,1.4497e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31000.0,1.4249e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31050.0,1.4005000000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31100.0,1.3765e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31150.0,1.3528999999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31200.0,1.3297e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31250.0,1.3069999999999998e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31300.0,1.2846000000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31350.0,1.2626000000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31400.0,1.241e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31450.0,1.2197e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31500.0,1.1988e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31550.0,1.1782999999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31600.0,1.1581e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31650.0,1.1383e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31700.0,1.1188e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31750.0,1.0996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31800.0,1.0808e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31850.0,1.0623000000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31900.0,1.0440999999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31950.0,1.0262e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32000.0,1.0087e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32050.0,9.913899999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32100.0,9.7441e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32150.0,9.577299999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32200.0,9.4133e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32250.0,9.2521e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32300.0,9.093600000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32350.0,8.937899999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32400.0,8.7848e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32450.0,8.6344e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32500.0,8.4865e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32550.0,8.3412e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32600.0,8.1984e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32650.0,8.058e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32700.0,7.920000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32750.0,7.7844e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32800.0,7.651100000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32850.0,7.52e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32900.0,7.3913e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32950.0,7.2647e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33000.0,7.140300000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33050.0,7.018000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33100.0,6.897800000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33150.0,6.779699999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33200.0,6.663600000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33250.0,6.5495000000000004e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33300.0,6.437300000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33350.0,6.3271e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33400.0,6.2188e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33450.0,6.1123e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33500.0,6.0076e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33550.0,5.9047e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33600.0,5.8036e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33650.0,5.7042e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33700.0,5.6065e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33750.0,5.5105e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33800.0,5.4162e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33850.0,5.3234e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33900.0,5.2323e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33950.0,5.1427e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34000.0,5.0546000000000005e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34050.0,4.968e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34100.0,4.883e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34150.0,4.7993000000000005e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34200.0,4.7171999999999994e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34250.0,4.636399999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34300.0,4.557e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34350.0,4.4788999999999995e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34400.0,4.4022e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34450.0,4.3269e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34500.0,4.2528e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34550.0,4.1799e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34600.0,4.1083999999999995e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34650.0,4.0380000000000005e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34700.0,3.9689e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34750.0,3.9009e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34800.0,3.8341e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34850.0,3.7683999999999995e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34900.0,3.7039e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34950.0,3.6405e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35000.0,3.5780999999999995e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35050.0,3.5169000000000004e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35100.0,3.4566000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35150.0,3.3974000000000003e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35200.0,3.3393e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35250.0,3.2821e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35300.0,3.2259000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35350.0,3.1706e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35400.0,3.1163e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35450.0,3.063e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35500.0,3.0105e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35550.0,2.959e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35600.0,2.9083000000000003e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35650.0,2.8585000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35700.0,2.8095e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35750.0,2.7614000000000003e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35800.0,2.7140999999999997e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35850.0,2.6677e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35900.0,2.622e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35950.0,2.5771e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36000.0,2.533e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36050.0,2.4896e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36100.0,2.4469e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36150.0,2.4050000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36200.0,2.3639e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36250.0,2.3234000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36300.0,2.2836e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36350.0,2.2445e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36400.0,2.206e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36450.0,2.1683e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36500.0,2.1311e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36550.0,2.0945999999999998e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36600.0,2.0588000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36650.0,2.0235e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36700.0,1.9889e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36750.0,1.9547999999999997e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36800.0,1.9213000000000003e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36850.0,1.8884e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36900.0,1.8561e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36950.0,1.8242999999999997e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37000.0,1.7931e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37050.0,1.7624000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37100.0,1.7321999999999998e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37150.0,1.7025e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37200.0,1.6734000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37250.0,1.6446999999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37300.0,1.6165e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37350.0,1.5889e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37400.0,1.5617000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37450.0,1.5349e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37500.0,1.5085999999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37550.0,1.4828e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37600.0,1.4574000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37650.0,1.4324000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37700.0,1.4079e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37750.0,1.3838e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37800.0,1.3601e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37850.0,1.3368e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37900.0,1.3139000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37950.0,1.2914000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38000.0,1.2693e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38050.0,1.2476e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38100.0,1.2262e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38150.0,1.2052e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38200.0,1.1845999999999998e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38250.0,1.1642999999999998e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38300.0,1.1442999999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38350.0,1.1247999999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38400.0,1.1055e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38450.0,1.0866e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38500.0,1.068e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38550.0,1.0497e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38600.0,1.0317e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38650.0,1.0140000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38700.0,9.9666e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38750.0,9.7959e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38800.0,9.6282e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38850.0,9.4633e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38900.0,9.3012e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38950.0,9.142e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39000.0,8.9854e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39050.0,8.8315e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39100.0,8.680300000000001e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39150.0,8.531700000000001e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39200.0,8.385600000000001e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39250.0,8.242000000000001e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39300.0,8.100799999999999e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39350.0,7.962100000000001e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39400.0,7.8257e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39450.0,7.6917e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39500.0,7.56e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39550.0,7.4306e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39600.0,7.3033e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39650.0,7.1782e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39700.0,7.055299999999999e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39750.0,6.9345e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39800.0,6.8158e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39850.0,6.699e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39900.0,6.584299999999999e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39950.0,6.471599999999999e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40000.0,6.3607e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40050.0,6.2518e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40100.0,6.1448e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40150.0,6.0395e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40200.0,5.9361e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40250.0,5.8345e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40300.0,5.7345e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40350.0,5.6363e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 diff --git a/docs/research/code_comparison/toy_models/blondin_model_compare.yml b/docs/research/code_comparison/toy_models/blondin_model_compare.yml new file mode 100644 index 00000000000..1487d03da85 --- /dev/null +++ b/docs/research/code_comparison/toy_models/blondin_model_compare.yml @@ -0,0 +1,44 @@ +# Example YAML configuration for TARDIS +tardis_config_version: v1.0 + +supernova: + luminosity_requested: 9.44 log_lsun + time_explosion: 13 day + + +atom_data: kurucz_cd23_chianti_H_He.h5 + +csvy_model: blondin_compare.csvy + +plasma: + disable_electron_scattering: no + ionization: nebular + excitation: dilute-lte + radiative_rates_type: dilute-blackbody + line_interaction_type: macroatom + initial_t_inner: 13000 K + +montecarlo: + seed: 23111963 + no_of_packets: 5.0e+4 + iterations: 30 + nthreads: 8 + + last_no_of_packets: 2.e+5 + + convergence_strategy: + type: damped + damping_constant: 0.5 + threshold: 0.05 + fraction: 0.8 + + t_inner: + damping_constant: 0.0 + +spectrum: + start: 500 angstrom + stop: 20000 angstrom + num: 10000 + integrated: + interpolate_shells: 80 + \ No newline at end of file diff --git a/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb b/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb index 0f92a754bc1..9cd19ff3201 100644 --- a/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb +++ b/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb @@ -163,6 +163,26 @@ " fh.write(csvy_file)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Download the model and setup**\n", + "\n", + "[blondin_compare.csvy](blondin_compare.csvy)\n", + "\n", + "[blondin_model_compare.yml](blondin_model_compare.yml)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "## Download the model " + ] + }, { "cell_type": "code", "execution_count": 7, From e0ed796e4373fff5a6463eadef105cc8c1e1ad8c Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 5 Aug 2019 11:15:27 +0200 Subject: [PATCH 066/467] add explanations --- .../toy_models/reading blondin toymodel.ipynb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb b/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb index 9cd19ff3201..4128a5e8c13 100644 --- a/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb +++ b/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb @@ -171,7 +171,12 @@ "\n", "[blondin_compare.csvy](blondin_compare.csvy)\n", "\n", - "[blondin_model_compare.yml](blondin_model_compare.yml)\n" + "[blondin_model_compare.yml](blondin_model_compare.yml)\n", + "\n", + "**Links to the relevant physics pages**\n", + "\n", + "[Plasma assumptions](../../../physics/plasma/nebular_plasma.rst)\n", + "[Scattering assumptions](../../../physics/physics/montecarlo/lineinteraction)" ] }, { From 93d748e5e2421c078ceb376edfd22006fc53ead1 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 5 Aug 2019 11:45:54 +0200 Subject: [PATCH 067/467] add stuff --- .../toy_models/reading blondin toymodel.ipynb | 9 +++++++-- docs/research/index.rst | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb b/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb index 4128a5e8c13..29a3a3a6912 100644 --- a/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb +++ b/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb @@ -173,10 +173,15 @@ "\n", "[blondin_model_compare.yml](blondin_model_compare.yml)\n", "\n", - "**Links to the relevant physics pages**\n", + "**Assumptions and explanations**\n", + "\n", + "We assume $T_\\textrm{electron} = 0.9 T_\\textrm{radiative}$\n", + "\n", + "\n", "\n", "[Plasma assumptions](../../../physics/plasma/nebular_plasma.rst)\n", - "[Scattering assumptions](../../../physics/physics/montecarlo/lineinteraction)" + "\n", + "[Scattering assumptions](../../../physics/montecarlo/lineinteraction.rst)" ] }, { diff --git a/docs/research/index.rst b/docs/research/index.rst index 3611ac1fe7a..5a4636c39f7 100644 --- a/docs/research/index.rst +++ b/docs/research/index.rst @@ -8,6 +8,6 @@ but also give an overview over our efforts. .. toctree:: - :maxdepth: 2 + :maxdepth: 3 code_comparison/index \ No newline at end of file From 18451832a4e54115a89bed1786bcd6b63ed635ef Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 5 Aug 2019 11:57:15 +0200 Subject: [PATCH 068/467] rename line interaction assumptions --- .../toy_models/reading blondin toymodel.ipynb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb b/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb index 29a3a3a6912..9451454e0b6 100644 --- a/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb +++ b/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb @@ -178,10 +178,11 @@ "We assume $T_\\textrm{electron} = 0.9 T_\\textrm{radiative}$\n", "\n", "\n", - "\n", "[Plasma assumptions](../../../physics/plasma/nebular_plasma.rst)\n", "\n", - "[Scattering assumptions](../../../physics/montecarlo/lineinteraction.rst)" + "\n", + "[Line interaction assumptions](../../../physics/montecarlo/lineinteraction.rst)\n", + "\n" ] }, { From 676a38c60e891b6453f829c610a4d369a402fa7f Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 5 Aug 2019 16:32:00 +0200 Subject: [PATCH 069/467] add both toymodels --- .../plasma_compare/plasma_compare.ipynb | 402 +- .../toy_models/blondin_compare.csvy | 6 +- .../toy_models/blondin_compare_01.csvy | 841 ++++ .../toy_models/blondin_compare_06.csvy | 841 ++++ ...mpare.yml => blondin_model_compare_01.yml} | 2 +- .../toy_models/blondin_model_compare_06.yml | 44 + .../toy_models/reading blondin toymodel.ipynb | 4415 ++++++++++++----- 7 files changed, 5182 insertions(+), 1369 deletions(-) create mode 100644 docs/research/code_comparison/toy_models/blondin_compare_01.csvy create mode 100644 docs/research/code_comparison/toy_models/blondin_compare_06.csvy rename docs/research/code_comparison/toy_models/{blondin_model_compare.yml => blondin_model_compare_01.yml} (95%) create mode 100644 docs/research/code_comparison/toy_models/blondin_model_compare_06.yml diff --git a/docs/research/code_comparison/plasma_compare/plasma_compare.ipynb b/docs/research/code_comparison/plasma_compare/plasma_compare.ipynb index 63c2b103361..85eadd65772 100644 --- a/docs/research/code_comparison/plasma_compare/plasma_compare.ipynb +++ b/docs/research/code_comparison/plasma_compare/plasma_compare.ipynb @@ -9,9 +9,30 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/tqdm/autonotebook/__init__.py:14: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)\n", + " \" (e.g. in jupyter console)\", TqdmExperimentalWarning)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/importlib/_bootstrap.py:219: QAWarning: pyne.data is not yet QA compliant.\n", + " return f(*args, **kwds)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/importlib/_bootstrap.py:219: QAWarning: pyne.material is not yet QA compliant.\n", + " return f(*args, **kwds)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n" + ] + } + ], "source": [ "from tardis.simulation import Simulation\n", "from tardis.io.config_reader import Configuration\n", @@ -358,6 +379,383 @@ "sim.plasma.ion_number_density.loc[14, 1]" ] }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "sim.plasma.update(density=[1e-13])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0
atomic_numberion_number
801.288175e+04
17.151416e+08
21.598774e+03
36.741210e-14
40.000000e+00
50.000000e+00
60.000000e+00
70.000000e+00
80.000000e+00
1203.800017e-05
16.545794e+03
27.432405e+07
30.000000e+00
40.000000e+00
50.000000e+00
60.000000e+00
70.000000e+00
80.000000e+00
90.000000e+00
100.000000e+00
110.000000e+00
120.000000e+00
1403.172104e-02
11.332867e+06
21.113664e+09
31.601707e+04
45.800053e-08
50.000000e+00
60.000000e+00
70.000000e+00
.........
18100.000000e+00
110.000000e+00
120.000000e+00
130.000000e+00
140.000000e+00
150.000000e+00
160.000000e+00
170.000000e+00
180.000000e+00
2002.144981e-07
11.601330e+02
24.507800e+07
31.833649e-06
40.000000e+00
50.000000e+00
60.000000e+00
70.000000e+00
80.000000e+00
90.000000e+00
100.000000e+00
110.000000e+00
120.000000e+00
130.000000e+00
140.000000e+00
150.000000e+00
160.000000e+00
170.000000e+00
180.000000e+00
190.000000e+00
200.000000e+00
\n", + "

94 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " 0\n", + "atomic_number ion_number \n", + "8 0 1.288175e+04\n", + " 1 7.151416e+08\n", + " 2 1.598774e+03\n", + " 3 6.741210e-14\n", + " 4 0.000000e+00\n", + " 5 0.000000e+00\n", + " 6 0.000000e+00\n", + " 7 0.000000e+00\n", + " 8 0.000000e+00\n", + "12 0 3.800017e-05\n", + " 1 6.545794e+03\n", + " 2 7.432405e+07\n", + " 3 0.000000e+00\n", + " 4 0.000000e+00\n", + " 5 0.000000e+00\n", + " 6 0.000000e+00\n", + " 7 0.000000e+00\n", + " 8 0.000000e+00\n", + " 9 0.000000e+00\n", + " 10 0.000000e+00\n", + " 11 0.000000e+00\n", + " 12 0.000000e+00\n", + "14 0 3.172104e-02\n", + " 1 1.332867e+06\n", + " 2 1.113664e+09\n", + " 3 1.601707e+04\n", + " 4 5.800053e-08\n", + " 5 0.000000e+00\n", + " 6 0.000000e+00\n", + " 7 0.000000e+00\n", + "... ...\n", + "18 10 0.000000e+00\n", + " 11 0.000000e+00\n", + " 12 0.000000e+00\n", + " 13 0.000000e+00\n", + " 14 0.000000e+00\n", + " 15 0.000000e+00\n", + " 16 0.000000e+00\n", + " 17 0.000000e+00\n", + " 18 0.000000e+00\n", + "20 0 2.144981e-07\n", + " 1 1.601330e+02\n", + " 2 4.507800e+07\n", + " 3 1.833649e-06\n", + " 4 0.000000e+00\n", + " 5 0.000000e+00\n", + " 6 0.000000e+00\n", + " 7 0.000000e+00\n", + " 8 0.000000e+00\n", + " 9 0.000000e+00\n", + " 10 0.000000e+00\n", + " 11 0.000000e+00\n", + " 12 0.000000e+00\n", + " 13 0.000000e+00\n", + " 14 0.000000e+00\n", + " 15 0.000000e+00\n", + " 16 0.000000e+00\n", + " 17 0.000000e+00\n", + " 18 0.000000e+00\n", + " 19 0.000000e+00\n", + " 20 0.000000e+00\n", + "\n", + "[94 rows x 1 columns]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sim.plasma.ion_number_density" + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/docs/research/code_comparison/toy_models/blondin_compare.csvy b/docs/research/code_comparison/toy_models/blondin_compare.csvy index 8c33c171a3e..fbb20eefc30 100644 --- a/docs/research/code_comparison/toy_models/blondin_compare.csvy +++ b/docs/research/code_comparison/toy_models/blondin_compare.csvy @@ -7,8 +7,8 @@ datatype: - desc: mean density of shell. name: density unit: g/cm^3 - - desc: electron temperature. - name: t_electron + - desc: radiative temperature. + name: t_rad unit: K - desc: Fraction Ni56 abundance name: Ni56 @@ -31,7 +31,7 @@ v_inner_boundary: 9000 km/s v_outer_boundary: 20000 km/s --- -velocity,density,t_electron,Ni56,Ti,Ca,S,Si,O,C +velocity,density,t_rad,Ni56,Ti,Ca,S,Si,O,C 50.0,6.2419e-10,125320.0,0.9999993831453803,0.0,6.168496194932278e-08,2.158998668210876e-07,3.392697907197332e-07,0.0,0.0 100.0,6.1502e-10,124860.0,0.9999993831453803,0.0,6.168496194932278e-08,2.158998668210876e-07,3.392697907197332e-07,0.0,0.0 150.0,6.0492e-10,124340.0,0.9999993831453803,0.0,6.168496194932278e-08,2.158998668210876e-07,3.392697907197332e-07,0.0,0.0 diff --git a/docs/research/code_comparison/toy_models/blondin_compare_01.csvy b/docs/research/code_comparison/toy_models/blondin_compare_01.csvy new file mode 100644 index 00000000000..fbb20eefc30 --- /dev/null +++ b/docs/research/code_comparison/toy_models/blondin_compare_01.csvy @@ -0,0 +1,841 @@ +--- +datatype: + fields: + - desc: velocities of shell outer bounderies. + name: velocity + unit: km/s + - desc: mean density of shell. + name: density + unit: g/cm^3 + - desc: radiative temperature. + name: t_rad + unit: K + - desc: Fraction Ni56 abundance + name: Ni56 + - desc: Fraction Ti abundance + name: Ti + - desc: Fraction Ca abundance + name: Ca + - desc: Fraction S abundance + name: S + - desc: Fraction Si abundance + name: Si + - desc: Fraction O abundance + name: O + - desc: Fraction C abundance + name: C +description: Converted snia_toy01.dat to csvy format +model_density_time_0: 2.0 d +tardis_model_config_version: v1.0 +v_inner_boundary: 9000 km/s +v_outer_boundary: 20000 km/s + +--- +velocity,density,t_rad,Ni56,Ti,Ca,S,Si,O,C +50.0,6.2419e-10,125320.0,0.9999993831453803,0.0,6.168496194932278e-08,2.158998668210876e-07,3.392697907197332e-07,0.0,0.0 +100.0,6.1502e-10,124860.0,0.9999993831453803,0.0,6.168496194932278e-08,2.158998668210876e-07,3.392697907197332e-07,0.0,0.0 +150.0,6.0492e-10,124340.0,0.9999993831453803,0.0,6.168496194932278e-08,2.158998668210876e-07,3.392697907197332e-07,0.0,0.0 +200.0,5.9475e-10,123820.0,0.9999993831453803,0.0,6.168496194932278e-08,2.158998668210876e-07,3.392697907197332e-07,0.0,0.0 +250.0,5.846799999999999e-10,123290.0,0.9999993586334114,0.0,6.41369588646711e-08,2.244798560260282e-07,3.5274977375793583e-07,0.0,0.0 +300.0,5.7473e-10,122760.0,0.9999975325760884,0.0,2.46739391187824e-07,8.63587869157384e-07,1.3570966514590096e-06,0.0,0.0 +350.0,5.649299999999999e-10,122240.0,0.9999953445816728,0.0,4.6553783271655196e-07,1.6293924144613778e-06,2.5604880798013736e-06,0.0,0.0 +400.0,5.5529e-10,121710.0,0.9999911759896231,0.0,8.824010377036204e-07,3.0884036319626717e-06,4.853205707369912e-06,0.0,0.0 +450.0,5.4581e-10,121190.0,0.999982271759725,0.0,1.7728040274561896e-06,6.204914096323844e-06,9.750522151236223e-06,0.0,0.0 +500.0,5.3648e-10,120670.0,0.9999689256333862,0.0,3.107396661413027e-06,1.0875988314838153e-05,1.7090981637449326e-05,0.0,0.0 +550.0,5.273099999999999e-10,120150.0,0.9999474790324105,0.0,5.252086758964071e-06,1.8381953657256634e-05,2.88869271731679e-05,0.0,0.0 +600.0,5.1829e-10,119630.0,0.9999130797322856,0.0,8.692026771442457e-06,3.0422093700048593e-05,4.7806147242933506e-05,0.0,0.0 +650.0,5.0942e-10,119110.0,0.9998640994428076,0.0,1.3590055719228446e-05,4.756519501729957e-05,7.474530645575646e-05,0.0,0.0 +700.0,5.0071e-10,118600.0,0.9997916916475422,0.0,2.0831035246111633e-05,7.290712335885273e-05,0.000114570193852768,0.0,0.0 +750.0,4.9214e-10,118080.0,0.9996930210723097,0.0,3.069809276963636e-05,0.00010744032468466121,0.00016884051023602193,0.0,0.0 +800.0,4.837200000000001e-10,117570.0,0.999556402596507,0.0,4.435884035253356e-05,0.00015525944122127104,0.00024397912191914022,0.0,0.0 +850.0,4.754400000000001e-10,117060.0,0.9993764572104591,0.0,6.235477895230861e-05,0.00021823922634194262,0.0003429487842465599,0.0,0.0 +900.0,4.6731e-10,116550.0,0.9991384913008782,0.0,8.614986991369643e-05,0.00030152954469038755,0.0004738292845177804,0.0,0.0 +950.0,4.5931e-10,116040.0,0.9988340552662643,0.0,0.00011659047335732184,0.0004080816568115267,0.0006412726035667705,0.0,0.0 +1000.0,4.5145e-10,115530.0,0.9984468349235334,0.0,0.0001553195076371608,0.0005436082767617628,0.0008542372920677843,0.0,0.0 +1050.0,4.4372e-10,115020.0,0.9979622054964741,0.0,0.00020378045035479526,0.0007132115761975834,0.001120802476973474,0.0,0.0 +1100.0,4.3612e-10,114500.0,0.9973646975877256,0.0,0.0002635312412321462,0.0009223643443360618,0.001449406826706154,0.0,0.0 +1150.0,4.2866e-10,113990.0,0.9966314451155953,0.0,0.0003368504884332082,0.0011790017095524787,0.0018527026864188954,0.0,0.0 +1200.0,4.2132000000000005e-10,113470.0,0.9957463555683387,0.0,0.00042535844318809796,0.0014887945510119434,0.002339491437461339,0.0,0.0 +1250.0,4.1411000000000003e-10,112950.0,0.9946851359896851,0.0,0.0005314874010266091,0.0018601909036664813,0.0029231857056219,0.0,0.0 +1300.0,4.0701999999999996e-10,112430.0,0.9934245300158568,0.0,0.0006575429983960726,0.0023014104944318542,0.0036165164913152,0.0,0.0 +1350.0,4.0005e-10,111900.0,0.9919371233823422,0.0,0.000806297661736781,0.002821991816223733,0.004434587139697296,0.0,0.0 +1400.0,3.932e-10,111370.0,0.990198128525537,0.0,0.0009801881474444012,0.003430693515989254,0.0053909898110292565,0.0,0.0 +1450.0,3.8647e-10,110840.0,0.9881760472958109,0.0,0.0011823952704189185,0.0041383834464662145,0.006503173987304051,0.0,0.0 +1500.0,3.7985000000000004e-10,110290.0,0.9858444362999633,0.0,0.0014156063702286661,0.004954422294900327,0.007785535034907658,0.0,0.0 +1550.0,3.7335e-10,109740.0,0.9831648175076059,0.0,0.0016835082491904213,0.005892328872411476,0.009259345370792316,0.0,0.0 +1600.0,3.6695e-10,109190.0,0.9801123522696454,0.0,0.0019888047731314554,0.006960816705960094,0.010938026251263002,0.0,0.0 +1650.0,3.6067e-10,108620.0,0.9766436135813703,0.0,0.0023356086417519743,0.008174730246501912,0.012846047530375864,0.0,0.0 +1700.0,3.545e-10,108040.0,0.972734085483159,0.0,0.0027266114517680976,0.009543240081608343,0.014996062983464533,0.0,0.0 +1750.0,3.4843e-10,107460.0,0.9683378696566868,0.0,0.0031661930343753245,0.011081975619653637,0.017413961689284285,0.0,0.0 +1800.0,3.4245999999999997e-10,106860.0,0.9634242390666519,0.0,0.003657616093510811,0.012801056324647828,0.020117088515189466,0.0,0.0 +1850.0,3.366e-10,106250.0,0.9579531612454322,0.0,0.00420471387555579,0.01471604856296026,0.023126076316051847,0.0,0.0 +1900.0,3.3083000000000004e-10,105620.0,0.9518909518909519,0.0,0.004811004811004811,0.016838016838016834,0.02646002646002646,0.0,0.0 +1950.0,3.2517000000000003e-10,104980.0,0.9451968808502933,0.0,0.0054802819150696815,0.019180936702908883,0.03014190053172825,0.0,0.0 +2000.0,3.196e-10,104320.0,0.9378330948492131,0.0,0.006216720515177701,0.021758071801636948,0.03419211283397236,0.0,0.0 +2050.0,3.1413e-10,103650.0,0.9297709297709297,0.0,0.007023007023007022,0.024580024580024576,0.03862603862603862,0.0,0.0 +2100.0,3.0875e-10,102960.0,0.9209689869341142,0.0,0.007903091306599563,0.027660969572933465,0.04346695218635258,0.0,0.0 +2150.0,3.0346e-10,102250.0,0.9113920962018212,0.0,0.008860720379656874,0.03101307133006406,0.04873411208845781,0.0,0.0 +2200.0,2.9827e-10,101520.0,0.901017026643812,0.0,0.00989826733571779,0.03464388567517727,0.05444082034529285,0.0,0.0 +2250.0,2.9316e-10,100760.0,0.8898091101908898,0.0,0.01101898898101102,0.038566961433038574,0.0606049393950606,0.0,0.0 +2300.0,2.8814e-10,99987.0,0.8777373667878996,0.0,0.012225963322110034,0.04279187162438513,0.0672447982656052,0.0,0.0 +2350.0,2.8321e-10,99186.0,0.8647843239216196,0.0,0.013522067610338053,0.04732523662618314,0.07436837184185921,0.0,0.0 +2400.0,2.7836e-10,98361.0,0.8509291490708509,0.0,0.014906985093014908,0.05217494782505218,0.08198891801108199,0.0,0.0 +2450.0,2.7359e-10,97509.0,0.8361425084275252,0.0,0.016386049158147474,0.05735017205051615,0.0901212703638111,0.0,0.0 +2500.0,2.6891e-10,96630.0,0.8204308204308204,0.0,0.017957017957017957,0.06284906284906286,0.09876309876309877,0.0,0.0 +2550.0,2.643e-10,95721.0,0.8037659811700941,0.0,0.01962290188549057,0.06868165659171704,0.10792946035269824,0.0,0.0 +2600.0,2.5976999999999997e-10,94782.0,0.7861623584870755,0.0,0.021384064152192458,0.07484322452967358,0.11761035283105849,0.0,0.0 +2650.0,2.5533e-10,93812.0,0.7676130704522818,0.0,0.023239092956371825,0.08133732534930141,0.12781051124204496,0.0,0.0 +2700.0,2.5095e-10,92809.0,0.7481147631966576,0.0,0.0251878236852342,0.08815838289131975,0.1385390302267884,0.0,0.0 +2750.0,2.4666e-10,91772.0,0.7277036385181926,0.0,0.027230136150680755,0.09530547652738264,0.14976074880374401,0.0,0.0 +2800.0,2.4243e-10,90700.0,0.7063785872428254,0.0,0.029361941276117444,0.10276979446041107,0.16148967702064598,0.0,0.0 +2850.0,2.3828e-10,89591.0,0.6841786316427367,0.0,0.031581936836126326,0.11053977892044217,0.17369965260069478,0.0,0.0 +2900.0,2.342e-10,88444.0,0.6611253721223951,0.0,0.03388676279266045,0.11860916973581183,0.18637869534913254,0.0,0.0 +2950.0,2.3019e-10,87258.0,0.6372787254425492,0.0,0.03627192745614509,0.1269497461005078,0.199499601000798,0.0,0.0 +3000.0,2.2625e-10,86031.0,0.612668161995514,0.0,0.038732883801348594,0.13556959329122012,0.2130293609119173,0.0,0.0 +3050.0,2.2238e-10,84761.0,0.5873470632646837,0.0,0.041264793676031614,0.14442927785361073,0.22695886520567396,0.0,0.0 +3100.0,2.1856999999999998e-10,83448.0,0.5614,0.0,0.04386,0.15350999999999998,0.24123000000000003,0.0,0.0 +3150.0,2.1483000000000002e-10,82088.0,0.5348683953948138,0.0,0.046512860461418615,0.1627995116014652,0.2558192325423024,0.0,0.0 +3200.0,2.1115000000000002e-10,80682.0,0.5078420313681254,0.0,0.04921619686478746,0.172250689002756,0.27069108276433107,0.0,0.0 +3250.0,2.0753e-10,79227.0,0.48041048041048046,0.0,0.05195905195905196,0.18186018186018185,0.28577028577028574,0.0,0.0 +3300.0,2.0398e-10,77721.0,0.45265818936724256,0.0,0.05473378106487574,0.1915692337230651,0.30103879584481663,0.0,0.0 +3350.0,2.0048e-10,76162.0,0.42468957531042467,0.0,0.05753094246905753,0.20135979864020137,0.3164196835803164,0.0,0.0 +3400.0,1.9705e-10,74548.0,0.3966,0.0,0.06034,0.21119000000000002,0.33187,0.0,0.0 +3450.0,1.9368e-10,72876.0,0.3685103685103685,0.0,0.06314906314906314,0.221020221020221,0.3473203473203473,0.0,0.0 +3500.0,1.9036e-10,71143.0,0.3405310215930648,0.0,0.06594719784159353,0.2308106924320773,0.3627110881332644,0.0,0.0 +3550.0,1.871e-10,69347.0,0.3127793744412511,0.0,0.06872186255627488,0.24052951894096214,0.37796924406151183,0.0,0.0 +3600.0,1.839e-10,67485.0,0.2853925685331168,0.0,0.07146164315478838,0.2501122510102591,0.39303353730183566,0.0,0.0 +3650.0,1.8075e-10,65551.0,0.25848974151025844,0.0,0.07415092584907414,0.2595297404702595,0.4078295921704078,0.0,0.0 +3700.0,1.7765e-10,63542.0,0.23220000000000002,0.0,0.07678000000000001,0.2687300000000001,0.42229,0.0,0.0 +3750.0,1.7461e-10,61452.0,0.20666937999186002,0.0,0.07933276200171399,0.277669166992499,0.43632869101392696,0.0,0.0 +3800.0,1.7162e-10,59276.0,0.18202872579891943,0.0,0.08179642742500805,0.28628799598402815,0.4498868507920445,0.0,0.0 +3850.0,1.6868e-10,57005.0,0.1584085743228311,0.0,0.08415824257581682,0.29455734898385916,0.462875834117493,0.0,0.0 +3900.0,1.6579e-10,54630.0,0.1359493202533987,0.0,0.0864045679771601,0.30241848790756043,0.4752276238618807,0.0,0.0 +3950.0,1.6295000000000002e-10,52141.0,0.11477977044045913,0.0,0.08852182295635411,0.30982938034123936,0.4868690262619475,0.0,0.0 +4000.0,1.6016e-10,49523.0,0.09503209503209503,0.0,0.0904970904970905,0.3167403167403167,0.4977304977304977,0.0,0.0 +4050.0,1.5741999999999998e-10,46758.0,0.07683861580692097,0.0,0.09231553842230789,0.3231083844580777,0.5077374613126934,0.0,0.0 +4100.0,1.5473e-10,43823.0,0.06031481905554283,0.0,0.0939677180968457,0.32888901333296,0.5168284495146515,0.0,0.0 +4150.0,1.5208e-10,40683.0,0.0455818176727293,0.0,0.09544161823352705,0.33404866380534476,0.5249279002883988,0.0,0.0 +4200.0,1.4947e-10,37293.0,0.032744967255032745,0.0,0.09672590327409672,0.3385396614603386,0.531989468010532,0.0,0.0 +4250.0,1.4690999999999999e-10,33583.0,0.021908065724197172,0.0,0.09780929342788029,0.342331026993081,0.5379516138548416,0.0,0.0 +4300.0,1.444e-10,29439.0,0.013162052648210592,0.0,0.09868439473757895,0.34539138156552623,0.5427621710486842,0.0,0.0 +4350.0,1.4191999999999999e-10,24658.0,0.0065915494366207755,0.0,0.09934174506308796,0.3476926076945577,0.5463740978057335,0.0,0.0 +4400.0,1.3949e-10,18803.0,0.0022676984126111114,0.0,0.09977293015894889,0.3492097555531711,0.5487496158752688,0.0,0.0 +4450.0,1.371e-10,10781.0,0.00024935140883545993,0.0,0.09997556486194147,0.34991197700267007,0.549863106726553,0.0,0.0 +4500.0,1.3475999999999998e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4550.0,1.3245e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4600.0,1.3018e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4650.0,1.2795e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4700.0,1.2576000000000001e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4750.0,1.2361e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4800.0,1.2149e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4850.0,1.1941e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4900.0,1.1737e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +4950.0,1.1535999999999999e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5000.0,1.1337999999999999e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5050.0,1.1143999999999999e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5100.0,1.0953000000000001e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5150.0,1.0765e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5200.0,1.0581000000000001e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5250.0,1.0399999999999999e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5300.0,1.0222e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5350.0,1.0047e-10,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5400.0,9.874799999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5450.0,9.7057e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5500.0,9.5395e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5550.0,9.376100000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5600.0,9.215499999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5650.0,9.057700000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5700.0,8.902600000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5750.0,8.750200000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5800.0,8.600299999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5850.0,8.4531e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5900.0,8.3083e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +5950.0,8.165999999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6000.0,8.026200000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6050.0,7.888800000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6100.0,7.753699999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6150.0,7.6209e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6200.0,7.490399999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6250.0,7.362100000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6300.0,7.2361e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6350.0,7.1121e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6400.0,6.9903e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6450.0,6.8706e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6500.0,6.753e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6550.0,6.6373e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6600.0,6.5237e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6650.0,6.412000000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6700.0,6.3022e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6750.0,6.194300000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6800.0,6.0882e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6850.0,5.983899999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6900.0,5.881499999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +6950.0,5.7807e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7000.0,5.6817e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7050.0,5.5844e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7100.0,5.4888e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7150.0,5.3948e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7200.0,5.3024e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7250.0,5.2116e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7300.0,5.1224e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7350.0,5.0347000000000006e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7400.0,4.9485e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7450.0,4.8637000000000006e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7500.0,4.7803999999999995e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7550.0,4.698600000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7600.0,4.618100000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7650.0,4.539e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7700.0,4.4612999999999995e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7750.0,4.3849e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7800.0,4.3098e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7850.0,4.236e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7900.0,4.1634999999999994e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +7950.0,4.0922e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8000.0,4.0221e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8050.0,3.9531999999999996e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8100.0,3.8855e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8150.0,3.819e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8200.0,3.7536000000000005e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8250.0,3.6893e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8300.0,3.6260999999999995e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8350.0,3.564e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8400.0,3.503e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8450.0,3.443e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8500.0,3.3841e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8550.0,3.326099999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8600.0,3.2692e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8650.0,3.2132e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8700.0,3.1582e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8750.0,3.1041e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8800.0,3.0509e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8850.0,2.9987e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8900.0,2.9473e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +8950.0,2.8968e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9000.0,2.8471999999999997e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9050.0,2.7984999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9100.0,2.7506000000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9150.0,2.7035e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9200.0,2.6571999999999996e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9250.0,2.6116999999999996e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9300.0,2.5669e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9350.0,2.523e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9400.0,2.4798000000000003e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9450.0,2.4373000000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9500.0,2.3956e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9550.0,2.3546e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9600.0,2.3141999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9650.0,2.2746e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9700.0,2.2356999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9750.0,2.1973999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9800.0,2.1596999999999995e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9850.0,2.1228000000000003e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9900.0,2.0863999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +9950.0,2.0507e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10000.0,2.0155999999999996e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10050.0,1.9809999999999997e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10100.0,1.9471e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10150.0,1.9137999999999997e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10200.0,1.8809999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10250.0,1.8488e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10300.0,1.8171e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10350.0,1.786e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10400.0,1.7554000000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10450.0,1.7254e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10500.0,1.6957999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10550.0,1.6667999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10600.0,1.6382000000000004e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10650.0,1.6102e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10700.0,1.5826e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10750.0,1.5555e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10800.0,1.5289e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10850.0,1.5027e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10900.0,1.477e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +10950.0,1.4517000000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11000.0,1.4268e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11050.0,1.4024000000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11100.0,1.3784000000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11150.0,1.3548e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11200.0,1.3315999999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11250.0,1.3087999999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11300.0,1.2863e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11350.0,1.2643e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11400.0,1.2427e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11450.0,1.2214000000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11500.0,1.2005000000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11550.0,1.1799000000000002e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11600.0,1.1597e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11650.0,1.1398000000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11700.0,1.1202999999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11750.0,1.1010999999999998e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11800.0,1.0823e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11850.0,1.0637999999999999e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11900.0,1.0455e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +11950.0,1.0276e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12000.0,1.0100000000000001e-11,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12050.0,9.9274e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12100.0,9.7574e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12150.0,9.5903e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12200.0,9.4261e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12250.0,9.2647e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12300.0,9.106e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12350.0,8.9501e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12400.0,8.7968e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12450.0,8.6462e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12500.0,8.4981e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12550.0,8.3526e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12600.0,8.2095e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12650.0,8.069e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12700.0,7.9308e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12750.0,7.795e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12800.0,7.6615e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12850.0,7.5303e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12900.0,7.4013e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12950.0,7.2746e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13000.0,7.15e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13050.0,7.0276e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13100.0,6.9072e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13150.0,6.789e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13200.0,6.6727e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13250.0,6.5584e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13300.0,6.4461e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13350.0,6.3357e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13400.0,6.2272e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13450.0,6.1206e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13500.0,6.0158e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13550.0,5.9128e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13600.0,5.8115e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13650.0,5.712e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13700.0,5.6142e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13750.0,5.518e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13800.0,5.4236e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13850.0,5.3307e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13900.0,5.2394e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13950.0,5.1497e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14000.0,5.0615e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14050.0,4.9748e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14100.0,4.8896e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14150.0,4.8059e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14200.0,4.7236e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14250.0,4.6427e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14300.0,4.5632e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14350.0,4.4851e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14400.0,4.4083e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14450.0,4.3328e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14500.0,4.2586e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14550.0,4.1856e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14600.0,4.114e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14650.0,4.0435e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14700.0,3.9743e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14750.0,3.9062e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14800.0,3.8393e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14850.0,3.7736e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14900.0,3.709e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14950.0,3.6454e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15000.0,3.583e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15050.0,3.5217e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15100.0,3.4614e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15150.0,3.4021e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15200.0,3.3438e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15250.0,3.2866e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15300.0,3.2303e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15350.0,3.175e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15400.0,3.1206e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15450.0,3.0672e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15500.0,3.0146e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15550.0,2.963e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15600.0,2.9123e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15650.0,2.8624e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15700.0,2.8134e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15750.0,2.7652e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15800.0,2.7178e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15850.0,2.6713e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15900.0,2.6256e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15950.0,2.5806e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16000.0,2.5364e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16050.0,2.493e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16100.0,2.4503e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16150.0,2.4083e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16200.0,2.3671e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16250.0,2.3265e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16300.0,2.2867e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16350.0,2.2475e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16400.0,2.2091e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16450.0,2.1712e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16500.0,2.134e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16550.0,2.0975e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16600.0,2.0616e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16650.0,2.0263e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16700.0,1.9916e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16750.0,1.9575e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16800.0,1.924e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16850.0,1.891e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16900.0,1.8586e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16950.0,1.8268e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17000.0,1.7955e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17050.0,1.7648e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17100.0,1.7346e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17150.0,1.7048e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17200.0,1.6757e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17250.0,1.647e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17300.0,1.6188e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17350.0,1.591e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17400.0,1.5638e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17450.0,1.537e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17500.0,1.5107e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17550.0,1.4848e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17600.0,1.4594e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17650.0,1.4344e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17700.0,1.4098e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17750.0,1.3857e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17800.0,1.362e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17850.0,1.3386e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17900.0,1.3157e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17950.0,1.2932e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18000.0,1.271e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18050.0,1.2493e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18100.0,1.2279e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18150.0,1.2069e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18200.0,1.1862e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18250.0,1.1659e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18300.0,1.1459e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18350.0,1.1263e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18400.0,1.107e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18450.0,1.088e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18500.0,1.0694e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18550.0,1.0511e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18600.0,1.0331e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18650.0,1.0154e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18700.0,9.9802e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18750.0,9.8093e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18800.0,9.641299999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18850.0,9.476200000000002e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18900.0,9.3139e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18950.0,9.1544e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19000.0,8.997700000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19050.0,8.843600000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19100.0,8.692200000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19150.0,8.5433e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19200.0,8.397e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19250.0,8.253200000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19300.0,8.1119e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19350.0,7.973e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19400.0,7.8364e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19450.0,7.7022e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19500.0,7.570300000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19550.0,7.4407e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19600.0,7.3133e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19650.0,7.1881e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19700.0,7.065e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19750.0,6.944e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19800.0,6.8251e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19850.0,6.7082e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19900.0,6.5933e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19950.0,6.480399999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20000.0,6.3694e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20050.0,6.260399999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20100.0,6.153199999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20150.0,6.0478e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20200.0,5.9442e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20250.0,5.842399999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20300.0,5.7424e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20350.0,5.644e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20400.0,5.547399999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20450.0,5.4524e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20500.0,5.359e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20550.0,5.2673e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20600.0,5.1771e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20650.0,5.0884e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20700.0,5.0013e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20750.0,4.915600000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20800.0,4.8315e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20850.0,4.7487e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20900.0,4.6674e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20950.0,4.5875e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21000.0,4.5088999999999996e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21050.0,4.4316999999999997e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21100.0,4.3558e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21150.0,4.2812e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21200.0,4.2078999999999997e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21250.0,4.1358000000000004e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21300.0,4.065e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21350.0,3.9954000000000003e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21400.0,3.927e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21450.0,3.8596999999999997e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21500.0,3.7936e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21550.0,3.7287e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21600.0,3.6648e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21650.0,3.6021e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21700.0,3.5404e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21750.0,3.4798e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21800.0,3.4202e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21850.0,3.3616e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21900.0,3.304e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21950.0,3.2475e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22000.0,3.1918e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22050.0,3.1372e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22100.0,3.0835e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22150.0,3.0307e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22200.0,2.9788000000000004e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22250.0,2.9278000000000004e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22300.0,2.8776e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22350.0,2.8283e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22400.0,2.7799e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22450.0,2.7323000000000004e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22500.0,2.6855e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22550.0,2.6395e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22600.0,2.5943000000000004e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22650.0,2.5499e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22700.0,2.5062e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22750.0,2.4633e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22800.0,2.4211e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22850.0,2.3797e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22900.0,2.3389000000000003e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22950.0,2.2989e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23000.0,2.2595e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23050.0,2.2208000000000002e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23100.0,2.1828000000000003e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23150.0,2.1454000000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23200.0,2.1087e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23250.0,2.0725e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23300.0,2.0371e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23350.0,2.0022e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23400.0,1.9679000000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23450.0,1.9342e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23500.0,1.9010999999999998e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23550.0,1.8685e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23600.0,1.8365e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23650.0,1.8050999999999998e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23700.0,1.7742000000000002e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23750.0,1.7437999999999998e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23800.0,1.7139000000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23850.0,1.6846e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23900.0,1.6557e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23950.0,1.6274000000000002e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24000.0,1.5995e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24050.0,1.5721e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24100.0,1.5452e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24150.0,1.5187000000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24200.0,1.4927e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24250.0,1.4672e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24300.0,1.442e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24350.0,1.4173e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24400.0,1.3931e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24450.0,1.3692e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24500.0,1.3458e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24550.0,1.3227e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24600.0,1.3001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24650.0,1.2777999999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24700.0,1.2559e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24750.0,1.2344e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24800.0,1.2133e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24850.0,1.1925e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24900.0,1.1720999999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24950.0,1.152e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25000.0,1.1323e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25050.0,1.1129000000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25100.0,1.0938e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25150.0,1.0750999999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25200.0,1.0567e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25250.0,1.0385999999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25300.0,1.0207999999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25350.0,1.0033e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25400.0,9.861499999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25450.0,9.6926e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25500.0,9.5266e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25550.0,9.3635e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25600.0,9.2031e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25650.0,9.045499999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25700.0,8.8906e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25750.0,8.7384e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25800.0,8.5887e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25850.0,8.441699999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25900.0,8.297100000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25950.0,8.155e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26000.0,8.015399999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26050.0,7.878099999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26100.0,7.743200000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26150.0,7.610599999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26200.0,7.4803e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26250.0,7.3522e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26300.0,7.2263e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26350.0,7.1025e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26400.0,6.9809e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26450.0,6.8614e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26500.0,6.7439e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26550.0,6.628400000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26600.0,6.5149e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26650.0,6.403300000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26700.0,6.2937e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26750.0,6.1859e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26800.0,6.079900000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26850.0,5.975800000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26900.0,5.8735e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26950.0,5.7729e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27000.0,5.6740999999999996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27050.0,5.576900000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27100.0,5.4814e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27150.0,5.3875e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27200.0,5.2953e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27250.0,5.2046000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27300.0,5.1155000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27350.0,5.0279000000000005e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27400.0,4.9418e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27450.0,4.8571e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27500.0,4.774e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27550.0,4.6922000000000003e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27600.0,4.6119e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27650.0,4.5329000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27700.0,4.4553e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27750.0,4.3789999999999996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27800.0,4.304e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27850.0,4.2302999999999997e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27900.0,4.1578e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27950.0,4.0866e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28000.0,4.0167000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28050.0,3.9479e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28100.0,3.8803e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28150.0,3.8138e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28200.0,3.7485000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28250.0,3.6843e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28300.0,3.6212e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28350.0,3.5592e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28400.0,3.4982999999999996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28450.0,3.4384e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28500.0,3.3794999999999996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28550.0,3.3216000000000003e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28600.0,3.2647e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28650.0,3.2088e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28700.0,3.1539e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28750.0,3.0999000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28800.0,3.0468e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28850.0,2.9945999999999996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28900.0,2.9433e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28950.0,2.8929e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29000.0,2.8434e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29050.0,2.7947000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29100.0,2.7468000000000002e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29150.0,2.6998000000000002e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29200.0,2.6536e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29250.0,2.6081e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29300.0,2.5635000000000003e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29350.0,2.5196e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29400.0,2.4764e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29450.0,2.434e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29500.0,2.3923e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29550.0,2.3513999999999998e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29600.0,2.3111000000000002e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29650.0,2.2715e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29700.0,2.2326e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29750.0,2.1944e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29800.0,2.1568e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29850.0,2.1199e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29900.0,2.0836e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29950.0,2.0479e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30000.0,2.0128e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30050.0,1.9784e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30100.0,1.9445e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30150.0,1.9112e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30200.0,1.8784e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30250.0,1.8463e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30300.0,1.8147e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30350.0,1.7836e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30400.0,1.7530000000000002e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30450.0,1.7230000000000003e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30500.0,1.6935e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30550.0,1.6644999999999998e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30600.0,1.636e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30650.0,1.6080000000000003e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30700.0,1.5805000000000002e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30750.0,1.5534e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30800.0,1.5268e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30850.0,1.5006999999999998e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30900.0,1.475e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30950.0,1.4497e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31000.0,1.4249e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31050.0,1.4005000000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31100.0,1.3765e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31150.0,1.3528999999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31200.0,1.3297e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31250.0,1.3069999999999998e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31300.0,1.2846000000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31350.0,1.2626000000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31400.0,1.241e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31450.0,1.2197e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31500.0,1.1988e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31550.0,1.1782999999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31600.0,1.1581e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31650.0,1.1383e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31700.0,1.1188e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31750.0,1.0996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31800.0,1.0808e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31850.0,1.0623000000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31900.0,1.0440999999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31950.0,1.0262e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32000.0,1.0087e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32050.0,9.913899999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32100.0,9.7441e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32150.0,9.577299999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32200.0,9.4133e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32250.0,9.2521e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32300.0,9.093600000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32350.0,8.937899999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32400.0,8.7848e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32450.0,8.6344e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32500.0,8.4865e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32550.0,8.3412e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32600.0,8.1984e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32650.0,8.058e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32700.0,7.920000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32750.0,7.7844e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32800.0,7.651100000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32850.0,7.52e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32900.0,7.3913e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32950.0,7.2647e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33000.0,7.140300000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33050.0,7.018000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33100.0,6.897800000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33150.0,6.779699999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33200.0,6.663600000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33250.0,6.5495000000000004e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33300.0,6.437300000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33350.0,6.3271e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33400.0,6.2188e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33450.0,6.1123e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33500.0,6.0076e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33550.0,5.9047e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33600.0,5.8036e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33650.0,5.7042e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33700.0,5.6065e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33750.0,5.5105e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33800.0,5.4162e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33850.0,5.3234e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33900.0,5.2323e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33950.0,5.1427e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34000.0,5.0546000000000005e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34050.0,4.968e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34100.0,4.883e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34150.0,4.7993000000000005e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34200.0,4.7171999999999994e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34250.0,4.636399999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34300.0,4.557e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34350.0,4.4788999999999995e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34400.0,4.4022e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34450.0,4.3269e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34500.0,4.2528e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34550.0,4.1799e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34600.0,4.1083999999999995e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34650.0,4.0380000000000005e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34700.0,3.9689e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34750.0,3.9009e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34800.0,3.8341e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34850.0,3.7683999999999995e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34900.0,3.7039e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34950.0,3.6405e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35000.0,3.5780999999999995e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35050.0,3.5169000000000004e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35100.0,3.4566000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35150.0,3.3974000000000003e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35200.0,3.3393e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35250.0,3.2821e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35300.0,3.2259000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35350.0,3.1706e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35400.0,3.1163e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35450.0,3.063e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35500.0,3.0105e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35550.0,2.959e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35600.0,2.9083000000000003e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35650.0,2.8585000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35700.0,2.8095e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35750.0,2.7614000000000003e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35800.0,2.7140999999999997e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35850.0,2.6677e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35900.0,2.622e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35950.0,2.5771e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36000.0,2.533e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36050.0,2.4896e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36100.0,2.4469e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36150.0,2.4050000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36200.0,2.3639e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36250.0,2.3234000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36300.0,2.2836e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36350.0,2.2445e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36400.0,2.206e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36450.0,2.1683e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36500.0,2.1311e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36550.0,2.0945999999999998e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36600.0,2.0588000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36650.0,2.0235e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36700.0,1.9889e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36750.0,1.9547999999999997e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36800.0,1.9213000000000003e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36850.0,1.8884e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36900.0,1.8561e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36950.0,1.8242999999999997e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37000.0,1.7931e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37050.0,1.7624000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37100.0,1.7321999999999998e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37150.0,1.7025e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37200.0,1.6734000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37250.0,1.6446999999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37300.0,1.6165e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37350.0,1.5889e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37400.0,1.5617000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37450.0,1.5349e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37500.0,1.5085999999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37550.0,1.4828e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37600.0,1.4574000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37650.0,1.4324000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37700.0,1.4079e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37750.0,1.3838e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37800.0,1.3601e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37850.0,1.3368e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37900.0,1.3139000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37950.0,1.2914000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38000.0,1.2693e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38050.0,1.2476e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38100.0,1.2262e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38150.0,1.2052e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38200.0,1.1845999999999998e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38250.0,1.1642999999999998e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38300.0,1.1442999999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38350.0,1.1247999999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38400.0,1.1055e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38450.0,1.0866e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38500.0,1.068e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38550.0,1.0497e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38600.0,1.0317e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38650.0,1.0140000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38700.0,9.9666e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38750.0,9.7959e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38800.0,9.6282e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38850.0,9.4633e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38900.0,9.3012e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38950.0,9.142e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39000.0,8.9854e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39050.0,8.8315e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39100.0,8.680300000000001e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39150.0,8.531700000000001e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39200.0,8.385600000000001e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39250.0,8.242000000000001e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39300.0,8.100799999999999e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39350.0,7.962100000000001e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39400.0,7.8257e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39450.0,7.6917e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39500.0,7.56e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39550.0,7.4306e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39600.0,7.3033e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39650.0,7.1782e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39700.0,7.055299999999999e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39750.0,6.9345e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39800.0,6.8158e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39850.0,6.699e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39900.0,6.584299999999999e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39950.0,6.471599999999999e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40000.0,6.3607e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40050.0,6.2518e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40100.0,6.1448e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40150.0,6.0395e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40200.0,5.9361e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40250.0,5.8345e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40300.0,5.7345e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40350.0,5.6363e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 diff --git a/docs/research/code_comparison/toy_models/blondin_compare_06.csvy b/docs/research/code_comparison/toy_models/blondin_compare_06.csvy new file mode 100644 index 00000000000..e465f631255 --- /dev/null +++ b/docs/research/code_comparison/toy_models/blondin_compare_06.csvy @@ -0,0 +1,841 @@ +--- +datatype: + fields: + - desc: velocities of shell outer bounderies. + name: velocity + unit: km/s + - desc: mean density of shell. + name: density + unit: g/cm^3 + - desc: radiative temperature. + name: t_rad + unit: K + - desc: Fraction Ni56 abundance + name: Ni56 + - desc: Fraction Ti abundance + name: Ti + - desc: Fraction Ca abundance + name: Ca + - desc: Fraction S abundance + name: S + - desc: Fraction Si abundance + name: Si + - desc: Fraction O abundance + name: O + - desc: Fraction C abundance + name: C +description: Converted snia_toy06.dat to csvy format +model_density_time_0: 2.0 d +tardis_model_config_version: v1.0 +v_inner_boundary: 9000 km/s +v_outer_boundary: 20000 km/s + +--- +velocity,density,t_rad,Ni56,Ti,Ca,S,Si,O,C +50.0,6.2419e-10,125320.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +100.0,6.1502e-10,124860.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +150.0,6.0492e-10,124340.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +200.0,5.9475e-10,123820.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +250.0,5.846799999999999e-10,123290.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +300.0,5.7473e-10,122760.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +350.0,5.649299999999999e-10,122240.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +400.0,5.5529e-10,121710.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +450.0,5.4581e-10,121190.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +500.0,5.3648e-10,120670.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +550.0,5.273099999999999e-10,120150.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +600.0,5.1829e-10,119630.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +650.0,5.0942e-10,119120.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +700.0,5.0071e-10,118600.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +750.0,4.9214e-10,118090.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +800.0,4.837200000000001e-10,117580.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +850.0,4.754400000000001e-10,117080.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +900.0,4.6731e-10,116570.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +950.0,4.5931e-10,116070.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1000.0,4.5145e-10,115570.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1050.0,4.4372e-10,115070.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1100.0,4.3612e-10,114580.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1150.0,4.2866e-10,114080.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1200.0,4.2132000000000005e-10,113590.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1250.0,4.1411000000000003e-10,113100.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1300.0,4.0701999999999996e-10,112620.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1350.0,4.0005e-10,112130.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1400.0,3.932e-10,111650.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1450.0,3.8647e-10,111170.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1500.0,3.7985000000000004e-10,110690.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1550.0,3.7335e-10,110210.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1600.0,3.6695e-10,109740.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1650.0,3.6067e-10,109260.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1700.0,3.545e-10,108790.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1750.0,3.4843e-10,108320.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1800.0,3.4245999999999997e-10,107860.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1850.0,3.366e-10,107390.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1900.0,3.3083000000000004e-10,106930.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +1950.0,3.2517000000000003e-10,106470.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2000.0,3.196e-10,106010.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2050.0,3.1413e-10,105550.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2100.0,3.0875e-10,105100.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2150.0,3.0346e-10,104650.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2200.0,2.9827e-10,104200.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2250.0,2.9316e-10,103750.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2300.0,2.8814e-10,103300.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2350.0,2.8321e-10,102850.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2400.0,2.7836e-10,102410.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2450.0,2.7359e-10,101970.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2500.0,2.6891e-10,101530.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2550.0,2.643e-10,101090.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2600.0,2.5976999999999997e-10,100660.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2650.0,2.5533e-10,100220.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2700.0,2.5095e-10,99793.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2750.0,2.4666e-10,99363.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2800.0,2.4243e-10,98935.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2850.0,2.3828e-10,98508.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2900.0,2.342e-10,98084.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +2950.0,2.3019e-10,97661.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3000.0,2.2625e-10,97240.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3050.0,2.2238e-10,96821.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3100.0,2.1856999999999998e-10,96404.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3150.0,2.1483000000000002e-10,95989.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3200.0,2.1115000000000002e-10,95575.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3250.0,2.0753e-10,95164.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3300.0,2.0398e-10,94753.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3350.0,2.0048e-10,94345.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3400.0,1.9705e-10,93939.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3450.0,1.9368e-10,93534.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3500.0,1.9036e-10,93131.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3550.0,1.871e-10,92730.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3600.0,1.839e-10,92330.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3650.0,1.8075e-10,91932.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3700.0,1.7765e-10,91536.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3750.0,1.7461e-10,91142.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3800.0,1.7162e-10,90749.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3850.0,1.6868e-10,90358.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3900.0,1.6579e-10,89969.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +3950.0,1.6295000000000002e-10,89581.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4000.0,1.6016e-10,89195.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4050.0,1.5741999999999998e-10,88811.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4100.0,1.5473e-10,88428.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4150.0,1.5208e-10,88047.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4200.0,1.4947e-10,87668.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4250.0,1.4690999999999999e-10,87290.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4300.0,1.444e-10,86914.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4350.0,1.4191999999999999e-10,86539.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4400.0,1.3949e-10,86166.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4450.0,1.371e-10,85795.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4500.0,1.3475999999999998e-10,85426.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4550.0,1.3245e-10,85057.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4600.0,1.3018e-10,84691.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4650.0,1.2795e-10,84326.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4700.0,1.2576000000000001e-10,83963.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4750.0,1.2361e-10,83601.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4800.0,1.2149e-10,83241.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4850.0,1.1941e-10,82882.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4900.0,1.1737e-10,82525.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +4950.0,1.1535999999999999e-10,82169.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5000.0,1.1337999999999999e-10,81815.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5050.0,1.1143999999999999e-10,81463.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5100.0,1.0953000000000001e-10,81112.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5150.0,1.0765e-10,80762.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5200.0,1.0581000000000001e-10,80414.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5250.0,1.0399999999999999e-10,80068.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5300.0,1.0222e-10,79723.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5350.0,1.0047e-10,79379.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5400.0,9.874799999999999e-11,79037.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5450.0,9.7057e-11,78697.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5500.0,9.5395e-11,78358.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5550.0,9.376100000000002e-11,78020.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5600.0,9.215499999999999e-11,77684.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5650.0,9.057700000000002e-11,77349.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5700.0,8.902600000000002e-11,77016.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5750.0,8.750200000000001e-11,76684.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5800.0,8.600299999999999e-11,76353.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5850.0,8.4531e-11,76024.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5900.0,8.3083e-11,75697.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +5950.0,8.165999999999999e-11,75371.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +6000.0,8.026200000000001e-11,75046.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +6050.0,7.888800000000002e-11,74723.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +6100.0,7.753699999999999e-11,74401.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +6150.0,7.6209e-11,74080.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +6200.0,7.490399999999999e-11,73761.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +6250.0,7.362100000000001e-11,73443.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +6300.0,7.2361e-11,73127.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +6350.0,7.1121e-11,72811.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +6400.0,6.9903e-11,72498.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +6450.0,6.8706e-11,72185.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +6500.0,6.753e-11,71874.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +6550.0,6.6373e-11,71565.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +6600.0,6.5237e-11,71256.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0 +6650.0,6.412000000000001e-11,70949.0,0.9999600488980463,0.0,3.995100195360399e-06,1.3983000683768732e-05,2.1973001074479753e-05,0.0,0.0 +6700.0,6.3022e-11,70635.0,0.9994931544003953,0.0,5.068415995920883e-05,0.00017740055987616697,0.00027876087976933656,0.0,0.0 +6750.0,6.194300000000001e-11,70311.0,0.9983851678157877,0.0,0.00016147921844058272,0.00056519726444524,0.0008881557013264055,0.0,0.0 +6800.0,6.0882e-11,69977.0,0.9966396611425152,0.0,0.00033603988574643887,0.001176099600126136,0.0018481993716122137,0.0,0.0 +6850.0,5.983899999999999e-11,69634.0,0.9942639770559083,0.0,0.0005736022944091776,0.002007608030432122,0.003154812619250477,0.0,0.0 +6900.0,5.881499999999999e-11,69282.0,0.9912660349358602,0.0,0.0008733965064139743,0.0030568877724489103,0.004803680785276859,0.0,0.0 +6950.0,5.7807e-11,68920.0,0.9876548395087136,0.0,0.0012345060490796405,0.004320821172023742,0.006789833270183023,0.0,0.0 +7000.0,5.6817e-11,68550.0,0.9834408850967965,0.0,0.0016559014903113412,0.005795705216134694,0.009107508196757378,0.0,0.0 +7050.0,5.5844e-11,68171.0,0.9786345995826181,0.0,0.002136510041597196,0.007477835145825187,0.011751055229959584,0.0,0.0 +7100.0,5.4888e-11,67784.0,0.9732490267509732,0.0,0.002675097324902675,0.009362890637109362,0.014712985287014715,0.0,0.0 +7150.0,5.3948e-11,67388.0,0.9672942560947269,0.0,0.003270614390703319,0.011447050367021617,0.01798807914754825,0.0,0.0 +7200.0,5.3024e-11,66985.0,0.9607868294034629,0.0,0.003921287059752703,0.013724954707649464,0.021566928829134864,0.0,0.0 +7250.0,5.2116e-11,66573.0,0.9537379017766161,0.0,0.0046261898223823915,0.016191964377678367,0.025443944023323152,0.0,0.0 +7300.0,5.1224e-11,66155.0,0.9461657422541597,0.0,0.005383475774359015,0.01884191521138154,0.02960886676009957,0.0,0.0 +7350.0,5.0347000000000006e-11,65728.0,0.9380820637805404,0.0,0.006191813621989969,0.02167104767630489,0.03405507492116484,0.0,0.0 +7400.0,4.9485e-11,65295.0,0.9295059101739952,0.0,0.007049368982776475,0.024672891439277665,0.03877182940395062,0.0,0.0 +7450.0,4.8637000000000006e-11,64855.0,0.9204520249944549,0.0,0.007954817500598501,0.027842061252534755,0.043751096252411754,0.0,0.0 +7500.0,4.7803999999999995e-11,64408.0,0.910937995936409,0.0,0.008906180406403107,0.031171931421750874,0.04898389223543709,0.0,0.0 +7550.0,4.698600000000001e-11,63954.0,0.9009809910790901,0.0,0.009901910892101982,0.034657038122741936,0.0544600599060659,0.0,0.0 +7600.0,4.618100000000001e-11,63495.0,0.8906,0.0,0.01094,0.03829,0.06017,0.0,0.0 +7650.0,4.539e-11,63029.0,0.8798126394379183,0.0,0.012019036057108171,0.04206512619537858,0.06610319830959492,0.0,0.0 +7700.0,4.4612999999999995e-11,62557.0,0.8686382627234744,0.0,0.013135973728052546,0.0459769080461839,0.072248855502289,0.0,0.0 +7750.0,4.3849e-11,62079.0,0.8570934283737134,0.0,0.014291057164228656,0.05001720006880027,0.07859831439325757,0.0,0.0 +7800.0,4.3098e-11,61596.0,0.8451991548008452,0.0,0.015479984520015483,0.05417994582005418,0.08514091485908515,0.0,0.0 +7850.0,4.236e-11,61108.0,0.8329733318933276,0.0,0.016703066812267246,0.05845923383693535,0.09186436745746981,0.0,0.0 +7900.0,4.1634999999999994e-11,60614.0,0.8204383591232819,0.0,0.017955964088071825,0.0628468743062514,0.09875880248239505,0.0,0.0 +7950.0,4.0922e-11,60116.0,0.8076132304529219,0.0,0.019239076956307825,0.0673372693490774,0.10581042324169296,0.0,0.0 +8000.0,4.0221e-11,59613.0,0.7945092054907944,0.0,0.020548979451020546,0.0719219280780719,0.11301988698011302,0.0,0.0 +8050.0,3.9531999999999996e-11,59105.0,0.7811570304132737,0.0,0.0218851969667727,0.07659668937020432,0.12036108324974923,0.0,0.0 +8100.0,3.8855e-11,58592.0,0.767566162169189,0.0,0.02324288378558107,0.08135159324203378,0.127839360803196,0.0,0.0 +8150.0,3.819e-11,58076.0,0.7537622612867838,0.0,0.024624073872221618,0.08618325854977565,0.13543040629121886,0.0,0.0 +8200.0,3.7536000000000005e-11,57555.0,0.7397663011684941,0.0,0.02602286988565057,0.09108154459227705,0.14312928435357825,0.0,0.0 +8250.0,3.6893e-11,57031.0,0.7255870976516092,0.0,0.027440890236439055,0.09604261582953666,0.15092939628241486,0.0,0.0 +8300.0,3.6260999999999995e-11,56503.0,0.7112571549713802,0.0,0.028873884504461985,0.10105959576161697,0.15880936476254096,0.0,0.0 +8350.0,3.564e-11,55971.0,0.6967893032106968,0.0,0.03032096967903032,0.10611989388010613,0.16676983323016678,0.0,0.0 +8400.0,3.503e-11,55435.0,0.6822,0.0,0.03178,0.11123,0.17479,0.0,0.0 +8450.0,3.443e-11,54897.0,0.6675066750667507,0.0,0.033250332503325035,0.11637116371163712,0.1828718287182872,0.0,0.0 +8500.0,3.3841e-11,54355.0,0.6527254309219835,0.0,0.034726756912701606,0.1215491491559559,0.19099866300935892,0.0,0.0 +8550.0,3.326099999999999e-11,53811.0,0.6378851030808247,0.0,0.036212289698317586,0.12674101392811143,0.19916159329274635,0.0,0.0 +8600.0,3.2692e-11,53263.0,0.622989377010623,0.0,0.0377009622990377,0.13194986805013198,0.20735979264020737,0.0,0.0 +8650.0,3.2132e-11,52713.0,0.6080575677697291,0.0,0.03919384322462711,0.1371794512821949,0.2155691377234491,0.0,0.0 +8700.0,3.1582e-11,52161.0,0.5931211862423725,0.0,0.04068808137616276,0.14241028482056964,0.22378044756089516,0.0,0.0 +8750.0,3.1041e-11,51606.0,0.5781788436423128,0.0,0.04218191563616872,0.14763970472059057,0.23199953600092799,0.0,0.0 +8800.0,3.0509e-11,51048.0,0.5632528162640814,0.0,0.04367521837609188,0.15286076430382153,0.24021120105600527,0.0,0.0 +8850.0,2.9987e-11,50489.0,0.5483472582637087,0.0,0.045164774176129116,0.15807920960395197,0.2484087579562102,0.0,0.0 +8900.0,2.9473e-11,49927.0,0.5334946650533494,0.0,0.04664953350466495,0.16327836721632782,0.25657743422565776,0.0,0.0 +8950.0,2.8968e-11,49364.0,0.5187051870518705,0.0,0.048130481304813046,0.16845168451684514,0.26471264712647125,0.0,0.0 +9000.0,2.8471999999999997e-11,48799.0,0.5039789920420159,0.0,0.0496019007961984,0.17360965278069443,0.2728094543810912,0.0,0.0 +9050.0,2.7984999999999998e-11,48232.0,0.4893475532622338,0.0,0.05106474467627663,0.17872910635446826,0.28085859570702154,0.0,0.0 +9100.0,2.7506000000000002e-11,47664.0,0.47482094964189925,0.0,0.05251810503621007,0.18381036762073524,0.2888505777011554,0.0,0.0 +9150.0,2.7035e-11,47094.0,0.46039414354729186,0.0,0.05396148565337088,0.1888616997552978,0.29678267104403944,0.0,0.0 +9200.0,2.6571999999999996e-11,46522.0,0.44608955391044613,0.0,0.055390944609055394,0.1938698061301939,0.3046496953503047,0.0,0.0 +9250.0,2.6116999999999996e-11,45950.0,0.4319312957938874,0.0,0.05680717042151127,0.19882059646178937,0.312440937322812,0.0,0.0 +9300.0,2.5669e-11,45376.0,0.41791041791041794,0.0,0.05820905820905821,0.2037302037302037,0.32015032015032013,0.0,0.0 +9350.0,2.523e-11,44801.0,0.4040520202601013,0.0,0.05959529797648988,0.20858104290521454,0.32777163885819427,0.0,0.0 +9400.0,2.4798000000000003e-11,44225.0,0.39034804825975866,0.0,0.060964695176524114,0.21337893310533448,0.3353083234583827,0.0,0.0 +9450.0,2.4373000000000002e-11,43648.0,0.37683113049339145,0.0,0.06231718695156085,0.218110654331963,0.34274102822308466,0.0,0.0 +9500.0,2.3956e-11,43070.0,0.3634896365103635,0.0,0.06365093634906364,0.22277977722022274,0.35007964992035,0.0,0.0 +9550.0,2.3546e-11,42491.0,0.3503482482587587,0.0,0.0649646751766241,0.2273788631056845,0.3573082134589327,0.0,0.0 +9600.0,2.3141999999999998e-11,41912.0,0.3374,0.0,0.06626,0.23190999999999998,0.36443000000000003,0.0,0.0 +9650.0,2.2746e-11,41332.0,0.32466902599292197,0.0,0.06753279740160781,0.2363692908921273,0.3714288857133429,0.0,0.0 +9700.0,2.2356999999999998e-11,40751.0,0.3121412485649943,0.0,0.06878627514510058,0.24075096300385201,0.3783215132860531,0.0,0.0 +9750.0,2.1973999999999998e-11,40170.0,0.29983820097079417,0.0,0.07001557990652056,0.24505852964882213,0.3850876894738632,0.0,0.0 +9800.0,2.1596999999999995e-11,39588.0,0.2877691366925899,0.0,0.07122278633164102,0.24927925216224356,0.3917288248135256,0.0,0.0 +9850.0,2.1228000000000003e-11,39005.0,0.2759205518411037,0.0,0.07240814481628964,0.25343050686101376,0.398240796481593,0.0,0.0 +9900.0,2.0863999999999998e-11,38422.0,0.2643205286410573,0.0,0.07356814713629427,0.25749051498103,0.4046208092416185,0.0,0.0 +9950.0,2.0507e-11,37839.0,0.2529512647563238,0.0,0.07470537352686762,0.2614713073565368,0.4108720543602718,0.0,0.0 +10000.0,2.0155999999999996e-11,37255.0,0.2418385489687062,0.0,0.07581554510672936,0.2653584078495529,0.41698749807501156,0.0,0.0 +10050.0,1.9809999999999997e-11,36670.0,0.23096930709207872,0.0,0.07690276929169212,0.26915919252242243,0.42296873109380667,0.0,0.0 +10100.0,1.9471e-11,36085.0,0.2203488982555087,0.0,0.07796461017694911,0.27287863560682196,0.4288078559607202,0.0,0.0 +10150.0,1.9137999999999997e-11,35500.0,0.21,0.0,0.079,0.2765,0.4345,0.0,0.0 +10200.0,1.8809999999999998e-11,34914.0,0.19989800101998978,0.0,0.08000919990800091,0.2800371996280037,0.4400555994440056,0.0,0.0 +10250.0,1.8488e-11,34328.0,0.1900592397630409,0.0,0.0809936760252959,0.28347886608453565,0.4454682181271274,0.0,0.0 +10300.0,1.8171e-11,33741.0,0.18047963904072192,0.0,0.0819518360963278,0.28682942634114733,0.4507390985218029,0.0,0.0 +10350.0,1.786e-11,33153.0,0.17116948649154054,0.0,0.08288275135174594,0.2900891297326108,0.4558586324241028,0.0,0.0 +10400.0,1.7554000000000002e-11,32565.0,0.1621203242406485,0.0,0.08378816757633516,0.29326058652117304,0.46083092166184336,0.0,0.0 +10450.0,1.7254e-11,31977.0,0.15334061336245344,0.0,0.08466633866535464,0.2963311853247413,0.4656618626474506,0.0,0.0 +10500.0,1.6957999999999998e-11,31387.0,0.1448202896405793,0.0,0.08551817103634207,0.29931059862119724,0.47035094070188144,0.0,0.0 +10550.0,1.6667999999999998e-11,30797.0,0.13656959029122911,0.0,0.08634274097177708,0.30219909340271983,0.474888575334274,0.0,0.0 +10600.0,1.6382000000000004e-11,30206.0,0.1285898714101286,0.0,0.08714091285908712,0.30498969501030493,0.47927952072047925,0.0,0.0 +10650.0,1.6102e-11,29614.0,0.12087084609592269,0.0,0.08791361539530779,0.307692153845077,0.4835233846636927,0.0,0.0 +10700.0,1.5826e-11,29021.0,0.11342022684045369,0.0,0.08865817731635464,0.31030062060124125,0.4876209752419505,0.0,0.0 +10750.0,1.5555e-11,28427.0,0.10623031869095606,0.0,0.0893772681318044,0.3128209384628154,0.49157147471442414,0.0,0.0 +10800.0,1.5289e-11,27831.0,0.09930279442235537,0.0,0.09007072056576453,0.3152425219401755,0.49538396307170457,0.0,0.0 +10850.0,1.5027e-11,27234.0,0.09263672208983373,0.0,0.09073572779281662,0.31757904726285824,0.4990485028544914,0.0,0.0 +10900.0,1.477e-11,26635.0,0.08623208623208624,0.0,0.09137709137709138,0.31982031982031983,0.5025705025705025,0.0,0.0 +10950.0,1.4517000000000002e-11,26035.0,0.08008432033728136,0.0,0.09199236796947187,0.3219712878851515,0.5059520238080952,0.0,0.0 +11000.0,1.4268e-11,25432.0,0.07419085161829675,0.0,0.09258081483837032,0.3240293519412961,0.5091989816020368,0.0,0.0 +11050.0,1.4024000000000001e-11,24827.0,0.06855058869646782,0.0,0.09314444113335321,0.32600804395173627,0.5122969262184427,0.0,0.0 +11100.0,1.3784000000000002e-11,24219.0,0.06316225264901058,0.0,0.09368437473749894,0.32789131156524626,0.5152620610482442,0.0,0.0 +11150.0,1.3548e-11,23608.0,0.05802105802105803,0.0,0.09419809419809422,0.32969032969032974,0.5180905180905181,0.0,0.0 +11200.0,1.3315999999999999e-11,22994.0,0.05312584062247813,0.0,0.09468671593985219,0.33140900577298266,0.520778437664687,0.0,0.0 +11250.0,1.3087999999999999e-11,22376.0,0.04847224236121181,0.0,0.09515347576737884,0.3330316651583258,0.5233426167130835,0.0,0.0 +11300.0,1.2863e-11,21754.0,0.04405695594304405,0.0,0.0955939044060956,0.33457966542033457,0.5257694742305257,0.0,0.0 +11350.0,1.2643e-11,21128.0,0.039878960121039884,0.0,0.09601190398809602,0.3360396639603361,0.528069471930528,0.0,0.0 +11400.0,1.2427e-11,20496.0,0.03593396406603594,0.0,0.09640690359309642,0.33741966258033745,0.5302394697605303,0.0,0.0 +11450.0,1.2214000000000001e-11,19858.0,0.03221619329715979,0.0,0.09677858067148404,0.338722032332194,0.5322831936991622,0.0,0.0 +11500.0,1.2005000000000001e-11,19213.0,0.028724913825258526,0.0,0.09712770861687414,0.3399489801530595,0.5341983974048078,0.0,0.0 +11550.0,1.1799000000000002e-11,18561.0,0.025456,0.0,0.097454,0.34109,0.536,0.0,0.0 +11600.0,1.1597e-11,17901.0,0.022404887975560124,0.0,0.09775951120244399,0.3421582892085539,0.537677311613442,0.0,0.0 +11650.0,1.1398000000000001e-11,17230.0,0.01956798043201957,0.0,0.09804290195709804,0.3431496568503432,0.5392394607605392,0.0,0.0 +11700.0,1.1202999999999999e-11,16549.0,0.01694105082315247,0.0,0.09830629491888475,0.3440710322130966,0.5406816220448661,0.0,0.0 +11750.0,1.1010999999999998e-11,15855.0,0.014522,0.0,0.098548,0.34492,0.54201,0.0,0.0 +11800.0,1.0823e-11,15146.0,0.012305061525307626,0.0,0.09877049385246928,0.3456917284586423,0.5432327161635808,0.0,0.0 +11850.0,1.0637999999999999e-11,14420.0,0.010286030858092576,0.0,0.09897129691389076,0.3464010392031176,0.544341633024899,0.0,0.0 +11900.0,1.0455e-11,13674.0,0.00846165176858492,0.0,0.0991534348254215,0.34703802188327526,0.5453468915227183,0.0,0.0 +11950.0,1.0276e-11,12904.0,0.006827934822467595,0.0,0.09931750651928326,0.3476117728200414,0.5462427858382077,0.0,0.0 +12000.0,1.0100000000000001e-11,12106.0,0.005380486548783628,0.0,0.09946175134562164,0.3481191297021758,0.547038632403419,0.0,0.0 +12050.0,9.9274e-12,11272.0,0.0041154855958004145,0.0,0.09958765144321995,0.3485587800442698,0.5477380829167098,0.0,0.0 +12100.0,9.7574e-12,10395.0,0.003028114837762705,0.0,0.09969748851769374,0.3489417098143781,0.5483326868301654,0.0,0.0 +12150.0,9.5903e-12,9461.6,0.002114592387467405,0.0,0.09978864076089328,0.34925874266852647,0.548838024183113,0.0,0.0 +12200.0,9.4261e-12,8453.2,0.0013707947909797943,0.0,0.099862620522042,0.34951867182904706,0.5492479128579312,0.0,0.0 +12250.0,9.2647e-12,7339.5,0.0007925651041192705,0.0,0.09992164349538411,0.3497222522113042,0.5495635391891924,0.0,0.0 +12300.0,9.106e-12,6063.9,0.00037574084917431914,0.0,0.09996222591463057,0.349870790707987,0.5497912425282081,0.0,0.0 +12350.0,8.9501e-12,5000.0,0.0001160695275970227,0.0,0.09998759305049629,0.34995857566859706,0.5499377617533097,0.0,0.0 +12400.0,8.7968e-12,5000.0,8.879930026151393e-06,0.0,0.09999821201408933,0.3499972420217328,0.5499956660341516,0.0,0.0 +12450.0,8.6462e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12500.0,8.4981e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12550.0,8.3526e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12600.0,8.2095e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12650.0,8.069e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12700.0,7.9308e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12750.0,7.795e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12800.0,7.6615e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12850.0,7.5303e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12900.0,7.4013e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +12950.0,7.2746e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13000.0,7.15e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13050.0,7.0276e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13100.0,6.9072e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13150.0,6.789e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13200.0,6.6727e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13250.0,6.5584e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13300.0,6.4461e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13350.0,6.3357e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13400.0,6.2272e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13450.0,6.1206e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13500.0,6.0158e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13550.0,5.9128e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13600.0,5.8115e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13650.0,5.712e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13700.0,5.6142e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13750.0,5.518e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13800.0,5.4236e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13850.0,5.3307e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13900.0,5.2394e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +13950.0,5.1497e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14000.0,5.0615e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14050.0,4.9748e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14100.0,4.8896e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14150.0,4.8059e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14200.0,4.7236e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14250.0,4.6427e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14300.0,4.5632e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14350.0,4.4851e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14400.0,4.4083e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14450.0,4.3328e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14500.0,4.2586e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14550.0,4.1856e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14600.0,4.114e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14650.0,4.0435e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14700.0,3.9743e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14750.0,3.9062e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14800.0,3.8393e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14850.0,3.7736e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14900.0,3.709e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +14950.0,3.6454e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15000.0,3.583e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15050.0,3.5217e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15100.0,3.4614e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15150.0,3.4021e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15200.0,3.3438e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15250.0,3.2866e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15300.0,3.2303e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15350.0,3.175e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15400.0,3.1206e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15450.0,3.0672e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15500.0,3.0146e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15550.0,2.963e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15600.0,2.9123e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15650.0,2.8624e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15700.0,2.8134e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15750.0,2.7652e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15800.0,2.7178e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15850.0,2.6713e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15900.0,2.6256e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +15950.0,2.5806e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16000.0,2.5364e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16050.0,2.493e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16100.0,2.4503e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16150.0,2.4083e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16200.0,2.3671e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16250.0,2.3265e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16300.0,2.2867e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16350.0,2.2475e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16400.0,2.2091e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16450.0,2.1712e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16500.0,2.134e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16550.0,2.0975e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16600.0,2.0616e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16650.0,2.0263e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16700.0,1.9916e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16750.0,1.9575e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16800.0,1.924e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16850.0,1.891e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16900.0,1.8586e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +16950.0,1.8268e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17000.0,1.7955e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17050.0,1.7648e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17100.0,1.7346e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17150.0,1.7048e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17200.0,1.6757e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17250.0,1.647e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17300.0,1.6188e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17350.0,1.591e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17400.0,1.5638e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17450.0,1.537e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17500.0,1.5107e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17550.0,1.4848e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17600.0,1.4594e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17650.0,1.4344e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17700.0,1.4098e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17750.0,1.3857e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17800.0,1.362e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17850.0,1.3386e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17900.0,1.3157e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +17950.0,1.2932e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18000.0,1.271e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18050.0,1.2493e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18100.0,1.2279e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18150.0,1.2069e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18200.0,1.1862e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18250.0,1.1659e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18300.0,1.1459e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18350.0,1.1263e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18400.0,1.107e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18450.0,1.088e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18500.0,1.0694e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18550.0,1.0511e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18600.0,1.0331e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18650.0,1.0154e-12,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18700.0,9.9802e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18750.0,9.8093e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18800.0,9.641299999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18850.0,9.476200000000002e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18900.0,9.3139e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +18950.0,9.1544e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19000.0,8.997700000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19050.0,8.843600000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19100.0,8.692200000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19150.0,8.5433e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19200.0,8.397e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19250.0,8.253200000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19300.0,8.1119e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19350.0,7.973e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19400.0,7.8364e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19450.0,7.7022e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19500.0,7.570300000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19550.0,7.4407e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19600.0,7.3133e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19650.0,7.1881e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19700.0,7.065e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19750.0,6.944e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19800.0,6.8251e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19850.0,6.7082e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19900.0,6.5933e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +19950.0,6.480399999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20000.0,6.3694e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20050.0,6.260399999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20100.0,6.153199999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20150.0,6.0478e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20200.0,5.9442e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20250.0,5.842399999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20300.0,5.7424e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20350.0,5.644e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20400.0,5.547399999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20450.0,5.4524e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20500.0,5.359e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20550.0,5.2673e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20600.0,5.1771e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20650.0,5.0884e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20700.0,5.0013e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20750.0,4.915600000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20800.0,4.8315e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20850.0,4.7487e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20900.0,4.6674e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +20950.0,4.5875e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21000.0,4.5088999999999996e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21050.0,4.4316999999999997e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21100.0,4.3558e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21150.0,4.2812e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21200.0,4.2078999999999997e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21250.0,4.1358000000000004e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21300.0,4.065e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21350.0,3.9954000000000003e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21400.0,3.927e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21450.0,3.8596999999999997e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21500.0,3.7936e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21550.0,3.7287e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21600.0,3.6648e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21650.0,3.6021e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21700.0,3.5404e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21750.0,3.4798e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21800.0,3.4202e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21850.0,3.3616e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21900.0,3.304e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +21950.0,3.2475e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22000.0,3.1918e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22050.0,3.1372e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22100.0,3.0835e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22150.0,3.0307e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22200.0,2.9788000000000004e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22250.0,2.9278000000000004e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22300.0,2.8776e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22350.0,2.8283e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22400.0,2.7799e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22450.0,2.7323000000000004e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22500.0,2.6855e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22550.0,2.6395e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22600.0,2.5943000000000004e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22650.0,2.5499e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22700.0,2.5062e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22750.0,2.4633e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22800.0,2.4211e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22850.0,2.3797e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22900.0,2.3389000000000003e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +22950.0,2.2989e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23000.0,2.2595e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23050.0,2.2208000000000002e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23100.0,2.1828000000000003e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23150.0,2.1454000000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23200.0,2.1087e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23250.0,2.0725e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23300.0,2.0371e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23350.0,2.0022e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23400.0,1.9679000000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23450.0,1.9342e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23500.0,1.9010999999999998e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23550.0,1.8685e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23600.0,1.8365e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23650.0,1.8050999999999998e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23700.0,1.7742000000000002e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23750.0,1.7437999999999998e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23800.0,1.7139000000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23850.0,1.6846e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23900.0,1.6557e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +23950.0,1.6274000000000002e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24000.0,1.5995e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24050.0,1.5721e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24100.0,1.5452e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24150.0,1.5187000000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24200.0,1.4927e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24250.0,1.4672e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24300.0,1.442e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24350.0,1.4173e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24400.0,1.3931e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24450.0,1.3692e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24500.0,1.3458e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24550.0,1.3227e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24600.0,1.3001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24650.0,1.2777999999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24700.0,1.2559e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24750.0,1.2344e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24800.0,1.2133e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24850.0,1.1925e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24900.0,1.1720999999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +24950.0,1.152e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25000.0,1.1323e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25050.0,1.1129000000000001e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25100.0,1.0938e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25150.0,1.0750999999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25200.0,1.0567e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25250.0,1.0385999999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25300.0,1.0207999999999999e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25350.0,1.0033e-13,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25400.0,9.861499999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25450.0,9.6926e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25500.0,9.5266e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25550.0,9.3635e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25600.0,9.2031e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25650.0,9.045499999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25700.0,8.8906e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25750.0,8.7384e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25800.0,8.5887e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25850.0,8.441699999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25900.0,8.297100000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +25950.0,8.155e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26000.0,8.015399999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26050.0,7.878099999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26100.0,7.743200000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26150.0,7.610599999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26200.0,7.4803e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26250.0,7.3522e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26300.0,7.2263e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26350.0,7.1025e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26400.0,6.9809e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26450.0,6.8614e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26500.0,6.7439e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26550.0,6.628400000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26600.0,6.5149e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26650.0,6.403300000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26700.0,6.2937e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26750.0,6.1859e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26800.0,6.079900000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26850.0,5.975800000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26900.0,5.8735e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +26950.0,5.7729e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27000.0,5.6740999999999996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27050.0,5.576900000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27100.0,5.4814e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27150.0,5.3875e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27200.0,5.2953e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27250.0,5.2046000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27300.0,5.1155000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27350.0,5.0279000000000005e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27400.0,4.9418e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27450.0,4.8571e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27500.0,4.774e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27550.0,4.6922000000000003e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27600.0,4.6119e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27650.0,4.5329000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27700.0,4.4553e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27750.0,4.3789999999999996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27800.0,4.304e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27850.0,4.2302999999999997e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27900.0,4.1578e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +27950.0,4.0866e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28000.0,4.0167000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28050.0,3.9479e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28100.0,3.8803e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28150.0,3.8138e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28200.0,3.7485000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28250.0,3.6843e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28300.0,3.6212e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28350.0,3.5592e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28400.0,3.4982999999999996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28450.0,3.4384e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28500.0,3.3794999999999996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28550.0,3.3216000000000003e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28600.0,3.2647e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28650.0,3.2088e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28700.0,3.1539e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28750.0,3.0999000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28800.0,3.0468e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28850.0,2.9945999999999996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28900.0,2.9433e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +28950.0,2.8929e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29000.0,2.8434e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29050.0,2.7947000000000004e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29100.0,2.7468000000000002e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29150.0,2.6998000000000002e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29200.0,2.6536e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29250.0,2.6081e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29300.0,2.5635000000000003e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29350.0,2.5196e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29400.0,2.4764e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29450.0,2.434e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29500.0,2.3923e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29550.0,2.3513999999999998e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29600.0,2.3111000000000002e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29650.0,2.2715e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29700.0,2.2326e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29750.0,2.1944e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29800.0,2.1568e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29850.0,2.1199e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29900.0,2.0836e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +29950.0,2.0479e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30000.0,2.0128e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30050.0,1.9784e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30100.0,1.9445e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30150.0,1.9112e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30200.0,1.8784e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30250.0,1.8463e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30300.0,1.8147e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30350.0,1.7836e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30400.0,1.7530000000000002e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30450.0,1.7230000000000003e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30500.0,1.6935e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30550.0,1.6644999999999998e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30600.0,1.636e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30650.0,1.6080000000000003e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30700.0,1.5805000000000002e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30750.0,1.5534e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30800.0,1.5268e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30850.0,1.5006999999999998e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30900.0,1.475e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +30950.0,1.4497e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31000.0,1.4249e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31050.0,1.4005000000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31100.0,1.3765e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31150.0,1.3528999999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31200.0,1.3297e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31250.0,1.3069999999999998e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31300.0,1.2846000000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31350.0,1.2626000000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31400.0,1.241e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31450.0,1.2197e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31500.0,1.1988e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31550.0,1.1782999999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31600.0,1.1581e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31650.0,1.1383e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31700.0,1.1188e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31750.0,1.0996e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31800.0,1.0808e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31850.0,1.0623000000000001e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31900.0,1.0440999999999999e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +31950.0,1.0262e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32000.0,1.0087e-14,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32050.0,9.913899999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32100.0,9.7441e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32150.0,9.577299999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32200.0,9.4133e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32250.0,9.2521e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32300.0,9.093600000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32350.0,8.937899999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32400.0,8.7848e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32450.0,8.6344e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32500.0,8.4865e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32550.0,8.3412e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32600.0,8.1984e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32650.0,8.058e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32700.0,7.920000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32750.0,7.7844e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32800.0,7.651100000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32850.0,7.52e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32900.0,7.3913e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +32950.0,7.2647e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33000.0,7.140300000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33050.0,7.018000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33100.0,6.897800000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33150.0,6.779699999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33200.0,6.663600000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33250.0,6.5495000000000004e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33300.0,6.437300000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33350.0,6.3271e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33400.0,6.2188e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33450.0,6.1123e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33500.0,6.0076e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33550.0,5.9047e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33600.0,5.8036e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33650.0,5.7042e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33700.0,5.6065e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33750.0,5.5105e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33800.0,5.4162e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33850.0,5.3234e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33900.0,5.2323e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +33950.0,5.1427e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34000.0,5.0546000000000005e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34050.0,4.968e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34100.0,4.883e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34150.0,4.7993000000000005e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34200.0,4.7171999999999994e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34250.0,4.636399999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34300.0,4.557e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34350.0,4.4788999999999995e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34400.0,4.4022e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34450.0,4.3269e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34500.0,4.2528e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34550.0,4.1799e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34600.0,4.1083999999999995e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34650.0,4.0380000000000005e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34700.0,3.9689e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34750.0,3.9009e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34800.0,3.8341e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34850.0,3.7683999999999995e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34900.0,3.7039e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +34950.0,3.6405e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35000.0,3.5780999999999995e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35050.0,3.5169000000000004e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35100.0,3.4566000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35150.0,3.3974000000000003e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35200.0,3.3393e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35250.0,3.2821e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35300.0,3.2259000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35350.0,3.1706e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35400.0,3.1163e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35450.0,3.063e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35500.0,3.0105e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35550.0,2.959e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35600.0,2.9083000000000003e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35650.0,2.8585000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35700.0,2.8095e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35750.0,2.7614000000000003e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35800.0,2.7140999999999997e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35850.0,2.6677e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35900.0,2.622e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +35950.0,2.5771e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36000.0,2.533e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36050.0,2.4896e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36100.0,2.4469e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36150.0,2.4050000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36200.0,2.3639e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36250.0,2.3234000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36300.0,2.2836e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36350.0,2.2445e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36400.0,2.206e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36450.0,2.1683e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36500.0,2.1311e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36550.0,2.0945999999999998e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36600.0,2.0588000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36650.0,2.0235e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36700.0,1.9889e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36750.0,1.9547999999999997e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36800.0,1.9213000000000003e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36850.0,1.8884e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36900.0,1.8561e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +36950.0,1.8242999999999997e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37000.0,1.7931e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37050.0,1.7624000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37100.0,1.7321999999999998e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37150.0,1.7025e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37200.0,1.6734000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37250.0,1.6446999999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37300.0,1.6165e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37350.0,1.5889e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37400.0,1.5617000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37450.0,1.5349e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37500.0,1.5085999999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37550.0,1.4828e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37600.0,1.4574000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37650.0,1.4324000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37700.0,1.4079e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37750.0,1.3838e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37800.0,1.3601e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37850.0,1.3368e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37900.0,1.3139000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +37950.0,1.2914000000000002e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38000.0,1.2693e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38050.0,1.2476e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38100.0,1.2262e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38150.0,1.2052e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38200.0,1.1845999999999998e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38250.0,1.1642999999999998e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38300.0,1.1442999999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38350.0,1.1247999999999999e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38400.0,1.1055e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38450.0,1.0866e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38500.0,1.068e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38550.0,1.0497e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38600.0,1.0317e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38650.0,1.0140000000000001e-15,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38700.0,9.9666e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38750.0,9.7959e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38800.0,9.6282e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38850.0,9.4633e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38900.0,9.3012e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +38950.0,9.142e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39000.0,8.9854e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39050.0,8.8315e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39100.0,8.680300000000001e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39150.0,8.531700000000001e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39200.0,8.385600000000001e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39250.0,8.242000000000001e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39300.0,8.100799999999999e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39350.0,7.962100000000001e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39400.0,7.8257e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39450.0,7.6917e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39500.0,7.56e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39550.0,7.4306e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39600.0,7.3033e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39650.0,7.1782e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39700.0,7.055299999999999e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39750.0,6.9345e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39800.0,6.8158e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39850.0,6.699e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39900.0,6.584299999999999e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +39950.0,6.471599999999999e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40000.0,6.3607e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40050.0,6.2518e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40100.0,6.1448e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40150.0,6.0395e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40200.0,5.9361e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40250.0,5.8345e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40300.0,5.7345e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 +40350.0,5.6363e-16,5000.0,0.0,0.0,0.1,0.35,0.55,0.0,0.0 diff --git a/docs/research/code_comparison/toy_models/blondin_model_compare.yml b/docs/research/code_comparison/toy_models/blondin_model_compare_01.yml similarity index 95% rename from docs/research/code_comparison/toy_models/blondin_model_compare.yml rename to docs/research/code_comparison/toy_models/blondin_model_compare_01.yml index 1487d03da85..88d7f249701 100644 --- a/docs/research/code_comparison/toy_models/blondin_model_compare.yml +++ b/docs/research/code_comparison/toy_models/blondin_model_compare_01.yml @@ -8,7 +8,7 @@ supernova: atom_data: kurucz_cd23_chianti_H_He.h5 -csvy_model: blondin_compare.csvy +csvy_model: blondin_compare_01.csvy plasma: disable_electron_scattering: no diff --git a/docs/research/code_comparison/toy_models/blondin_model_compare_06.yml b/docs/research/code_comparison/toy_models/blondin_model_compare_06.yml new file mode 100644 index 00000000000..194833e922c --- /dev/null +++ b/docs/research/code_comparison/toy_models/blondin_model_compare_06.yml @@ -0,0 +1,44 @@ +# Example YAML configuration for TARDIS +tardis_config_version: v1.0 + +supernova: + luminosity_requested: 9.44 log_lsun + time_explosion: 13 day + + +atom_data: kurucz_cd23_chianti_H_He.h5 + +csvy_model: blondin_compare_06.csvy + +plasma: + disable_electron_scattering: no + ionization: nebular + excitation: dilute-lte + radiative_rates_type: dilute-blackbody + line_interaction_type: macroatom + initial_t_inner: 13000 K + +montecarlo: + seed: 23111963 + no_of_packets: 5.0e+4 + iterations: 30 + nthreads: 8 + + last_no_of_packets: 2.e+5 + + convergence_strategy: + type: damped + damping_constant: 0.5 + threshold: 0.05 + fraction: 0.8 + + t_inner: + damping_constant: 0.0 + +spectrum: + start: 500 angstrom + stop: 20000 angstrom + num: 10000 + integrated: + interpolate_shells: 80 + \ No newline at end of file diff --git a/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb b/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb index 9451454e0b6..13db7a52b0b 100644 --- a/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb +++ b/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb @@ -9,9 +9,18 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/tqdm/autonotebook/__init__.py:14: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)\n", + " \" (e.g. in jupyter console)\", TqdmExperimentalWarning)\n" + ] + } + ], "source": [ "import pandas as pd\n", "import re\n", @@ -27,7 +36,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -71,7 +80,7 @@ " raw_blondin_csv.set_index('idx', inplace=True)\n", " \n", " blondin_csv = raw_blondin_csv.loc[:, ['vel', 'dens', 'temp', 'X_56Ni0', 'X_Ti', 'X_Ca', 'X_S', 'X_Si', 'X_O', 'X_C']]\n", - " rename_col_dict = {'vel':'velocity', 'dens':'density', 'temp':'t_electron'}\n", + " rename_col_dict = {'vel':'velocity', 'dens':'density', 'temp':'t_rad'}\n", " rename_col_dict.update({item:item[2:] for item in blondin_csv.columns[3:]})\n", " rename_col_dict['X_56Ni0'] = 'Ni56'\n", " blondin_csv.rename(columns=rename_col_dict, inplace=True)\n", @@ -95,7 +104,7 @@ " blondin_dict['tardis_model_config_version'] = 'v1.0'\n", " blondin_dict_fields = [dict(name='velocity', unit='km/s', desc='velocities of shell outer bounderies.')]\n", " blondin_dict_fields.append(dict(name='density', unit='g/cm^3', desc='mean density of shell.'))\n", - " blondin_dict_fields.append(dict(name='t_electron', unit='K', desc='electron temperature.'))\n", + " blondin_dict_fields.append(dict(name='t_rad', unit='K', desc='radiative temperature.'))\n", " \n", " for abund in blondin_csv.columns[3:]:\n", " blondin_dict_fields.append(dict(name=abund, desc='Fraction {0} abundance'.format(abund)))\n", @@ -104,6 +113,13 @@ " return blondin_dict, blondin_csv" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Comparison of snia_toy01.dat ####" + ] + }, { "cell_type": "code", "execution_count": 3, @@ -120,8 +136,7 @@ "outputs": [], "source": [ "blondin_dict['v_inner_boundary'] = '9000 km/s'\n", - "blondin_dict['v_outer_boundary'] = '20000 km/s'\n", - "\n" + "blondin_dict['v_outer_boundary'] = '20000 km/s'" ] }, { @@ -133,33 +148,13 @@ "csvy_file = '---\\n{0}\\n---\\n{1}'.format(yaml.dump(blondin_dict, default_flow_style=False), blondin_csv.to_csv(index=False))" ] }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'5e-05 km / s'" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "str(u.Quantity(5 * u.cm/u.s, u.km / u.s))" - ] - }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ - "with open('blondin_compare.csvy', 'w') as fh:\n", + "with open('blondin_compare_01.csvy', 'w') as fh:\n", " fh.write(csvy_file)" ] }, @@ -169,9 +164,9 @@ "source": [ "**Download the model and setup**\n", "\n", - "[blondin_compare.csvy](blondin_compare.csvy)\n", + "[blondin_compare_01.csvy](blondin_compare_01.csvy)\n", "\n", - "[blondin_model_compare.yml](blondin_model_compare.yml)\n", + "[blondin_model_compare_01.yml](blondin_model_compare_01.yml)\n", "\n", "**Assumptions and explanations**\n", "\n", @@ -185,15 +180,6 @@ "\n" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "## Download the model " - ] - }, { "cell_type": "code", "execution_count": 7, @@ -244,54 +230,54 @@ " AstropyDeprecationWarning)\n", " (\u001b[1mwarnings.py\u001b[0m:99)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 1/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22587e+43 erg / s Luminosity absorbed = 8.12489e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.30150e+43 erg / s Luminosity absorbed = 7.43372e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", - "\t t_rad next_t_rad w next_w\n", - "\tShell \n", - "\t0 12998.916007 13061.816463 0.462810 0.567717\n", - "\t5 12988.086012 13056.730857 0.379149 0.480626\n", - "\t10 12977.274048 13025.637830 0.336294 0.428170\n", - "\t15 12966.480071 13033.048290 0.304883 0.382503\n", - "\t20 12955.704034 13065.468766 0.279753 0.343327\n", - "\t25 12944.945893 13026.575503 0.258765 0.318805\n", - "\t30 12934.205605 13031.454768 0.240774 0.290452\n", - "\t35 12923.483123 13012.104561 0.225078 0.269456\n", - "\t40 12912.778405 12984.321293 0.211205 0.251158\n", - "\t45 12902.091406 12960.901645 0.198821 0.232334\n", - "\t50 12891.422083 12941.563429 0.187679 0.217530\n", - "\t55 12880.770390 12921.758766 0.177588 0.203183\n", - "\t60 12870.136285 12942.591441 0.168399 0.186982\n", - "\t65 12859.519724 12916.751988 0.159992 0.176438\n", - "\t70 12848.920665 12981.212652 0.152269 0.162411\n", - "\t75 12838.339062 12932.407924 0.145148 0.153813\n", - "\t80 12827.774874 12916.331855 0.138563 0.145349\n", - "\t85 12817.228057 12917.001822 0.132453 0.136457\n", - "\t90 12806.698569 12887.128678 0.126772 0.129621\n", - "\t95 12796.186367 12888.946086 0.121475 0.122397\n", - "\t100 12785.691409 12881.697128 0.116527 0.116324\n", - "\t105 12775.213651 12895.681422 0.111894 0.109162\n", - "\t110 12764.753053 12851.913702 0.107550 0.105005\n", - "\t115 12754.309570 12795.235678 0.103468 0.101558\n", - "\t120 12743.883163 12778.835290 0.099626 0.097184\n", - "\t125 12733.473789 12747.043599 0.096006 0.093453\n", - "\t130 12723.081405 12743.322681 0.092589 0.089142\n", - "\t135 12712.705972 12704.356267 0.089359 0.085928\n", - "\t140 12702.347446 12731.984118 0.086303 0.081671\n", - "\t145 12692.005787 12690.395130 0.083408 0.079170\n", - "\t150 12681.680954 12675.569081 0.080662 0.075764\n", - "\t155 12671.372906 12673.798388 0.078054 0.072396\n", - "\t160 12661.081601 12688.321977 0.075575 0.069417\n", - "\t165 12650.807000 12602.489519 0.073217 0.068280\n", - "\t170 12640.549060 12575.649977 0.070971 0.066077\n", - "\t175 12630.307743 12552.103659 0.068830 0.064002\n", - "\t180 12620.083007 12524.123590 0.066787 0.062033\n", - "\t185 12609.874813 12470.157871 0.064837 0.060517\n", - "\t190 12599.683119 12452.067488 0.062973 0.058731\n", - "\t195 12589.507887 12415.450898 0.061191 0.057065\n", - "\t200 12579.349076 12377.598670 0.059485 0.055637\n", - "\t205 12569.206647 12369.427919 0.057852 0.053812\n", - "\t210 12559.080559 12308.221817 0.056286 0.052806\n", - "\t215 12548.970775 12274.329208 0.054785 0.051496\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 5000.0 7831.059753 0.462810 0.987065\n", + "\t5 5000.0 7106.913190 0.379149 1.304910\n", + "\t10 5000.0 6779.027752 0.336294 1.473708\n", + "\t15 5000.0 6591.160845 0.304883 1.556553\n", + "\t20 5000.0 6469.413444 0.279753 1.549488\n", + "\t25 5000.0 6369.832186 0.258765 1.548078\n", + "\t30 5000.0 6285.178795 0.240774 1.531938\n", + "\t35 5000.0 6216.656067 0.225078 1.509501\n", + "\t40 5000.0 6155.241379 0.211205 1.474743\n", + "\t45 5000.0 6105.918970 0.198821 1.414270\n", + "\t50 5000.0 6076.371342 0.187679 1.348556\n", + "\t55 5000.0 6030.241880 0.177588 1.311088\n", + "\t60 5000.0 6005.973722 0.168399 1.256169\n", + "\t65 5000.0 6002.125995 0.159992 1.169288\n", + "\t70 5000.0 5976.207283 0.152269 1.122986\n", + "\t75 5000.0 5951.666260 0.145148 1.077897\n", + "\t80 5000.0 5918.254016 0.138563 1.053437\n", + "\t85 5000.0 5918.208740 0.132453 0.989942\n", + "\t90 5000.0 5867.100159 0.126772 0.990185\n", + "\t95 5000.0 5859.007030 0.121475 0.929519\n", + "\t100 5000.0 5843.254166 0.116527 0.894981\n", + "\t105 5000.0 5841.131195 0.111894 0.849290\n", + "\t110 5000.0 5821.292215 0.107550 0.811782\n", + "\t115 5000.0 5820.272035 0.103468 0.769661\n", + "\t120 5000.0 5811.350827 0.099626 0.736181\n", + "\t125 5000.0 5793.908583 0.096006 0.716442\n", + "\t130 5000.0 5795.478604 0.092589 0.681608\n", + "\t135 5000.0 5773.849040 0.089359 0.667536\n", + "\t140 5000.0 5775.403713 0.086303 0.634047\n", + "\t145 5000.0 5736.539129 0.083408 0.630179\n", + "\t150 5000.0 5732.357290 0.080662 0.601033\n", + "\t155 5000.0 5743.364284 0.078054 0.570580\n", + "\t160 5000.0 5733.145769 0.075575 0.551961\n", + "\t165 5000.0 5718.331258 0.073217 0.529948\n", + "\t170 5000.0 5699.632837 0.070971 0.519324\n", + "\t175 5000.0 5695.349689 0.068830 0.499699\n", + "\t180 5000.0 5688.534677 0.066787 0.478921\n", + "\t185 5000.0 5683.055043 0.064837 0.463320\n", + "\t190 5000.0 5665.611101 0.062973 0.450357\n", + "\t195 5000.0 5654.224456 0.061191 0.437244\n", + "\t200 5000.0 5651.225192 0.059485 0.421169\n", + "\t205 5000.0 5626.660446 0.057852 0.414763\n", + "\t210 5000.0 5595.199895 0.056286 0.409042\n", + "\t215 5000.0 5577.506895 0.054785 0.400196\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", @@ -304,54 +290,54 @@ " partition_function.index].dropna())\n", " (\u001b[1mwarnings.py\u001b[0m:99)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 2/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.24347e+43 erg / s Luminosity absorbed = 7.94642e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.38526e+43 erg / s Luminosity absorbed = 6.66321e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", - "\t t_rad next_t_rad w next_w\n", - "\tShell \n", - "\t0 13061.816463 13117.652070 0.567717 0.613290\n", - "\t5 13056.730857 13128.710972 0.480626 0.520966\n", - "\t10 13025.637830 13087.946452 0.428170 0.469492\n", - "\t15 13033.048290 13117.221906 0.382503 0.416974\n", - "\t20 13065.468766 13114.807782 0.343327 0.377475\n", - "\t25 13026.575503 13096.095422 0.318805 0.347216\n", - "\t30 13031.454768 13094.720257 0.290452 0.315541\n", - "\t35 13012.104561 13060.231563 0.269456 0.292868\n", - "\t40 12984.321293 13059.642743 0.251158 0.267728\n", - "\t45 12960.901645 13036.502049 0.232334 0.248840\n", - "\t50 12941.563429 13088.971015 0.217530 0.225795\n", - "\t55 12921.758766 13057.048962 0.203183 0.211304\n", - "\t60 12942.591441 13012.342405 0.186982 0.197369\n", - "\t65 12916.751988 13011.652080 0.176438 0.182820\n", - "\t70 12981.212652 13053.319564 0.162411 0.169516\n", - "\t75 12932.407924 13074.224102 0.153813 0.156755\n", - "\t80 12916.331855 13029.565434 0.145349 0.147823\n", - "\t85 12917.001822 13042.421261 0.136457 0.137239\n", - "\t90 12887.128678 12990.734303 0.129621 0.130452\n", - "\t95 12888.946086 12973.415343 0.122397 0.122766\n", - "\t100 12881.697128 12959.651664 0.116324 0.116410\n", - "\t105 12895.681422 12960.317508 0.109162 0.109050\n", - "\t110 12851.913702 12929.769910 0.105005 0.103908\n", - "\t115 12795.235678 12913.972612 0.101558 0.098979\n", - "\t120 12778.835290 12886.386512 0.097184 0.094654\n", - "\t125 12747.043599 12843.837749 0.093453 0.090621\n", - "\t130 12743.322681 12816.084072 0.089142 0.086600\n", - "\t135 12704.356267 12790.203288 0.085928 0.082578\n", - "\t140 12731.984118 12796.350067 0.081671 0.078901\n", - "\t145 12690.395130 12791.502994 0.079170 0.075382\n", - "\t150 12675.569081 12704.857834 0.075764 0.073887\n", - "\t155 12673.798388 12655.990720 0.072396 0.070855\n", - "\t160 12688.321977 12610.883401 0.069417 0.068569\n", - "\t165 12602.489519 12558.138741 0.068280 0.066569\n", - "\t170 12575.649977 12553.564630 0.066077 0.063869\n", - "\t175 12552.103659 12520.095372 0.064002 0.061832\n", - "\t180 12524.123590 12457.646020 0.062033 0.060085\n", - "\t185 12470.157871 12434.132208 0.060517 0.058028\n", - "\t190 12452.067488 12380.739186 0.058731 0.056670\n", - "\t195 12415.450898 12353.512233 0.057065 0.054970\n", - "\t200 12377.598670 12315.990345 0.055637 0.053348\n", - "\t205 12369.427919 12289.918274 0.053812 0.051717\n", - "\t210 12308.221817 12224.340350 0.052806 0.050777\n", - "\t215 12274.329208 12164.080107 0.051496 0.049729\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 7831.059753 9943.504253 0.987065 0.941908\n", + "\t5 7106.913190 9168.067423 1.304910 1.150356\n", + "\t10 6779.027752 8678.999816 1.473708 1.286543\n", + "\t15 6591.160845 8377.317578 1.556553 1.346125\n", + "\t20 6469.413444 8151.787425 1.549488 1.358795\n", + "\t25 6369.832186 7985.142325 1.548078 1.353925\n", + "\t30 6285.178795 7878.847609 1.531938 1.319217\n", + "\t35 6216.656067 7741.589421 1.509501 1.307884\n", + "\t40 6155.241379 7655.316512 1.474743 1.270084\n", + "\t45 6105.918970 7556.986602 1.414270 1.234470\n", + "\t50 6076.371342 7522.785118 1.348556 1.170937\n", + "\t55 6030.241880 7447.391749 1.311088 1.133516\n", + "\t60 6005.973722 7408.925630 1.256169 1.089917\n", + "\t65 6002.125995 7364.361995 1.169288 1.029933\n", + "\t70 5976.207283 7336.100563 1.122986 0.990663\n", + "\t75 5951.666260 7306.592489 1.077897 0.946869\n", + "\t80 5918.254016 7238.893988 1.053437 0.931127\n", + "\t85 5918.208740 7226.363390 0.989942 0.877828\n", + "\t90 5867.100159 7197.898366 0.990185 0.857879\n", + "\t95 5859.007030 7165.997446 0.929519 0.812933\n", + "\t100 5843.254166 7159.070470 0.894981 0.775213\n", + "\t105 5841.131195 7143.741089 0.849290 0.738824\n", + "\t110 5821.292215 7119.704519 0.811782 0.707784\n", + "\t115 5820.272035 7112.481717 0.769661 0.671211\n", + "\t120 5811.350827 7060.505651 0.736181 0.652498\n", + "\t125 5793.908583 7066.008522 0.716442 0.624559\n", + "\t130 5795.478604 7029.029121 0.681608 0.605209\n", + "\t135 5773.849040 7021.659449 0.667536 0.582533\n", + "\t140 5775.403713 7010.212505 0.634047 0.555628\n", + "\t145 5736.539129 6990.562369 0.630179 0.542516\n", + "\t150 5732.357290 6984.884673 0.601033 0.518933\n", + "\t155 5743.364284 6980.471223 0.570580 0.494955\n", + "\t160 5733.145769 6938.386837 0.551961 0.484650\n", + "\t165 5718.331258 6928.177798 0.529948 0.465554\n", + "\t170 5699.632837 6904.323015 0.519324 0.451990\n", + "\t175 5695.349689 6905.684428 0.499699 0.434141\n", + "\t180 5688.534677 6893.408541 0.478921 0.418797\n", + "\t185 5683.055043 6881.358878 0.463320 0.404739\n", + "\t190 5665.611101 6848.434616 0.450357 0.394703\n", + "\t195 5654.224456 6831.751052 0.437244 0.382167\n", + "\t200 5651.225192 6821.557616 0.421169 0.367724\n", + "\t205 5626.660446 6798.252052 0.414763 0.360225\n", + "\t210 5595.199895 6760.804314 0.409042 0.354866\n", + "\t215 5577.506895 6740.013534 0.400196 0.344957\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n" ] @@ -362,158 +348,158 @@ "text": [ "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 3/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.23675e+43 erg / s Luminosity absorbed = 8.01326e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.32445e+43 erg / s Luminosity absorbed = 7.18316e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", - "\t t_rad next_t_rad w next_w\n", - "\tShell \n", - "\t0 13117.652070 13122.102732 0.613290 0.641024\n", - "\t5 13128.710972 13164.042522 0.520966 0.543481\n", - "\t10 13087.946452 13113.990367 0.469492 0.494977\n", - "\t15 13117.221906 13173.538351 0.416974 0.432339\n", - "\t20 13114.807782 13144.097172 0.377475 0.392818\n", - "\t25 13096.095422 13164.934622 0.347216 0.356523\n", - "\t30 13094.720257 13184.070310 0.315541 0.319199\n", - "\t35 13060.231563 13136.832241 0.292868 0.297554\n", - "\t40 13059.642743 13136.025386 0.267728 0.273157\n", - "\t45 13036.502049 13155.265509 0.248840 0.249419\n", - "\t50 13088.971015 13166.480491 0.225795 0.228277\n", - "\t55 13057.048962 13166.079767 0.211304 0.210512\n", - "\t60 13012.342405 13127.443828 0.197369 0.197161\n", - "\t65 13011.652080 13141.214262 0.182820 0.181772\n", - "\t70 13053.319564 13174.463561 0.169516 0.167142\n", - "\t75 13074.224102 13150.237468 0.156755 0.157056\n", - "\t80 13029.565434 13097.524561 0.147823 0.147829\n", - "\t85 13042.421261 13127.609151 0.137239 0.137357\n", - "\t90 12990.734303 13040.008757 0.130452 0.130839\n", - "\t95 12973.415343 13029.856575 0.122766 0.122425\n", - "\t100 12959.651664 12982.871415 0.116410 0.116097\n", - "\t105 12960.317508 12979.071109 0.109050 0.109282\n", - "\t110 12929.769910 12943.014800 0.103908 0.104322\n", - "\t115 12913.972612 12927.071313 0.098979 0.098592\n", - "\t120 12886.386512 12886.480175 0.094654 0.094474\n", - "\t125 12843.837749 12864.414625 0.090621 0.089431\n", - "\t130 12816.084072 12874.140628 0.086600 0.084479\n", - "\t135 12790.203288 12818.832488 0.082578 0.081002\n", - "\t140 12796.350067 12826.258359 0.078901 0.076974\n", - "\t145 12791.502994 12795.258432 0.075382 0.073890\n", - "\t150 12704.857834 12722.903444 0.073887 0.072095\n", - "\t155 12655.990720 12672.627773 0.070855 0.069298\n", - "\t160 12610.883401 12629.678970 0.068569 0.066939\n", - "\t165 12558.138741 12586.628880 0.066569 0.064793\n", - "\t170 12553.564630 12573.279154 0.063869 0.062097\n", - "\t175 12520.095372 12536.734639 0.061832 0.059908\n", - "\t180 12457.646020 12499.514570 0.060085 0.057760\n", - "\t185 12434.132208 12489.203566 0.058028 0.055605\n", - "\t190 12380.739186 12388.978106 0.056670 0.054919\n", - "\t195 12353.512233 12311.880538 0.054970 0.054015\n", - "\t200 12315.990345 12300.791731 0.053348 0.051990\n", - "\t205 12289.918274 12254.716475 0.051717 0.050505\n", - "\t210 12224.340350 12226.649994 0.050777 0.049039\n", - "\t215 12164.080107 12126.030478 0.049729 0.048560\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 9943.504253 11184.865494 0.941908 0.874243\n", + "\t5 9168.067423 10590.890516 1.150356 0.967498\n", + "\t10 8678.999816 10184.538479 1.286543 1.029334\n", + "\t15 8377.317578 9900.090529 1.346125 1.054300\n", + "\t20 8151.787425 9664.894816 1.358795 1.054968\n", + "\t25 7985.142325 9510.226327 1.353925 1.037032\n", + "\t30 7878.847609 9394.106182 1.319217 1.004565\n", + "\t35 7741.589421 9271.496145 1.307884 0.982576\n", + "\t40 7655.316512 9161.047735 1.270084 0.949923\n", + "\t45 7556.986602 9072.338911 1.234470 0.915208\n", + "\t50 7522.785118 9010.672618 1.170937 0.872802\n", + "\t55 7447.391749 8901.383373 1.133516 0.845834\n", + "\t60 7408.925630 8834.036103 1.089917 0.815912\n", + "\t65 7364.361995 8769.307119 1.029933 0.772520\n", + "\t70 7336.100563 8711.903127 0.990663 0.746307\n", + "\t75 7306.592489 8640.885761 0.946869 0.718271\n", + "\t80 7238.893988 8542.892115 0.931127 0.704924\n", + "\t85 7226.363390 8516.723270 0.877828 0.666870\n", + "\t90 7197.898366 8502.592440 0.857879 0.642794\n", + "\t95 7165.997446 8447.746462 0.812933 0.611320\n", + "\t100 7159.070470 8412.121792 0.775213 0.587311\n", + "\t105 7143.741089 8381.138885 0.738824 0.562031\n", + "\t110 7119.704519 8359.007818 0.707784 0.537153\n", + "\t115 7112.481717 8322.937242 0.671211 0.513156\n", + "\t120 7060.505651 8249.430763 0.652498 0.500380\n", + "\t125 7066.008522 8275.891240 0.624559 0.473512\n", + "\t130 7029.029121 8204.492926 0.605209 0.461398\n", + "\t135 7021.659449 8180.726449 0.582533 0.445042\n", + "\t140 7010.212505 8169.127793 0.555628 0.424694\n", + "\t145 6990.562369 8158.252968 0.542516 0.411711\n", + "\t150 6984.884673 8112.858348 0.518933 0.397343\n", + "\t155 6980.471223 8098.797522 0.494955 0.379947\n", + "\t160 6938.386837 8055.533873 0.484650 0.370261\n", + "\t165 6928.177798 8055.402146 0.465554 0.354906\n", + "\t170 6904.323015 8019.347064 0.451990 0.345449\n", + "\t175 6905.684428 8006.258863 0.434141 0.331780\n", + "\t180 6893.408541 8002.951619 0.418797 0.319606\n", + "\t185 6881.358878 7970.659310 0.404739 0.309280\n", + "\t190 6848.434616 7932.276565 0.394703 0.301617\n", + "\t195 6831.751052 7915.200790 0.382167 0.291916\n", + "\t200 6821.557616 7898.840956 0.367724 0.280425\n", + "\t205 6798.252052 7883.486836 0.360225 0.273069\n", + "\t210 6760.804314 7840.128677 0.354866 0.268436\n", + "\t215 6740.013534 7815.699388 0.344957 0.260891\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 4/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.23576e+43 erg / s Luminosity absorbed = 8.01378e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.30498e+43 erg / s Luminosity absorbed = 7.38203e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13122.102732 13166.764592 0.641024 0.647005\n", - "\t5 13164.042522 13160.763682 0.543481 0.557020\n", - "\t10 13113.990367 13167.628696 0.494977 0.498091\n", - "\t15 13173.538351 13190.751769 0.432339 0.444245\n", - "\t20 13144.097172 13184.024122 0.392818 0.401907\n", - "\t25 13164.934622 13227.151619 0.356523 0.359620\n", - "\t30 13184.070310 13180.743685 0.319199 0.331947\n", - "\t35 13136.832241 13204.580495 0.297554 0.300127\n", - "\t40 13136.025386 13194.812326 0.273157 0.275673\n", - "\t45 13155.265509 13230.326739 0.249419 0.248915\n", - "\t50 13166.480491 13234.880733 0.228277 0.229173\n", - "\t55 13166.079767 13233.024725 0.210512 0.211402\n", - "\t60 13127.443828 13173.721736 0.197161 0.199245\n", - "\t65 13141.214262 13236.160576 0.181772 0.180157\n", - "\t70 13174.463561 13220.204788 0.167142 0.166780\n", - "\t75 13150.237468 13206.871230 0.157056 0.156329\n", - "\t80 13097.524561 13191.695756 0.147829 0.146271\n", - "\t85 13127.609151 13132.044552 0.137357 0.138585\n", - "\t90 13040.008757 13107.559438 0.130839 0.129874\n", - "\t95 13029.856575 13096.184312 0.122425 0.121443\n", - "\t100 12982.871415 13051.565010 0.116097 0.115060\n", - "\t105 12979.071109 13026.202501 0.109282 0.108914\n", - "\t110 12943.014800 12971.433048 0.104322 0.103877\n", - "\t115 12927.071313 12951.898476 0.098592 0.098483\n", - "\t120 12886.480175 12938.304729 0.094474 0.093136\n", - "\t125 12864.414625 12899.761435 0.089431 0.088597\n", - "\t130 12874.140628 12882.151103 0.084479 0.084103\n", - "\t135 12818.832488 12882.960846 0.081002 0.079350\n", - "\t140 12826.258359 12869.549641 0.076974 0.075580\n", - "\t145 12795.258432 12842.281777 0.073890 0.072636\n", - "\t150 12722.903444 12749.157914 0.072095 0.070611\n", - "\t155 12672.627773 12703.241916 0.069298 0.067873\n", - "\t160 12629.678970 12670.297608 0.066939 0.065557\n", - "\t165 12586.628880 12636.895690 0.064793 0.063296\n", - "\t170 12573.279154 12597.918830 0.062097 0.061002\n", - "\t175 12536.734639 12550.742876 0.059908 0.058575\n", - "\t180 12499.514570 12528.304583 0.057760 0.056474\n", - "\t185 12489.203566 12475.332811 0.055605 0.054925\n", - "\t190 12388.978106 12397.080100 0.054919 0.054007\n", - "\t195 12311.880538 12372.673017 0.054015 0.052291\n", - "\t200 12300.791731 12355.614341 0.051990 0.050307\n", - "\t205 12254.716475 12286.492951 0.050505 0.049312\n", - "\t210 12226.649994 12227.262848 0.049039 0.048146\n", - "\t215 12126.030478 12110.655363 0.048560 0.047822\n", + "\t0 11184.865494 11911.711939 0.874243 0.815342\n", + "\t5 10590.890516 11423.170586 0.967498 0.852032\n", + "\t10 10184.538479 11134.470932 1.029334 0.863305\n", + "\t15 9900.090529 10887.349224 1.054300 0.863750\n", + "\t20 9664.894816 10740.461976 1.054968 0.832290\n", + "\t25 9510.226327 10562.641071 1.037032 0.813050\n", + "\t30 9394.106182 10481.388048 1.004565 0.774264\n", + "\t35 9271.496145 10372.742105 0.982576 0.747951\n", + "\t40 9161.047735 10274.337236 0.949923 0.716987\n", + "\t45 9072.338911 10202.946659 0.915208 0.684430\n", + "\t50 9010.672618 10120.383319 0.872802 0.652331\n", + "\t55 8901.383373 10039.433120 0.845834 0.624391\n", + "\t60 8834.036103 9985.105525 0.815912 0.597331\n", + "\t65 8769.307119 9909.687407 0.772520 0.567351\n", + "\t70 8711.903127 9853.157362 0.746307 0.545114\n", + "\t75 8640.885761 9803.411756 0.718271 0.521662\n", + "\t80 8542.892115 9703.094119 0.704924 0.508055\n", + "\t85 8516.723270 9664.369661 0.666870 0.483056\n", + "\t90 8502.592440 9644.808583 0.642794 0.462651\n", + "\t95 8447.746462 9595.659098 0.611320 0.439338\n", + "\t100 8412.121792 9572.851164 0.587311 0.421222\n", + "\t105 8381.138885 9519.270385 0.562031 0.403866\n", + "\t110 8359.007818 9520.334232 0.537153 0.383152\n", + "\t115 8322.937242 9482.738472 0.513156 0.366423\n", + "\t120 8249.430763 9426.321672 0.500380 0.356164\n", + "\t125 8275.891240 9391.728992 0.473512 0.340621\n", + "\t130 8204.492926 9367.333274 0.461398 0.327122\n", + "\t135 8180.726449 9303.898069 0.445042 0.318214\n", + "\t140 8169.127793 9283.891027 0.424694 0.304527\n", + "\t145 8158.252968 9270.457341 0.411711 0.293142\n", + "\t150 8112.858348 9230.938730 0.397343 0.282674\n", + "\t155 8098.797522 9190.155128 0.379947 0.272658\n", + "\t160 8055.533873 9192.939613 0.370261 0.262679\n", + "\t165 8055.402146 9166.640157 0.354906 0.253095\n", + "\t170 8019.347064 9116.658009 0.345449 0.246487\n", + "\t175 8006.258863 9096.261076 0.331780 0.237289\n", + "\t180 8002.951619 9095.824747 0.319606 0.228009\n", + "\t185 7970.659310 9083.284785 0.309280 0.219454\n", + "\t190 7932.276565 9051.094660 0.301617 0.212873\n", + "\t195 7915.200790 9020.044932 0.291916 0.207175\n", + "\t200 7898.840956 8998.843933 0.280425 0.199036\n", + "\t205 7883.486836 8982.946944 0.273069 0.193372\n", + "\t210 7840.128677 8952.622269 0.268436 0.188983\n", + "\t215 7815.699388 8935.684680 0.260891 0.182965\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 5/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.23135e+43 erg / s Luminosity absorbed = 8.05807e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.28254e+43 erg / s Luminosity absorbed = 7.59247e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13166.764592 13133.133359 0.647005 0.661105\n", - "\t5 13160.763682 13180.154270 0.557020 0.561426\n", - "\t10 13167.628696 13187.356843 0.498091 0.499942\n", - "\t15 13190.751769 13230.009983 0.444245 0.443721\n", - "\t20 13184.024122 13221.404988 0.401907 0.401814\n", - "\t25 13227.151619 13279.927924 0.359620 0.358538\n", - "\t30 13180.743685 13213.416642 0.331947 0.331098\n", - "\t35 13204.580495 13307.286771 0.300127 0.293396\n", - "\t40 13194.812326 13257.000678 0.275673 0.272724\n", - "\t45 13230.326739 13266.454328 0.248915 0.249218\n", - "\t50 13234.880733 13285.344929 0.229173 0.228049\n", - "\t55 13233.024725 13311.193287 0.211402 0.209753\n", - "\t60 13173.721736 13279.875959 0.199245 0.194716\n", - "\t65 13236.160576 13264.863530 0.180157 0.180622\n", - "\t70 13220.204788 13336.570629 0.166780 0.162591\n", - "\t75 13206.871230 13264.422259 0.156329 0.154915\n", - "\t80 13191.695756 13249.784141 0.146271 0.144610\n", - "\t85 13132.044552 13218.036151 0.138585 0.135840\n", - "\t90 13107.559438 13177.846374 0.129874 0.127847\n", - "\t95 13096.184312 13175.012522 0.121443 0.119499\n", - "\t100 13051.565010 13135.169311 0.115060 0.112385\n", - "\t105 13026.202501 13096.897799 0.108914 0.106725\n", - "\t110 12971.433048 13083.418933 0.103877 0.100297\n", - "\t115 12951.898476 13056.777956 0.098483 0.095490\n", - "\t120 12938.304729 13032.014535 0.093136 0.090889\n", - "\t125 12899.761435 13018.849241 0.088597 0.086436\n", - "\t130 12882.151103 12981.466541 0.084103 0.082128\n", - "\t135 12882.960846 12920.917764 0.079350 0.078529\n", - "\t140 12869.549641 12909.860356 0.075580 0.074552\n", - "\t145 12842.281777 12851.799676 0.072636 0.072046\n", - "\t150 12749.157914 12782.647581 0.070611 0.069667\n", - "\t155 12703.241916 12738.044835 0.067873 0.066928\n", - "\t160 12670.297608 12706.411554 0.065557 0.064376\n", - "\t165 12636.895690 12647.891447 0.063296 0.062578\n", - "\t170 12597.918830 12625.602574 0.061002 0.059937\n", - "\t175 12550.742876 12555.971329 0.058575 0.058448\n", - "\t180 12528.304583 12552.544848 0.056474 0.055863\n", - "\t185 12475.332811 12498.211140 0.054925 0.054189\n", - "\t190 12397.080100 12456.284077 0.054007 0.052761\n", - "\t195 12372.673017 12363.777196 0.052291 0.051798\n", - "\t200 12355.614341 12365.014946 0.050307 0.049562\n", - "\t205 12286.492951 12267.941719 0.049312 0.048978\n", - "\t210 12227.262848 12211.404200 0.048146 0.047722\n", - "\t215 12110.655363 12156.535212 0.047822 0.046684\n", + "\t0 11911.711939 12274.410751 0.815342 0.789790\n", + "\t5 11423.170586 11871.455425 0.852032 0.792676\n", + "\t10 11134.470932 11649.695187 0.863305 0.773668\n", + "\t15 10887.349224 11471.210556 0.863750 0.748405\n", + "\t20 10740.461976 11360.332943 0.832290 0.712461\n", + "\t25 10562.641071 11218.786535 0.813050 0.682594\n", + "\t30 10481.388048 11129.781624 0.774264 0.647152\n", + "\t35 10372.742105 11054.982577 0.747951 0.615252\n", + "\t40 10274.337236 10978.674047 0.716987 0.581735\n", + "\t45 10202.946659 10896.716952 0.684430 0.554543\n", + "\t50 10120.383319 10820.747796 0.652331 0.526362\n", + "\t55 10039.433120 10788.603828 0.624391 0.494951\n", + "\t60 9985.105525 10721.956293 0.597331 0.471665\n", + "\t65 9909.687407 10655.755485 0.567351 0.446374\n", + "\t70 9853.157362 10634.209059 0.545114 0.423620\n", + "\t75 9803.411756 10590.884258 0.521662 0.402309\n", + "\t80 9703.094119 10508.509946 0.508055 0.388143\n", + "\t85 9664.369661 10508.882030 0.483056 0.365331\n", + "\t90 9644.808583 10483.115608 0.462651 0.347868\n", + "\t95 9595.659098 10430.871132 0.439338 0.329624\n", + "\t100 9572.851164 10415.185286 0.421222 0.314476\n", + "\t105 9519.270385 10368.229649 0.403866 0.300532\n", + "\t110 9520.334232 10371.842110 0.383152 0.284290\n", + "\t115 9482.738472 10344.461437 0.366423 0.270853\n", + "\t120 9426.321672 10330.632364 0.356164 0.260494\n", + "\t125 9391.728992 10280.580995 0.340621 0.250351\n", + "\t130 9367.333274 10249.596303 0.327122 0.239675\n", + "\t135 9303.898069 10236.391898 0.318214 0.229879\n", + "\t140 9283.891027 10200.349641 0.304527 0.220010\n", + "\t145 9270.457341 10180.401007 0.293142 0.212525\n", + "\t150 9230.938730 10140.384246 0.282674 0.204939\n", + "\t155 9190.155128 10095.159566 0.272658 0.197206\n", + "\t160 9192.939613 10116.202875 0.262679 0.188372\n", + "\t165 9166.640157 10064.971970 0.253095 0.182719\n", + "\t170 9116.658009 10059.156300 0.246487 0.176322\n", + "\t175 9096.261076 10026.674915 0.237289 0.170347\n", + "\t180 9095.824747 9986.590882 0.228009 0.165054\n", + "\t185 9083.284785 9991.204987 0.219454 0.157743\n", + "\t190 9051.094660 9954.915111 0.212873 0.153163\n", + "\t195 9020.044932 9946.636259 0.207175 0.148020\n", + "\t200 8998.843933 9904.779162 0.199036 0.142722\n", + "\t205 8982.946944 9878.309679 0.193372 0.138820\n", + "\t210 8952.622269 9865.404965 0.188983 0.134775\n", + "\t215 8935.684680 9838.418760 0.182965 0.130692\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n" ] @@ -524,158 +510,158 @@ "text": [ "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 6/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22714e+43 erg / s Luminosity absorbed = 8.09114e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.28283e+43 erg / s Luminosity absorbed = 7.59368e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13133.133359 13196.025024 0.661105 0.650910\n", - "\t5 13180.154270 13255.698653 0.561426 0.556263\n", - "\t10 13187.356843 13239.518470 0.499942 0.494814\n", - "\t15 13230.009983 13288.479637 0.443721 0.438216\n", - "\t20 13221.404988 13326.424072 0.401814 0.392288\n", - "\t25 13279.927924 13327.703183 0.358538 0.357912\n", - "\t30 13213.416642 13290.593772 0.331098 0.326841\n", - "\t35 13307.286771 13379.166431 0.293396 0.290233\n", - "\t40 13257.000678 13332.043792 0.272724 0.269385\n", - "\t45 13266.454328 13342.544624 0.249218 0.245700\n", - "\t50 13285.344929 13393.368804 0.228049 0.223222\n", - "\t55 13311.193287 13405.465136 0.209753 0.205613\n", - "\t60 13279.875959 13337.444936 0.194716 0.192957\n", - "\t65 13264.863530 13322.573830 0.180622 0.179129\n", - "\t70 13336.570629 13376.807762 0.162591 0.162838\n", - "\t75 13264.422259 13341.931624 0.154915 0.152609\n", - "\t80 13249.784141 13323.359370 0.144610 0.142282\n", - "\t85 13218.036151 13320.624255 0.135840 0.132022\n", - "\t90 13177.846374 13276.335581 0.127847 0.124791\n", - "\t95 13175.012522 13291.680639 0.119499 0.116002\n", - "\t100 13135.169311 13231.017853 0.112385 0.110371\n", - "\t105 13096.897799 13210.946440 0.106725 0.104111\n", - "\t110 13083.418933 13207.592577 0.100297 0.097619\n", - "\t115 13056.777956 13119.069100 0.095490 0.094113\n", - "\t120 13032.014535 13109.529071 0.090889 0.088884\n", - "\t125 13018.849241 13095.270885 0.086436 0.084279\n", - "\t130 12981.466541 13033.700377 0.082128 0.080103\n", - "\t135 12920.917764 12957.809294 0.078529 0.077480\n", - "\t140 12909.860356 12931.802369 0.074552 0.073862\n", - "\t145 12851.799676 12925.100614 0.072046 0.070224\n", - "\t150 12782.647581 12855.814961 0.069667 0.068059\n", - "\t155 12738.044835 12839.979057 0.066928 0.064786\n", - "\t160 12706.411554 12827.797549 0.064376 0.061897\n", - "\t165 12647.891447 12755.000233 0.062578 0.060413\n", - "\t170 12625.602574 12693.096249 0.059937 0.058603\n", - "\t175 12555.971329 12601.717780 0.058448 0.057507\n", - "\t180 12552.544848 12615.109130 0.055863 0.054529\n", - "\t185 12498.211140 12586.653068 0.054189 0.052663\n", - "\t190 12456.284077 12537.507236 0.052761 0.051090\n", - "\t195 12363.777196 12473.427562 0.051798 0.049878\n", - "\t200 12365.014946 12477.999050 0.049562 0.047867\n", - "\t205 12267.941719 12362.115770 0.048978 0.047396\n", - "\t210 12211.404200 12253.089156 0.047722 0.046878\n", - "\t215 12156.535212 12180.868013 0.046684 0.045927\n", + "\t0 12274.410751 12621.985366 0.789790 0.740187\n", + "\t5 11871.455425 12288.282401 0.792676 0.714197\n", + "\t10 11649.695187 12107.496695 0.773668 0.683174\n", + "\t15 11471.210556 11966.421542 0.748405 0.651469\n", + "\t20 11360.332943 11869.120463 0.712461 0.610504\n", + "\t25 11218.786535 11782.584290 0.682594 0.576377\n", + "\t30 11129.781624 11661.517833 0.647152 0.549776\n", + "\t35 11054.982577 11596.680082 0.615252 0.515964\n", + "\t40 10978.674047 11486.100778 0.581735 0.492717\n", + "\t45 10896.716952 11411.634100 0.554543 0.466075\n", + "\t50 10820.747796 11320.929647 0.526362 0.443230\n", + "\t55 10788.603828 11304.819988 0.494951 0.411733\n", + "\t60 10721.956293 11223.787471 0.471665 0.391653\n", + "\t65 10655.755485 11187.391580 0.446374 0.366972\n", + "\t70 10634.209059 11145.379508 0.423620 0.349026\n", + "\t75 10590.884258 11132.155630 0.402309 0.327809\n", + "\t80 10508.509946 11080.451217 0.388143 0.312311\n", + "\t85 10508.882030 11053.402190 0.365331 0.294910\n", + "\t90 10483.115608 11022.793935 0.347868 0.280215\n", + "\t95 10430.871132 11018.638959 0.329624 0.263074\n", + "\t100 10415.185286 10969.698101 0.314476 0.251057\n", + "\t105 10368.229649 10996.575238 0.300532 0.235733\n", + "\t110 10371.842110 10946.225411 0.284290 0.225373\n", + "\t115 10344.461437 10915.429238 0.270853 0.215369\n", + "\t120 10330.632364 10911.516887 0.260494 0.204801\n", + "\t125 10280.580995 10876.787083 0.250351 0.195768\n", + "\t130 10249.596303 10846.880881 0.239675 0.187419\n", + "\t135 10236.391898 10827.878807 0.229879 0.179927\n", + "\t140 10200.349641 10843.147042 0.220010 0.169929\n", + "\t145 10180.401007 10836.452058 0.212525 0.163079\n", + "\t150 10140.384246 10779.508126 0.204939 0.157783\n", + "\t155 10095.159566 10792.246053 0.197206 0.150208\n", + "\t160 10116.202875 10777.101313 0.188372 0.144407\n", + "\t165 10064.971970 10764.279483 0.182719 0.138515\n", + "\t170 10059.156300 10755.323524 0.176322 0.133355\n", + "\t175 10026.674915 10716.093969 0.170347 0.129014\n", + "\t180 9986.590882 10681.240209 0.165054 0.124735\n", + "\t185 9991.204987 10710.349167 0.157743 0.118591\n", + "\t190 9954.915111 10647.113250 0.153163 0.115792\n", + "\t195 9946.636259 10621.085728 0.148020 0.112042\n", + "\t200 9904.779162 10611.632892 0.142722 0.107582\n", + "\t205 9878.309679 10575.876336 0.138820 0.104696\n", + "\t210 9865.404965 10534.592000 0.134775 0.102013\n", + "\t215 9838.418760 10485.222357 0.130692 0.099331\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 7/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22118e+43 erg / s Luminosity absorbed = 8.15225e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.28515e+43 erg / s Luminosity absorbed = 7.57676e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13196.025024 13210.192507 0.650910 0.651204\n", - "\t5 13255.698653 13279.272431 0.556263 0.553787\n", - "\t10 13239.518470 13325.730308 0.494814 0.485617\n", - "\t15 13288.479637 13305.186251 0.438216 0.438444\n", - "\t20 13326.424072 13343.413094 0.392288 0.392317\n", - "\t25 13327.703183 13329.023277 0.357912 0.358184\n", - "\t30 13290.593772 13327.705187 0.326841 0.323893\n", - "\t35 13379.166431 13366.676710 0.290233 0.291474\n", - "\t40 13332.043792 13347.637776 0.269385 0.270268\n", - "\t45 13342.544624 13391.584255 0.245700 0.243847\n", - "\t50 13393.368804 13371.818600 0.223222 0.224589\n", - "\t55 13405.465136 13429.111170 0.205613 0.205312\n", - "\t60 13337.444936 13385.068591 0.192957 0.190720\n", - "\t65 13322.573830 13377.164416 0.179129 0.177522\n", - "\t70 13376.807762 13389.265265 0.162838 0.162714\n", - "\t75 13341.931624 13335.296594 0.152609 0.152417\n", - "\t80 13323.359370 13317.898827 0.142282 0.142520\n", - "\t85 13320.624255 13328.550643 0.132022 0.131243\n", - "\t90 13276.335581 13310.694565 0.124791 0.123615\n", - "\t95 13291.680639 13291.914034 0.116002 0.115864\n", - "\t100 13231.017853 13270.160350 0.110371 0.108953\n", - "\t105 13210.946440 13206.626648 0.104111 0.103936\n", - "\t110 13207.592577 13204.813252 0.097619 0.096775\n", - "\t115 13119.069100 13133.099872 0.094113 0.092629\n", - "\t120 13109.529071 13152.191134 0.088884 0.087390\n", - "\t125 13095.270885 13119.431535 0.084279 0.082767\n", - "\t130 13033.700377 13054.659703 0.080103 0.079317\n", - "\t135 12957.809294 13030.381168 0.077480 0.075530\n", - "\t140 12931.802369 12994.145013 0.073862 0.072263\n", - "\t145 12925.100614 12958.166533 0.070224 0.069155\n", - "\t150 12855.814961 12883.286594 0.068059 0.066754\n", - "\t155 12839.979057 12863.007784 0.064786 0.064032\n", - "\t160 12827.797549 12827.137770 0.061897 0.061571\n", - "\t165 12755.000233 12799.473800 0.060413 0.059162\n", - "\t170 12693.096249 12717.620831 0.058603 0.057730\n", - "\t175 12601.717780 12641.557351 0.057507 0.056527\n", - "\t180 12615.109130 12613.094183 0.054529 0.054178\n", - "\t185 12586.653068 12581.699392 0.052663 0.052259\n", - "\t190 12537.507236 12556.326916 0.051090 0.050396\n", - "\t195 12473.427562 12463.328882 0.049878 0.049704\n", - "\t200 12477.999050 12421.543590 0.047867 0.048312\n", - "\t205 12362.115770 12339.759839 0.047396 0.047358\n", - "\t210 12253.089156 12243.798783 0.046878 0.046663\n", - "\t215 12180.868013 12163.326591 0.045927 0.045862\n", + "\t0 12621.985366 12759.629863 0.740187 0.721720\n", + "\t5 12288.282401 12486.425455 0.714197 0.679950\n", + "\t10 12107.496695 12369.251952 0.683174 0.636363\n", + "\t15 11966.421542 12252.854693 0.651469 0.595850\n", + "\t20 11869.120463 12167.826060 0.610504 0.556063\n", + "\t25 11782.584290 12071.481834 0.576377 0.522488\n", + "\t30 11661.517833 11955.870966 0.549776 0.496104\n", + "\t35 11596.680082 11917.514987 0.515964 0.459262\n", + "\t40 11486.100778 11870.688289 0.492717 0.427744\n", + "\t45 11411.634100 11790.779683 0.466075 0.405292\n", + "\t50 11320.929647 11703.842476 0.443230 0.384510\n", + "\t55 11304.819988 11687.592974 0.411733 0.356790\n", + "\t60 11223.787471 11618.853302 0.391653 0.337614\n", + "\t65 11187.391580 11585.501944 0.366972 0.314979\n", + "\t70 11145.379508 11526.322819 0.349026 0.299224\n", + "\t75 11132.155630 11523.858835 0.327809 0.281351\n", + "\t80 11080.451217 11448.221615 0.312311 0.269039\n", + "\t85 11053.402190 11462.009705 0.294910 0.249884\n", + "\t90 11022.793935 11416.159361 0.280215 0.238194\n", + "\t95 11018.638959 11406.804183 0.263074 0.222978\n", + "\t100 10969.698101 11376.225310 0.251057 0.211479\n", + "\t105 10996.575238 11433.350181 0.235733 0.196343\n", + "\t110 10946.225411 11372.910863 0.225373 0.189059\n", + "\t115 10915.429238 11332.677175 0.215369 0.180570\n", + "\t120 10911.516887 11285.604610 0.204801 0.172781\n", + "\t125 10876.787083 11299.429914 0.195768 0.162189\n", + "\t130 10846.880881 11263.153673 0.187419 0.155143\n", + "\t135 10827.878807 11204.982403 0.179927 0.150862\n", + "\t140 10843.147042 11258.798865 0.169929 0.141258\n", + "\t145 10836.452058 11231.762696 0.163079 0.135271\n", + "\t150 10779.508126 11207.707717 0.157783 0.129487\n", + "\t155 10792.246053 11191.745451 0.150208 0.124238\n", + "\t160 10777.101313 11181.509283 0.144407 0.119067\n", + "\t165 10764.279483 11162.391880 0.138515 0.114391\n", + "\t170 10755.323524 11158.541462 0.133355 0.109545\n", + "\t175 10716.093969 11151.075575 0.129014 0.105748\n", + "\t180 10681.240209 11118.631655 0.124735 0.102085\n", + "\t185 10710.349167 11103.407863 0.118591 0.097843\n", + "\t190 10647.113250 11072.785328 0.115792 0.094608\n", + "\t195 10621.085728 11057.565986 0.112042 0.091442\n", + "\t200 10611.632892 11035.369976 0.107582 0.088212\n", + "\t205 10575.876336 11002.115565 0.104696 0.085741\n", + "\t210 10534.592000 10955.610971 0.102013 0.083497\n", + "\t215 10485.222357 10917.579162 0.099331 0.081022\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 8/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22375e+43 erg / s Luminosity absorbed = 8.12095e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.27712e+43 erg / s Luminosity absorbed = 7.65528e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13210.192507 13194.127608 0.651204 0.656434\n", - "\t5 13279.272431 13228.388565 0.553787 0.559574\n", - "\t10 13325.730308 13289.414493 0.485617 0.489004\n", - "\t15 13305.186251 13346.761126 0.438444 0.433787\n", - "\t20 13343.413094 13363.742432 0.392317 0.390643\n", - "\t25 13329.023277 13385.269116 0.358184 0.351372\n", - "\t30 13327.705187 13359.128491 0.323893 0.321469\n", - "\t35 13366.676710 13398.262188 0.291474 0.291795\n", - "\t40 13347.637776 13415.204376 0.270268 0.266293\n", - "\t45 13391.584255 13428.721895 0.243847 0.242985\n", - "\t50 13371.818600 13413.695497 0.224589 0.222309\n", - "\t55 13429.111170 13406.001338 0.205312 0.206976\n", - "\t60 13385.068591 13406.277223 0.190720 0.191089\n", - "\t65 13377.164416 13447.307416 0.177522 0.174859\n", - "\t70 13389.265265 13427.486749 0.162714 0.162477\n", - "\t75 13335.296594 13400.407701 0.152417 0.150796\n", - "\t80 13317.898827 13381.691224 0.142520 0.140777\n", - "\t85 13328.550643 13371.963378 0.131243 0.131026\n", - "\t90 13310.694565 13375.266319 0.123615 0.121836\n", - "\t95 13291.914034 13356.498239 0.115864 0.114540\n", - "\t100 13270.160350 13323.180618 0.108953 0.107497\n", - "\t105 13206.626648 13246.701015 0.103936 0.102790\n", - "\t110 13204.813252 13208.360067 0.096775 0.097150\n", - "\t115 13133.099872 13148.966352 0.092629 0.092266\n", - "\t120 13152.191134 13174.872225 0.087390 0.086782\n", - "\t125 13119.431535 13142.241261 0.082767 0.082443\n", - "\t130 13054.659703 13072.396994 0.079317 0.079388\n", - "\t135 13030.381168 13051.399307 0.075530 0.075497\n", - "\t140 12994.145013 13026.259101 0.072263 0.071752\n", - "\t145 12958.166533 12996.797161 0.069155 0.068470\n", - "\t150 12883.286594 12925.202949 0.066754 0.065936\n", - "\t155 12863.007784 12864.354520 0.064032 0.064026\n", - "\t160 12827.137770 12859.747285 0.061571 0.061331\n", - "\t165 12799.473800 12793.706958 0.059162 0.059341\n", - "\t170 12717.620831 12733.667948 0.057730 0.057447\n", - "\t175 12641.557351 12669.138594 0.056527 0.055941\n", - "\t180 12613.094183 12647.126180 0.054178 0.053803\n", - "\t185 12581.699392 12589.173650 0.052259 0.052224\n", - "\t190 12556.326916 12550.587983 0.050396 0.050632\n", - "\t195 12463.328882 12450.144160 0.049704 0.049861\n", - "\t200 12421.543590 12405.865846 0.048312 0.048493\n", - "\t205 12339.759839 12351.709722 0.047358 0.047307\n", - "\t210 12243.798783 12253.994038 0.046663 0.046529\n", - "\t215 12163.326591 12193.782185 0.045862 0.045482\n", + "\t0 12759.629863 12860.359189 0.721720 0.708992\n", + "\t5 12486.425455 12638.631249 0.679950 0.651342\n", + "\t10 12369.251952 12561.844673 0.636363 0.598991\n", + "\t15 12252.854693 12457.507444 0.595850 0.554747\n", + "\t20 12167.826060 12405.099383 0.556063 0.514695\n", + "\t25 12071.481834 12309.733919 0.522488 0.482479\n", + "\t30 11955.870966 12245.489227 0.496104 0.450183\n", + "\t35 11917.514987 12183.541188 0.459262 0.418285\n", + "\t40 11870.688289 12158.321534 0.427744 0.386364\n", + "\t45 11790.779683 12097.953291 0.405292 0.362136\n", + "\t50 11703.842476 12043.102357 0.384510 0.340574\n", + "\t55 11687.592974 11992.235264 0.356790 0.317048\n", + "\t60 11618.853302 11931.000829 0.337614 0.297179\n", + "\t65 11585.501944 11868.817978 0.314979 0.281821\n", + "\t70 11526.322819 11845.559084 0.299224 0.264268\n", + "\t75 11523.858835 11839.159985 0.281351 0.247294\n", + "\t80 11448.221615 11766.869353 0.269039 0.236873\n", + "\t85 11462.009705 11781.216970 0.249884 0.219222\n", + "\t90 11416.159361 11763.657217 0.238194 0.206710\n", + "\t95 11406.804183 11736.050598 0.222978 0.194684\n", + "\t100 11376.225310 11709.075282 0.211479 0.184521\n", + "\t105 11433.350181 11764.053125 0.196343 0.171069\n", + "\t110 11372.910863 11693.485667 0.189059 0.164673\n", + "\t115 11332.677175 11662.729622 0.180570 0.157151\n", + "\t120 11285.604610 11626.621706 0.172781 0.149390\n", + "\t125 11299.429914 11591.005256 0.162189 0.141987\n", + "\t130 11263.153673 11621.706183 0.155143 0.133331\n", + "\t135 11204.982403 11562.094749 0.150862 0.129172\n", + "\t140 11258.798865 11593.366562 0.141258 0.121613\n", + "\t145 11231.762696 11543.895750 0.135271 0.117417\n", + "\t150 11207.707717 11510.519401 0.129487 0.112442\n", + "\t155 11191.745451 11521.475871 0.124238 0.107162\n", + "\t160 11181.509283 11508.760099 0.119067 0.102595\n", + "\t165 11162.391880 11476.537118 0.114391 0.098371\n", + "\t170 11158.541462 11464.294275 0.109545 0.094355\n", + "\t175 11151.075575 11445.541800 0.105748 0.091276\n", + "\t180 11118.631655 11422.237088 0.102085 0.087966\n", + "\t185 11103.407863 11397.864821 0.097843 0.084664\n", + "\t190 11072.785328 11382.914370 0.094608 0.081583\n", + "\t195 11057.565986 11349.784124 0.091442 0.078976\n", + "\t200 11035.369976 11322.806026 0.088212 0.076562\n", + "\t205 11002.115565 11263.555912 0.085741 0.074833\n", + "\t210 10955.610971 11221.660698 0.083497 0.072828\n", + "\t215 10917.579162 11200.040416 0.081022 0.070359\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n" ] @@ -686,158 +672,158 @@ "text": [ "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 9/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21908e+43 erg / s Luminosity absorbed = 8.16872e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.26945e+43 erg / s Luminosity absorbed = 7.72465e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13194.127608 13207.712484 0.656434 0.655960\n", - "\t5 13228.388565 13224.770429 0.559574 0.562303\n", - "\t10 13289.414493 13275.361500 0.489004 0.494601\n", - "\t15 13346.761126 13317.607311 0.433787 0.435487\n", - "\t20 13363.742432 13352.395556 0.390643 0.391052\n", - "\t25 13385.269116 13386.828235 0.351372 0.350598\n", - "\t30 13359.128491 13410.026678 0.321469 0.315679\n", - "\t35 13398.262188 13389.009476 0.291795 0.290711\n", - "\t40 13415.204376 13418.441455 0.266293 0.263041\n", - "\t45 13428.721895 13378.162118 0.242985 0.245205\n", - "\t50 13413.695497 13443.730262 0.222309 0.220039\n", - "\t55 13406.001338 13424.303697 0.206976 0.205223\n", - "\t60 13406.277223 13419.555276 0.191089 0.188897\n", - "\t65 13447.307416 13460.875005 0.174859 0.172920\n", - "\t70 13427.486749 13450.337756 0.162477 0.160245\n", - "\t75 13400.407701 13448.630047 0.150796 0.148399\n", - "\t80 13381.691224 13438.668160 0.140777 0.138444\n", - "\t85 13371.963378 13419.643621 0.131026 0.130018\n", - "\t90 13375.266319 13410.569390 0.121836 0.121143\n", - "\t95 13356.498239 13411.775288 0.114540 0.112150\n", - "\t100 13323.180618 13345.602702 0.107497 0.106578\n", - "\t105 13246.701015 13309.641634 0.102790 0.100505\n", - "\t110 13208.360067 13267.237025 0.097150 0.095508\n", - "\t115 13148.966352 13245.989409 0.092266 0.089846\n", - "\t120 13174.872225 13192.393305 0.086782 0.086280\n", - "\t125 13142.241261 13206.993275 0.082443 0.081211\n", - "\t130 13072.396994 13109.780991 0.079388 0.078693\n", - "\t135 13051.399307 13105.515227 0.075497 0.074463\n", - "\t140 13026.259101 13080.013791 0.071752 0.070828\n", - "\t145 12996.797161 13034.310835 0.068470 0.067873\n", - "\t150 12925.202949 12954.520922 0.065936 0.065855\n", - "\t155 12864.354520 12892.530978 0.064026 0.063870\n", - "\t160 12859.747285 12871.554047 0.061331 0.061258\n", - "\t165 12793.706958 12829.332539 0.059341 0.058871\n", - "\t170 12733.667948 12764.372956 0.057447 0.057038\n", - "\t175 12669.138594 12758.719713 0.055941 0.054577\n", - "\t180 12647.126180 12643.886903 0.053803 0.053704\n", - "\t185 12589.173650 12584.799996 0.052224 0.052303\n", - "\t190 12550.587983 12539.090757 0.050632 0.050683\n", - "\t195 12450.144160 12482.487445 0.049861 0.049185\n", - "\t200 12405.865846 12385.358724 0.048493 0.048675\n", - "\t205 12351.709722 12362.404518 0.047307 0.046954\n", - "\t210 12253.994038 12303.329057 0.046529 0.045802\n", - "\t215 12193.782185 12217.514244 0.045482 0.045041\n", + "\t0 12860.359189 12957.621989 0.708992 0.691150\n", + "\t5 12638.631249 12803.884316 0.651342 0.624900\n", + "\t10 12561.844673 12730.751370 0.598991 0.569845\n", + "\t15 12457.507444 12604.055249 0.554747 0.528149\n", + "\t20 12405.099383 12583.906104 0.514695 0.485502\n", + "\t25 12309.733919 12491.390514 0.482479 0.453408\n", + "\t30 12245.489227 12424.403292 0.450183 0.423553\n", + "\t35 12183.541188 12380.236496 0.418285 0.388916\n", + "\t40 12158.321534 12363.358789 0.386364 0.359253\n", + "\t45 12097.953291 12328.785784 0.362136 0.335280\n", + "\t50 12043.102357 12251.735081 0.340574 0.314188\n", + "\t55 11992.235264 12261.737757 0.317048 0.288563\n", + "\t60 11931.000829 12152.175154 0.297179 0.274420\n", + "\t65 11868.817978 12117.845990 0.281821 0.257238\n", + "\t70 11845.559084 12093.081412 0.264268 0.241895\n", + "\t75 11839.159985 12093.052004 0.247294 0.224445\n", + "\t80 11766.869353 12037.640748 0.236873 0.214143\n", + "\t85 11781.216970 12049.271412 0.219222 0.198544\n", + "\t90 11763.657217 12015.545530 0.206710 0.188042\n", + "\t95 11736.050598 11993.213751 0.194684 0.176258\n", + "\t100 11709.075282 11930.668715 0.184521 0.168432\n", + "\t105 11764.053125 12037.937411 0.171069 0.153223\n", + "\t110 11693.485667 11988.734420 0.164673 0.146614\n", + "\t115 11662.729622 11937.603116 0.157151 0.140315\n", + "\t120 11626.621706 11887.030622 0.149390 0.133416\n", + "\t125 11591.005256 11836.102537 0.141987 0.127737\n", + "\t130 11621.706183 11833.294958 0.133331 0.120973\n", + "\t135 11562.094749 11777.150834 0.129172 0.116478\n", + "\t140 11593.366562 11825.884043 0.121613 0.109144\n", + "\t145 11543.895750 11766.196357 0.117417 0.105560\n", + "\t150 11510.519401 11740.623271 0.112442 0.101324\n", + "\t155 11521.475871 11732.541118 0.107162 0.096637\n", + "\t160 11508.760099 11708.165413 0.102595 0.092791\n", + "\t165 11476.537118 11672.422129 0.098371 0.089207\n", + "\t170 11464.294275 11660.830520 0.094355 0.085588\n", + "\t175 11445.541800 11633.201479 0.091276 0.082922\n", + "\t180 11422.237088 11615.548095 0.087966 0.079616\n", + "\t185 11397.864821 11566.309428 0.084664 0.077288\n", + "\t190 11382.914370 11575.749336 0.081583 0.073956\n", + "\t195 11349.784124 11543.883213 0.078976 0.071674\n", + "\t200 11322.806026 11495.598254 0.076562 0.069762\n", + "\t205 11263.555912 11490.479524 0.074833 0.067104\n", + "\t210 11221.660698 11428.432630 0.072828 0.065627\n", + "\t215 11200.040416 11408.594202 0.070359 0.063437\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 10/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21621e+43 erg / s Luminosity absorbed = 8.18951e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.26942e+43 erg / s Luminosity absorbed = 7.72233e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13207.712484 13250.044474 0.655960 0.648306\n", - "\t5 13224.770429 13268.260885 0.562303 0.554688\n", - "\t10 13275.361500 13343.630262 0.494601 0.485191\n", - "\t15 13317.607311 13372.127852 0.435487 0.433539\n", - "\t20 13352.395556 13394.404128 0.391052 0.387859\n", - "\t25 13386.828235 13423.447190 0.350598 0.348268\n", - "\t30 13410.026678 13435.790768 0.315679 0.315451\n", - "\t35 13389.009476 13459.456710 0.290711 0.284964\n", - "\t40 13418.441455 13459.066834 0.263041 0.262896\n", - "\t45 13378.162118 13429.157522 0.245205 0.244167\n", - "\t50 13443.730262 13447.760292 0.220039 0.221943\n", - "\t55 13424.303697 13475.944820 0.205223 0.203639\n", - "\t60 13419.555276 13456.185170 0.188897 0.187987\n", - "\t65 13460.875005 13505.405683 0.172920 0.171399\n", - "\t70 13450.337756 13471.586824 0.160245 0.159227\n", - "\t75 13448.630047 13509.654307 0.148399 0.146613\n", - "\t80 13438.668160 13485.367813 0.138444 0.136661\n", - "\t85 13419.643621 13459.486003 0.130018 0.128842\n", - "\t90 13410.569390 13413.151984 0.121143 0.120975\n", - "\t95 13411.775288 13372.719193 0.112150 0.113967\n", - "\t100 13345.602702 13347.397283 0.106578 0.107160\n", - "\t105 13309.641634 13357.042867 0.100505 0.099694\n", - "\t110 13267.237025 13292.283955 0.095508 0.095070\n", - "\t115 13245.989409 13254.313335 0.089846 0.089742\n", - "\t120 13192.393305 13203.352329 0.086280 0.086462\n", - "\t125 13206.993275 13200.112218 0.081211 0.081222\n", - "\t130 13109.780991 13116.657467 0.078693 0.078214\n", - "\t135 13105.515227 13120.957986 0.074463 0.073713\n", - "\t140 13080.013791 13117.413156 0.070828 0.070116\n", - "\t145 13034.310835 13042.554199 0.067873 0.067352\n", - "\t150 12954.520922 12983.088194 0.065855 0.065417\n", - "\t155 12892.530978 12953.555946 0.063870 0.062668\n", - "\t160 12871.554047 12916.451771 0.061258 0.060032\n", - "\t165 12829.332539 12858.080133 0.058871 0.058206\n", - "\t170 12764.372956 12812.042920 0.057038 0.056128\n", - "\t175 12758.719713 12747.638758 0.054577 0.054594\n", - "\t180 12643.886903 12709.889498 0.053704 0.052654\n", - "\t185 12584.799996 12659.454233 0.052303 0.050867\n", - "\t190 12539.090757 12603.737771 0.050683 0.049698\n", - "\t195 12482.487445 12542.866664 0.049185 0.048387\n", - "\t200 12385.358724 12457.714659 0.048675 0.047626\n", - "\t205 12362.404518 12404.158500 0.046954 0.046263\n", - "\t210 12303.329057 12314.481431 0.045802 0.045468\n", - "\t215 12217.514244 12219.633343 0.045041 0.044806\n", + "\t0 12957.621989 13015.569839 0.691150 0.682918\n", + "\t5 12803.884316 12904.875006 0.624900 0.607993\n", + "\t10 12730.751370 12842.565429 0.569845 0.550057\n", + "\t15 12604.055249 12753.343916 0.528149 0.505693\n", + "\t20 12583.906104 12730.133218 0.485502 0.462479\n", + "\t25 12491.390514 12664.083226 0.453408 0.427473\n", + "\t30 12424.403292 12588.842740 0.423553 0.399502\n", + "\t35 12380.236496 12576.400081 0.388916 0.365150\n", + "\t40 12363.358789 12571.096532 0.359253 0.335182\n", + "\t45 12328.785784 12567.267055 0.335280 0.308863\n", + "\t50 12251.735081 12490.762479 0.314188 0.289858\n", + "\t55 12261.737757 12473.100822 0.288563 0.268680\n", + "\t60 12152.175154 12403.844620 0.274420 0.252799\n", + "\t65 12117.845990 12379.017248 0.257238 0.235858\n", + "\t70 12093.081412 12384.414417 0.241895 0.219277\n", + "\t75 12093.052004 12359.661933 0.224445 0.205534\n", + "\t80 12037.640748 12301.567714 0.214143 0.194798\n", + "\t85 12049.271412 12282.445145 0.198544 0.182032\n", + "\t90 12015.545530 12245.263730 0.188042 0.172696\n", + "\t95 11993.213751 12240.211097 0.176258 0.161126\n", + "\t100 11930.668715 12166.777597 0.168432 0.154560\n", + "\t105 12037.937411 12230.213020 0.153223 0.141698\n", + "\t110 11988.734420 12176.872696 0.146614 0.135522\n", + "\t115 11937.603116 12173.728933 0.140315 0.128104\n", + "\t120 11887.030622 12135.497772 0.133416 0.121988\n", + "\t125 11836.102537 12064.394959 0.127737 0.117167\n", + "\t130 11833.294958 12010.587301 0.120973 0.112690\n", + "\t135 11777.150834 11986.931983 0.116478 0.107698\n", + "\t140 11825.884043 12025.244790 0.109144 0.100791\n", + "\t145 11766.196357 11995.910253 0.105560 0.096670\n", + "\t150 11740.623271 11947.593265 0.101324 0.093294\n", + "\t155 11732.541118 11957.542102 0.096637 0.088421\n", + "\t160 11708.165413 11910.670130 0.092791 0.085384\n", + "\t165 11672.422129 11888.528792 0.089207 0.081976\n", + "\t170 11660.830520 11879.429183 0.085588 0.078285\n", + "\t175 11633.201479 11864.677062 0.082922 0.075451\n", + "\t180 11615.548095 11802.638064 0.079616 0.073662\n", + "\t185 11566.309428 11793.285395 0.077288 0.070677\n", + "\t190 11575.749336 11763.174836 0.073956 0.068157\n", + "\t195 11543.883213 11739.187171 0.071674 0.065917\n", + "\t200 11495.598254 11661.501839 0.069762 0.064739\n", + "\t205 11490.479524 11650.971928 0.067104 0.062392\n", + "\t210 11428.432630 11591.428842 0.065627 0.060987\n", + "\t215 11408.594202 11546.502844 0.063437 0.059336\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 11/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22099e+43 erg / s Luminosity absorbed = 8.14722e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.26262e+43 erg / s Luminosity absorbed = 7.78847e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13250.044474 13230.303793 0.648306 0.653347\n", - "\t5 13268.260885 13278.921453 0.554688 0.557141\n", - "\t10 13343.630262 13297.867380 0.485191 0.494971\n", - "\t15 13372.127852 13338.977010 0.433539 0.437654\n", - "\t20 13394.404128 13388.041689 0.387859 0.389896\n", - "\t25 13423.447190 13399.607318 0.348268 0.352616\n", - "\t30 13435.790768 13402.658723 0.315451 0.318820\n", - "\t35 13459.456710 13450.995960 0.284964 0.286188\n", - "\t40 13459.066834 13448.503156 0.262896 0.263254\n", - "\t45 13429.157522 13465.392891 0.244167 0.240151\n", - "\t50 13447.760292 13467.648960 0.221943 0.221032\n", - "\t55 13475.944820 13475.701645 0.203639 0.202742\n", - "\t60 13456.185170 13493.350980 0.187987 0.185672\n", - "\t65 13505.405683 13518.310710 0.171399 0.170532\n", - "\t70 13471.586824 13494.025081 0.159227 0.158113\n", - "\t75 13509.654307 13539.078602 0.146613 0.144461\n", - "\t80 13485.367813 13548.423948 0.136661 0.133634\n", - "\t85 13459.486003 13467.039561 0.128842 0.127736\n", - "\t90 13413.151984 13451.638423 0.120975 0.119543\n", - "\t95 13372.719193 13457.248316 0.113967 0.111862\n", - "\t100 13347.397283 13412.863481 0.107160 0.105685\n", - "\t105 13357.042867 13398.455904 0.099694 0.098452\n", - "\t110 13292.283955 13302.921440 0.095070 0.094659\n", - "\t115 13254.313335 13282.193580 0.089742 0.089329\n", - "\t120 13203.352329 13219.401175 0.086462 0.086073\n", - "\t125 13200.112218 13201.420216 0.081222 0.081001\n", - "\t130 13116.657467 13139.211214 0.078214 0.077949\n", - "\t135 13120.957986 13164.116084 0.073713 0.073320\n", - "\t140 13117.413156 13143.426144 0.070116 0.069725\n", - "\t145 13042.554199 13072.451666 0.067352 0.067062\n", - "\t150 12983.088194 13012.224631 0.065417 0.064803\n", - "\t155 12953.555946 12948.682525 0.062668 0.062814\n", - "\t160 12916.451771 12932.493342 0.060032 0.059969\n", - "\t165 12858.080133 12837.412003 0.058206 0.058573\n", - "\t170 12812.042920 12822.790631 0.056128 0.056038\n", - "\t175 12747.638758 12754.419790 0.054594 0.054566\n", - "\t180 12709.889498 12690.188142 0.052654 0.052906\n", - "\t185 12659.454233 12657.419216 0.050867 0.051031\n", - "\t190 12603.737771 12567.241073 0.049698 0.050083\n", - "\t195 12542.866664 12506.494295 0.048387 0.048923\n", - "\t200 12457.714659 12458.719247 0.047626 0.047384\n", - "\t205 12404.158500 12402.111064 0.046263 0.046297\n", - "\t210 12314.481431 12309.834715 0.045468 0.045563\n", - "\t215 12219.633343 12225.965187 0.044806 0.044749\n", + "\t0 13015.569839 13032.401779 0.682918 0.684003\n", + "\t5 12904.875006 12990.461599 0.607993 0.593997\n", + "\t10 12842.565429 12898.821890 0.550057 0.540517\n", + "\t15 12753.343916 12849.193235 0.505693 0.490550\n", + "\t20 12730.133218 12828.953617 0.462479 0.448185\n", + "\t25 12664.083226 12759.303136 0.427473 0.414128\n", + "\t30 12588.842740 12696.103173 0.399502 0.385663\n", + "\t35 12576.400081 12697.730273 0.365150 0.352612\n", + "\t40 12571.096532 12662.177207 0.335182 0.324425\n", + "\t45 12567.267055 12656.118492 0.308863 0.298253\n", + "\t50 12490.762479 12628.623376 0.289858 0.274518\n", + "\t55 12473.100822 12623.212204 0.268680 0.252985\n", + "\t60 12403.844620 12591.031591 0.252799 0.236744\n", + "\t65 12379.017248 12568.788110 0.235858 0.220900\n", + "\t70 12384.414417 12504.218648 0.219277 0.209178\n", + "\t75 12359.661933 12472.497115 0.205534 0.196505\n", + "\t80 12301.567714 12476.433585 0.194798 0.182159\n", + "\t85 12282.445145 12444.116662 0.182032 0.170683\n", + "\t90 12245.263730 12408.486842 0.172696 0.162078\n", + "\t95 12240.211097 12333.668316 0.161126 0.154184\n", + "\t100 12166.777597 12303.324181 0.154560 0.145725\n", + "\t105 12230.213020 12324.197495 0.141698 0.135636\n", + "\t110 12176.872696 12297.477032 0.135522 0.128069\n", + "\t115 12173.728933 12298.340501 0.128104 0.120772\n", + "\t120 12135.497772 12244.175855 0.121988 0.116145\n", + "\t125 12064.394959 12220.660279 0.117167 0.110258\n", + "\t130 12010.587301 12203.437058 0.112690 0.104950\n", + "\t135 11986.931983 12204.633362 0.107698 0.099736\n", + "\t140 12025.244790 12194.368362 0.100791 0.094746\n", + "\t145 11995.910253 12188.022851 0.096670 0.090104\n", + "\t150 11947.593265 12106.440886 0.093294 0.087625\n", + "\t155 11957.542102 12108.357437 0.088421 0.083173\n", + "\t160 11910.670130 12056.905371 0.085384 0.080364\n", + "\t165 11888.528792 12075.433483 0.081976 0.076282\n", + "\t170 11879.429183 12050.882022 0.078285 0.073261\n", + "\t175 11864.677062 12025.339383 0.075451 0.070721\n", + "\t180 11802.638064 11946.287508 0.073662 0.069445\n", + "\t185 11793.285395 11931.799902 0.070677 0.066790\n", + "\t190 11763.174836 11906.870608 0.068157 0.064230\n", + "\t195 11739.187171 11849.898176 0.065917 0.062563\n", + "\t200 11661.501839 11805.166140 0.064739 0.060991\n", + "\t205 11650.971928 11750.970412 0.062392 0.059559\n", + "\t210 11591.428842 11729.652424 0.060987 0.057636\n", + "\t215 11546.502844 11651.688056 0.059336 0.056416\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n" ] @@ -848,158 +834,158 @@ "text": [ "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 12/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21227e+43 erg / s Luminosity absorbed = 8.22264e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.25945e+43 erg / s Luminosity absorbed = 7.81529e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13230.303793 13208.849994 0.653347 0.659598\n", - "\t5 13278.921453 13272.158210 0.557141 0.561212\n", - "\t10 13297.867380 13342.748204 0.494971 0.488881\n", - "\t15 13338.977010 13390.263252 0.437654 0.432805\n", - "\t20 13388.041689 13424.191029 0.389896 0.388292\n", - "\t25 13399.607318 13458.184819 0.352616 0.348057\n", - "\t30 13402.658723 13470.170887 0.318820 0.314842\n", - "\t35 13450.995960 13486.075663 0.286188 0.284269\n", - "\t40 13448.503156 13522.925178 0.263254 0.259422\n", - "\t45 13465.392891 13497.508334 0.240151 0.239422\n", - "\t50 13467.648960 13489.284340 0.221032 0.220600\n", - "\t55 13475.701645 13512.115225 0.202742 0.202209\n", - "\t60 13493.350980 13496.883357 0.185672 0.186368\n", - "\t65 13518.310710 13519.225487 0.170532 0.172357\n", - "\t70 13494.025081 13459.411751 0.158113 0.160356\n", - "\t75 13539.078602 13486.183066 0.144461 0.147243\n", - "\t80 13548.423948 13486.241355 0.133634 0.136797\n", - "\t85 13467.039561 13451.472664 0.127736 0.128289\n", - "\t90 13451.638423 13456.663239 0.119543 0.119819\n", - "\t95 13457.248316 13468.237878 0.111862 0.111512\n", - "\t100 13412.863481 13417.948513 0.105685 0.105811\n", - "\t105 13398.455904 13361.202313 0.098452 0.099821\n", - "\t110 13302.921440 13316.056762 0.094659 0.094989\n", - "\t115 13282.193580 13243.700355 0.089329 0.090345\n", - "\t120 13219.401175 13243.163337 0.086073 0.085463\n", - "\t125 13201.420216 13250.057352 0.081001 0.080080\n", - "\t130 13139.211214 13164.311347 0.077949 0.077706\n", - "\t135 13164.116084 13184.287993 0.073320 0.072553\n", - "\t140 13143.426144 13154.157361 0.069725 0.069428\n", - "\t145 13072.451666 13079.781830 0.067062 0.067008\n", - "\t150 13012.224631 13030.156864 0.064803 0.064555\n", - "\t155 12948.682525 12944.264398 0.062814 0.062676\n", - "\t160 12932.493342 12949.815017 0.059969 0.059988\n", - "\t165 12837.412003 12897.310883 0.058573 0.057579\n", - "\t170 12822.790631 12922.159742 0.056038 0.054708\n", - "\t175 12754.419790 12821.949007 0.054566 0.053511\n", - "\t180 12690.188142 12730.870651 0.052906 0.052254\n", - "\t185 12657.419216 12722.247624 0.051031 0.050018\n", - "\t190 12567.241073 12642.740779 0.050083 0.048842\n", - "\t195 12506.494295 12560.850177 0.048923 0.048038\n", - "\t200 12458.719247 12511.262912 0.047384 0.046644\n", - "\t205 12402.111064 12421.083202 0.046297 0.045961\n", - "\t210 12309.834715 12344.680043 0.045563 0.044970\n", - "\t215 12225.965187 12226.871851 0.044749 0.044510\n", + "\t0 13032.401779 13060.756844 0.684003 0.676972\n", + "\t5 12990.461599 13053.655799 0.593997 0.583799\n", + "\t10 12898.821890 12940.461814 0.540517 0.534608\n", + "\t15 12849.193235 12911.505202 0.490550 0.483174\n", + "\t20 12828.953617 12900.206203 0.448185 0.439200\n", + "\t25 12759.303136 12863.788022 0.414128 0.400384\n", + "\t30 12696.103173 12810.013851 0.385663 0.371252\n", + "\t35 12697.730273 12825.414714 0.352612 0.338216\n", + "\t40 12662.177207 12801.179422 0.324425 0.310208\n", + "\t45 12656.118492 12744.748623 0.298253 0.290688\n", + "\t50 12628.623376 12756.940903 0.274518 0.265593\n", + "\t55 12623.212204 12719.938507 0.252985 0.246729\n", + "\t60 12591.031591 12728.329492 0.236744 0.226363\n", + "\t65 12568.788110 12688.708886 0.220900 0.211208\n", + "\t70 12504.218648 12660.204209 0.209178 0.197615\n", + "\t75 12472.497115 12599.352691 0.196505 0.186919\n", + "\t80 12476.433585 12585.793885 0.182159 0.174973\n", + "\t85 12444.116662 12589.414222 0.170683 0.162163\n", + "\t90 12408.486842 12515.279884 0.162078 0.155383\n", + "\t95 12333.668316 12486.897379 0.154184 0.145659\n", + "\t100 12303.324181 12430.500086 0.145725 0.138556\n", + "\t105 12324.197495 12450.715847 0.135636 0.129425\n", + "\t110 12297.477032 12426.647529 0.128069 0.122309\n", + "\t115 12298.340501 12435.989959 0.120772 0.114494\n", + "\t120 12244.175855 12407.884661 0.116145 0.109221\n", + "\t125 12220.660279 12380.981505 0.110258 0.103989\n", + "\t130 12203.437058 12351.668125 0.104950 0.099268\n", + "\t135 12204.633362 12304.519778 0.099736 0.095737\n", + "\t140 12194.368362 12324.560098 0.094746 0.090400\n", + "\t145 12188.022851 12265.886677 0.090104 0.087024\n", + "\t150 12106.440886 12249.589898 0.087625 0.083028\n", + "\t155 12108.357437 12237.977955 0.083173 0.079321\n", + "\t160 12056.905371 12207.745803 0.080364 0.076236\n", + "\t165 12075.433483 12201.219362 0.076282 0.072831\n", + "\t170 12050.882022 12167.349382 0.073261 0.070259\n", + "\t175 12025.339383 12095.417592 0.070721 0.068696\n", + "\t180 11946.287508 12054.818787 0.069445 0.066319\n", + "\t185 11931.799902 12019.446420 0.066790 0.064144\n", + "\t190 11906.870608 11990.990568 0.064230 0.061757\n", + "\t195 11849.898176 11961.647695 0.062563 0.059858\n", + "\t200 11805.166140 11924.727184 0.060991 0.058232\n", + "\t205 11750.970412 11858.754302 0.059559 0.056888\n", + "\t210 11729.652424 11829.679705 0.057636 0.055114\n", + "\t215 11651.688056 11767.828592 0.056416 0.053853\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 13/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21689e+43 erg / s Luminosity absorbed = 8.18137e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.24878e+43 erg / s Luminosity absorbed = 7.90910e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13208.849994 13221.314409 0.659598 0.656564\n", - "\t5 13272.158210 13266.903886 0.561212 0.559145\n", - "\t10 13342.748204 13343.312042 0.488881 0.485847\n", - "\t15 13390.263252 13396.321205 0.432805 0.432258\n", - "\t20 13424.191029 13431.814773 0.388292 0.387402\n", - "\t25 13458.184819 13514.656129 0.348057 0.342639\n", - "\t30 13470.170887 13503.249569 0.314842 0.311340\n", - "\t35 13486.075663 13497.806703 0.284269 0.285753\n", - "\t40 13522.925178 13536.387470 0.259422 0.259071\n", - "\t45 13497.508334 13526.018045 0.239422 0.237719\n", - "\t50 13489.284340 13479.479891 0.220600 0.222196\n", - "\t55 13512.115225 13531.789695 0.202209 0.199924\n", - "\t60 13496.883357 13524.251543 0.186368 0.185102\n", - "\t65 13519.225487 13531.626249 0.172357 0.170451\n", - "\t70 13459.411751 13491.592574 0.160356 0.159119\n", - "\t75 13486.183066 13491.954060 0.147243 0.148060\n", - "\t80 13486.241355 13493.132689 0.136797 0.136837\n", - "\t85 13451.472664 13485.073739 0.128289 0.127372\n", - "\t90 13456.663239 13466.187776 0.119819 0.119361\n", - "\t95 13468.237878 13451.422770 0.111512 0.111297\n", - "\t100 13417.948513 13454.427565 0.105811 0.103878\n", - "\t105 13361.202313 13386.326056 0.099821 0.099301\n", - "\t110 13316.056762 13366.800827 0.094989 0.093696\n", - "\t115 13243.700355 13306.582006 0.090345 0.088835\n", - "\t120 13243.163337 13245.016932 0.085463 0.084972\n", - "\t125 13250.057352 13255.717688 0.080080 0.080067\n", - "\t130 13164.311347 13246.575711 0.077706 0.075900\n", - "\t135 13184.287993 13181.247980 0.072553 0.072767\n", - "\t140 13154.157361 13122.812683 0.069428 0.069772\n", - "\t145 13079.781830 13037.707680 0.067008 0.068075\n", - "\t150 13030.156864 13026.386344 0.064555 0.064898\n", - "\t155 12944.264398 12925.145144 0.062676 0.063013\n", - "\t160 12949.815017 12885.376665 0.059988 0.060850\n", - "\t165 12897.310883 12861.447381 0.057579 0.058018\n", - "\t170 12922.159742 12833.429801 0.054708 0.056175\n", - "\t175 12821.949007 12783.510362 0.053511 0.054147\n", - "\t180 12730.870651 12717.340806 0.052254 0.052455\n", - "\t185 12722.247624 12680.884053 0.050018 0.050573\n", - "\t190 12642.740779 12654.520515 0.048842 0.048821\n", - "\t195 12560.850177 12556.882955 0.048038 0.048179\n", - "\t200 12511.262912 12509.126284 0.046644 0.046719\n", - "\t205 12421.083202 12446.538483 0.045961 0.045501\n", - "\t210 12344.680043 12344.694905 0.044970 0.044970\n", - "\t215 12226.871851 12231.908348 0.044510 0.044500\n", + "\t0 13060.756844 13083.224882 0.676972 0.673697\n", + "\t5 13053.655799 13088.802662 0.583799 0.577711\n", + "\t10 12940.461814 13027.101067 0.534608 0.522890\n", + "\t15 12911.505202 13006.462644 0.483174 0.473946\n", + "\t20 12900.206203 12983.888230 0.439200 0.429670\n", + "\t25 12863.788022 12971.745863 0.400384 0.388831\n", + "\t30 12810.013851 12913.558012 0.371252 0.361218\n", + "\t35 12825.414714 12948.249963 0.338216 0.325705\n", + "\t40 12801.179422 12912.855169 0.310208 0.301236\n", + "\t45 12744.748623 12866.250179 0.290688 0.279866\n", + "\t50 12756.940903 12848.652789 0.265593 0.258571\n", + "\t55 12719.938507 12848.859656 0.246729 0.236994\n", + "\t60 12728.329492 12851.601535 0.226363 0.217969\n", + "\t65 12688.708886 12808.658408 0.211208 0.204525\n", + "\t70 12660.204209 12799.122574 0.197615 0.189788\n", + "\t75 12599.352691 12726.546201 0.186919 0.179897\n", + "\t80 12585.793885 12747.782242 0.174973 0.165916\n", + "\t85 12589.414222 12750.918368 0.162163 0.154663\n", + "\t90 12515.279884 12668.223097 0.155383 0.148464\n", + "\t95 12486.897379 12675.791676 0.145659 0.137905\n", + "\t100 12430.500086 12620.707010 0.138556 0.130616\n", + "\t105 12450.715847 12593.289701 0.129425 0.123022\n", + "\t110 12426.647529 12585.676771 0.122309 0.116424\n", + "\t115 12435.989959 12537.431630 0.114494 0.110995\n", + "\t120 12407.884661 12520.786382 0.109221 0.105135\n", + "\t125 12380.981505 12516.716438 0.103989 0.099087\n", + "\t130 12351.668125 12472.741826 0.099268 0.095006\n", + "\t135 12304.519778 12422.139907 0.095737 0.091867\n", + "\t140 12324.560098 12453.435118 0.090400 0.086369\n", + "\t145 12265.886677 12389.456714 0.087024 0.083330\n", + "\t150 12249.589898 12363.390556 0.083028 0.079554\n", + "\t155 12237.977955 12341.590207 0.079321 0.076214\n", + "\t160 12207.745803 12291.756528 0.076236 0.073703\n", + "\t165 12201.219362 12252.749433 0.072831 0.070982\n", + "\t170 12167.349382 12256.286840 0.070259 0.067874\n", + "\t175 12095.417592 12182.336237 0.068696 0.066291\n", + "\t180 12054.818787 12145.611052 0.066319 0.063949\n", + "\t185 12019.446420 12120.021352 0.064144 0.061681\n", + "\t190 11990.990568 12095.073710 0.061757 0.059340\n", + "\t195 11961.647695 12049.179195 0.059858 0.057897\n", + "\t200 11924.727184 11992.337972 0.058232 0.056356\n", + "\t205 11858.754302 11949.219275 0.056888 0.054787\n", + "\t210 11829.679705 11885.344010 0.055114 0.053671\n", + "\t215 11767.828592 11823.561736 0.053853 0.052411\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 14/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21370e+43 erg / s Luminosity absorbed = 8.21618e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.24323e+43 erg / s Luminosity absorbed = 7.95660e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13221.314409 13248.085322 0.656564 0.652078\n", - "\t5 13266.903886 13271.262850 0.559145 0.557217\n", - "\t10 13343.312042 13323.100432 0.485847 0.488675\n", - "\t15 13396.321205 13364.000693 0.432258 0.434756\n", - "\t20 13431.814773 13415.622861 0.387402 0.388410\n", - "\t25 13514.656129 13519.302099 0.342639 0.342131\n", - "\t30 13503.249569 13522.659188 0.311340 0.309502\n", - "\t35 13497.806703 13549.670505 0.285753 0.280875\n", - "\t40 13536.387470 13564.411362 0.259071 0.258257\n", - "\t45 13526.018045 13547.677730 0.237719 0.236120\n", - "\t50 13479.479891 13531.242465 0.222196 0.217546\n", - "\t55 13531.789695 13562.478514 0.199924 0.199222\n", - "\t60 13524.251543 13560.618390 0.185102 0.183767\n", - "\t65 13531.626249 13595.350076 0.170451 0.168717\n", - "\t70 13491.592574 13583.685267 0.159119 0.155018\n", - "\t75 13491.954060 13568.688277 0.148060 0.144394\n", - "\t80 13493.132689 13511.447091 0.136837 0.136209\n", - "\t85 13485.073739 13524.307991 0.127372 0.126028\n", - "\t90 13466.187776 13518.242204 0.119361 0.116933\n", - "\t95 13451.422770 13473.696003 0.111297 0.110181\n", - "\t100 13454.427565 13470.970672 0.103878 0.103747\n", - "\t105 13386.326056 13439.625097 0.099301 0.097789\n", - "\t110 13366.800827 13341.589885 0.093696 0.094411\n", - "\t115 13306.582006 13284.506102 0.088835 0.088979\n", - "\t120 13245.016932 13212.934919 0.084972 0.085421\n", - "\t125 13255.717688 13236.311034 0.080067 0.079694\n", - "\t130 13246.575711 13209.300239 0.075900 0.076463\n", - "\t135 13181.247980 13147.404552 0.072767 0.072989\n", - "\t140 13122.812683 13123.191470 0.069772 0.069362\n", - "\t145 13037.707680 13062.442351 0.068075 0.067216\n", - "\t150 13026.386344 13002.501066 0.064898 0.064495\n", - "\t155 12925.145144 12941.430006 0.063013 0.062345\n", - "\t160 12885.376665 12885.248161 0.060850 0.060475\n", - "\t165 12861.447381 12856.926441 0.058018 0.057861\n", - "\t170 12833.429801 12831.914851 0.056175 0.055705\n", - "\t175 12783.510362 12783.093570 0.054147 0.053784\n", - "\t180 12717.340806 12690.757185 0.052455 0.052567\n", - "\t185 12680.884053 12641.084383 0.050573 0.050898\n", - "\t190 12654.520515 12572.460696 0.048821 0.049764\n", - "\t195 12556.882955 12516.398175 0.048179 0.048572\n", - "\t200 12509.126284 12454.357431 0.046719 0.047301\n", - "\t205 12446.538483 12367.350498 0.045501 0.046470\n", - "\t210 12344.694905 12318.940270 0.044970 0.045142\n", - "\t215 12231.908348 12221.586509 0.044500 0.044518\n", + "\t0 13083.224882 13110.758198 0.673697 0.670180\n", + "\t5 13088.802662 13113.028903 0.577711 0.574875\n", + "\t10 13027.101067 13093.088462 0.522890 0.515120\n", + "\t15 13006.462644 13078.630835 0.473946 0.464486\n", + "\t20 12983.888230 13073.991303 0.429670 0.419770\n", + "\t25 12971.745863 13110.381168 0.388831 0.375311\n", + "\t30 12913.558012 13055.574882 0.361218 0.344822\n", + "\t35 12948.249963 13041.575051 0.325705 0.318035\n", + "\t40 12912.855169 13022.005042 0.301236 0.292756\n", + "\t45 12866.250179 13003.812183 0.279866 0.269639\n", + "\t50 12848.652789 12963.032879 0.258571 0.250234\n", + "\t55 12848.859656 12982.389906 0.236994 0.229901\n", + "\t60 12851.601535 12975.350494 0.217969 0.210624\n", + "\t65 12808.658408 12965.368804 0.204525 0.196254\n", + "\t70 12799.122574 12890.584285 0.189788 0.185073\n", + "\t75 12726.546201 12893.430696 0.179897 0.171994\n", + "\t80 12747.782242 12901.177598 0.165916 0.159412\n", + "\t85 12750.918368 12894.708333 0.154663 0.148871\n", + "\t90 12668.223097 12834.988058 0.148464 0.140906\n", + "\t95 12675.791676 12833.456390 0.137905 0.131452\n", + "\t100 12620.707010 12807.914014 0.130616 0.123631\n", + "\t105 12593.289701 12725.023233 0.123022 0.118612\n", + "\t110 12585.676771 12715.728557 0.116424 0.112363\n", + "\t115 12537.431630 12681.404241 0.110995 0.106558\n", + "\t120 12520.786382 12659.267376 0.105135 0.100885\n", + "\t125 12516.716438 12647.301366 0.099087 0.095555\n", + "\t130 12472.741826 12601.531043 0.095006 0.091565\n", + "\t135 12422.139907 12567.359999 0.091867 0.087506\n", + "\t140 12453.435118 12518.962460 0.086369 0.084548\n", + "\t145 12389.456714 12478.839839 0.083330 0.080795\n", + "\t150 12363.390556 12494.070660 0.079554 0.076008\n", + "\t155 12341.590207 12463.099230 0.076214 0.073105\n", + "\t160 12291.756528 12383.175568 0.073703 0.071259\n", + "\t165 12252.749433 12349.074839 0.070982 0.068442\n", + "\t170 12256.286840 12352.713395 0.067874 0.065349\n", + "\t175 12182.336237 12260.653843 0.066291 0.064265\n", + "\t180 12145.611052 12228.542720 0.063949 0.062020\n", + "\t185 12120.021352 12199.166752 0.061681 0.059829\n", + "\t190 12095.073710 12177.586624 0.059340 0.057465\n", + "\t195 12049.179195 12107.631819 0.057897 0.056255\n", + "\t200 11992.337972 12076.794692 0.056356 0.054539\n", + "\t205 11949.219275 12033.176341 0.054787 0.053045\n", + "\t210 11885.344010 11961.453925 0.053671 0.052030\n", + "\t215 11823.561736 11886.901099 0.052411 0.051071\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n" ] @@ -1010,158 +996,158 @@ "text": [ "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 15/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20596e+43 erg / s Luminosity absorbed = 8.28887e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.24191e+43 erg / s Luminosity absorbed = 7.96929e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13248.085322 13269.950479 0.652078 0.645755\n", - "\t5 13271.262850 13301.816652 0.557217 0.549777\n", - "\t10 13323.100432 13356.938920 0.488675 0.484341\n", - "\t15 13364.000693 13387.126609 0.434756 0.432017\n", - "\t20 13415.622861 13474.324367 0.388410 0.380816\n", - "\t25 13519.302099 13530.987543 0.342131 0.342549\n", - "\t30 13522.659188 13531.828247 0.309502 0.310338\n", - "\t35 13549.670505 13545.706924 0.280875 0.281759\n", - "\t40 13564.411362 13546.619910 0.258257 0.258598\n", - "\t45 13547.677730 13498.710008 0.236120 0.240528\n", - "\t50 13531.242465 13568.778885 0.217546 0.215732\n", - "\t55 13562.478514 13606.052514 0.199222 0.195722\n", - "\t60 13560.618390 13624.818819 0.183767 0.178910\n", - "\t65 13595.350076 13619.048574 0.168717 0.166233\n", - "\t70 13583.685267 13592.981823 0.155018 0.154182\n", - "\t75 13568.688277 13620.893813 0.144394 0.141796\n", - "\t80 13511.447091 13597.052224 0.136209 0.133395\n", - "\t85 13524.307991 13585.058724 0.126028 0.123785\n", - "\t90 13518.242204 13591.535826 0.116933 0.114551\n", - "\t95 13473.696003 13520.772286 0.110181 0.108313\n", - "\t100 13470.970672 13457.777873 0.103747 0.103595\n", - "\t105 13439.625097 13454.673879 0.097789 0.097445\n", - "\t110 13341.589885 13422.703934 0.094411 0.091966\n", - "\t115 13284.506102 13389.027818 0.088979 0.086189\n", - "\t120 13212.934919 13309.391317 0.085421 0.083230\n", - "\t125 13236.311034 13240.145769 0.079694 0.079493\n", - "\t130 13209.300239 13204.256727 0.076463 0.076387\n", - "\t135 13147.404552 13181.230898 0.072989 0.072152\n", - "\t140 13123.191470 13140.558809 0.069362 0.068672\n", - "\t145 13062.442351 13100.506478 0.067216 0.066137\n", - "\t150 13002.501066 13031.203765 0.064495 0.063556\n", - "\t155 12941.430006 13001.184124 0.062345 0.060949\n", - "\t160 12885.248161 12942.508886 0.060475 0.059074\n", - "\t165 12856.926441 12912.024518 0.057861 0.056502\n", - "\t170 12831.914851 12891.299428 0.055705 0.054352\n", - "\t175 12783.093570 12829.756525 0.053784 0.052885\n", - "\t180 12690.757185 12724.080499 0.052567 0.051865\n", - "\t185 12641.084383 12693.543905 0.050898 0.050000\n", - "\t190 12572.460696 12633.066604 0.049764 0.048720\n", - "\t195 12516.398175 12597.395784 0.048572 0.047184\n", - "\t200 12454.357431 12524.995233 0.047301 0.046111\n", - "\t205 12367.350498 12411.617488 0.046470 0.045838\n", - "\t210 12318.940270 12367.171116 0.045142 0.044366\n", - "\t215 12221.586509 12267.188024 0.044518 0.043741\n", + "\t0 13110.758198 13157.348776 0.670180 0.660872\n", + "\t5 13113.028903 13154.537628 0.574875 0.567941\n", + "\t10 13093.088462 13122.466176 0.515120 0.508848\n", + "\t15 13078.630835 13143.615683 0.464486 0.455821\n", + "\t20 13073.991303 13184.013843 0.419770 0.406711\n", + "\t25 13110.381168 13204.092069 0.375311 0.367136\n", + "\t30 13055.574882 13126.833694 0.344822 0.339156\n", + "\t35 13041.575051 13129.174789 0.318035 0.310268\n", + "\t40 13022.005042 13109.493361 0.292756 0.285613\n", + "\t45 13003.812183 13130.769795 0.269639 0.259172\n", + "\t50 12963.032879 13078.921737 0.250234 0.241394\n", + "\t55 12982.389906 13088.297094 0.229901 0.222381\n", + "\t60 12975.350494 13098.649549 0.210624 0.203764\n", + "\t65 12965.368804 13049.630202 0.196254 0.189580\n", + "\t70 12890.584285 12990.355074 0.185073 0.179681\n", + "\t75 12893.430696 12968.256977 0.171994 0.167990\n", + "\t80 12901.177598 12970.293312 0.159412 0.156160\n", + "\t85 12894.708333 12968.271549 0.148871 0.145543\n", + "\t90 12834.988058 12945.709957 0.140906 0.136494\n", + "\t95 12833.456390 12931.106463 0.131452 0.127930\n", + "\t100 12807.914014 12919.726451 0.123631 0.120351\n", + "\t105 12725.023233 12876.617692 0.118612 0.113582\n", + "\t110 12715.728557 12815.972255 0.112363 0.108565\n", + "\t115 12681.404241 12832.576329 0.106558 0.102167\n", + "\t120 12659.267376 12757.169548 0.100885 0.097927\n", + "\t125 12647.301366 12772.943537 0.095555 0.091839\n", + "\t130 12601.531043 12694.520268 0.091565 0.088882\n", + "\t135 12567.359999 12652.718277 0.087506 0.084953\n", + "\t140 12518.962460 12658.308413 0.084548 0.080415\n", + "\t145 12478.839839 12630.562968 0.080795 0.077078\n", + "\t150 12494.070660 12597.378869 0.076008 0.073622\n", + "\t155 12463.099230 12559.021645 0.073105 0.070842\n", + "\t160 12383.175568 12498.714833 0.071259 0.068965\n", + "\t165 12349.074839 12440.298871 0.068442 0.066375\n", + "\t170 12352.713395 12430.528073 0.065349 0.063553\n", + "\t175 12260.653843 12372.900884 0.064265 0.062067\n", + "\t180 12228.542720 12348.207758 0.062020 0.059442\n", + "\t185 12199.166752 12294.218663 0.059829 0.057943\n", + "\t190 12177.586624 12281.713874 0.057465 0.055475\n", + "\t195 12107.631819 12194.852959 0.056255 0.054501\n", + "\t200 12076.794692 12140.252777 0.054539 0.053392\n", + "\t205 12033.176341 12102.119966 0.053045 0.051561\n", + "\t210 11961.453925 12043.807386 0.052030 0.050461\n", + "\t215 11886.901099 11969.967457 0.051071 0.049585\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 16/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21019e+43 erg / s Luminosity absorbed = 8.24203e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.23023e+43 erg / s Luminosity absorbed = 8.07641e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13269.950479 13294.332464 0.645755 0.639894\n", - "\t5 13301.816652 13334.225375 0.549777 0.545794\n", - "\t10 13356.938920 13341.731754 0.484341 0.489215\n", - "\t15 13387.126609 13392.884162 0.432017 0.433385\n", - "\t20 13474.324367 13449.916507 0.380816 0.384548\n", - "\t25 13530.987543 13504.961340 0.342549 0.345200\n", - "\t30 13531.828247 13515.546456 0.310338 0.311512\n", - "\t35 13545.706924 13519.588682 0.281759 0.284215\n", - "\t40 13546.619910 13540.852305 0.258598 0.259600\n", - "\t45 13498.710008 13551.504707 0.240528 0.237025\n", - "\t50 13568.778885 13595.189072 0.215732 0.214145\n", - "\t55 13606.052514 13640.400297 0.195722 0.194052\n", - "\t60 13624.818819 13650.180777 0.178910 0.178014\n", - "\t65 13619.048574 13682.597008 0.166233 0.163665\n", - "\t70 13592.981823 13628.687357 0.154182 0.153787\n", - "\t75 13620.893813 13686.415370 0.141796 0.140718\n", - "\t80 13597.052224 13667.638767 0.133395 0.131648\n", - "\t85 13585.058724 13614.508146 0.123785 0.123306\n", - "\t90 13591.535826 13592.293834 0.114551 0.115055\n", - "\t95 13520.772286 13591.458834 0.108313 0.106462\n", - "\t100 13457.777873 13516.525837 0.103595 0.102804\n", - "\t105 13454.673879 13493.432984 0.097445 0.097303\n", - "\t110 13422.703934 13506.262863 0.091966 0.089921\n", - "\t115 13389.027818 13462.951218 0.086189 0.084904\n", - "\t120 13309.391317 13401.175756 0.083230 0.081100\n", - "\t125 13240.145769 13329.876751 0.079493 0.077521\n", - "\t130 13204.256727 13274.552132 0.076387 0.074636\n", - "\t135 13181.230898 13253.288405 0.072152 0.070750\n", - "\t140 13140.558809 13181.363752 0.068672 0.068530\n", - "\t145 13100.506478 13181.575930 0.066137 0.064852\n", - "\t150 13031.203765 13082.422101 0.063556 0.062904\n", - "\t155 13001.184124 13062.551665 0.060949 0.060169\n", - "\t160 12942.508886 12987.751942 0.059074 0.058697\n", - "\t165 12912.024518 12945.550201 0.056502 0.056124\n", - "\t170 12891.299428 12940.320268 0.054352 0.053558\n", - "\t175 12829.756525 12896.507466 0.052885 0.051976\n", - "\t180 12724.080499 12797.825337 0.051865 0.050767\n", - "\t185 12693.543905 12735.338727 0.050000 0.049307\n", - "\t190 12633.066604 12652.175435 0.048720 0.048346\n", - "\t195 12597.395784 12589.600635 0.047184 0.047215\n", - "\t200 12524.995233 12547.627424 0.046111 0.045773\n", - "\t205 12411.617488 12449.180372 0.045838 0.045101\n", - "\t210 12367.171116 12369.571510 0.044366 0.044203\n", - "\t215 12267.188024 12289.644346 0.043741 0.043363\n", + "\t0 13157.348776 13208.359288 0.660872 0.651688\n", + "\t5 13154.537628 13167.132794 0.567941 0.565322\n", + "\t10 13122.466176 13185.668397 0.508848 0.502269\n", + "\t15 13143.615683 13211.047516 0.455821 0.448037\n", + "\t20 13184.013843 13236.736583 0.406711 0.401473\n", + "\t25 13204.092069 13206.804495 0.367136 0.366627\n", + "\t30 13126.833694 13210.054340 0.339156 0.333981\n", + "\t35 13129.174789 13223.266295 0.310268 0.303712\n", + "\t40 13109.493361 13144.587177 0.285613 0.283888\n", + "\t45 13130.769795 13206.257030 0.259172 0.253767\n", + "\t50 13078.921737 13138.179491 0.241394 0.237449\n", + "\t55 13088.297094 13162.707185 0.222381 0.217089\n", + "\t60 13098.649549 13139.213259 0.203764 0.202532\n", + "\t65 13049.630202 13075.253357 0.189580 0.188542\n", + "\t70 12990.355074 12998.806255 0.179681 0.178885\n", + "\t75 12968.256977 13007.626047 0.167990 0.165915\n", + "\t80 12970.293312 12989.924028 0.156160 0.154532\n", + "\t85 12968.271549 12950.778512 0.145543 0.144925\n", + "\t90 12945.709957 12971.021631 0.136494 0.135208\n", + "\t95 12931.106463 12931.545423 0.127930 0.126700\n", + "\t100 12919.726451 12967.279881 0.120351 0.118255\n", + "\t105 12876.617692 12910.093006 0.113582 0.112558\n", + "\t110 12815.972255 12836.599003 0.108565 0.107565\n", + "\t115 12832.576329 12807.968042 0.102167 0.102752\n", + "\t120 12757.169548 12793.413777 0.097927 0.096426\n", + "\t125 12772.943537 12790.716105 0.091839 0.091588\n", + "\t130 12694.520268 12762.147943 0.088882 0.086533\n", + "\t135 12652.718277 12707.570217 0.084953 0.083250\n", + "\t140 12658.308413 12723.808197 0.080415 0.078572\n", + "\t145 12630.562968 12631.971267 0.077078 0.076837\n", + "\t150 12597.378869 12613.669514 0.073622 0.072776\n", + "\t155 12559.021645 12571.136723 0.070842 0.070026\n", + "\t160 12498.714833 12582.788478 0.068965 0.066758\n", + "\t165 12440.298871 12515.372784 0.066375 0.064675\n", + "\t170 12430.528073 12463.372449 0.063553 0.062916\n", + "\t175 12372.900884 12414.922501 0.062067 0.060897\n", + "\t180 12348.207758 12374.558711 0.059442 0.058655\n", + "\t185 12294.218663 12325.073521 0.057943 0.056945\n", + "\t190 12281.713874 12271.369723 0.055475 0.055274\n", + "\t195 12194.852959 12215.455284 0.054501 0.054039\n", + "\t200 12140.252777 12184.530283 0.053392 0.052251\n", + "\t205 12102.119966 12150.063082 0.051561 0.050542\n", + "\t210 12043.807386 12106.155134 0.050461 0.049397\n", + "\t215 11969.967457 12017.087711 0.049585 0.048618\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 17/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20561e+43 erg / s Luminosity absorbed = 8.28570e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.23593e+43 erg / s Luminosity absorbed = 8.01895e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13294.332464 13244.460538 0.639894 0.649708\n", - "\t5 13334.225375 13313.132071 0.545794 0.550698\n", - "\t10 13341.731754 13348.350349 0.489215 0.487904\n", - "\t15 13392.884162 13404.499117 0.433385 0.433249\n", - "\t20 13449.916507 13430.748739 0.384548 0.385039\n", - "\t25 13504.961340 13499.884145 0.345200 0.346484\n", - "\t30 13515.546456 13504.716737 0.311512 0.313246\n", - "\t35 13519.588682 13513.576476 0.284215 0.284651\n", - "\t40 13540.852305 13560.463567 0.259600 0.257079\n", - "\t45 13551.504707 13582.157063 0.237025 0.233521\n", - "\t50 13595.189072 13587.075628 0.214145 0.214888\n", - "\t55 13640.400297 13627.976702 0.194052 0.195310\n", - "\t60 13650.180777 13631.544645 0.178014 0.179027\n", - "\t65 13682.597008 13648.868190 0.163665 0.164849\n", - "\t70 13628.687357 13643.698829 0.153787 0.152570\n", - "\t75 13686.415370 13645.078826 0.140718 0.141862\n", - "\t80 13667.638767 13627.262692 0.131648 0.132550\n", - "\t85 13614.508146 13566.681998 0.123306 0.124692\n", - "\t90 13592.293834 13530.395581 0.115055 0.117295\n", - "\t95 13591.458834 13521.840968 0.106462 0.109117\n", - "\t100 13516.525837 13506.642129 0.102804 0.103689\n", - "\t105 13493.432984 13492.251957 0.097303 0.097032\n", - "\t110 13506.262863 13451.600943 0.089921 0.091607\n", - "\t115 13462.951218 13436.119810 0.084904 0.085909\n", - "\t120 13401.175756 13371.241690 0.081100 0.081890\n", - "\t125 13329.876751 13311.937285 0.077521 0.078795\n", - "\t130 13274.552132 13252.648553 0.074636 0.075308\n", - "\t135 13253.288405 13169.998818 0.070750 0.072800\n", - "\t140 13181.363752 13174.222148 0.068530 0.068996\n", - "\t145 13181.575930 13153.212857 0.064852 0.065518\n", - "\t150 13082.422101 13095.618126 0.062904 0.062932\n", - "\t155 13062.551665 13094.553925 0.060169 0.059735\n", - "\t160 12987.751942 13003.530962 0.058697 0.058432\n", - "\t165 12945.550201 12966.608407 0.056124 0.056056\n", - "\t170 12940.320268 12949.402109 0.053558 0.053719\n", - "\t175 12896.507466 12862.494358 0.051976 0.052531\n", - "\t180 12797.825337 12769.340474 0.050767 0.051329\n", - "\t185 12735.338727 12709.306732 0.049307 0.049652\n", - "\t190 12652.175435 12652.964504 0.048346 0.048401\n", - "\t195 12589.600635 12584.816637 0.047215 0.047114\n", - "\t200 12547.627424 12545.414915 0.045773 0.045822\n", - "\t205 12449.180372 12449.480425 0.045101 0.045031\n", - "\t210 12369.571510 12384.011229 0.044203 0.044008\n", - "\t215 12289.644346 12284.916605 0.043363 0.043442\n", + "\t0 13208.359288 13180.535471 0.651688 0.658012\n", + "\t5 13167.132794 13197.522520 0.565322 0.562610\n", + "\t10 13185.668397 13174.694866 0.502269 0.505905\n", + "\t15 13211.047516 13218.240350 0.448037 0.447772\n", + "\t20 13236.736583 13241.225892 0.401473 0.403604\n", + "\t25 13206.804495 13281.145141 0.366627 0.360381\n", + "\t30 13210.054340 13267.313536 0.333981 0.328384\n", + "\t35 13223.266295 13286.738073 0.303712 0.297458\n", + "\t40 13144.587177 13181.026751 0.283888 0.279818\n", + "\t45 13206.257030 13250.028942 0.253767 0.251366\n", + "\t50 13138.179491 13221.355944 0.237449 0.232221\n", + "\t55 13162.707185 13184.596993 0.217089 0.216556\n", + "\t60 13139.213259 13167.869456 0.202532 0.200682\n", + "\t65 13075.253357 13157.266030 0.188542 0.184969\n", + "\t70 12998.806255 13067.082659 0.178885 0.176158\n", + "\t75 13007.626047 13063.765451 0.165915 0.163820\n", + "\t80 12989.924028 13107.403255 0.154532 0.150006\n", + "\t85 12950.778512 13019.626254 0.144925 0.142593\n", + "\t90 12971.021631 13075.761908 0.135208 0.131608\n", + "\t95 12931.545423 12974.276546 0.126700 0.125865\n", + "\t100 12967.279881 12999.965074 0.118255 0.117449\n", + "\t105 12910.093006 12960.919781 0.112558 0.111632\n", + "\t110 12836.599003 12862.321828 0.107565 0.106997\n", + "\t115 12807.968042 12888.724834 0.102752 0.100015\n", + "\t120 12793.413777 12843.322883 0.096426 0.094920\n", + "\t125 12790.716105 12840.666968 0.091588 0.089666\n", + "\t130 12762.147943 12747.676705 0.086533 0.087161\n", + "\t135 12707.570217 12724.372823 0.083250 0.083115\n", + "\t140 12723.808197 12748.930414 0.078572 0.078337\n", + "\t145 12631.971267 12717.078441 0.076837 0.074678\n", + "\t150 12613.669514 12663.247909 0.072776 0.071613\n", + "\t155 12571.136723 12639.626393 0.070026 0.069149\n", + "\t160 12582.788478 12605.013851 0.066758 0.066224\n", + "\t165 12515.372784 12529.037411 0.064675 0.064437\n", + "\t170 12463.372449 12512.441055 0.062916 0.061855\n", + "\t175 12414.922501 12504.982434 0.060897 0.059360\n", + "\t180 12374.558711 12421.316875 0.058655 0.057855\n", + "\t185 12325.073521 12407.198976 0.056945 0.055458\n", + "\t190 12271.369723 12340.725468 0.055274 0.054148\n", + "\t195 12215.455284 12284.031240 0.054039 0.052758\n", + "\t200 12184.530283 12240.133374 0.052251 0.051248\n", + "\t205 12150.063082 12197.305230 0.050542 0.049849\n", + "\t210 12106.155134 12155.057432 0.049397 0.048580\n", + "\t215 12017.087711 12048.113577 0.048618 0.048016\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n" ] @@ -1172,158 +1158,158 @@ "text": [ "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 18/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21325e+43 erg / s Luminosity absorbed = 8.21131e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.23486e+43 erg / s Luminosity absorbed = 8.02956e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13244.460538 13215.252735 0.649708 0.654200\n", - "\t5 13313.132071 13331.428875 0.550698 0.548599\n", - "\t10 13348.350349 13337.370576 0.487904 0.489688\n", - "\t15 13404.499117 13409.016011 0.433249 0.430614\n", - "\t20 13430.748739 13410.672754 0.385039 0.388442\n", - "\t25 13499.884145 13501.090419 0.346484 0.345055\n", - "\t30 13504.716737 13505.531068 0.313246 0.314231\n", - "\t35 13513.576476 13530.755819 0.284651 0.284280\n", - "\t40 13560.463567 13609.596856 0.257079 0.253643\n", - "\t45 13582.157063 13618.753022 0.233521 0.232414\n", - "\t50 13587.075628 13597.159113 0.214888 0.214130\n", - "\t55 13627.976702 13610.530973 0.195310 0.197545\n", - "\t60 13631.544645 13623.810035 0.179027 0.180485\n", - "\t65 13648.868190 13661.772054 0.164849 0.165192\n", - "\t70 13643.698829 13641.503930 0.152570 0.153796\n", - "\t75 13645.078826 13645.600774 0.141862 0.142685\n", - "\t80 13627.262692 13622.954322 0.132550 0.132334\n", - "\t85 13566.681998 13639.296322 0.124692 0.122790\n", - "\t90 13530.395581 13547.268529 0.117295 0.116846\n", - "\t95 13521.840968 13569.531356 0.109117 0.108375\n", - "\t100 13506.642129 13515.502271 0.103689 0.103755\n", - "\t105 13492.251957 13508.172150 0.097032 0.096633\n", - "\t110 13451.600943 13416.524575 0.091607 0.092537\n", - "\t115 13436.119810 13426.995476 0.085909 0.086135\n", - "\t120 13371.241690 13365.275241 0.081890 0.082669\n", - "\t125 13311.937285 13358.631205 0.078795 0.077631\n", - "\t130 13252.648553 13268.178553 0.075308 0.075116\n", - "\t135 13169.998818 13223.649500 0.072800 0.071572\n", - "\t140 13174.222148 13220.602955 0.068996 0.068243\n", - "\t145 13153.212857 13164.065526 0.065518 0.065354\n", - "\t150 13095.618126 13095.126934 0.062932 0.062998\n", - "\t155 13094.553925 13063.058963 0.059735 0.060406\n", - "\t160 13003.530962 13006.990221 0.058432 0.058529\n", - "\t165 12966.608407 12986.943190 0.056056 0.056053\n", - "\t170 12949.402109 12932.955739 0.053719 0.054015\n", - "\t175 12862.494358 12870.860913 0.052531 0.052642\n", - "\t180 12769.340474 12790.514749 0.051329 0.051470\n", - "\t185 12709.306732 12728.490336 0.049652 0.049786\n", - "\t190 12652.964504 12670.148291 0.048401 0.048367\n", - "\t195 12584.816637 12570.559127 0.047114 0.047467\n", - "\t200 12545.414915 12551.141851 0.045822 0.045916\n", - "\t205 12449.480425 12451.950510 0.045031 0.045138\n", - "\t210 12384.011229 12423.828932 0.044008 0.043706\n", - "\t215 12284.916605 12275.821494 0.043442 0.043662\n", + "\t0 13180.535471 13166.826599 0.658012 0.661773\n", + "\t5 13197.522520 13161.225439 0.562610 0.570444\n", + "\t10 13174.694866 13164.033321 0.505905 0.508207\n", + "\t15 13218.240350 13201.849346 0.447772 0.450656\n", + "\t20 13241.225892 13207.232370 0.403604 0.408133\n", + "\t25 13281.145141 13265.773013 0.360381 0.360941\n", + "\t30 13267.313536 13256.622272 0.328384 0.330341\n", + "\t35 13286.738073 13303.315390 0.297458 0.296541\n", + "\t40 13181.026751 13239.259991 0.279818 0.276023\n", + "\t45 13250.028942 13284.146284 0.251366 0.251606\n", + "\t50 13221.355944 13281.863495 0.232221 0.229871\n", + "\t55 13184.596993 13291.777175 0.216556 0.210540\n", + "\t60 13167.869456 13273.989481 0.200682 0.195987\n", + "\t65 13157.266030 13234.724167 0.184969 0.181474\n", + "\t70 13067.082659 13073.022860 0.176158 0.176104\n", + "\t75 13063.765451 13104.206567 0.163820 0.161397\n", + "\t80 13107.403255 13144.009619 0.150006 0.148310\n", + "\t85 13019.626254 13095.391976 0.142593 0.139576\n", + "\t90 13075.761908 13127.347738 0.131608 0.129448\n", + "\t95 12974.276546 13047.484719 0.125865 0.123275\n", + "\t100 12999.965074 13054.715390 0.117449 0.115835\n", + "\t105 12960.919781 13030.075993 0.111632 0.109099\n", + "\t110 12862.321828 12933.735701 0.106997 0.104811\n", + "\t115 12888.724834 12932.599283 0.100015 0.099248\n", + "\t120 12843.322883 12887.477861 0.094920 0.094004\n", + "\t125 12840.666968 12856.250561 0.089666 0.089628\n", + "\t130 12747.676705 12868.962924 0.087161 0.083908\n", + "\t135 12724.372823 12788.877268 0.083115 0.081364\n", + "\t140 12748.930414 12795.467458 0.078337 0.077004\n", + "\t145 12717.078441 12763.950779 0.074678 0.073739\n", + "\t150 12663.247909 12718.648984 0.071613 0.070597\n", + "\t155 12639.626393 12715.537044 0.069149 0.067710\n", + "\t160 12605.013851 12650.932274 0.066224 0.065329\n", + "\t165 12529.037411 12607.924877 0.064437 0.062762\n", + "\t170 12512.441055 12608.704017 0.061855 0.059987\n", + "\t175 12504.982434 12586.366176 0.059360 0.057683\n", + "\t180 12421.316875 12528.864095 0.057855 0.055953\n", + "\t185 12407.198976 12477.716927 0.055458 0.054166\n", + "\t190 12340.725468 12414.012399 0.054148 0.052969\n", + "\t195 12284.031240 12346.489093 0.052758 0.051603\n", + "\t200 12240.133374 12285.180423 0.051248 0.050515\n", + "\t205 12197.305230 12227.179556 0.049849 0.049302\n", + "\t210 12155.057432 12166.263653 0.048580 0.048302\n", + "\t215 12048.113577 12071.857550 0.048016 0.047522\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 19/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20640e+43 erg / s Luminosity absorbed = 8.27703e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22794e+43 erg / s Luminosity absorbed = 8.08940e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13215.252735 13275.593833 0.654200 0.641575\n", - "\t5 13331.428875 13320.464125 0.548599 0.550550\n", - "\t10 13337.370576 13370.286171 0.489688 0.486018\n", - "\t15 13409.016011 13423.974251 0.430614 0.431285\n", - "\t20 13410.672754 13405.029898 0.388442 0.388908\n", - "\t25 13501.090419 13480.899554 0.345055 0.347041\n", - "\t30 13505.531068 13493.738929 0.314231 0.313299\n", - "\t35 13530.755819 13526.947308 0.284280 0.285034\n", - "\t40 13609.596856 13573.130852 0.253643 0.256411\n", - "\t45 13618.753022 13564.868422 0.232414 0.235894\n", - "\t50 13597.159113 13596.162820 0.214130 0.215532\n", - "\t55 13610.530973 13606.961834 0.197545 0.197586\n", - "\t60 13623.810035 13613.799866 0.180485 0.180924\n", - "\t65 13661.772054 13670.974200 0.165192 0.165513\n", - "\t70 13641.503930 13609.754866 0.153796 0.155721\n", - "\t75 13645.600774 13620.099801 0.142685 0.142833\n", - "\t80 13622.954322 13622.149138 0.132334 0.131837\n", - "\t85 13639.296322 13622.629367 0.122790 0.123216\n", - "\t90 13547.268529 13550.206611 0.116846 0.116628\n", - "\t95 13569.531356 13576.442824 0.108375 0.108370\n", - "\t100 13515.502271 13550.661291 0.103755 0.101730\n", - "\t105 13508.172150 13553.415275 0.096633 0.095153\n", - "\t110 13416.524575 13440.968288 0.092537 0.092355\n", - "\t115 13426.995476 13449.937711 0.086135 0.085928\n", - "\t120 13365.275241 13406.827159 0.082669 0.081735\n", - "\t125 13358.631205 13387.097490 0.077631 0.076855\n", - "\t130 13268.178553 13293.561247 0.075116 0.074028\n", - "\t135 13223.649500 13246.846989 0.071572 0.071086\n", - "\t140 13220.602955 13249.313571 0.068243 0.067556\n", - "\t145 13164.065526 13155.060691 0.065354 0.065304\n", - "\t150 13095.126934 13129.179399 0.062998 0.062308\n", - "\t155 13063.058963 13105.788762 0.060406 0.059735\n", - "\t160 13006.990221 13052.993533 0.058529 0.057324\n", - "\t165 12986.943190 13049.537481 0.056053 0.054732\n", - "\t170 12932.955739 12964.141616 0.054015 0.053309\n", - "\t175 12870.860913 12873.365866 0.052642 0.052182\n", - "\t180 12790.514749 12837.826363 0.051470 0.050638\n", - "\t185 12728.490336 12704.945462 0.049786 0.050011\n", - "\t190 12670.148291 12654.429611 0.048367 0.048416\n", - "\t195 12570.559127 12591.048933 0.047467 0.047031\n", - "\t200 12551.141851 12538.868881 0.045916 0.045828\n", - "\t205 12451.950510 12478.435159 0.045138 0.044770\n", - "\t210 12423.828932 12404.402526 0.043706 0.043784\n", - "\t215 12275.821494 12299.938075 0.043662 0.043250\n", + "\t0 13166.826599 13195.519766 0.661773 0.655923\n", + "\t5 13161.225439 13210.741764 0.570444 0.561298\n", + "\t10 13164.033321 13235.889833 0.508207 0.496477\n", + "\t15 13201.849346 13257.976739 0.450656 0.442108\n", + "\t20 13207.232370 13244.393460 0.408133 0.404152\n", + "\t25 13265.773013 13296.492302 0.360941 0.360900\n", + "\t30 13256.622272 13297.435443 0.330341 0.328098\n", + "\t35 13303.315390 13345.323924 0.296541 0.294771\n", + "\t40 13239.259991 13291.955653 0.276023 0.273309\n", + "\t45 13284.146284 13330.280434 0.251606 0.248861\n", + "\t50 13281.863495 13308.757907 0.229871 0.230862\n", + "\t55 13291.777175 13304.285435 0.210540 0.211845\n", + "\t60 13273.989481 13296.137731 0.195987 0.196026\n", + "\t65 13234.724167 13270.557153 0.181474 0.180536\n", + "\t70 13073.022860 13177.400597 0.176104 0.171785\n", + "\t75 13104.206567 13183.943549 0.161397 0.158635\n", + "\t80 13144.009619 13178.261898 0.148310 0.148387\n", + "\t85 13095.391976 13152.438819 0.139576 0.138476\n", + "\t90 13127.347738 13215.251923 0.129448 0.126976\n", + "\t95 13047.484719 13142.709904 0.123275 0.121220\n", + "\t100 13054.715390 13117.686046 0.115835 0.114414\n", + "\t105 13030.075993 13084.549148 0.109099 0.107408\n", + "\t110 12933.735701 13016.108830 0.104811 0.103248\n", + "\t115 12932.599283 13034.016323 0.099248 0.095773\n", + "\t120 12887.477861 12996.130306 0.094004 0.091197\n", + "\t125 12856.250561 12941.186178 0.089628 0.087218\n", + "\t130 12868.962924 12925.433879 0.083908 0.082603\n", + "\t135 12788.877268 12880.728193 0.081364 0.079023\n", + "\t140 12795.467458 12847.699135 0.077004 0.075342\n", + "\t145 12763.950779 12794.111032 0.073739 0.072687\n", + "\t150 12718.648984 12736.936646 0.070597 0.069979\n", + "\t155 12715.537044 12710.772364 0.067710 0.067228\n", + "\t160 12650.932274 12649.594065 0.065329 0.065043\n", + "\t165 12607.924877 12622.622036 0.062762 0.062659\n", + "\t170 12608.704017 12611.817207 0.059987 0.059724\n", + "\t175 12586.366176 12585.348534 0.057683 0.057595\n", + "\t180 12528.864095 12550.454375 0.055953 0.055510\n", + "\t185 12477.716927 12478.754739 0.054166 0.053976\n", + "\t190 12414.012399 12444.539262 0.052969 0.052245\n", + "\t195 12346.489093 12373.740602 0.051603 0.050962\n", + "\t200 12285.180423 12313.701285 0.050515 0.049849\n", + "\t205 12227.179556 12241.245001 0.049302 0.048828\n", + "\t210 12166.263653 12183.394427 0.048302 0.047714\n", + "\t215 12071.857550 12099.018816 0.047522 0.046976\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 20/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20984e+43 erg / s Luminosity absorbed = 8.24688e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22565e+43 erg / s Luminosity absorbed = 8.10622e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13275.593833 13272.361297 0.641575 0.643131\n", - "\t5 13320.464125 13304.764532 0.550550 0.550883\n", - "\t10 13370.286171 13353.155833 0.486018 0.485906\n", - "\t15 13423.974251 13390.303881 0.431285 0.431612\n", - "\t20 13405.029898 13414.224321 0.388908 0.389333\n", - "\t25 13480.899554 13455.091925 0.347041 0.351015\n", - "\t30 13493.738929 13513.943048 0.313299 0.313074\n", - "\t35 13526.947308 13521.764429 0.285034 0.284974\n", - "\t40 13573.130852 13574.404278 0.256411 0.258177\n", - "\t45 13564.868422 13603.410987 0.235894 0.232270\n", - "\t50 13596.162820 13612.094041 0.215532 0.213702\n", - "\t55 13606.961834 13617.408271 0.197586 0.197195\n", - "\t60 13613.799866 13610.013488 0.180924 0.180863\n", - "\t65 13670.974200 13673.552054 0.165513 0.164200\n", - "\t70 13609.754866 13631.831420 0.155721 0.153669\n", - "\t75 13620.099801 13628.628207 0.142833 0.142200\n", - "\t80 13622.149138 13616.815750 0.131837 0.132482\n", - "\t85 13622.629367 13599.203244 0.123216 0.124053\n", - "\t90 13550.206611 13557.210091 0.116628 0.116238\n", - "\t95 13576.442824 13594.203419 0.108370 0.107687\n", - "\t100 13550.661291 13555.614817 0.101730 0.101546\n", - "\t105 13553.415275 13536.865702 0.095153 0.095418\n", - "\t110 13440.968288 13441.150339 0.092355 0.092386\n", - "\t115 13449.937711 13445.885394 0.085928 0.086177\n", - "\t120 13406.827159 13382.034029 0.081735 0.082523\n", - "\t125 13387.097490 13356.909386 0.076855 0.077689\n", - "\t130 13293.561247 13315.234449 0.074028 0.074039\n", - "\t135 13246.846989 13228.514457 0.071086 0.071362\n", - "\t140 13249.313571 13218.647649 0.067556 0.067926\n", - "\t145 13155.060691 13184.008520 0.065304 0.064832\n", - "\t150 13129.179399 13121.121278 0.062308 0.062483\n", - "\t155 13105.788762 13076.788591 0.059735 0.060584\n", - "\t160 13052.993533 13054.043317 0.057324 0.057635\n", - "\t165 13049.537481 13019.828137 0.054732 0.055219\n", - "\t170 12964.141616 12904.410073 0.053309 0.054136\n", - "\t175 12873.365866 12845.416495 0.052182 0.052463\n", - "\t180 12837.826363 12800.187003 0.050638 0.050817\n", - "\t185 12704.945462 12730.751566 0.050011 0.049486\n", - "\t190 12654.429611 12717.490013 0.048416 0.047431\n", - "\t195 12591.048933 12616.635162 0.047031 0.046664\n", - "\t200 12538.868881 12576.252299 0.045828 0.045482\n", - "\t205 12478.435159 12495.955151 0.044770 0.044613\n", - "\t210 12404.402526 12378.250834 0.043784 0.044170\n", - "\t215 12299.938075 12289.662367 0.043250 0.043437\n", + "\t0 13195.519766 13218.392110 0.655923 0.649349\n", + "\t5 13210.741764 13203.590883 0.561298 0.562997\n", + "\t10 13235.889833 13261.694418 0.496477 0.494806\n", + "\t15 13257.976739 13298.064876 0.442108 0.438235\n", + "\t20 13244.393460 13250.974631 0.404152 0.404452\n", + "\t25 13296.492302 13305.202082 0.360900 0.360661\n", + "\t30 13297.435443 13329.187270 0.328098 0.326259\n", + "\t35 13345.323924 13351.564942 0.294771 0.295542\n", + "\t40 13291.955653 13350.505065 0.273309 0.269488\n", + "\t45 13330.280434 13381.278649 0.248861 0.244352\n", + "\t50 13308.757907 13350.401391 0.230862 0.227866\n", + "\t55 13304.285435 13322.777854 0.211845 0.212514\n", + "\t60 13296.137731 13338.479356 0.196026 0.194321\n", + "\t65 13270.557153 13301.899148 0.180536 0.180111\n", + "\t70 13177.400597 13281.385654 0.171785 0.167801\n", + "\t75 13183.943549 13294.307652 0.158635 0.154838\n", + "\t80 13178.261898 13267.966077 0.148387 0.145283\n", + "\t85 13152.438819 13231.259161 0.138476 0.135669\n", + "\t90 13215.251923 13243.603339 0.126976 0.126946\n", + "\t95 13142.709904 13245.685361 0.121220 0.117504\n", + "\t100 13117.686046 13177.508230 0.114414 0.112469\n", + "\t105 13084.549148 13166.889212 0.107408 0.105195\n", + "\t110 13016.108830 13166.758929 0.103248 0.099258\n", + "\t115 13034.016323 13147.285482 0.095773 0.092737\n", + "\t120 12996.130306 13132.027948 0.091197 0.087745\n", + "\t125 12941.186178 13024.016775 0.087218 0.085256\n", + "\t130 12925.433879 13018.325987 0.082603 0.080448\n", + "\t135 12880.728193 13030.706325 0.079023 0.075968\n", + "\t140 12847.699135 12937.788695 0.075342 0.073766\n", + "\t145 12794.111032 12911.995175 0.072687 0.069983\n", + "\t150 12736.936646 12823.855253 0.069979 0.068040\n", + "\t155 12710.772364 12801.548304 0.067228 0.065332\n", + "\t160 12649.594065 12716.134743 0.065043 0.063471\n", + "\t165 12622.622036 12684.472936 0.062659 0.061499\n", + "\t170 12611.817207 12681.171176 0.059724 0.058254\n", + "\t175 12585.348534 12622.297246 0.057595 0.056786\n", + "\t180 12550.454375 12571.964450 0.055510 0.054959\n", + "\t185 12478.754739 12526.205063 0.053976 0.053273\n", + "\t190 12444.539262 12472.393760 0.052245 0.051593\n", + "\t195 12373.740602 12392.121290 0.050962 0.050498\n", + "\t200 12313.701285 12324.192334 0.049849 0.049509\n", + "\t205 12241.245001 12255.227451 0.048828 0.048525\n", + "\t210 12183.394427 12234.356154 0.047714 0.046820\n", + "\t215 12099.018816 12116.932757 0.046976 0.046558\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n" ] @@ -1334,158 +1320,158 @@ "text": [ "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 21/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21090e+43 erg / s Luminosity absorbed = 8.23618e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22962e+43 erg / s Luminosity absorbed = 8.07205e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13272.361297 13238.110707 0.643131 0.650874\n", - "\t5 13304.764532 13287.753370 0.550883 0.555871\n", - "\t10 13353.155833 13374.524718 0.485906 0.483023\n", - "\t15 13390.303881 13434.237643 0.431612 0.425922\n", - "\t20 13414.224321 13473.045124 0.389333 0.380603\n", - "\t25 13455.091925 13494.400242 0.351015 0.346455\n", - "\t30 13513.943048 13534.656312 0.313074 0.311422\n", - "\t35 13521.764429 13561.340870 0.284974 0.283608\n", - "\t40 13574.404278 13602.879384 0.258177 0.256415\n", - "\t45 13603.410987 13634.222625 0.232270 0.231800\n", - "\t50 13612.094041 13652.488522 0.213702 0.211430\n", - "\t55 13617.408271 13599.228313 0.197195 0.198330\n", - "\t60 13610.013488 13628.648194 0.180863 0.180805\n", - "\t65 13673.552054 13670.725712 0.164200 0.164859\n", - "\t70 13631.831420 13654.266746 0.153669 0.152613\n", - "\t75 13628.628207 13629.745042 0.142200 0.142187\n", - "\t80 13616.815750 13665.134288 0.132482 0.130750\n", - "\t85 13599.203244 13630.062407 0.124053 0.123503\n", - "\t90 13557.210091 13549.894759 0.116238 0.116418\n", - "\t95 13594.203419 13581.793685 0.107687 0.107581\n", - "\t100 13555.614817 13535.666076 0.101546 0.102364\n", - "\t105 13536.865702 13525.411134 0.095418 0.095427\n", - "\t110 13441.150339 13411.374333 0.092386 0.092997\n", - "\t115 13445.885394 13436.288355 0.086177 0.086271\n", - "\t120 13382.034029 13390.614836 0.082523 0.081941\n", - "\t125 13356.909386 13362.603164 0.077689 0.077358\n", - "\t130 13315.234449 13301.473749 0.074039 0.074348\n", - "\t135 13228.514457 13241.489428 0.071362 0.071113\n", - "\t140 13218.647649 13233.411060 0.067926 0.067449\n", - "\t145 13184.008520 13191.107749 0.064832 0.064329\n", - "\t150 13121.121278 13049.165675 0.062483 0.063520\n", - "\t155 13076.788591 13051.818930 0.060584 0.060553\n", - "\t160 13054.043317 12981.109020 0.057635 0.058468\n", - "\t165 13019.828137 12939.117333 0.055219 0.056205\n", - "\t170 12904.410073 12872.061882 0.054136 0.054645\n", - "\t175 12845.416495 12826.919565 0.052463 0.052669\n", - "\t180 12800.187003 12774.051094 0.050817 0.051284\n", - "\t185 12730.751566 12712.958930 0.049486 0.049636\n", - "\t190 12717.490013 12723.636192 0.047431 0.047333\n", - "\t195 12616.635162 12607.550913 0.046664 0.046856\n", - "\t200 12576.252299 12557.223085 0.045482 0.045825\n", - "\t205 12495.955151 12496.316576 0.044613 0.044607\n", - "\t210 12378.250834 12359.901379 0.044170 0.044432\n", - "\t215 12289.662367 12291.488426 0.043437 0.043549\n", + "\t0 13218.392110 13193.465240 0.649349 0.653651\n", + "\t5 13203.590883 13227.367950 0.562997 0.559593\n", + "\t10 13261.694418 13274.159820 0.494806 0.492442\n", + "\t15 13298.064876 13293.745040 0.438235 0.439388\n", + "\t20 13250.974631 13288.270014 0.404452 0.399678\n", + "\t25 13305.202082 13292.192089 0.360661 0.361950\n", + "\t30 13329.187270 13317.502835 0.326259 0.325734\n", + "\t35 13351.564942 13401.993759 0.295542 0.290505\n", + "\t40 13350.505065 13359.932654 0.269488 0.270203\n", + "\t45 13381.278649 13407.014769 0.244352 0.243462\n", + "\t50 13350.401391 13409.046073 0.227866 0.224079\n", + "\t55 13322.777854 13340.715423 0.212514 0.210605\n", + "\t60 13338.479356 13381.415152 0.194321 0.191791\n", + "\t65 13301.899148 13377.188342 0.180111 0.176521\n", + "\t70 13281.385654 13334.189209 0.167801 0.165216\n", + "\t75 13294.307652 13348.055264 0.154838 0.152572\n", + "\t80 13267.966077 13322.318785 0.145283 0.142626\n", + "\t85 13231.259161 13272.891041 0.135669 0.133746\n", + "\t90 13243.603339 13280.211749 0.126946 0.125982\n", + "\t95 13245.685361 13267.189239 0.117504 0.116621\n", + "\t100 13177.508230 13215.630844 0.112469 0.111315\n", + "\t105 13166.889212 13175.010755 0.105195 0.105045\n", + "\t110 13166.758929 13200.228786 0.099258 0.097975\n", + "\t115 13147.285482 13162.211276 0.092737 0.092293\n", + "\t120 13132.027948 13106.849919 0.087745 0.088225\n", + "\t125 13024.016775 13055.657025 0.085256 0.084607\n", + "\t130 13018.325987 13012.306316 0.080448 0.080817\n", + "\t135 13030.706325 12997.425810 0.075968 0.076277\n", + "\t140 12937.788695 12945.009959 0.073766 0.073460\n", + "\t145 12911.995175 12918.379242 0.069983 0.070102\n", + "\t150 12823.855253 12811.234197 0.068040 0.068201\n", + "\t155 12801.548304 12773.399696 0.065332 0.066079\n", + "\t160 12716.134743 12751.645015 0.063471 0.063025\n", + "\t165 12684.472936 12724.598687 0.061499 0.060578\n", + "\t170 12681.171176 12676.535769 0.058254 0.058497\n", + "\t175 12622.297246 12617.758328 0.056786 0.056922\n", + "\t180 12571.964450 12566.081512 0.054959 0.055095\n", + "\t185 12526.205063 12519.386548 0.053273 0.053572\n", + "\t190 12472.393760 12501.909282 0.051593 0.051469\n", + "\t195 12392.121290 12437.036377 0.050498 0.049955\n", + "\t200 12324.192334 12352.874273 0.049509 0.049206\n", + "\t205 12255.227451 12282.392519 0.048525 0.048163\n", + "\t210 12234.356154 12217.553356 0.046820 0.047145\n", + "\t215 12116.932757 12106.194987 0.046558 0.046731\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 22/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20712e+43 erg / s Luminosity absorbed = 8.27261e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22206e+43 erg / s Luminosity absorbed = 8.13794e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13238.110707 13242.589560 0.650874 0.650661\n", - "\t5 13287.753370 13302.236433 0.555871 0.553883\n", - "\t10 13374.524718 13384.295437 0.483023 0.482708\n", - "\t15 13434.237643 13461.126863 0.425922 0.422022\n", - "\t20 13473.045124 13470.826671 0.380603 0.381236\n", - "\t25 13494.400242 13484.247273 0.346455 0.347424\n", - "\t30 13534.656312 13508.470387 0.311422 0.313096\n", - "\t35 13561.340870 13543.424565 0.283608 0.283193\n", - "\t40 13602.879384 13580.176047 0.256415 0.255980\n", - "\t45 13634.222625 13614.362136 0.231800 0.233483\n", - "\t50 13652.488522 13644.537532 0.211430 0.212147\n", - "\t55 13599.228313 13614.396375 0.198330 0.196233\n", - "\t60 13628.648194 13645.330715 0.180805 0.179325\n", - "\t65 13670.725712 13671.254373 0.164859 0.164136\n", - "\t70 13654.266746 13646.107424 0.152613 0.154460\n", - "\t75 13629.745042 13616.420307 0.142187 0.143180\n", - "\t80 13665.134288 13666.532072 0.130750 0.130676\n", - "\t85 13630.062407 13575.991311 0.123503 0.125264\n", - "\t90 13549.894759 13537.593047 0.116418 0.116523\n", - "\t95 13581.793685 13519.324997 0.107581 0.109037\n", - "\t100 13535.666076 13533.503766 0.102364 0.102218\n", - "\t105 13525.411134 13524.296286 0.095427 0.095472\n", - "\t110 13411.374333 13408.597159 0.092997 0.093029\n", - "\t115 13436.288355 13433.139621 0.086271 0.086510\n", - "\t120 13390.614836 13346.445735 0.081941 0.082582\n", - "\t125 13362.603164 13314.078372 0.077358 0.078528\n", - "\t130 13301.473749 13292.870438 0.074348 0.074822\n", - "\t135 13241.489428 13212.983843 0.071113 0.071947\n", - "\t140 13233.411060 13187.883546 0.067449 0.068256\n", - "\t145 13191.107749 13154.962528 0.064329 0.064997\n", - "\t150 13049.165675 13089.139849 0.063520 0.063208\n", - "\t155 13051.818930 13028.832892 0.060553 0.061212\n", - "\t160 12981.109020 12955.890317 0.058468 0.058877\n", - "\t165 12939.117333 12919.786297 0.056205 0.056736\n", - "\t170 12872.061882 12831.233593 0.054645 0.055147\n", - "\t175 12826.919565 12821.111309 0.052669 0.052650\n", - "\t180 12774.051094 12755.985754 0.051284 0.051381\n", - "\t185 12712.958930 12699.330423 0.049636 0.049963\n", - "\t190 12723.636192 12658.081446 0.047333 0.048248\n", - "\t195 12607.550913 12616.588836 0.046856 0.046843\n", - "\t200 12557.223085 12520.004285 0.045825 0.046220\n", - "\t205 12496.316576 12469.494651 0.044607 0.044840\n", - "\t210 12359.901379 12336.831445 0.044432 0.044645\n", - "\t215 12291.488426 12292.263511 0.043549 0.043399\n", + "\t0 13193.465240 13195.466506 0.653651 0.655681\n", + "\t5 13227.367950 13234.149938 0.559593 0.558807\n", + "\t10 13274.159820 13250.119206 0.492442 0.497110\n", + "\t15 13293.745040 13283.570386 0.439388 0.443546\n", + "\t20 13288.270014 13285.196098 0.399678 0.401518\n", + "\t25 13292.192089 13297.903037 0.361950 0.363788\n", + "\t30 13317.502835 13304.903433 0.325734 0.330382\n", + "\t35 13401.993759 13348.630577 0.290505 0.296154\n", + "\t40 13359.932654 13373.208881 0.270203 0.268559\n", + "\t45 13407.014769 13409.696334 0.243462 0.243838\n", + "\t50 13409.046073 13446.583648 0.224079 0.221260\n", + "\t55 13340.715423 13363.747733 0.210605 0.209475\n", + "\t60 13381.415152 13445.718362 0.191791 0.188191\n", + "\t65 13377.188342 13451.866500 0.176521 0.173362\n", + "\t70 13334.189209 13420.709807 0.165216 0.161404\n", + "\t75 13348.055264 13404.576966 0.152572 0.150490\n", + "\t80 13322.318785 13376.205532 0.142626 0.141152\n", + "\t85 13272.891041 13367.313511 0.133746 0.130660\n", + "\t90 13280.211749 13362.190573 0.125982 0.122816\n", + "\t95 13267.189239 13315.019271 0.116621 0.114927\n", + "\t100 13215.630844 13284.482648 0.111315 0.108049\n", + "\t105 13175.010755 13228.775249 0.105045 0.103409\n", + "\t110 13200.228786 13250.373347 0.097975 0.096366\n", + "\t115 13162.211276 13163.949582 0.092293 0.092277\n", + "\t120 13106.849919 13195.199414 0.088225 0.086233\n", + "\t125 13055.657025 13168.769528 0.084607 0.081787\n", + "\t130 13012.306316 13085.969357 0.080817 0.079046\n", + "\t135 12997.425810 13075.101627 0.076277 0.074932\n", + "\t140 12945.009959 12966.424621 0.073460 0.073250\n", + "\t145 12918.379242 12951.468346 0.070102 0.069209\n", + "\t150 12811.234197 12890.777445 0.068201 0.066757\n", + "\t155 12773.399696 12846.206270 0.066079 0.064555\n", + "\t160 12751.645015 12803.339348 0.063025 0.062149\n", + "\t165 12724.598687 12797.147056 0.060578 0.059464\n", + "\t170 12676.535769 12797.437041 0.058497 0.056845\n", + "\t175 12617.758328 12708.051794 0.056922 0.055482\n", + "\t180 12566.081512 12637.715416 0.055095 0.054127\n", + "\t185 12519.386548 12574.299005 0.053572 0.052499\n", + "\t190 12501.909282 12531.863048 0.051469 0.050803\n", + "\t195 12437.036377 12496.462195 0.049955 0.049082\n", + "\t200 12352.874273 12416.783340 0.049206 0.048305\n", + "\t205 12282.392519 12349.739513 0.048163 0.047137\n", + "\t210 12217.553356 12254.084604 0.047145 0.046408\n", + "\t215 12106.194987 12160.167476 0.046731 0.045780\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 23/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21436e+43 erg / s Luminosity absorbed = 8.20267e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22210e+43 erg / s Luminosity absorbed = 8.13819e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13242.589560 13258.427166 0.650661 0.646781\n", - "\t5 13302.236433 13299.514381 0.553883 0.554208\n", - "\t10 13384.295437 13387.580308 0.482708 0.480070\n", - "\t15 13461.126863 13417.789738 0.422022 0.427611\n", - "\t20 13470.826671 13478.947649 0.381236 0.380802\n", - "\t25 13484.247273 13483.853992 0.347424 0.346575\n", - "\t30 13508.470387 13481.971326 0.313096 0.315613\n", - "\t35 13543.424565 13537.341581 0.283193 0.283614\n", - "\t40 13580.176047 13545.349426 0.255980 0.258512\n", - "\t45 13614.362136 13606.415720 0.233483 0.234589\n", - "\t50 13644.537532 13633.155825 0.212147 0.212564\n", - "\t55 13614.396375 13620.012253 0.196233 0.196128\n", - "\t60 13645.330715 13634.573954 0.179325 0.179370\n", - "\t65 13671.254373 13674.376989 0.164136 0.163591\n", - "\t70 13646.107424 13696.720677 0.154460 0.151282\n", - "\t75 13616.420307 13628.110866 0.143180 0.142235\n", - "\t80 13666.532072 13664.116070 0.130676 0.130906\n", - "\t85 13575.991311 13593.787168 0.125264 0.123801\n", - "\t90 13537.593047 13574.594978 0.116523 0.115843\n", - "\t95 13519.324997 13545.986411 0.109037 0.109125\n", - "\t100 13533.503766 13541.716260 0.102218 0.102313\n", - "\t105 13524.296286 13557.042736 0.095472 0.095252\n", - "\t110 13408.597159 13528.911716 0.093029 0.090217\n", - "\t115 13433.139621 13477.779105 0.086510 0.085821\n", - "\t120 13346.445735 13422.628881 0.082582 0.081440\n", - "\t125 13314.078372 13348.244204 0.078528 0.078169\n", - "\t130 13292.870438 13320.460508 0.074822 0.074200\n", - "\t135 13212.983843 13253.512286 0.071947 0.071233\n", - "\t140 13187.883546 13192.120721 0.068256 0.068204\n", - "\t145 13154.962528 13155.656117 0.064997 0.064981\n", - "\t150 13089.139849 13077.428673 0.063208 0.063336\n", - "\t155 13028.832892 13036.653378 0.061212 0.060716\n", - "\t160 12955.890317 13014.311099 0.058877 0.057776\n", - "\t165 12919.786297 12900.924993 0.056736 0.056904\n", - "\t170 12831.233593 12849.453995 0.055147 0.054912\n", - "\t175 12821.111309 12859.855508 0.052650 0.052202\n", - "\t180 12755.985754 12760.002356 0.051381 0.051311\n", - "\t185 12699.330423 12700.724143 0.049963 0.050006\n", - "\t190 12658.081446 12650.853146 0.048248 0.048460\n", - "\t195 12616.588836 12569.990044 0.046843 0.047719\n", - "\t200 12520.004285 12505.132653 0.046220 0.046542\n", - "\t205 12469.494651 12440.163243 0.044840 0.045558\n", - "\t210 12336.831445 12347.349436 0.044645 0.044723\n", - "\t215 12292.263511 12297.391221 0.043399 0.043441\n", + "\t0 13195.466506 13216.402157 0.655681 0.652541\n", + "\t5 13234.149938 13237.225427 0.558807 0.559506\n", + "\t10 13250.119206 13252.209818 0.497110 0.497424\n", + "\t15 13283.570386 13243.043291 0.443546 0.449203\n", + "\t20 13285.196098 13279.986369 0.401518 0.401513\n", + "\t25 13297.903037 13307.974117 0.363788 0.360489\n", + "\t30 13304.903433 13330.259306 0.330382 0.326376\n", + "\t35 13348.630577 13361.962084 0.296154 0.295078\n", + "\t40 13373.208881 13394.308987 0.268559 0.266887\n", + "\t45 13409.696334 13436.815696 0.243838 0.242688\n", + "\t50 13446.583648 13461.659991 0.221260 0.221027\n", + "\t55 13363.747733 13443.756797 0.209475 0.205664\n", + "\t60 13445.718362 13439.851226 0.188191 0.188685\n", + "\t65 13451.866500 13447.748126 0.173362 0.174022\n", + "\t70 13420.709807 13423.536597 0.161404 0.161184\n", + "\t75 13404.576966 13423.527026 0.150490 0.149976\n", + "\t80 13376.205532 13431.673399 0.141152 0.138622\n", + "\t85 13367.313511 13367.261282 0.130660 0.130878\n", + "\t90 13362.190573 13392.504047 0.122816 0.121643\n", + "\t95 13315.019271 13379.838946 0.114927 0.113123\n", + "\t100 13284.482648 13305.320906 0.108049 0.107698\n", + "\t105 13228.775249 13299.509838 0.103409 0.101494\n", + "\t110 13250.373347 13303.155862 0.096366 0.095391\n", + "\t115 13163.949582 13239.401607 0.092277 0.090675\n", + "\t120 13195.199414 13225.853168 0.086233 0.085758\n", + "\t125 13168.769528 13182.779625 0.081787 0.082242\n", + "\t130 13085.969357 13158.856980 0.079046 0.077699\n", + "\t135 13075.101627 13080.616663 0.074932 0.075268\n", + "\t140 12966.424621 13027.168954 0.073250 0.072122\n", + "\t145 12951.468346 13000.819102 0.069209 0.068449\n", + "\t150 12890.777445 12985.503070 0.066757 0.065123\n", + "\t155 12846.206270 12930.672063 0.064555 0.062974\n", + "\t160 12803.339348 12854.302745 0.062149 0.061227\n", + "\t165 12797.147056 12825.373038 0.059464 0.058748\n", + "\t170 12797.437041 12819.415527 0.056845 0.056058\n", + "\t175 12708.051794 12708.497312 0.055482 0.055067\n", + "\t180 12637.715416 12639.246258 0.054127 0.054019\n", + "\t185 12574.299005 12631.362226 0.052499 0.051403\n", + "\t190 12531.863048 12559.773216 0.050803 0.050265\n", + "\t195 12496.462195 12612.585828 0.049082 0.047577\n", + "\t200 12416.783340 12489.714343 0.048305 0.047266\n", + "\t205 12349.739513 12414.869027 0.047137 0.046149\n", + "\t210 12254.084604 12333.119968 0.046408 0.045325\n", + "\t215 12160.167476 12218.394834 0.045780 0.044907\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n" ] @@ -1496,158 +1482,158 @@ "text": [ "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 24/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21096e+43 erg / s Luminosity absorbed = 8.23273e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21424e+43 erg / s Luminosity absorbed = 8.21243e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13258.427166 13278.010763 0.646781 0.641648\n", - "\t5 13299.514381 13348.641733 0.554208 0.549116\n", - "\t10 13387.580308 13389.995159 0.480070 0.480928\n", - "\t15 13417.789738 13420.336267 0.427611 0.429481\n", - "\t20 13478.947649 13465.269674 0.380802 0.385639\n", - "\t25 13483.853992 13432.804473 0.346575 0.352148\n", - "\t30 13481.971326 13478.152260 0.315613 0.315732\n", - "\t35 13537.341581 13546.768152 0.283614 0.281819\n", - "\t40 13545.349426 13627.278155 0.258512 0.251783\n", - "\t45 13606.415720 13604.882965 0.234589 0.232319\n", - "\t50 13633.155825 13625.845890 0.212564 0.211901\n", - "\t55 13620.012253 13602.102375 0.196128 0.197460\n", - "\t60 13634.573954 13666.469517 0.179370 0.178943\n", - "\t65 13674.376989 13631.745802 0.163591 0.166107\n", - "\t70 13696.720677 13632.637553 0.151282 0.154189\n", - "\t75 13628.110866 13585.427048 0.142235 0.143931\n", - "\t80 13664.116070 13609.745816 0.130906 0.133334\n", - "\t85 13593.787168 13624.246108 0.123801 0.122952\n", - "\t90 13574.594978 13590.553890 0.115843 0.115902\n", - "\t95 13545.986411 13594.756383 0.109125 0.107573\n", - "\t100 13541.716260 13549.898466 0.102313 0.102064\n", - "\t105 13557.042736 13581.169680 0.095252 0.094850\n", - "\t110 13528.911716 13545.934037 0.090217 0.090058\n", - "\t115 13477.779105 13474.183557 0.085821 0.085789\n", - "\t120 13422.628881 13394.318438 0.081440 0.081967\n", - "\t125 13348.244204 13350.571807 0.078169 0.078213\n", - "\t130 13320.460508 13348.176678 0.074200 0.073127\n", - "\t135 13253.512286 13248.295587 0.071233 0.071241\n", - "\t140 13192.120721 13223.932093 0.068204 0.067701\n", - "\t145 13155.656117 13196.467541 0.064981 0.064614\n", - "\t150 13077.428673 13086.152871 0.063336 0.063554\n", - "\t155 13036.653378 13042.460884 0.060716 0.060771\n", - "\t160 13014.311099 13046.647251 0.057776 0.057615\n", - "\t165 12900.924993 12940.265617 0.056904 0.056227\n", - "\t170 12849.453995 12889.311505 0.054912 0.054381\n", - "\t175 12859.855508 12849.617688 0.052202 0.052379\n", - "\t180 12760.002356 12778.700141 0.051311 0.050977\n", - "\t185 12700.724143 12705.841566 0.050006 0.050094\n", - "\t190 12650.853146 12649.616025 0.048460 0.048563\n", - "\t195 12569.990044 12616.346040 0.047719 0.047103\n", - "\t200 12505.132653 12531.869670 0.046542 0.046301\n", - "\t205 12440.163243 12465.741589 0.045558 0.045231\n", - "\t210 12347.349436 12411.682924 0.044723 0.043975\n", - "\t215 12297.391221 12321.315541 0.043441 0.043216\n", + "\t0 13216.402157 13214.412341 0.652541 0.654355\n", + "\t5 13237.225427 13266.546018 0.559506 0.557950\n", + "\t10 13252.209818 13266.925438 0.497424 0.495958\n", + "\t15 13243.043291 13321.265822 0.449203 0.439403\n", + "\t20 13279.986369 13300.999426 0.401513 0.399679\n", + "\t25 13307.974117 13340.522690 0.360489 0.359001\n", + "\t30 13330.259306 13360.096557 0.326376 0.324063\n", + "\t35 13361.962084 13425.244338 0.295078 0.290336\n", + "\t40 13394.308987 13406.012752 0.266887 0.267246\n", + "\t45 13436.815696 13470.738156 0.242688 0.239683\n", + "\t50 13461.659991 13514.566779 0.221027 0.216757\n", + "\t55 13443.756797 13446.809708 0.205664 0.204399\n", + "\t60 13439.851226 13495.051511 0.188685 0.185571\n", + "\t65 13447.748126 13478.049586 0.174022 0.171728\n", + "\t70 13423.536597 13478.243438 0.161184 0.158297\n", + "\t75 13423.527026 13447.494233 0.149976 0.148463\n", + "\t80 13431.673399 13436.926051 0.138622 0.138342\n", + "\t85 13367.261282 13405.984926 0.130878 0.129554\n", + "\t90 13392.504047 13411.477844 0.121643 0.120318\n", + "\t95 13379.838946 13397.359911 0.113123 0.112874\n", + "\t100 13305.320906 13360.714798 0.107698 0.106382\n", + "\t105 13299.509838 13331.840059 0.101494 0.100378\n", + "\t110 13303.155862 13283.695143 0.095391 0.095469\n", + "\t115 13239.401607 13269.496703 0.090675 0.089693\n", + "\t120 13225.853168 13216.630334 0.085758 0.085353\n", + "\t125 13182.779625 13188.100904 0.082242 0.081391\n", + "\t130 13158.856980 13171.671286 0.077699 0.077299\n", + "\t135 13080.616663 13114.333697 0.075268 0.074280\n", + "\t140 13027.168954 13087.991186 0.072122 0.070821\n", + "\t145 13000.819102 13030.686619 0.068449 0.067675\n", + "\t150 12985.503070 12997.630280 0.065123 0.064682\n", + "\t155 12930.672063 12953.381884 0.062974 0.062689\n", + "\t160 12854.302745 12869.969481 0.061227 0.060758\n", + "\t165 12825.373038 12850.813423 0.058748 0.058063\n", + "\t170 12819.415527 12822.577348 0.056058 0.055673\n", + "\t175 12708.497312 12719.584918 0.055067 0.054788\n", + "\t180 12639.246258 12641.476771 0.054019 0.053491\n", + "\t185 12631.362226 12625.848643 0.051403 0.051273\n", + "\t190 12559.773216 12633.826899 0.050265 0.049295\n", + "\t195 12612.585828 12568.263736 0.047577 0.047966\n", + "\t200 12489.714343 12497.684613 0.047266 0.046947\n", + "\t205 12414.869027 12403.984719 0.046149 0.046160\n", + "\t210 12333.119968 12336.380238 0.045325 0.045221\n", + "\t215 12218.394834 12223.584261 0.044907 0.044754\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 25/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21222e+43 erg / s Luminosity absorbed = 8.22471e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21658e+43 erg / s Luminosity absorbed = 8.19057e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13278.010763 13270.696022 0.641648 0.642908\n", - "\t5 13348.641733 13322.383942 0.549116 0.552644\n", - "\t10 13389.995159 13347.242864 0.480928 0.485565\n", - "\t15 13420.336267 13374.912459 0.429481 0.433836\n", - "\t20 13465.269674 13432.753510 0.385639 0.389339\n", - "\t25 13432.804473 13457.984438 0.352148 0.351032\n", - "\t30 13478.152260 13472.554559 0.315732 0.317566\n", - "\t35 13546.768152 13504.185333 0.281819 0.286299\n", - "\t40 13627.278155 13558.293549 0.251783 0.258565\n", - "\t45 13604.882965 13517.497337 0.232319 0.238954\n", - "\t50 13625.845890 13556.174094 0.211901 0.217968\n", - "\t55 13602.102375 13576.181423 0.197460 0.197895\n", - "\t60 13666.469517 13645.945023 0.178943 0.178924\n", - "\t65 13631.745802 13615.151776 0.166107 0.167639\n", - "\t70 13632.637553 13628.125067 0.154189 0.154651\n", - "\t75 13585.427048 13622.936479 0.143931 0.143012\n", - "\t80 13609.745816 13578.172623 0.133334 0.134668\n", - "\t85 13624.246108 13627.023042 0.122952 0.122788\n", - "\t90 13590.553890 13561.024079 0.115902 0.116892\n", - "\t95 13594.756383 13579.888510 0.107573 0.107658\n", - "\t100 13549.898466 13534.426606 0.102064 0.102287\n", - "\t105 13581.169680 13502.800064 0.094850 0.096255\n", - "\t110 13545.934037 13492.870611 0.090058 0.091280\n", - "\t115 13474.183557 13490.398325 0.085789 0.085011\n", - "\t120 13394.318438 13395.721908 0.081967 0.081828\n", - "\t125 13350.571807 13350.634171 0.078213 0.078078\n", - "\t130 13348.176678 13327.064866 0.073127 0.073579\n", - "\t135 13248.295587 13255.401860 0.071241 0.070985\n", - "\t140 13223.932093 13256.925404 0.067701 0.066957\n", - "\t145 13196.467541 13201.182229 0.064614 0.064230\n", - "\t150 13086.152871 13093.443767 0.063554 0.063075\n", - "\t155 13042.460884 13030.185698 0.060771 0.060808\n", - "\t160 13046.647251 13023.151556 0.057615 0.057750\n", - "\t165 12940.265617 12962.788653 0.056227 0.055743\n", - "\t170 12889.311505 12850.336719 0.054381 0.055013\n", - "\t175 12849.617688 12862.277714 0.052379 0.052236\n", - "\t180 12778.700141 12754.450331 0.050977 0.051508\n", - "\t185 12705.841566 12704.562044 0.050094 0.050137\n", - "\t190 12649.616025 12631.226174 0.048563 0.048881\n", - "\t195 12616.346040 12617.823980 0.047103 0.047068\n", - "\t200 12531.869670 12502.116047 0.046301 0.046602\n", - "\t205 12465.741589 12448.945824 0.045231 0.045355\n", - "\t210 12411.682924 12392.114495 0.043975 0.044175\n", - "\t215 12321.315541 12313.877904 0.043216 0.043334\n", + "\t0 13214.412341 13226.637262 0.654355 0.649960\n", + "\t5 13266.546018 13273.317748 0.557950 0.557229\n", + "\t10 13266.925438 13308.672690 0.495958 0.489640\n", + "\t15 13321.265822 13362.955586 0.439403 0.433103\n", + "\t20 13300.999426 13295.175381 0.399679 0.399624\n", + "\t25 13340.522690 13344.623968 0.359001 0.358202\n", + "\t30 13360.096557 13391.442684 0.324063 0.322013\n", + "\t35 13425.244338 13466.503250 0.290336 0.288319\n", + "\t40 13406.012752 13436.991080 0.267246 0.265779\n", + "\t45 13470.738156 13513.082253 0.239683 0.237983\n", + "\t50 13514.566779 13499.586715 0.216757 0.218713\n", + "\t55 13446.809708 13471.751080 0.204399 0.203875\n", + "\t60 13495.051511 13474.365905 0.185571 0.187673\n", + "\t65 13478.049586 13495.089584 0.171728 0.171978\n", + "\t70 13478.243438 13506.466553 0.158297 0.158035\n", + "\t75 13447.494233 13472.618979 0.148463 0.147689\n", + "\t80 13436.926051 13426.092569 0.138342 0.138483\n", + "\t85 13405.984926 13435.279967 0.129554 0.127994\n", + "\t90 13411.477844 13398.549637 0.120318 0.120507\n", + "\t95 13397.359911 13392.899837 0.112874 0.112153\n", + "\t100 13360.714798 13355.280323 0.106382 0.106066\n", + "\t105 13331.840059 13350.876967 0.100378 0.100158\n", + "\t110 13283.695143 13262.987994 0.095469 0.096234\n", + "\t115 13269.496703 13269.261900 0.089693 0.089592\n", + "\t120 13216.630334 13220.271865 0.085353 0.085028\n", + "\t125 13188.100904 13227.413382 0.081391 0.080367\n", + "\t130 13171.671286 13183.623645 0.077299 0.076439\n", + "\t135 13114.333697 13154.819805 0.074280 0.072986\n", + "\t140 13087.991186 13073.616423 0.070821 0.070857\n", + "\t145 13030.686619 13043.634237 0.067675 0.067414\n", + "\t150 12997.630280 12994.570180 0.064682 0.064596\n", + "\t155 12953.381884 12946.036078 0.062689 0.062456\n", + "\t160 12869.969481 12899.812989 0.060758 0.060078\n", + "\t165 12850.813423 12860.432622 0.058063 0.057899\n", + "\t170 12822.577348 12758.171162 0.055673 0.056694\n", + "\t175 12719.584918 12736.508057 0.054788 0.054428\n", + "\t180 12641.476771 12693.757431 0.053491 0.052712\n", + "\t185 12625.848643 12627.684428 0.051273 0.051319\n", + "\t190 12633.826899 12605.649726 0.049295 0.049639\n", + "\t195 12568.263736 12519.805078 0.047966 0.048512\n", + "\t200 12497.684613 12441.375388 0.046947 0.047643\n", + "\t205 12403.984719 12390.758682 0.046160 0.046193\n", + "\t210 12336.380238 12341.490806 0.045221 0.045034\n", + "\t215 12223.584261 12269.951528 0.044754 0.044087\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 26/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21673e+43 erg / s Luminosity absorbed = 8.18157e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22024e+43 erg / s Luminosity absorbed = 8.15492e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13270.696022 13271.530613 0.642908 0.644373\n", - "\t5 13322.383942 13336.456993 0.552644 0.550015\n", - "\t10 13347.242864 13390.353000 0.485565 0.479866\n", - "\t15 13374.912459 13423.306105 0.433836 0.428565\n", - "\t20 13432.753510 13450.367080 0.389339 0.385605\n", - "\t25 13457.984438 13487.378370 0.351032 0.345360\n", - "\t30 13472.554559 13493.026147 0.317566 0.313875\n", - "\t35 13504.185333 13474.848725 0.286299 0.288170\n", - "\t40 13558.293549 13541.466576 0.258565 0.259858\n", - "\t45 13517.497337 13545.038773 0.238954 0.237364\n", - "\t50 13556.174094 13572.532271 0.217968 0.216331\n", - "\t55 13576.181423 13580.512176 0.197895 0.198667\n", - "\t60 13645.945023 13612.481505 0.178924 0.180448\n", - "\t65 13615.151776 13634.562335 0.167639 0.166978\n", - "\t70 13628.125067 13656.348500 0.154651 0.153620\n", - "\t75 13622.936479 13648.706367 0.143012 0.142383\n", - "\t80 13578.172623 13614.335979 0.134668 0.132803\n", - "\t85 13627.023042 13624.661577 0.122788 0.123129\n", - "\t90 13561.024079 13601.743908 0.116892 0.116093\n", - "\t95 13579.888510 13596.847242 0.107658 0.107682\n", - "\t100 13534.426606 13537.100559 0.102287 0.101815\n", - "\t105 13502.800064 13528.220122 0.096255 0.095814\n", - "\t110 13492.870611 13494.146708 0.091280 0.091091\n", - "\t115 13490.398325 13473.791902 0.085011 0.084878\n", - "\t120 13395.721908 13387.298820 0.081828 0.082027\n", - "\t125 13350.634171 13385.907140 0.078078 0.077395\n", - "\t130 13327.064866 13331.066428 0.073579 0.073484\n", - "\t135 13255.401860 13303.936110 0.070985 0.069917\n", - "\t140 13256.925404 13224.287619 0.066957 0.067565\n", - "\t145 13201.182229 13189.834245 0.064230 0.064769\n", - "\t150 13093.443767 13130.766284 0.063075 0.062414\n", - "\t155 13030.185698 13079.978377 0.060808 0.060190\n", - "\t160 13023.151556 13006.542174 0.057750 0.058257\n", - "\t165 12962.788653 12994.794135 0.055743 0.055493\n", - "\t170 12850.336719 12917.381157 0.055013 0.054132\n", - "\t175 12862.277714 12871.990795 0.052236 0.052206\n", - "\t180 12754.450331 12787.392876 0.051508 0.051257\n", - "\t185 12704.562044 12739.362606 0.050137 0.049526\n", - "\t190 12631.226174 12654.117488 0.048881 0.048597\n", - "\t195 12617.823980 12621.624550 0.047068 0.046930\n", - "\t200 12502.116047 12517.729051 0.046602 0.046454\n", - "\t205 12448.945824 12475.287394 0.045355 0.045014\n", - "\t210 12392.114495 12421.244417 0.044175 0.043767\n", - "\t215 12313.877904 12305.788275 0.043334 0.043532\n", + "\t0 13226.637262 13224.038802 0.649960 0.649671\n", + "\t5 13273.317748 13254.407087 0.557229 0.561481\n", + "\t10 13308.672690 13284.603566 0.489640 0.492310\n", + "\t15 13362.955586 13302.545105 0.433103 0.439342\n", + "\t20 13295.175381 13292.262849 0.399624 0.398956\n", + "\t25 13344.623968 13342.035745 0.358202 0.357113\n", + "\t30 13391.442684 13395.651625 0.322013 0.320898\n", + "\t35 13466.503250 13464.557456 0.288319 0.289676\n", + "\t40 13436.991080 13440.515426 0.265779 0.266129\n", + "\t45 13513.082253 13515.022982 0.237983 0.237762\n", + "\t50 13499.586715 13510.184201 0.218713 0.218257\n", + "\t55 13471.751080 13504.086537 0.203875 0.201539\n", + "\t60 13474.365905 13468.713278 0.187673 0.187599\n", + "\t65 13495.089584 13499.187263 0.171978 0.172129\n", + "\t70 13506.466553 13503.375732 0.158035 0.158278\n", + "\t75 13472.618979 13471.049950 0.147689 0.147953\n", + "\t80 13426.092569 13469.814316 0.138483 0.137510\n", + "\t85 13435.279967 13466.753912 0.127994 0.127882\n", + "\t90 13398.549637 13414.734938 0.120507 0.121051\n", + "\t95 13392.899837 13424.523000 0.112153 0.112245\n", + "\t100 13355.280323 13380.318364 0.106066 0.106457\n", + "\t105 13350.876967 13352.257978 0.100158 0.100303\n", + "\t110 13262.987994 13320.346400 0.096234 0.094864\n", + "\t115 13269.261900 13299.997262 0.089592 0.089149\n", + "\t120 13220.271865 13232.512535 0.085028 0.084875\n", + "\t125 13227.413382 13242.894290 0.080367 0.080056\n", + "\t130 13183.623645 13202.446665 0.076439 0.076082\n", + "\t135 13154.819805 13156.812152 0.072986 0.073040\n", + "\t140 13073.616423 13076.700422 0.070857 0.070527\n", + "\t145 13043.634237 13053.722896 0.067414 0.067399\n", + "\t150 12994.570180 13006.987684 0.064596 0.064253\n", + "\t155 12946.036078 12967.210224 0.062456 0.062075\n", + "\t160 12899.812989 12945.463999 0.060078 0.059531\n", + "\t165 12860.432622 12854.793486 0.057899 0.057858\n", + "\t170 12758.171162 12796.353980 0.056694 0.056173\n", + "\t175 12736.508057 12792.868597 0.054428 0.053488\n", + "\t180 12693.757431 12696.129047 0.052712 0.052492\n", + "\t185 12627.684428 12656.106175 0.051319 0.050890\n", + "\t190 12605.649726 12598.256389 0.049639 0.049612\n", + "\t195 12519.805078 12518.316319 0.048512 0.048575\n", + "\t200 12441.375388 12456.817563 0.047643 0.047361\n", + "\t205 12390.758682 12358.693871 0.046193 0.046701\n", + "\t210 12341.490806 12305.940437 0.045034 0.045632\n", + "\t215 12269.951528 12229.092749 0.044087 0.044648\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n" ] @@ -1658,158 +1644,158 @@ "text": [ "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 27/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20760e+43 erg / s Luminosity absorbed = 8.26883e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21669e+43 erg / s Luminosity absorbed = 8.18670e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13271.530613 13267.229895 0.644373 0.644613\n", - "\t5 13336.456993 13309.957848 0.550015 0.552350\n", - "\t10 13390.353000 13362.599180 0.479866 0.484647\n", - "\t15 13423.306105 13416.485413 0.428565 0.430518\n", - "\t20 13450.367080 13452.533705 0.385605 0.385570\n", - "\t25 13487.378370 13480.877666 0.345360 0.345231\n", - "\t30 13493.026147 13534.801383 0.313875 0.309576\n", - "\t35 13474.848725 13562.348057 0.288170 0.280234\n", - "\t40 13541.466576 13556.692056 0.259858 0.257486\n", - "\t45 13545.038773 13561.290843 0.237364 0.235385\n", - "\t50 13572.532271 13548.608594 0.216331 0.218351\n", - "\t55 13580.512176 13525.096450 0.198667 0.201994\n", - "\t60 13612.481505 13602.430049 0.180448 0.180981\n", - "\t65 13634.562335 13604.584566 0.166978 0.167370\n", - "\t70 13656.348500 13633.088350 0.153620 0.154084\n", - "\t75 13648.706367 13626.329192 0.142383 0.142836\n", - "\t80 13614.335979 13619.696143 0.132803 0.132119\n", - "\t85 13624.661577 13631.876027 0.123129 0.122202\n", - "\t90 13601.743908 13607.669741 0.116093 0.114933\n", - "\t95 13596.847242 13580.712969 0.107682 0.107904\n", - "\t100 13537.100559 13558.070068 0.101815 0.101611\n", - "\t105 13528.220122 13513.642542 0.095814 0.096155\n", - "\t110 13494.146708 13484.539851 0.091091 0.090864\n", - "\t115 13473.791902 13518.564728 0.084878 0.083821\n", - "\t120 13387.298820 13442.773703 0.082027 0.080492\n", - "\t125 13385.907140 13428.879039 0.077395 0.076252\n", - "\t130 13331.066428 13348.870947 0.073484 0.073431\n", - "\t135 13303.936110 13288.319864 0.069917 0.070795\n", - "\t140 13224.287619 13295.534754 0.067565 0.066347\n", - "\t145 13189.834245 13199.387702 0.064769 0.064713\n", - "\t150 13130.766284 13144.816061 0.062414 0.061923\n", - "\t155 13079.978377 13097.206394 0.060190 0.059794\n", - "\t160 13006.542174 13083.035223 0.058257 0.057139\n", - "\t165 12994.794135 13015.077160 0.055493 0.055308\n", - "\t170 12917.381157 12939.781727 0.054132 0.053766\n", - "\t175 12871.990795 12889.826041 0.052206 0.051931\n", - "\t180 12787.392876 12815.502907 0.051257 0.050555\n", - "\t185 12739.362606 12731.737958 0.049526 0.049591\n", - "\t190 12654.117488 12662.180603 0.048597 0.048226\n", - "\t195 12621.624550 12656.423731 0.046930 0.046356\n", - "\t200 12517.729051 12533.340286 0.046454 0.045948\n", - "\t205 12475.287394 12492.138421 0.045014 0.044581\n", - "\t210 12421.244417 12451.936111 0.043767 0.043184\n", - "\t215 12305.788275 12322.819248 0.043532 0.043061\n", + "\t0 13224.038802 13227.901174 0.649671 0.649570\n", + "\t5 13254.407087 13253.437801 0.561481 0.562809\n", + "\t10 13284.603566 13315.822899 0.492310 0.487354\n", + "\t15 13302.545105 13308.504973 0.439342 0.441817\n", + "\t20 13292.262849 13313.086028 0.398956 0.398092\n", + "\t25 13342.035745 13362.257074 0.357113 0.355488\n", + "\t30 13395.651625 13385.926898 0.320898 0.322538\n", + "\t35 13464.557456 13455.152434 0.289676 0.290891\n", + "\t40 13440.515426 13468.663938 0.266129 0.263483\n", + "\t45 13515.022982 13519.866805 0.237762 0.238079\n", + "\t50 13510.184201 13506.898673 0.218257 0.219233\n", + "\t55 13504.086537 13549.458452 0.201539 0.199181\n", + "\t60 13468.713278 13509.018362 0.187599 0.185527\n", + "\t65 13499.187263 13486.072442 0.172129 0.172556\n", + "\t70 13503.375732 13525.678046 0.158278 0.157214\n", + "\t75 13471.049950 13482.036613 0.147953 0.146788\n", + "\t80 13469.814316 13503.408657 0.137510 0.135660\n", + "\t85 13466.753912 13518.750962 0.127882 0.125845\n", + "\t90 13414.734938 13448.183311 0.121051 0.118639\n", + "\t95 13424.523000 13466.878706 0.112245 0.110304\n", + "\t100 13380.318364 13393.365097 0.106457 0.105151\n", + "\t105 13352.257978 13320.206391 0.100303 0.100640\n", + "\t110 13320.346400 13296.148156 0.094864 0.095177\n", + "\t115 13299.997262 13277.749438 0.089149 0.089847\n", + "\t120 13232.512535 13255.594266 0.084875 0.084687\n", + "\t125 13242.894290 13216.769722 0.080056 0.080475\n", + "\t130 13202.446665 13134.280941 0.076082 0.077466\n", + "\t135 13156.812152 13143.270696 0.073040 0.073214\n", + "\t140 13076.700422 13118.062526 0.070527 0.069721\n", + "\t145 13053.722896 13129.778037 0.067399 0.066201\n", + "\t150 13006.987684 13016.758140 0.064253 0.064372\n", + "\t155 12967.210224 12952.608913 0.062075 0.062374\n", + "\t160 12945.463999 12972.195659 0.059531 0.058840\n", + "\t165 12854.793486 12901.782640 0.057858 0.057205\n", + "\t170 12796.353980 12836.110004 0.056173 0.055623\n", + "\t175 12792.868597 12813.578279 0.053488 0.053283\n", + "\t180 12696.129047 12746.183324 0.052492 0.052010\n", + "\t185 12656.106175 12642.400168 0.050890 0.051181\n", + "\t190 12598.256389 12623.518838 0.049612 0.049208\n", + "\t195 12518.316319 12545.983504 0.048575 0.048173\n", + "\t200 12456.817563 12486.360144 0.047361 0.046895\n", + "\t205 12358.693871 12395.242697 0.046701 0.046184\n", + "\t210 12305.940437 12343.814221 0.045632 0.045038\n", + "\t215 12229.092749 12244.749981 0.044648 0.044401\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 28/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21615e+43 erg / s Luminosity absorbed = 8.17960e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21499e+43 erg / s Luminosity absorbed = 8.20205e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13267.229895 13238.322676 0.644613 0.649373\n", - "\t5 13309.957848 13286.184894 0.552350 0.556429\n", - "\t10 13362.599180 13340.900794 0.484647 0.488148\n", - "\t15 13416.485413 13393.757553 0.430518 0.432761\n", - "\t20 13452.533705 13470.248408 0.385570 0.382713\n", - "\t25 13480.877666 13514.190373 0.345231 0.343651\n", - "\t30 13534.801383 13533.440429 0.309576 0.311547\n", - "\t35 13562.348057 13560.082221 0.280234 0.281544\n", - "\t40 13556.692056 13552.468579 0.257486 0.259401\n", - "\t45 13561.290843 13585.031702 0.235385 0.235486\n", - "\t50 13548.608594 13576.630341 0.218351 0.217249\n", - "\t55 13525.096450 13594.171150 0.201994 0.198141\n", - "\t60 13602.430049 13634.500032 0.180981 0.180635\n", - "\t65 13604.584566 13662.297529 0.167370 0.166281\n", - "\t70 13633.088350 13584.906890 0.154084 0.157331\n", - "\t75 13626.329192 13634.212626 0.142836 0.143265\n", - "\t80 13619.696143 13631.150560 0.132119 0.132716\n", - "\t85 13631.876027 13621.164051 0.122202 0.123512\n", - "\t90 13607.669741 13580.266266 0.114933 0.116573\n", - "\t95 13580.712969 13604.376545 0.107904 0.107431\n", - "\t100 13558.070068 13567.082796 0.101611 0.101743\n", - "\t105 13513.642542 13543.001457 0.096155 0.095716\n", - "\t110 13484.539851 13487.048499 0.090864 0.091156\n", - "\t115 13518.564728 13478.088798 0.083821 0.085159\n", - "\t120 13442.773703 13443.911065 0.080492 0.081045\n", - "\t125 13428.879039 13364.123108 0.076252 0.078233\n", - "\t130 13348.870947 13352.151229 0.073431 0.074123\n", - "\t135 13288.319864 13285.766577 0.070795 0.070851\n", - "\t140 13295.534754 13282.190208 0.066347 0.066687\n", - "\t145 13199.387702 13188.937557 0.064713 0.065227\n", - "\t150 13144.816061 13140.181851 0.061923 0.062637\n", - "\t155 13097.206394 13076.784967 0.059794 0.060149\n", - "\t160 13083.035223 13062.198936 0.057139 0.057810\n", - "\t165 13015.077160 12985.941742 0.055308 0.056064\n", - "\t170 12939.781727 12903.272755 0.053766 0.054406\n", - "\t175 12889.826041 12874.062323 0.051931 0.052334\n", - "\t180 12815.502907 12786.132777 0.050555 0.051414\n", - "\t185 12731.737958 12752.988933 0.049591 0.049518\n", - "\t190 12662.180603 12689.779763 0.048226 0.048065\n", - "\t195 12656.423731 12652.130967 0.046356 0.046490\n", - "\t200 12533.340286 12558.648843 0.045948 0.045720\n", - "\t205 12492.138421 12520.764854 0.044581 0.044458\n", - "\t210 12451.936111 12404.766604 0.043184 0.043961\n", - "\t215 12322.819248 12304.711932 0.043061 0.043405\n", + "\t0 13227.901174 13233.150013 0.649570 0.650204\n", + "\t5 13253.437801 13246.153944 0.562809 0.561930\n", + "\t10 13315.822899 13321.909830 0.487354 0.489863\n", + "\t15 13308.504973 13364.961838 0.441817 0.435686\n", + "\t20 13313.086028 13391.543417 0.398092 0.390502\n", + "\t25 13362.257074 13380.970341 0.355488 0.354792\n", + "\t30 13385.926898 13424.798756 0.322538 0.319017\n", + "\t35 13455.152434 13461.928210 0.290891 0.291085\n", + "\t40 13468.663938 13503.499504 0.263483 0.261981\n", + "\t45 13519.866805 13495.866176 0.238079 0.240783\n", + "\t50 13506.898673 13555.871313 0.219233 0.216347\n", + "\t55 13549.458452 13571.589585 0.199181 0.197516\n", + "\t60 13509.018362 13533.420573 0.185527 0.184918\n", + "\t65 13486.072442 13516.614447 0.172556 0.171709\n", + "\t70 13525.678046 13524.108128 0.157214 0.158169\n", + "\t75 13482.036613 13504.251745 0.146788 0.146163\n", + "\t80 13503.408657 13508.314541 0.135660 0.135793\n", + "\t85 13518.750962 13538.331114 0.125845 0.125334\n", + "\t90 13448.183311 13460.652047 0.118639 0.118766\n", + "\t95 13466.878706 13463.743682 0.110304 0.111095\n", + "\t100 13393.365097 13382.045279 0.105151 0.105867\n", + "\t105 13320.206391 13378.572343 0.100640 0.099143\n", + "\t110 13296.148156 13379.622903 0.095177 0.092730\n", + "\t115 13277.749438 13274.010882 0.089847 0.089717\n", + "\t120 13255.594266 13289.780395 0.084687 0.083850\n", + "\t125 13216.769722 13209.527751 0.080475 0.080657\n", + "\t130 13134.280941 13174.722631 0.077466 0.076697\n", + "\t135 13143.270696 13135.588395 0.073214 0.073239\n", + "\t140 13118.062526 13089.038929 0.069721 0.070019\n", + "\t145 13129.778037 13107.025066 0.066201 0.066344\n", + "\t150 13016.758140 13017.046389 0.064372 0.064109\n", + "\t155 12952.608913 12909.922348 0.062374 0.062857\n", + "\t160 12972.195659 12948.664891 0.058840 0.059189\n", + "\t165 12901.782640 12903.756393 0.057205 0.057100\n", + "\t170 12836.110004 12845.378254 0.055623 0.055307\n", + "\t175 12813.578279 12803.645892 0.053283 0.053442\n", + "\t180 12746.183324 12723.611287 0.052010 0.052088\n", + "\t185 12642.400168 12634.318515 0.051181 0.051017\n", + "\t190 12623.518838 12601.606254 0.049208 0.049256\n", + "\t195 12545.983504 12565.203662 0.048173 0.047612\n", + "\t200 12486.360144 12494.861637 0.046895 0.046639\n", + "\t205 12395.242697 12397.928412 0.046184 0.045991\n", + "\t210 12343.814221 12336.477565 0.045038 0.045007\n", + "\t215 12244.749981 12249.970878 0.044401 0.044239\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 29/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20884e+43 erg / s Luminosity absorbed = 8.25550e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21179e+43 erg / s Luminosity absorbed = 8.22822e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 13238.322676 13226.520939 0.649373 0.651729\n", - "\t5 13286.184894 13303.405286 0.556429 0.555673\n", - "\t10 13340.900794 13318.466941 0.488148 0.494104\n", - "\t15 13393.757553 13411.400215 0.432761 0.431949\n", - "\t20 13470.248408 13488.042544 0.382713 0.381133\n", - "\t25 13514.190373 13542.705706 0.343651 0.339527\n", - "\t30 13533.440429 13568.331422 0.311547 0.306915\n", - "\t35 13560.082221 13551.572869 0.281544 0.281839\n", - "\t40 13552.468579 13592.277138 0.259401 0.255392\n", - "\t45 13585.031702 13589.751369 0.235486 0.232627\n", - "\t50 13576.630341 13632.800307 0.217249 0.212804\n", - "\t55 13594.171150 13640.303834 0.198141 0.194787\n", - "\t60 13634.500032 13677.204511 0.180635 0.177897\n", - "\t65 13662.297529 13681.215583 0.166281 0.164354\n", - "\t70 13584.906890 13597.256415 0.157331 0.155568\n", - "\t75 13634.212626 13607.327783 0.143265 0.143908\n", - "\t80 13631.150560 13613.045200 0.132716 0.132719\n", - "\t85 13621.164051 13595.524194 0.123512 0.123664\n", - "\t90 13580.266266 13572.564003 0.116573 0.115506\n", - "\t95 13604.376545 13595.132272 0.107431 0.106680\n", - "\t100 13567.082796 13546.383010 0.101743 0.101658\n", - "\t105 13543.001457 13544.145309 0.095716 0.095267\n", - "\t110 13487.048499 13506.548914 0.091156 0.089785\n", - "\t115 13478.088798 13474.167961 0.085159 0.085114\n", - "\t120 13443.911065 13452.053813 0.081045 0.080430\n", - "\t125 13364.123108 13399.637044 0.078233 0.077133\n", - "\t130 13352.151229 13372.115285 0.074123 0.073564\n", - "\t135 13285.766577 13329.206300 0.070851 0.070258\n", - "\t140 13282.190208 13242.263561 0.066687 0.067495\n", - "\t145 13188.937557 13211.178475 0.065227 0.064506\n", - "\t150 13140.181851 13203.869308 0.062637 0.061557\n", - "\t155 13076.784967 13115.889609 0.060149 0.059769\n", - "\t160 13062.198936 13039.682821 0.057810 0.057924\n", - "\t165 12985.941742 13009.593050 0.056064 0.055611\n", - "\t170 12903.272755 12944.363874 0.054406 0.053647\n", - "\t175 12874.062323 12919.678296 0.052334 0.051682\n", - "\t180 12786.132777 12835.572161 0.051414 0.050506\n", - "\t185 12752.988933 12766.745125 0.049518 0.049311\n", - "\t190 12689.779763 12689.244008 0.048065 0.048149\n", - "\t195 12652.130967 12608.255163 0.046490 0.046950\n", - "\t200 12558.648843 12520.624767 0.045720 0.046167\n", - "\t205 12520.764854 12493.746296 0.044458 0.044625\n", - "\t210 12404.766604 12405.512267 0.043961 0.043934\n", - "\t215 12304.711932 12314.490441 0.043405 0.043273\n", + "\t0 13233.150013 13208.310381 0.650204 0.657074\n", + "\t5 13246.153944 13242.926346 0.561930 0.561964\n", + "\t10 13321.909830 13330.763628 0.489863 0.489069\n", + "\t15 13364.961838 13368.288133 0.435686 0.433913\n", + "\t20 13391.543417 13384.044346 0.390502 0.389619\n", + "\t25 13380.970341 13398.903276 0.354792 0.351207\n", + "\t30 13424.798756 13448.522939 0.319017 0.316476\n", + "\t35 13461.928210 13467.082069 0.291085 0.290285\n", + "\t40 13503.499504 13508.888789 0.261981 0.263058\n", + "\t45 13495.866176 13525.001658 0.240783 0.239508\n", + "\t50 13555.871313 13562.425891 0.216347 0.217229\n", + "\t55 13571.589585 13577.718177 0.197516 0.197810\n", + "\t60 13533.420573 13597.504461 0.184918 0.181660\n", + "\t65 13516.614447 13601.489270 0.171709 0.168048\n", + "\t70 13524.108128 13568.698227 0.158169 0.156417\n", + "\t75 13504.251745 13546.834728 0.146163 0.145109\n", + "\t80 13508.314541 13555.479137 0.135793 0.133817\n", + "\t85 13538.331114 13571.340270 0.125334 0.124472\n", + "\t90 13460.652047 13472.928583 0.118766 0.119160\n", + "\t95 13463.743682 13457.100412 0.111095 0.111430\n", + "\t100 13382.045279 13428.556594 0.105867 0.105074\n", + "\t105 13378.572343 13366.311341 0.099143 0.100007\n", + "\t110 13379.622903 13379.869001 0.092730 0.093092\n", + "\t115 13274.010882 13275.411938 0.089717 0.090079\n", + "\t120 13289.780395 13246.539043 0.083850 0.085249\n", + "\t125 13209.527751 13249.121435 0.080657 0.079777\n", + "\t130 13174.722631 13135.663120 0.076697 0.077560\n", + "\t135 13135.588395 13110.646608 0.073239 0.073567\n", + "\t140 13089.038929 13087.479523 0.070019 0.070224\n", + "\t145 13107.025066 13044.884829 0.066344 0.067281\n", + "\t150 13017.046389 13037.484772 0.064109 0.063956\n", + "\t155 12909.922348 12941.347490 0.062857 0.062526\n", + "\t160 12948.664891 12942.316969 0.059189 0.059498\n", + "\t165 12903.756393 12933.641487 0.057100 0.056895\n", + "\t170 12845.378254 12859.107981 0.055307 0.055298\n", + "\t175 12803.645892 12800.474636 0.053442 0.053562\n", + "\t180 12723.611287 12750.762210 0.052088 0.052045\n", + "\t185 12634.318515 12681.428533 0.051017 0.050617\n", + "\t190 12601.606254 12600.917221 0.049256 0.049396\n", + "\t195 12565.203662 12543.499820 0.047612 0.047945\n", + "\t200 12494.861637 12490.808295 0.046639 0.046748\n", + "\t205 12397.928412 12415.000297 0.045991 0.045719\n", + "\t210 12336.477565 12336.243932 0.045007 0.044929\n", + "\t215 12249.970878 12253.441375 0.044239 0.044120\n", "\n", " (\u001b[1mbase.py\u001b[0m:348)\n" ] @@ -1820,19 +1806,45 @@ "text": [ "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 30/30 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20889e+43 erg / s Luminosity absorbed = 8.25019e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Simulation finished in 30 iterations and took 356.68 s (\u001b[1mbase.py\u001b[0m:306)\n" + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21579e+43 erg / s Luminosity absorbed = 8.19099e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Simulation finished in 30 iterations and took 302.03 s (\u001b[1mbase.py\u001b[0m:306)\n" ] } ], "source": [ - "sim = run_tardis('blondin_model_compare.yml')" + "sim = run_tardis('blondin_model_compare_01.yml')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "Download Spectrum" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "spectrum = pd.DataFrame(data = sim.runner.spectrum_integrated.frequency.value, columns=['frequency'])\n", + "spectrum['luminosity'] = sim.runner.spectrum_integrated.luminosity_density_nu.value\n", + "\n", + "create_df_download_link(spectrum, title='Download Spectrum', filename='spectrum.csv', type='csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, "outputs": [], "source": [ "spec_artis_toy = pd.read_csv('spec_artis_toy.csv')" @@ -1840,7 +1852,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -1851,10 +1863,7 @@ "The text.latex.unicode rcparam was deprecated in Matplotlib 2.2 and will be removed in 3.1.\n", " styles = read_style_directory(stylelib_path)\n", " (\u001b[1mwarnings.py\u001b[0m:99)\n", - "Populating the interactive namespace from numpy and matplotlib\n", - "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", - " AstropyDeprecationWarning)\n", - " (\u001b[1mwarnings.py\u001b[0m:99)\n" + "Populating the interactive namespace from numpy and matplotlib\n" ] }, { @@ -2640,7 +2649,7 @@ { "data": { "text/html": [ - "" + "" ], "text/plain": [ "" @@ -2655,7 +2664,7 @@ "(0, 1000000000000000.0)" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -2670,21 +2679,1701 @@ "xlim(0, 1e15)\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Comparison of snia_toy06.dat ####" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "blondin_dict, blondin_csv = read_blondin_toymodel('snia_toy06.dat')" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "blondin_dict['v_inner_boundary'] = '9000 km/s'\n", + "blondin_dict['v_outer_boundary'] = '20000 km/s'" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "csvy_file = '---\\n{0}\\n---\\n{1}'.format(yaml.dump(blondin_dict, default_flow_style=False), blondin_csv.to_csv(index=False))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Download the model and setup**\n", + "\n", + "[blondin_compare_06.csvy](blondin_compare_06.csvy)\n", + "\n", + "[blondin_model_compare_06.yml](blondin_model_compare_06.yml)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "with open('blondin_compare_06.csvy', 'w') as fh:\n", + " fh.write(csvy_file)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", + " AstropyDeprecationWarning)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mtardis.plasma.standard_plasmas\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Reading Atomic Data from kurucz_cd23_chianti_H_He.h5 (\u001b[1mstandard_plasmas.py\u001b[0m:74)\n", + "[\u001b[1mtardis.io.atom_data.util\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Atom Data kurucz_cd23_chianti_H_He.h5 not found in local path. Exists in TARDIS Data repo /Users/wkerzend/projects/tardis/tardis-data/kurucz_cd23_chianti_H_He.h5 (\u001b[1mutil.py\u001b[0m:29)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/IPython/core/interactiveshell.py:3267: PerformanceWarning: indexing past lexsort depth may impact performance.\n", + " exec(code_obj, self.user_global_ns, self.user_ns)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mtardis.io.atom_data.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Read Atom Data with UUID=6f7b09e887a311e7a06b246e96350010 and MD5=864f1753714343c41f99cb065710cace. (\u001b[1mbase.py\u001b[0m:184)\n", + "[\u001b[1mtardis.io.atom_data.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Non provided atomic data: synpp_refs, photoionization_data (\u001b[1mbase.py\u001b[0m:187)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", + " AstropyDeprecationWarning)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/python/tardis/tardis/plasma/properties/atomic.py:195: FutureWarning: .labels was deprecated in version 0.24.0. Use .codes instead.\n", + " zeta_data['atomic_number'] = zeta_data.index.labels[0] + 1\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/python/tardis/tardis/plasma/properties/atomic.py:196: FutureWarning: .labels was deprecated in version 0.24.0. Use .codes instead.\n", + " zeta_data['ion_number'] = zeta_data.index.labels[1] + 1\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mtardis.plasma.properties.atomic\u001b[0m][\u001b[1;33mWARNING\u001b[0m] Zeta_data missing - replaced with 1s. Missing ions: [(14, 15), (16, 17), (20, 21), (26, 27), (27, 28), (28, 29)] (\u001b[1matomic.py\u001b[0m:215)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/python/tardis/tardis/plasma/properties/ion_population.py:63: FutureWarning: \n", + "Passing list-likes to .loc or [] with any missing label will raise\n", + "KeyError in the future, you can use .reindex() as an alternative.\n", + "\n", + "See the documentation here:\n", + "https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike\n", + " partition_function.index].dropna())\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/python/tardis/tardis/plasma/properties/ion_population.py:134: UserWarning: t_rads outside of zeta factor interpolation zeta_min=2000.00 zeta_max=40000.00 - replacing with 1s\n", + " t_rad))\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/equivalencies.py:90: RuntimeWarning: divide by zero encountered in double_scalars\n", + " (si.m, si.Hz, lambda x: _si.c.value / x),\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", + " AstropyDeprecationWarning)\n", + " (\u001b[1mwarnings.py\u001b[0m:99)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 1/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.58316e+42 erg / s Luminosity absorbed = 1.14927e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 48232.0 33078.660848 0.462810 0.339407\n", + "\t5 45376.0 33359.208475 0.379149 0.240036\n", + "\t10 42491.0 32247.702823 0.336294 0.209552\n", + "\t15 39588.0 30940.509627 0.304883 0.189092\n", + "\t20 36670.0 29419.035049 0.279753 0.175165\n", + "\t25 33741.0 27862.998412 0.258765 0.162926\n", + "\t30 30797.0 26056.304566 0.240774 0.155731\n", + "\t35 27831.0 24233.374024 0.225078 0.150757\n", + "\t40 24827.0 22259.666051 0.211205 0.148148\n", + "\t45 21754.0 20052.519837 0.198821 0.149908\n", + "\t50 18561.0 17572.332905 0.187679 0.159651\n", + "\t55 15146.0 14878.504699 0.177588 0.178974\n", + "\t60 11272.0 11894.797719 0.168399 0.219075\n", + "\t65 6063.9 8017.697008 0.159992 0.321883\n", + "\t70 5000.0 6857.681232 0.152269 0.409785\n", + "\t75 5000.0 6706.225807 0.145148 0.420703\n", + "\t80 5000.0 6624.827933 0.138563 0.412427\n", + "\t85 5000.0 6559.646701 0.132453 0.401986\n", + "\t90 5000.0 6498.094778 0.126772 0.394748\n", + "\t95 5000.0 6486.173446 0.121475 0.375484\n", + "\t100 5000.0 6442.241085 0.116527 0.367131\n", + "\t105 5000.0 6396.521785 0.111894 0.359269\n", + "\t110 5000.0 6369.954386 0.107550 0.348460\n", + "\t115 5000.0 6365.069785 0.103468 0.330502\n", + "\t120 5000.0 6335.033359 0.099626 0.324085\n", + "\t125 5000.0 6335.240062 0.096006 0.307071\n", + "\t130 5000.0 6312.003849 0.092589 0.298308\n", + "\t135 5000.0 6315.460113 0.089359 0.283135\n", + "\t140 5000.0 6287.968101 0.086303 0.273750\n", + "\t145 5000.0 6283.131863 0.083408 0.262965\n", + "\t150 5000.0 6288.219630 0.080662 0.249380\n", + "\t155 5000.0 6273.416628 0.078054 0.237795\n", + "\t160 5000.0 6252.886407 0.075575 0.233189\n", + "\t165 5000.0 6239.557304 0.073217 0.224598\n", + "\t170 5000.0 6217.990468 0.070971 0.218918\n", + "\t175 5000.0 6204.862349 0.068830 0.210945\n", + "\t180 5000.0 6190.728150 0.066787 0.204948\n", + "\t185 5000.0 6194.861311 0.064837 0.195274\n", + "\t190 5000.0 6186.214267 0.062973 0.187556\n", + "\t195 5000.0 6163.168514 0.061191 0.183025\n", + "\t200 5000.0 6151.945647 0.059485 0.177255\n", + "\t205 5000.0 6155.450367 0.057852 0.169708\n", + "\t210 5000.0 6145.333602 0.056286 0.163614\n", + "\t215 5000.0 6112.801838 0.054785 0.160652\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 2/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.22032e+42 erg / s Luminosity absorbed = 1.18799e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 33078.660848 25646.127577 0.339407 0.272341\n", + "\t5 33359.208475 27779.011309 0.240036 0.166440\n", + "\t10 32247.702823 27647.402177 0.209552 0.142136\n", + "\t15 30940.509627 26956.243849 0.189092 0.130006\n", + "\t20 29419.035049 26110.749534 0.175165 0.121196\n", + "\t25 27862.998412 25184.797764 0.162926 0.114157\n", + "\t30 26056.304566 23903.310867 0.155731 0.111695\n", + "\t35 24233.374024 22464.949449 0.150757 0.111841\n", + "\t40 22259.666051 20807.749039 0.148148 0.114950\n", + "\t45 20052.519837 19138.312801 0.149908 0.120132\n", + "\t50 17572.332905 17049.758069 0.159651 0.135918\n", + "\t55 14878.504699 14744.241654 0.178974 0.161523\n", + "\t60 11894.797719 12368.873229 0.219075 0.204673\n", + "\t65 8017.697008 9747.118793 0.321883 0.282912\n", + "\t70 6857.681232 8504.295946 0.409785 0.360680\n", + "\t75 6706.225807 8261.138040 0.420703 0.372982\n", + "\t80 6624.827933 8131.977329 0.412427 0.367405\n", + "\t85 6559.646701 7986.892879 0.401986 0.364399\n", + "\t90 6498.094778 7900.213479 0.394748 0.359227\n", + "\t95 6486.173446 7866.326390 0.375484 0.341438\n", + "\t100 6442.241085 7801.310057 0.367131 0.334603\n", + "\t105 6396.521785 7734.044408 0.359269 0.328341\n", + "\t110 6369.954386 7687.907215 0.348460 0.320147\n", + "\t115 6365.069785 7693.182800 0.330502 0.301387\n", + "\t120 6335.033359 7655.515919 0.324085 0.293835\n", + "\t125 6335.240062 7620.713571 0.307071 0.282380\n", + "\t130 6312.003849 7580.429413 0.298308 0.274228\n", + "\t135 6315.460113 7566.309064 0.283135 0.261058\n", + "\t140 6287.968101 7550.789323 0.273750 0.250787\n", + "\t145 6283.131863 7535.937992 0.262965 0.240000\n", + "\t150 6288.219630 7512.312121 0.249380 0.230931\n", + "\t155 6273.416628 7478.890013 0.237795 0.223031\n", + "\t160 6252.886407 7475.047982 0.233189 0.215373\n", + "\t165 6239.557304 7468.079400 0.224598 0.206387\n", + "\t170 6217.990468 7451.004860 0.218918 0.198988\n", + "\t175 6204.862349 7409.557929 0.210945 0.194654\n", + "\t180 6190.728150 7404.275923 0.204948 0.187906\n", + "\t185 6194.861311 7390.741925 0.195274 0.180247\n", + "\t190 6186.214267 7383.089094 0.187556 0.172665\n", + "\t195 6163.168514 7341.277893 0.183025 0.169132\n", + "\t200 6151.945647 7320.617789 0.177255 0.164262\n", + "\t205 6155.450367 7305.229567 0.169708 0.157482\n", + "\t210 6145.333602 7287.420458 0.163614 0.153307\n", + "\t215 6112.801838 7260.224191 0.160652 0.148549\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 3/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 7.53288e+42 erg / s Luminosity absorbed = 1.25536e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 25646.127577 21687.341639 0.272341 0.253627\n", + "\t5 27779.011309 24469.580180 0.166440 0.140872\n", + "\t10 27647.402177 24909.976327 0.142136 0.116365\n", + "\t15 26956.243849 24656.427206 0.130006 0.105583\n", + "\t20 26110.749534 24165.648308 0.121196 0.098350\n", + "\t25 25184.797764 23409.557036 0.114157 0.094399\n", + "\t30 23903.310867 22273.546772 0.111695 0.094505\n", + "\t35 22464.949449 21015.842734 0.111841 0.097335\n", + "\t40 20807.749039 19598.445762 0.114950 0.102435\n", + "\t45 19138.312801 18194.697753 0.120132 0.108754\n", + "\t50 17049.758069 16474.690030 0.135918 0.123592\n", + "\t55 14744.241654 14426.658678 0.161523 0.151056\n", + "\t60 12368.873229 12409.246992 0.204673 0.193485\n", + "\t65 9747.118793 10566.675904 0.282912 0.250930\n", + "\t70 8504.295946 9641.544377 0.360680 0.298794\n", + "\t75 8261.138040 9425.314448 0.372982 0.303862\n", + "\t80 8131.977329 9237.406931 0.367405 0.302762\n", + "\t85 7986.892879 9076.762770 0.364399 0.302978\n", + "\t90 7900.213479 8945.885086 0.359227 0.299366\n", + "\t95 7866.326390 8894.168206 0.341438 0.286980\n", + "\t100 7801.310057 8808.146138 0.334603 0.279830\n", + "\t105 7734.044408 8709.008609 0.328341 0.275653\n", + "\t110 7687.907215 8641.546213 0.320147 0.269139\n", + "\t115 7693.182800 8594.743373 0.301387 0.257106\n", + "\t120 7655.515919 8547.204869 0.293835 0.251014\n", + "\t125 7620.713571 8497.141809 0.282380 0.243241\n", + "\t130 7580.429413 8470.974386 0.274228 0.234358\n", + "\t135 7566.309064 8436.190944 0.261058 0.223792\n", + "\t140 7550.789323 8426.221081 0.250787 0.213680\n", + "\t145 7535.937992 8395.605145 0.240000 0.205239\n", + "\t150 7512.312121 8367.423110 0.230931 0.197109\n", + "\t155 7478.890013 8314.965938 0.223031 0.190926\n", + "\t160 7475.047982 8303.325524 0.215373 0.185388\n", + "\t165 7468.079400 8294.385045 0.206387 0.176284\n", + "\t170 7451.004860 8277.336042 0.198988 0.169414\n", + "\t175 7409.557929 8222.330703 0.194654 0.165971\n", + "\t180 7404.275923 8204.174904 0.187906 0.160077\n", + "\t185 7390.741925 8183.696969 0.180247 0.154208\n", + "\t190 7383.089094 8159.654987 0.172665 0.148128\n", + "\t195 7341.277893 8129.675443 0.169132 0.144477\n", + "\t200 7320.617789 8108.159374 0.164262 0.140187\n", + "\t205 7305.229567 8087.266758 0.157482 0.135504\n", + "\t210 7287.420458 8055.881172 0.153307 0.130894\n", + "\t215 7260.224191 8039.969032 0.148549 0.126358\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 4/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.94811e+42 erg / s Luminosity absorbed = 1.31524e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 21687.341639 19337.291241 0.253627 0.270153\n", + "\t5 24469.580180 22592.595297 0.140872 0.136920\n", + "\t10 24909.976327 23285.393456 0.116365 0.109207\n", + "\t15 24656.427206 23122.516303 0.105583 0.098554\n", + "\t20 24165.648308 22709.273345 0.098350 0.092178\n", + "\t25 23409.557036 21980.507524 0.094399 0.089448\n", + "\t30 22273.546772 20907.299125 0.094505 0.090564\n", + "\t35 21015.842734 19878.350356 0.097335 0.092653\n", + "\t40 19598.445762 18595.512520 0.102435 0.098847\n", + "\t45 18194.697753 17339.057651 0.108754 0.106149\n", + "\t50 16474.690030 15794.453426 0.123592 0.120273\n", + "\t55 14426.658678 14033.865213 0.151056 0.144822\n", + "\t60 12409.246992 12258.337451 0.193485 0.187633\n", + "\t65 10566.675904 10849.973249 0.250930 0.233686\n", + "\t70 9641.544377 10196.773086 0.298794 0.260404\n", + "\t75 9425.314448 10011.550967 0.303862 0.258982\n", + "\t80 9237.406931 9888.790308 0.302762 0.252716\n", + "\t85 9076.762770 9760.412746 0.302978 0.249461\n", + "\t90 8945.885086 9596.708364 0.299366 0.247828\n", + "\t95 8894.168206 9549.777257 0.286980 0.235729\n", + "\t100 8808.146138 9432.561960 0.279830 0.232594\n", + "\t105 8709.008609 9347.553652 0.275653 0.226183\n", + "\t110 8641.546213 9278.843901 0.269139 0.220521\n", + "\t115 8594.743373 9253.390705 0.257106 0.209843\n", + "\t120 8547.204869 9200.145781 0.251014 0.204575\n", + "\t125 8497.141809 9119.450917 0.243241 0.199674\n", + "\t130 8470.974386 9068.333536 0.234358 0.193760\n", + "\t135 8436.190944 9000.651683 0.223792 0.188192\n", + "\t140 8426.221081 9003.427215 0.213680 0.177094\n", + "\t145 8395.605145 8990.573400 0.205239 0.168436\n", + "\t150 8367.423110 8941.331178 0.197109 0.162812\n", + "\t155 8314.965938 8903.292918 0.190926 0.158086\n", + "\t160 8303.325524 8872.487593 0.185388 0.153814\n", + "\t165 8294.385045 8853.965174 0.176284 0.146998\n", + "\t170 8277.336042 8831.227420 0.169414 0.140738\n", + "\t175 8222.330703 8751.598029 0.165971 0.139141\n", + "\t180 8204.174904 8757.994139 0.160077 0.133106\n", + "\t185 8183.696969 8748.758957 0.154208 0.127799\n", + "\t190 8159.654987 8739.461589 0.148128 0.122879\n", + "\t195 8129.675443 8705.022057 0.144477 0.119449\n", + "\t200 8108.159374 8682.105330 0.140187 0.115308\n", + "\t205 8087.266758 8647.041572 0.135504 0.111847\n", + "\t210 8055.881172 8611.942072 0.130894 0.108252\n", + "\t215 8039.969032 8603.779801 0.126358 0.103887\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 5/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.89650e+42 erg / s Luminosity absorbed = 1.32067e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 19337.291241 17785.274576 0.270153 0.306363\n", + "\t5 22592.595297 21098.722865 0.136920 0.150394\n", + "\t10 23285.393456 21889.872853 0.109207 0.117945\n", + "\t15 23122.516303 21814.999257 0.098554 0.105379\n", + "\t20 22709.273345 21484.857487 0.092178 0.097576\n", + "\t25 21980.507524 20868.094624 0.089448 0.094251\n", + "\t30 20907.299125 19961.904347 0.090564 0.095136\n", + "\t35 19878.350356 19040.763859 0.092653 0.097343\n", + "\t40 18595.512520 17894.437326 0.098847 0.103005\n", + "\t45 17339.057651 16807.693319 0.106149 0.107974\n", + "\t50 15794.453426 15362.328757 0.120273 0.122100\n", + "\t55 14033.865213 13619.150411 0.144822 0.150211\n", + "\t60 12258.337451 12017.493716 0.187633 0.193773\n", + "\t65 10849.973249 10910.161548 0.233686 0.231460\n", + "\t70 10196.773086 10460.227307 0.260404 0.243385\n", + "\t75 10011.550967 10319.638202 0.258982 0.235796\n", + "\t80 9888.790308 10171.471779 0.252716 0.232786\n", + "\t85 9760.412746 10095.034363 0.249461 0.223191\n", + "\t90 9596.708364 10001.062608 0.247828 0.215620\n", + "\t95 9549.777257 9957.963976 0.235729 0.204434\n", + "\t100 9432.561960 9835.949600 0.232594 0.202949\n", + "\t105 9347.553652 9790.333119 0.226183 0.193053\n", + "\t110 9278.843901 9685.887970 0.220521 0.189031\n", + "\t115 9253.390705 9668.390274 0.209843 0.179259\n", + "\t120 9200.145781 9625.488665 0.204575 0.172673\n", + "\t125 9119.450917 9544.269710 0.199674 0.169047\n", + "\t130 9068.333536 9482.576963 0.193760 0.163112\n", + "\t135 9000.651683 9434.093136 0.188192 0.158375\n", + "\t140 9003.427215 9427.040736 0.177094 0.149212\n", + "\t145 8990.573400 9393.195721 0.168436 0.143074\n", + "\t150 8941.331178 9363.940241 0.162812 0.137745\n", + "\t155 8903.292918 9308.334814 0.158086 0.134036\n", + "\t160 8872.487593 9284.914172 0.153814 0.129720\n", + "\t165 8853.965174 9262.204725 0.146998 0.124334\n", + "\t170 8831.227420 9257.308024 0.140738 0.118703\n", + "\t175 8751.598029 9181.075956 0.139141 0.117517\n", + "\t180 8757.994139 9137.539664 0.133106 0.113970\n", + "\t185 8748.758957 9117.715299 0.127799 0.109614\n", + "\t190 8739.461589 9099.968913 0.122879 0.105135\n", + "\t195 8705.022057 9125.450166 0.119449 0.100419\n", + "\t200 8682.105330 9088.203900 0.115308 0.097487\n", + "\t205 8647.041572 9035.134612 0.111847 0.095245\n", + "\t210 8611.942072 9014.882318 0.108252 0.091627\n", + "\t215 8603.779801 8988.733605 0.103887 0.088560\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 6/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.81705e+42 erg / s Luminosity absorbed = 1.32768e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 17785.274576 16849.548861 0.306363 0.339130\n", + "\t5 21098.722865 19982.766676 0.150394 0.168907\n", + "\t10 21889.872853 20814.585317 0.117945 0.132588\n", + "\t15 21814.999257 20836.878477 0.105379 0.116916\n", + "\t20 21484.857487 20562.035214 0.097576 0.108511\n", + "\t25 20868.094624 20073.230073 0.094251 0.103236\n", + "\t30 19961.904347 19318.326762 0.095136 0.102658\n", + "\t35 19040.763859 18473.243508 0.097343 0.103772\n", + "\t40 17894.437326 17473.192259 0.103005 0.108271\n", + "\t45 16807.693319 16351.507427 0.107974 0.114545\n", + "\t50 15362.328757 14936.801780 0.122100 0.128970\n", + "\t55 13619.150411 13344.023456 0.150211 0.156169\n", + "\t60 12017.493716 11852.938239 0.193773 0.199002\n", + "\t65 10910.161548 10902.808440 0.231460 0.231027\n", + "\t70 10460.227307 10539.550594 0.243385 0.237316\n", + "\t75 10319.638202 10409.216001 0.235796 0.230407\n", + "\t80 10171.471779 10345.447196 0.232786 0.220309\n", + "\t85 10095.034363 10265.687128 0.223191 0.210362\n", + "\t90 10001.062608 10200.853852 0.215620 0.200839\n", + "\t95 9957.963976 10128.975173 0.204434 0.191325\n", + "\t100 9835.949600 10083.193955 0.202949 0.183343\n", + "\t105 9790.333119 10065.440414 0.193053 0.173337\n", + "\t110 9685.887970 9946.066164 0.189031 0.169955\n", + "\t115 9668.390274 9941.685970 0.179259 0.160889\n", + "\t120 9625.488665 9855.119991 0.172673 0.156500\n", + "\t125 9544.269710 9767.913949 0.169047 0.153230\n", + "\t130 9482.576963 9741.390095 0.163112 0.145382\n", + "\t135 9434.093136 9699.488937 0.158375 0.141292\n", + "\t140 9427.040736 9699.638927 0.149212 0.133026\n", + "\t145 9393.195721 9647.447500 0.143074 0.127877\n", + "\t150 9363.940241 9658.721246 0.137745 0.121130\n", + "\t155 9308.334814 9557.671246 0.134036 0.119500\n", + "\t160 9284.914172 9548.568868 0.129720 0.114677\n", + "\t165 9262.204725 9518.814190 0.124334 0.110231\n", + "\t170 9257.308024 9536.709699 0.118703 0.104798\n", + "\t175 9181.075956 9472.954238 0.117517 0.102829\n", + "\t180 9137.539664 9430.024609 0.113970 0.099642\n", + "\t185 9117.715299 9448.801554 0.109614 0.094832\n", + "\t190 9099.968913 9382.195031 0.105135 0.092690\n", + "\t195 9125.450166 9369.232768 0.100419 0.089226\n", + "\t200 9088.203900 9326.009435 0.097487 0.086697\n", + "\t205 9035.134612 9283.305714 0.095245 0.084703\n", + "\t210 9014.882318 9286.349681 0.091627 0.080969\n", + "\t215 8988.733605 9238.697233 0.088560 0.078968\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 7/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.92481e+42 erg / s Luminosity absorbed = 1.31825e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 16849.548861 16209.755588 0.339130 0.370417\n", + "\t5 19982.766676 19077.723696 0.168907 0.191210\n", + "\t10 20814.585317 19911.636284 0.132588 0.149223\n", + "\t15 20836.878477 19980.515105 0.116916 0.131862\n", + "\t20 20562.035214 19730.173414 0.108511 0.122104\n", + "\t25 20073.230073 19351.203251 0.103236 0.114934\n", + "\t30 19318.326762 18708.163597 0.102658 0.112862\n", + "\t35 18473.243508 17970.785739 0.103772 0.112251\n", + "\t40 17473.192259 17014.462048 0.108271 0.115784\n", + "\t45 16351.507427 15913.141457 0.114545 0.123177\n", + "\t50 14936.801780 14504.845122 0.128970 0.139496\n", + "\t55 13344.023456 12991.456904 0.156169 0.170236\n", + "\t60 11852.938239 11647.196885 0.199002 0.211901\n", + "\t65 10902.808440 10883.735491 0.231027 0.233586\n", + "\t70 10539.550594 10569.881836 0.237316 0.237468\n", + "\t75 10409.216001 10440.537574 0.230407 0.230231\n", + "\t80 10345.447196 10380.171949 0.220309 0.217920\n", + "\t85 10265.687128 10330.778351 0.210362 0.207626\n", + "\t90 10200.853852 10261.329728 0.200839 0.199073\n", + "\t95 10128.975173 10197.887886 0.191325 0.189033\n", + "\t100 10083.193955 10136.908527 0.183343 0.183036\n", + "\t105 10065.440414 10178.032441 0.173337 0.167191\n", + "\t110 9946.066164 10053.893696 0.169955 0.165158\n", + "\t115 9941.685970 10048.474963 0.160889 0.154498\n", + "\t120 9855.119991 9977.360250 0.156500 0.149005\n", + "\t125 9767.913949 9930.208870 0.153230 0.143528\n", + "\t130 9741.390095 9915.603925 0.145382 0.136017\n", + "\t135 9699.488937 9866.200366 0.141292 0.131511\n", + "\t140 9699.638927 9814.951031 0.133026 0.126961\n", + "\t145 9647.447500 9798.071238 0.127877 0.120533\n", + "\t150 9658.721246 9808.797163 0.121130 0.113663\n", + "\t155 9557.671246 9793.162005 0.119500 0.108977\n", + "\t160 9548.568868 9725.343672 0.114677 0.106289\n", + "\t165 9518.814190 9698.623879 0.110231 0.102227\n", + "\t170 9536.709699 9689.497056 0.104798 0.097970\n", + "\t175 9472.954238 9639.823072 0.102829 0.095198\n", + "\t180 9430.024609 9580.700640 0.099642 0.093124\n", + "\t185 9448.801554 9567.030309 0.094832 0.089470\n", + "\t190 9382.195031 9515.358467 0.092690 0.087009\n", + "\t195 9369.232768 9542.712152 0.089226 0.082585\n", + "\t200 9326.009435 9489.230843 0.086697 0.080734\n", + "\t205 9283.305714 9459.468892 0.084703 0.078167\n", + "\t210 9286.349681 9417.719379 0.080969 0.075863\n", + "\t215 9238.697233 9392.331097 0.078968 0.073609\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 8/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.81528e+42 erg / s Luminosity absorbed = 1.32994e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 16209.755588 15749.985522 0.370417 0.402278\n", + "\t5 19077.723696 18407.128630 0.191210 0.213512\n", + "\t10 19911.636284 19251.095237 0.149223 0.165039\n", + "\t15 19980.515105 19350.147374 0.131862 0.144273\n", + "\t20 19730.173414 19223.160804 0.122104 0.131226\n", + "\t25 19351.203251 18903.086783 0.114934 0.122602\n", + "\t30 18708.163597 18263.389823 0.112862 0.120931\n", + "\t35 17970.785739 17583.304766 0.112251 0.118426\n", + "\t40 17014.462048 16653.952428 0.115784 0.121839\n", + "\t45 15913.141457 15489.395480 0.123177 0.131262\n", + "\t50 14504.845122 14098.052167 0.139496 0.150432\n", + "\t55 12991.456904 12695.327152 0.170236 0.181755\n", + "\t60 11647.196885 11464.075634 0.211901 0.221590\n", + "\t65 10883.735491 10765.874609 0.233586 0.241479\n", + "\t70 10569.881836 10471.508089 0.237468 0.244550\n", + "\t75 10440.537574 10381.748027 0.230231 0.233189\n", + "\t80 10380.171949 10333.422176 0.217920 0.221514\n", + "\t85 10330.778351 10316.315191 0.207626 0.206450\n", + "\t90 10261.329728 10263.249639 0.199073 0.197000\n", + "\t95 10197.887886 10202.942850 0.189033 0.187554\n", + "\t100 10136.908527 10114.185235 0.183036 0.182414\n", + "\t105 10178.032441 10116.105048 0.167191 0.169095\n", + "\t110 10053.893696 10016.312332 0.165158 0.165532\n", + "\t115 10048.474963 10003.578670 0.154498 0.156078\n", + "\t120 9977.360250 10000.442227 0.149005 0.145977\n", + "\t125 9930.208870 9936.034025 0.143528 0.140875\n", + "\t130 9915.603925 9958.866790 0.136017 0.132945\n", + "\t135 9866.200366 9870.055986 0.131511 0.129994\n", + "\t140 9814.951031 9831.256270 0.126961 0.123960\n", + "\t145 9798.071238 9849.863589 0.120533 0.116870\n", + "\t150 9808.797163 9852.694348 0.113663 0.110614\n", + "\t155 9793.162005 9819.575708 0.108977 0.106679\n", + "\t160 9725.343672 9758.739520 0.106289 0.103636\n", + "\t165 9698.623879 9728.138440 0.102227 0.099698\n", + "\t170 9689.497056 9715.576792 0.097970 0.095781\n", + "\t175 9639.823072 9666.766972 0.095198 0.093382\n", + "\t180 9580.700640 9630.084835 0.093124 0.090494\n", + "\t185 9567.030309 9583.778725 0.089470 0.087729\n", + "\t190 9515.358467 9551.138946 0.087009 0.085357\n", + "\t195 9542.712152 9573.820919 0.082585 0.080667\n", + "\t200 9489.230843 9506.186949 0.080734 0.079204\n", + "\t205 9459.468892 9469.368983 0.078167 0.076713\n", + "\t210 9417.719379 9433.468467 0.075863 0.074497\n", + "\t215 9392.331097 9411.402869 0.073609 0.072252\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 9/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.74528e+42 erg / s Luminosity absorbed = 1.33788e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 15749.985522 15458.227551 0.402278 0.427376\n", + "\t5 18407.128630 17798.747665 0.213512 0.235997\n", + "\t10 19251.095237 18657.315752 0.165039 0.181372\n", + "\t15 19350.147374 18805.169772 0.144273 0.158406\n", + "\t20 19223.160804 18723.570753 0.131226 0.142359\n", + "\t25 18903.086783 18431.317315 0.122602 0.132699\n", + "\t30 18263.389823 17838.583491 0.120931 0.129882\n", + "\t35 17583.304766 17223.765177 0.118426 0.126423\n", + "\t40 16653.952428 16303.461774 0.121839 0.129604\n", + "\t45 15489.395480 15147.982602 0.131262 0.138048\n", + "\t50 14098.052167 13738.955797 0.150432 0.160394\n", + "\t55 12695.327152 12406.424011 0.181755 0.193471\n", + "\t60 11464.075634 11270.721996 0.221590 0.233103\n", + "\t65 10765.874609 10574.233335 0.241479 0.256338\n", + "\t70 10471.508089 10298.222974 0.244550 0.259000\n", + "\t75 10381.748027 10214.316462 0.233189 0.248513\n", + "\t80 10333.422176 10202.758039 0.221514 0.232142\n", + "\t85 10316.315191 10166.178983 0.206450 0.216863\n", + "\t90 10263.249639 10115.022778 0.197000 0.205195\n", + "\t95 10202.942850 10080.125264 0.187554 0.192643\n", + "\t100 10114.185235 10048.036098 0.182414 0.184170\n", + "\t105 10116.105048 10046.911911 0.169095 0.171504\n", + "\t110 10016.312332 9981.713697 0.165532 0.164493\n", + "\t115 10003.578670 9927.658845 0.156078 0.157250\n", + "\t120 10000.442227 9945.885957 0.145977 0.146737\n", + "\t125 9936.034025 9855.570556 0.140875 0.143805\n", + "\t130 9958.866790 9879.558216 0.132945 0.135379\n", + "\t135 9870.055986 9839.980238 0.129994 0.128972\n", + "\t140 9831.256270 9791.478622 0.123960 0.123739\n", + "\t145 9849.863589 9780.099754 0.116870 0.117938\n", + "\t150 9852.694348 9778.970512 0.110614 0.111651\n", + "\t155 9819.575708 9751.095673 0.106679 0.107421\n", + "\t160 9758.739520 9730.283796 0.103636 0.103129\n", + "\t165 9728.138440 9673.844772 0.099698 0.100064\n", + "\t170 9715.576792 9701.542658 0.095781 0.094503\n", + "\t175 9666.766972 9631.239591 0.093382 0.093347\n", + "\t180 9630.084835 9596.608164 0.090494 0.090629\n", + "\t185 9583.778725 9555.849242 0.087729 0.087554\n", + "\t190 9551.138946 9540.583353 0.085357 0.084597\n", + "\t195 9573.820919 9546.132704 0.080667 0.080753\n", + "\t200 9506.186949 9492.322767 0.079204 0.078968\n", + "\t205 9469.368983 9428.838067 0.076713 0.077329\n", + "\t210 9433.468467 9399.859205 0.074497 0.074898\n", + "\t215 9411.402869 9390.115487 0.072252 0.072139\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 10/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.62875e+42 erg / s Luminosity absorbed = 1.35048e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 15458.227551 15259.085998 0.427376 0.444473\n", + "\t5 17798.747665 17355.691821 0.235997 0.255545\n", + "\t10 18657.315752 18157.173276 0.181372 0.196750\n", + "\t15 18805.169772 18349.330494 0.158406 0.169240\n", + "\t20 18723.570753 18277.884283 0.142359 0.151949\n", + "\t25 18431.317315 17992.846563 0.132699 0.141698\n", + "\t30 17838.583491 17444.630868 0.129882 0.136951\n", + "\t35 17223.765177 16745.087671 0.126423 0.135394\n", + "\t40 16303.461774 15888.514666 0.129604 0.138124\n", + "\t45 15147.982602 14787.685134 0.138048 0.146045\n", + "\t50 13738.955797 13402.515209 0.160394 0.171287\n", + "\t55 12406.424011 12139.191744 0.193471 0.204516\n", + "\t60 11270.721996 11086.341547 0.233103 0.242949\n", + "\t65 10574.233335 10451.528280 0.256338 0.266372\n", + "\t70 10298.222974 10217.549030 0.259000 0.263445\n", + "\t75 10214.316462 10121.607904 0.248513 0.252799\n", + "\t80 10202.758039 10056.072995 0.232142 0.242837\n", + "\t85 10166.178983 10027.549221 0.216863 0.224978\n", + "\t90 10115.022778 10006.260486 0.205195 0.211536\n", + "\t95 10080.125264 9970.058892 0.192643 0.199547\n", + "\t100 10048.036098 9952.284172 0.184170 0.188162\n", + "\t105 10046.911911 9922.490726 0.171504 0.177315\n", + "\t110 9981.713697 9851.368434 0.164493 0.170877\n", + "\t115 9927.658845 9855.665720 0.157250 0.160089\n", + "\t120 9945.885957 9777.411625 0.146737 0.156330\n", + "\t125 9855.570556 9749.340898 0.143805 0.149945\n", + "\t130 9879.558216 9749.231328 0.135379 0.139874\n", + "\t135 9839.980238 9751.632383 0.128972 0.131955\n", + "\t140 9791.478622 9741.260648 0.123739 0.124980\n", + "\t145 9780.099754 9708.857324 0.117938 0.119626\n", + "\t150 9778.970512 9654.790111 0.111651 0.116149\n", + "\t155 9751.095673 9655.682112 0.107421 0.110371\n", + "\t160 9730.283796 9627.661123 0.103129 0.106483\n", + "\t165 9673.844772 9619.013629 0.100064 0.101149\n", + "\t170 9701.542658 9598.251328 0.094503 0.096994\n", + "\t175 9631.239591 9542.422787 0.093347 0.095185\n", + "\t180 9596.608164 9503.474428 0.090629 0.092382\n", + "\t185 9555.849242 9503.126726 0.087554 0.088157\n", + "\t190 9540.583353 9466.285373 0.084597 0.085764\n", + "\t195 9546.132704 9474.500261 0.080753 0.081921\n", + "\t200 9492.322767 9429.140151 0.078968 0.079748\n", + "\t205 9428.838067 9377.256444 0.077329 0.077953\n", + "\t210 9399.859205 9321.736943 0.074898 0.076356\n", + "\t215 9390.115487 9308.095919 0.072139 0.073361\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 11/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.63952e+42 erg / s Luminosity absorbed = 1.34988e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 15259.085998 15069.724222 0.444473 0.464318\n", + "\t5 17355.691821 17013.949284 0.255545 0.272917\n", + "\t10 18157.173276 17767.853217 0.196750 0.211868\n", + "\t15 18349.330494 17986.842558 0.169240 0.181022\n", + "\t20 18277.884283 17925.349868 0.151949 0.162523\n", + "\t25 17992.846563 17673.353533 0.141698 0.150667\n", + "\t30 17444.630868 17128.254440 0.136951 0.145715\n", + "\t35 16745.087671 16443.113346 0.135394 0.142570\n", + "\t40 15888.514666 15546.604684 0.138124 0.146858\n", + "\t45 14787.685134 14412.527255 0.146045 0.156775\n", + "\t50 13402.515209 13084.050786 0.171287 0.184305\n", + "\t55 12139.191744 11903.396592 0.204516 0.217070\n", + "\t60 11086.341547 10971.633564 0.242949 0.249812\n", + "\t65 10451.528280 10371.162612 0.266372 0.269907\n", + "\t70 10217.549030 10144.176823 0.263445 0.266762\n", + "\t75 10121.607904 10026.528323 0.252799 0.258907\n", + "\t80 10056.072995 9967.778334 0.242837 0.246971\n", + "\t85 10027.549221 9947.688810 0.224978 0.230995\n", + "\t90 10006.260486 9922.877208 0.211536 0.217542\n", + "\t95 9970.058892 9902.150412 0.199547 0.202696\n", + "\t100 9952.284172 9878.071641 0.188162 0.191287\n", + "\t105 9922.490726 9807.207571 0.177315 0.182578\n", + "\t110 9851.368434 9776.057031 0.170877 0.174491\n", + "\t115 9855.665720 9793.114726 0.160089 0.161623\n", + "\t120 9777.411625 9720.241714 0.156330 0.157286\n", + "\t125 9749.340898 9700.181396 0.149945 0.149985\n", + "\t130 9749.231328 9695.255664 0.139874 0.140861\n", + "\t135 9751.632383 9651.303851 0.131955 0.136572\n", + "\t140 9741.260648 9636.967179 0.124980 0.129646\n", + "\t145 9708.857324 9635.475972 0.119626 0.121945\n", + "\t150 9654.790111 9571.647264 0.116149 0.118896\n", + "\t155 9655.682112 9586.792983 0.110371 0.112436\n", + "\t160 9627.661123 9538.190414 0.106483 0.109002\n", + "\t165 9619.013629 9517.650604 0.101149 0.104434\n", + "\t170 9598.251328 9532.764735 0.096994 0.099100\n", + "\t175 9542.422787 9441.089708 0.095185 0.098744\n", + "\t180 9503.474428 9430.644418 0.092382 0.094151\n", + "\t185 9503.126726 9412.404881 0.088157 0.090928\n", + "\t190 9466.285373 9369.906921 0.085764 0.088580\n", + "\t195 9474.500261 9389.026063 0.081921 0.084101\n", + "\t200 9429.140151 9341.755304 0.079748 0.082064\n", + "\t205 9377.256444 9306.842129 0.077953 0.079302\n", + "\t210 9321.736943 9271.674811 0.076356 0.076932\n", + "\t215 9308.095919 9265.772634 0.073361 0.074147\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 12/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.58967e+42 erg / s Luminosity absorbed = 1.35563e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 15069.724222 14917.931458 0.464318 0.481757\n", + "\t5 17013.949284 16681.387543 0.272917 0.292093\n", + "\t10 17767.853217 17391.570403 0.211868 0.226847\n", + "\t15 17986.842558 17612.334432 0.181022 0.193661\n", + "\t20 17925.349868 17584.544355 0.162523 0.172830\n", + "\t25 17673.353533 17308.500502 0.150667 0.161009\n", + "\t30 17128.254440 16848.358222 0.145715 0.152924\n", + "\t35 16443.113346 16088.743313 0.142570 0.151807\n", + "\t40 15546.604684 15092.105047 0.146858 0.158782\n", + "\t45 14412.527255 13989.676053 0.156775 0.171054\n", + "\t50 13084.050786 12767.134507 0.184305 0.197526\n", + "\t55 11903.396592 11665.941714 0.217070 0.230936\n", + "\t60 10971.633564 10763.915769 0.249812 0.268287\n", + "\t65 10371.162612 10208.482170 0.269907 0.284396\n", + "\t70 10144.176823 10000.818128 0.266762 0.278384\n", + "\t75 10026.528323 9953.990206 0.258907 0.262874\n", + "\t80 9967.778334 9892.024533 0.246971 0.250412\n", + "\t85 9947.688810 9879.684118 0.230995 0.235809\n", + "\t90 9922.877208 9832.746752 0.217542 0.222649\n", + "\t95 9902.150412 9789.877020 0.202696 0.210288\n", + "\t100 9878.071641 9725.587076 0.191287 0.201976\n", + "\t105 9807.207571 9711.994277 0.182578 0.188699\n", + "\t110 9776.057031 9672.974010 0.174491 0.180883\n", + "\t115 9793.114726 9719.612578 0.161623 0.166094\n", + "\t120 9720.241714 9608.051693 0.157286 0.164237\n", + "\t125 9700.181396 9566.806427 0.149985 0.157185\n", + "\t130 9695.255664 9562.261448 0.140861 0.146888\n", + "\t135 9651.303851 9538.230091 0.136572 0.141509\n", + "\t140 9636.967179 9571.976011 0.129646 0.131045\n", + "\t145 9635.475972 9524.539575 0.121945 0.127051\n", + "\t150 9571.647264 9507.344602 0.118896 0.121224\n", + "\t155 9586.792983 9434.355287 0.112436 0.118623\n", + "\t160 9538.190414 9420.685142 0.109002 0.112938\n", + "\t165 9517.650604 9440.729541 0.104434 0.107137\n", + "\t170 9532.764735 9416.143475 0.099100 0.104008\n", + "\t175 9441.089708 9346.265534 0.098744 0.102112\n", + "\t180 9430.644418 9390.130265 0.094151 0.095653\n", + "\t185 9412.404881 9320.179683 0.090928 0.093619\n", + "\t190 9369.906921 9291.694311 0.088580 0.090622\n", + "\t195 9389.026063 9299.466455 0.084101 0.086813\n", + "\t200 9341.755304 9246.966845 0.082064 0.084704\n", + "\t205 9306.842129 9214.024411 0.079302 0.082041\n", + "\t210 9271.674811 9170.332366 0.076932 0.079649\n", + "\t215 9265.772634 9162.214771 0.074147 0.077050\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 13/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.56386e+42 erg / s Luminosity absorbed = 1.35896e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14917.931458 14816.291445 0.481757 0.495850\n", + "\t5 16681.387543 16445.160515 0.292093 0.306152\n", + "\t10 17391.570403 17149.320789 0.226847 0.236870\n", + "\t15 17612.334432 17371.480447 0.193661 0.202580\n", + "\t20 17584.544355 17309.773020 0.172830 0.181312\n", + "\t25 17308.500502 17014.985923 0.161009 0.169232\n", + "\t30 16848.358222 16530.310429 0.152924 0.159637\n", + "\t35 16088.743313 15829.826213 0.151807 0.157504\n", + "\t40 15092.105047 14808.324702 0.158782 0.164809\n", + "\t45 13989.676053 13718.544582 0.171054 0.179536\n", + "\t50 12767.134507 12550.334846 0.197526 0.206525\n", + "\t55 11665.941714 11504.542052 0.230936 0.240235\n", + "\t60 10763.915769 10588.447548 0.268287 0.281583\n", + "\t65 10208.482170 10050.750010 0.284396 0.297889\n", + "\t70 10000.818128 9892.426668 0.278384 0.288697\n", + "\t75 9953.990206 9829.570089 0.262874 0.274457\n", + "\t80 9892.024533 9814.637274 0.250412 0.255496\n", + "\t85 9879.684118 9784.637874 0.235809 0.242381\n", + "\t90 9832.746752 9737.840160 0.222649 0.228370\n", + "\t95 9789.877020 9708.488504 0.210288 0.214617\n", + "\t100 9725.587076 9674.176935 0.201976 0.203487\n", + "\t105 9711.994277 9628.213177 0.188699 0.194663\n", + "\t110 9672.974010 9613.777761 0.180883 0.182497\n", + "\t115 9719.612578 9625.509249 0.166094 0.170664\n", + "\t120 9608.051693 9559.893129 0.164237 0.166325\n", + "\t125 9566.806427 9553.080449 0.157185 0.156412\n", + "\t130 9562.261448 9494.968899 0.146888 0.150355\n", + "\t135 9538.230091 9495.810034 0.141509 0.143296\n", + "\t140 9571.976011 9543.012317 0.131045 0.131393\n", + "\t145 9524.539575 9481.775076 0.127051 0.128468\n", + "\t150 9507.344602 9431.919378 0.121224 0.124537\n", + "\t155 9434.355287 9388.814400 0.118623 0.119913\n", + "\t160 9420.685142 9373.393445 0.112938 0.114866\n", + "\t165 9440.729541 9377.920730 0.107137 0.109589\n", + "\t170 9416.143475 9342.015533 0.104008 0.106559\n", + "\t175 9346.265534 9321.429425 0.102112 0.102646\n", + "\t180 9390.130265 9300.726449 0.095653 0.098686\n", + "\t185 9320.179683 9291.181373 0.093619 0.094208\n", + "\t190 9291.694311 9254.708746 0.090622 0.091497\n", + "\t195 9299.466455 9235.683723 0.086813 0.088512\n", + "\t200 9246.966845 9193.500046 0.084704 0.085947\n", + "\t205 9214.024411 9152.647188 0.082041 0.083762\n", + "\t210 9170.332366 9098.416126 0.079649 0.081872\n", + "\t215 9162.214771 9086.843405 0.077050 0.079206\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 14/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.51880e+42 erg / s Luminosity absorbed = 1.36449e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14816.291445 14741.524854 0.495850 0.505536\n", + "\t5 16445.160515 16302.427661 0.306152 0.315487\n", + "\t10 17149.320789 16921.612407 0.236870 0.247221\n", + "\t15 17371.480447 17079.673386 0.202580 0.212766\n", + "\t20 17309.773020 17010.805933 0.181312 0.189605\n", + "\t25 17014.985923 16681.660854 0.169232 0.176962\n", + "\t30 16530.310429 16188.860361 0.159637 0.167142\n", + "\t35 15829.826213 15452.165154 0.157504 0.166547\n", + "\t40 14808.324702 14505.502335 0.164809 0.173630\n", + "\t45 13718.544582 13400.103464 0.179536 0.191037\n", + "\t50 12550.334846 12278.064504 0.206525 0.218663\n", + "\t55 11504.542052 11302.809564 0.240235 0.251424\n", + "\t60 10588.447548 10464.116701 0.281583 0.293720\n", + "\t65 10050.750010 9919.047392 0.297889 0.311649\n", + "\t70 9892.426668 9754.714369 0.288697 0.304236\n", + "\t75 9829.570089 9662.426041 0.274457 0.292435\n", + "\t80 9814.637274 9721.976230 0.255496 0.263300\n", + "\t85 9784.637874 9655.293326 0.242381 0.251554\n", + "\t90 9737.840160 9573.766158 0.228370 0.242013\n", + "\t95 9708.488504 9556.790991 0.214617 0.227626\n", + "\t100 9674.176935 9543.057395 0.203487 0.214705\n", + "\t105 9628.213177 9490.271762 0.194663 0.204473\n", + "\t110 9613.777761 9491.404647 0.182497 0.190737\n", + "\t115 9625.509249 9471.396094 0.170664 0.180957\n", + "\t120 9559.893129 9461.898387 0.166325 0.170591\n", + "\t125 9553.080449 9447.671563 0.156412 0.161765\n", + "\t130 9494.968899 9406.334636 0.150355 0.155673\n", + "\t135 9495.810034 9360.098680 0.143296 0.150447\n", + "\t140 9543.012317 9388.773609 0.131393 0.140886\n", + "\t145 9481.775076 9367.112154 0.128468 0.134344\n", + "\t150 9431.919378 9347.950436 0.124537 0.128462\n", + "\t155 9388.814400 9303.913877 0.119913 0.124519\n", + "\t160 9373.393445 9246.031233 0.114866 0.121280\n", + "\t165 9377.920730 9265.111188 0.109589 0.114830\n", + "\t170 9342.015533 9233.722837 0.106559 0.110679\n", + "\t175 9321.429425 9202.246731 0.102646 0.107131\n", + "\t180 9300.726449 9218.089627 0.098686 0.101477\n", + "\t185 9291.181373 9208.648590 0.094208 0.096988\n", + "\t190 9254.708746 9187.962618 0.091497 0.093813\n", + "\t195 9235.683723 9162.184582 0.088512 0.090789\n", + "\t200 9193.500046 9154.961055 0.085947 0.086963\n", + "\t205 9152.647188 9100.935891 0.083762 0.085243\n", + "\t210 9098.416126 9049.060820 0.081872 0.083494\n", + "\t215 9086.843405 9007.634087 0.079206 0.081732\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 15/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.46813e+42 erg / s Luminosity absorbed = 1.37003e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14741.524854 14700.797294 0.505536 0.508817\n", + "\t5 16302.427661 16129.029953 0.315487 0.325829\n", + "\t10 16921.612407 16739.045746 0.247221 0.255196\n", + "\t15 17079.673386 16877.600406 0.212766 0.219726\n", + "\t20 17010.805933 16753.163119 0.189605 0.199363\n", + "\t25 16681.660854 16440.254561 0.176962 0.183494\n", + "\t30 16188.860361 15944.187087 0.167142 0.175580\n", + "\t35 15452.165154 15198.689814 0.166547 0.174046\n", + "\t40 14505.502335 14284.787110 0.173630 0.179963\n", + "\t45 13400.103464 13136.785727 0.191037 0.201713\n", + "\t50 12278.064504 12122.287873 0.218663 0.225248\n", + "\t55 11302.809564 11201.141803 0.251424 0.257274\n", + "\t60 10464.116701 10422.125928 0.293720 0.293363\n", + "\t65 9919.047392 9858.883913 0.311649 0.314089\n", + "\t70 9754.714369 9668.876272 0.304236 0.307468\n", + "\t75 9662.426041 9638.238290 0.292435 0.287820\n", + "\t80 9721.976230 9619.594622 0.263300 0.267199\n", + "\t85 9655.293326 9612.433962 0.251554 0.251954\n", + "\t90 9573.766158 9518.071270 0.242013 0.243992\n", + "\t95 9556.790991 9482.387456 0.227626 0.231885\n", + "\t100 9543.057395 9480.895313 0.214705 0.217102\n", + "\t105 9490.271762 9417.286049 0.204473 0.208232\n", + "\t110 9491.404647 9390.263510 0.190737 0.197420\n", + "\t115 9471.396094 9390.444305 0.180957 0.184848\n", + "\t120 9461.898387 9366.964720 0.170591 0.175256\n", + "\t125 9447.671563 9364.346951 0.161765 0.165437\n", + "\t130 9406.334636 9359.909760 0.155673 0.157065\n", + "\t135 9360.098680 9331.935249 0.150447 0.151009\n", + "\t140 9388.773609 9295.094988 0.140886 0.145477\n", + "\t145 9367.112154 9286.546131 0.134344 0.138151\n", + "\t150 9347.950436 9250.332848 0.128462 0.133313\n", + "\t155 9303.913877 9224.966666 0.124519 0.127288\n", + "\t160 9246.031233 9192.896201 0.121280 0.122356\n", + "\t165 9265.111188 9169.143728 0.114830 0.117800\n", + "\t170 9233.722837 9133.827174 0.110679 0.114357\n", + "\t175 9202.246731 9151.399328 0.107131 0.107990\n", + "\t180 9218.089627 9159.106703 0.101477 0.103143\n", + "\t185 9208.648590 9129.238399 0.096988 0.099730\n", + "\t190 9187.962618 9104.711875 0.093813 0.097049\n", + "\t195 9162.184582 9088.501384 0.090789 0.093356\n", + "\t200 9154.961055 9052.867418 0.086963 0.090758\n", + "\t205 9100.935891 9006.932103 0.085243 0.088057\n", + "\t210 9049.060820 8943.939575 0.083494 0.087197\n", + "\t215 9007.634087 8929.434956 0.081732 0.084054\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 16/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.55666e+42 erg / s Luminosity absorbed = 1.36172e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14700.797294 14675.336961 0.508817 0.510940\n", + "\t5 16129.029953 15994.651940 0.325829 0.333397\n", + "\t10 16739.045746 16570.419311 0.255196 0.264239\n", + "\t15 16877.600406 16688.537285 0.219726 0.227988\n", + "\t20 16753.163119 16527.258321 0.199363 0.207736\n", + "\t25 16440.254561 16196.252686 0.183494 0.191596\n", + "\t30 15944.187087 15704.334770 0.175580 0.184110\n", + "\t35 15198.689814 14943.780055 0.174046 0.182320\n", + "\t40 14284.787110 13949.133956 0.179963 0.191907\n", + "\t45 13136.785727 12893.597371 0.201713 0.212320\n", + "\t50 12122.287873 11912.477314 0.225248 0.240345\n", + "\t55 11201.141803 11083.883451 0.257274 0.269699\n", + "\t60 10422.125928 10344.582215 0.293363 0.304216\n", + "\t65 9858.883913 9763.974272 0.314089 0.330538\n", + "\t70 9668.876272 9604.801670 0.307468 0.317302\n", + "\t75 9638.238290 9559.687164 0.287820 0.298306\n", + "\t80 9619.594622 9527.009613 0.267199 0.279763\n", + "\t85 9612.433962 9506.391059 0.251954 0.263241\n", + "\t90 9518.071270 9504.460716 0.243992 0.245333\n", + "\t95 9482.387456 9406.362307 0.231885 0.239755\n", + "\t100 9480.895313 9408.214083 0.217102 0.222648\n", + "\t105 9417.286049 9364.636404 0.208232 0.212189\n", + "\t110 9390.263510 9307.327448 0.197420 0.204706\n", + "\t115 9390.444305 9279.999842 0.184848 0.193863\n", + "\t120 9366.964720 9238.041769 0.175256 0.185912\n", + "\t125 9364.346951 9257.451708 0.165437 0.175557\n", + "\t130 9359.909760 9260.204316 0.157065 0.164358\n", + "\t135 9331.935249 9213.576964 0.151009 0.159131\n", + "\t140 9295.094988 9199.068252 0.145477 0.151302\n", + "\t145 9286.546131 9205.022557 0.138151 0.144217\n", + "\t150 9250.332848 9204.560955 0.133313 0.136431\n", + "\t155 9224.966666 9169.216870 0.127288 0.130946\n", + "\t160 9192.896201 9146.924436 0.122356 0.125373\n", + "\t165 9169.143728 9108.426283 0.117800 0.121309\n", + "\t170 9133.827174 9081.036369 0.114357 0.118747\n", + "\t175 9151.399328 9057.063766 0.107990 0.113409\n", + "\t180 9159.106703 9050.563627 0.103143 0.108158\n", + "\t185 9129.238399 9042.510978 0.099730 0.103755\n", + "\t190 9104.711875 9018.719150 0.097049 0.100633\n", + "\t195 9088.501384 9028.408547 0.093356 0.095858\n", + "\t200 9052.867418 8959.354153 0.090758 0.095162\n", + "\t205 9006.932103 8922.859135 0.088057 0.092022\n", + "\t210 8943.939575 8894.757395 0.087197 0.089289\n", + "\t215 8929.434956 8845.408250 0.084054 0.087283\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 17/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.49691e+42 erg / s Luminosity absorbed = 1.36833e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14675.336961 14626.156540 0.510940 0.519047\n", + "\t5 15994.651940 15798.406058 0.333397 0.347915\n", + "\t10 16570.419311 16382.176183 0.264239 0.274867\n", + "\t15 16688.537285 16504.579428 0.227988 0.236788\n", + "\t20 16527.258321 16330.206061 0.207736 0.214864\n", + "\t25 16196.252686 15991.828329 0.191596 0.199845\n", + "\t30 15704.334770 15434.233842 0.184110 0.192475\n", + "\t35 14943.780055 14736.494432 0.182320 0.188556\n", + "\t40 13949.133956 13699.679329 0.191907 0.201966\n", + "\t45 12893.597371 12644.427534 0.212320 0.225883\n", + "\t50 11912.477314 11721.726841 0.240345 0.255238\n", + "\t55 11083.883451 10896.082659 0.269699 0.284146\n", + "\t60 10344.582215 10227.732980 0.304216 0.313576\n", + "\t65 9763.974272 9685.186908 0.330538 0.336527\n", + "\t70 9604.801670 9502.090724 0.317302 0.327945\n", + "\t75 9559.687164 9489.897966 0.298306 0.304092\n", + "\t80 9527.009613 9441.992597 0.279763 0.290588\n", + "\t85 9506.391059 9401.961200 0.263241 0.274427\n", + "\t90 9504.460716 9363.768277 0.245333 0.259647\n", + "\t95 9406.362307 9351.826940 0.239755 0.243144\n", + "\t100 9408.214083 9318.497010 0.222648 0.229994\n", + "\t105 9364.636404 9242.492713 0.212189 0.221486\n", + "\t110 9307.327448 9196.472404 0.204706 0.211307\n", + "\t115 9279.999842 9213.199956 0.193863 0.196662\n", + "\t120 9238.041769 9194.100721 0.185912 0.188332\n", + "\t125 9257.451708 9190.854195 0.175557 0.178530\n", + "\t130 9260.204316 9172.882103 0.164358 0.169729\n", + "\t135 9213.576964 9124.013241 0.159131 0.163895\n", + "\t140 9199.068252 9104.156431 0.151302 0.156559\n", + "\t145 9205.022557 9089.286509 0.144217 0.150299\n", + "\t150 9204.560955 9119.597239 0.136431 0.139739\n", + "\t155 9169.216870 9084.318714 0.130946 0.134658\n", + "\t160 9146.924436 9087.474700 0.125373 0.127661\n", + "\t165 9108.426283 9043.318543 0.121309 0.124503\n", + "\t170 9081.036369 9023.675631 0.118747 0.120826\n", + "\t175 9057.063766 8989.289310 0.113409 0.116466\n", + "\t180 9050.563627 8945.305962 0.108158 0.113446\n", + "\t185 9042.510978 8946.064687 0.103755 0.108459\n", + "\t190 9018.719150 8935.589065 0.100633 0.103492\n", + "\t195 9028.408547 8930.965039 0.095858 0.100165\n", + "\t200 8959.354153 8856.477621 0.095162 0.099208\n", + "\t205 8922.859135 8827.972351 0.092022 0.095769\n", + "\t210 8894.757395 8807.030814 0.089289 0.092573\n", + "\t215 8845.408250 8772.677924 0.087283 0.089805\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 18/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.51856e+42 erg / s Luminosity absorbed = 1.36659e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14626.156540 14563.147157 0.519047 0.527477\n", + "\t5 15798.406058 15672.389708 0.347915 0.359316\n", + "\t10 16382.176183 16220.017575 0.274867 0.283670\n", + "\t15 16504.579428 16333.737367 0.236788 0.244483\n", + "\t20 16330.206061 16161.729309 0.214864 0.221440\n", + "\t25 15991.828329 15728.408075 0.199845 0.209432\n", + "\t30 15434.233842 15188.263972 0.192475 0.200810\n", + "\t35 14736.494432 14495.726168 0.188556 0.197478\n", + "\t40 13699.679329 13462.900081 0.201966 0.212977\n", + "\t45 12644.427534 12427.498300 0.225883 0.240283\n", + "\t50 11721.726841 11591.690666 0.255238 0.263974\n", + "\t55 10896.082659 10772.459489 0.284146 0.295610\n", + "\t60 10227.732980 10121.320815 0.313576 0.324126\n", + "\t65 9685.186908 9584.404138 0.336527 0.349799\n", + "\t70 9502.090724 9393.681202 0.327945 0.342690\n", + "\t75 9489.897966 9346.974373 0.304092 0.322710\n", + "\t80 9441.992597 9286.769360 0.290588 0.311528\n", + "\t85 9401.961200 9303.547786 0.274427 0.284364\n", + "\t90 9363.768277 9266.201840 0.259647 0.268510\n", + "\t95 9351.826940 9254.889332 0.243144 0.252807\n", + "\t100 9318.497010 9220.120143 0.229994 0.238726\n", + "\t105 9242.492713 9207.942238 0.221486 0.224330\n", + "\t110 9196.472404 9192.809108 0.211307 0.213342\n", + "\t115 9213.199956 9204.304596 0.196662 0.197957\n", + "\t120 9194.100721 9150.351587 0.188332 0.191046\n", + "\t125 9190.854195 9119.837117 0.178530 0.184071\n", + "\t130 9172.882103 9133.071948 0.169729 0.172065\n", + "\t135 9124.013241 9073.685301 0.163895 0.167074\n", + "\t140 9104.156431 9055.870731 0.156559 0.160187\n", + "\t145 9089.286509 9028.264139 0.150299 0.154956\n", + "\t150 9119.597239 9025.478387 0.139739 0.144432\n", + "\t155 9084.318714 9030.253642 0.134658 0.137974\n", + "\t160 9087.474700 9018.519081 0.127661 0.132430\n", + "\t165 9043.318543 8956.523647 0.124503 0.130171\n", + "\t170 9023.675631 8964.270422 0.120826 0.123201\n", + "\t175 8989.289310 8922.482934 0.116466 0.119316\n", + "\t180 8945.305962 8909.570644 0.113446 0.115127\n", + "\t185 8946.064687 8917.350045 0.108459 0.109979\n", + "\t190 8935.589065 8875.604508 0.103492 0.106627\n", + "\t195 8930.965039 8851.674478 0.100165 0.103824\n", + "\t200 8856.477621 8814.122706 0.099208 0.100959\n", + "\t205 8827.972351 8779.145997 0.095769 0.097804\n", + "\t210 8807.030814 8753.530725 0.092573 0.094794\n", + "\t215 8772.677924 8733.551320 0.089805 0.091637\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 19/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.47707e+42 erg / s Luminosity absorbed = 1.37123e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14563.147157 14558.443269 0.527477 0.526808\n", + "\t5 15672.389708 15591.220418 0.359316 0.364858\n", + "\t10 16220.017575 16105.831741 0.283670 0.289515\n", + "\t15 16333.737367 16182.627782 0.244483 0.250794\n", + "\t20 16161.729309 16019.028642 0.221440 0.225371\n", + "\t25 15728.408075 15546.172496 0.209432 0.213277\n", + "\t30 15188.263972 14986.708483 0.200810 0.205112\n", + "\t35 14495.726168 14206.597030 0.197478 0.206946\n", + "\t40 13462.900081 13214.438927 0.212977 0.224297\n", + "\t45 12427.498300 12258.061088 0.240283 0.248411\n", + "\t50 11591.690666 11425.143136 0.263974 0.275795\n", + "\t55 10772.459489 10651.207876 0.295610 0.305247\n", + "\t60 10121.320815 10044.565974 0.324126 0.331662\n", + "\t65 9584.404138 9482.481764 0.349799 0.361361\n", + "\t70 9393.681202 9343.869393 0.342690 0.349708\n", + "\t75 9346.974373 9254.723777 0.322710 0.334508\n", + "\t80 9286.769360 9218.220310 0.311528 0.316625\n", + "\t85 9303.547786 9205.216824 0.284364 0.294723\n", + "\t90 9266.201840 9152.494346 0.268510 0.281090\n", + "\t95 9254.889332 9182.662852 0.252807 0.259026\n", + "\t100 9220.120143 9153.846783 0.238726 0.244104\n", + "\t105 9207.942238 9149.291329 0.224330 0.229578\n", + "\t110 9192.809108 9151.623093 0.213342 0.217216\n", + "\t115 9204.304596 9135.507252 0.197957 0.203908\n", + "\t120 9150.351587 9084.836347 0.191046 0.194848\n", + "\t125 9119.837117 9078.196409 0.184071 0.186688\n", + "\t130 9133.071948 9058.951103 0.172065 0.178687\n", + "\t135 9073.685301 9026.263992 0.167074 0.171056\n", + "\t140 9055.870731 9012.748184 0.160187 0.163922\n", + "\t145 9028.264139 8954.207909 0.154956 0.159354\n", + "\t150 9025.478387 8928.402657 0.144432 0.151011\n", + "\t155 9030.253642 8963.528102 0.137974 0.142079\n", + "\t160 9018.519081 8938.075415 0.132430 0.136851\n", + "\t165 8956.523647 8888.234477 0.130171 0.133802\n", + "\t170 8964.270422 8879.311161 0.123201 0.127947\n", + "\t175 8922.482934 8852.385238 0.119316 0.122870\n", + "\t180 8909.570644 8835.395724 0.115127 0.118942\n", + "\t185 8917.350045 8801.279301 0.109979 0.116151\n", + "\t190 8875.604508 8786.595443 0.106627 0.110797\n", + "\t195 8851.674478 8774.440587 0.103824 0.106874\n", + "\t200 8814.122706 8750.446628 0.100959 0.103055\n", + "\t205 8779.145997 8714.174646 0.097804 0.100483\n", + "\t210 8753.530725 8676.651315 0.094794 0.097982\n", + "\t215 8733.551320 8647.921184 0.091637 0.095233\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 20/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.54309e+42 erg / s Luminosity absorbed = 1.36510e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14558.443269 14527.510345 0.526808 0.532630\n", + "\t5 15591.220418 15483.937166 0.364858 0.372757\n", + "\t10 16105.831741 15969.646152 0.289515 0.297564\n", + "\t15 16182.627782 16056.775058 0.250794 0.256721\n", + "\t20 16019.028642 15865.180054 0.225371 0.232714\n", + "\t25 15546.172496 15387.050754 0.213277 0.220639\n", + "\t30 14986.708483 14774.849411 0.205112 0.214992\n", + "\t35 14206.597030 13953.260106 0.206946 0.217126\n", + "\t40 13214.438927 12972.799163 0.224297 0.239591\n", + "\t45 12258.061088 12083.399950 0.248411 0.262562\n", + "\t50 11425.143136 11263.594252 0.275795 0.292612\n", + "\t55 10651.207876 10576.864392 0.305247 0.314595\n", + "\t60 10044.565974 9987.435062 0.331662 0.337785\n", + "\t65 9482.481764 9398.676439 0.361361 0.373720\n", + "\t70 9343.869393 9239.473273 0.349708 0.362801\n", + "\t75 9254.723777 9199.715933 0.334508 0.341280\n", + "\t80 9218.220310 9166.418629 0.316625 0.321497\n", + "\t85 9205.216824 9173.953482 0.294723 0.297312\n", + "\t90 9152.494346 9124.813448 0.281090 0.284189\n", + "\t95 9182.662852 9131.809028 0.259026 0.262673\n", + "\t100 9153.846783 9094.894714 0.244104 0.250903\n", + "\t105 9149.291329 9087.344461 0.229578 0.236913\n", + "\t110 9151.623093 9041.887966 0.217216 0.228464\n", + "\t115 9135.507252 9013.462778 0.203908 0.215648\n", + "\t120 9084.836347 8996.927961 0.194848 0.205739\n", + "\t125 9078.196409 9011.093827 0.186688 0.193318\n", + "\t130 9058.951103 9011.613656 0.178687 0.181391\n", + "\t135 9026.263992 8946.943223 0.171056 0.177542\n", + "\t140 9012.748184 8941.099654 0.163922 0.168864\n", + "\t145 8954.207909 8880.697126 0.159354 0.164240\n", + "\t150 8928.402657 8869.726647 0.151011 0.155424\n", + "\t155 8963.528102 8900.349932 0.142079 0.146134\n", + "\t160 8938.075415 8850.320461 0.136851 0.142646\n", + "\t165 8888.234477 8838.440444 0.133802 0.137430\n", + "\t170 8879.311161 8829.209084 0.127947 0.131442\n", + "\t175 8852.385238 8791.232594 0.122870 0.127573\n", + "\t180 8835.395724 8766.217387 0.118942 0.123450\n", + "\t185 8801.279301 8750.839919 0.116151 0.118872\n", + "\t190 8786.595443 8726.856451 0.110797 0.114460\n", + "\t195 8774.440587 8700.005387 0.106874 0.111333\n", + "\t200 8750.446628 8697.315947 0.103055 0.106434\n", + "\t205 8714.174646 8692.351416 0.100483 0.102481\n", + "\t210 8676.651315 8653.201242 0.097982 0.099687\n", + "\t215 8647.921184 8602.118014 0.095233 0.097555\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 21/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.53652e+42 erg / s Luminosity absorbed = 1.36571e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14527.510345 14473.750936 0.532630 0.539420\n", + "\t5 15483.937166 15394.891469 0.372757 0.382897\n", + "\t10 15969.646152 15830.219839 0.297564 0.308088\n", + "\t15 16056.775058 15921.169104 0.256721 0.264342\n", + "\t20 15865.180054 15695.876561 0.232714 0.239606\n", + "\t25 15387.050754 15232.148714 0.220639 0.227645\n", + "\t30 14774.849411 14581.300817 0.214992 0.222243\n", + "\t35 13953.260106 13712.675877 0.217126 0.229782\n", + "\t40 12972.799163 12790.709179 0.239591 0.248271\n", + "\t45 12083.399950 11957.930823 0.262562 0.270906\n", + "\t50 11263.594252 11208.295764 0.292612 0.296500\n", + "\t55 10576.864392 10525.823724 0.314595 0.317217\n", + "\t60 9987.435062 9912.190537 0.337785 0.347295\n", + "\t65 9398.676439 9370.834115 0.373720 0.375902\n", + "\t70 9239.473273 9188.390217 0.362801 0.366786\n", + "\t75 9199.715933 9150.887903 0.341280 0.346870\n", + "\t80 9166.418629 9116.253822 0.321497 0.330431\n", + "\t85 9173.953482 9074.482396 0.297312 0.312219\n", + "\t90 9124.813448 9083.906896 0.284189 0.289921\n", + "\t95 9131.809028 9071.406685 0.262673 0.271828\n", + "\t100 9094.894714 9034.050780 0.250903 0.259545\n", + "\t105 9087.344461 9020.845402 0.236913 0.243679\n", + "\t110 9041.887966 9008.943817 0.228464 0.229227\n", + "\t115 9013.462778 8993.272549 0.215648 0.218263\n", + "\t120 8996.927961 8935.633387 0.205739 0.212411\n", + "\t125 9011.093827 8948.980261 0.193318 0.200199\n", + "\t130 9011.613656 8943.734949 0.181391 0.187033\n", + "\t135 8946.943223 8881.660936 0.177542 0.183569\n", + "\t140 8941.099654 8892.798021 0.168864 0.173944\n", + "\t145 8880.697126 8844.964402 0.164240 0.167491\n", + "\t150 8869.726647 8835.188012 0.155424 0.159309\n", + "\t155 8900.349932 8801.211139 0.146134 0.154711\n", + "\t160 8850.320461 8808.910540 0.142646 0.147143\n", + "\t165 8838.440444 8809.512980 0.137430 0.139741\n", + "\t170 8829.209084 8782.298215 0.131442 0.134675\n", + "\t175 8791.232594 8718.629476 0.127573 0.132374\n", + "\t180 8766.217387 8730.921502 0.123450 0.126125\n", + "\t185 8750.839919 8681.938497 0.118872 0.122719\n", + "\t190 8726.856451 8680.800852 0.114460 0.117310\n", + "\t195 8700.005387 8644.028642 0.111333 0.114752\n", + "\t200 8697.315947 8646.380875 0.106434 0.109396\n", + "\t205 8692.351416 8620.944955 0.102481 0.106071\n", + "\t210 8653.201242 8615.237945 0.099687 0.101676\n", + "\t215 8602.118014 8574.353124 0.097555 0.098878\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 22/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.47268e+42 erg / s Luminosity absorbed = 1.37300e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14473.750936 14466.699060 0.539420 0.541765\n", + "\t5 15394.891469 15379.257104 0.382897 0.382662\n", + "\t10 15830.219839 15730.556762 0.308088 0.312481\n", + "\t15 15921.169104 15839.987581 0.264342 0.266450\n", + "\t20 15695.876561 15549.993314 0.239606 0.244379\n", + "\t25 15232.148714 15034.693551 0.227645 0.234763\n", + "\t30 14581.300817 14386.349902 0.222243 0.229501\n", + "\t35 13712.675877 13537.848480 0.229782 0.238753\n", + "\t40 12790.709179 12672.745873 0.248271 0.254498\n", + "\t45 11957.930823 11883.354388 0.270906 0.274462\n", + "\t50 11208.295764 11143.884144 0.296500 0.299847\n", + "\t55 10525.823724 10478.176725 0.317217 0.322281\n", + "\t60 9912.190537 9864.967730 0.347295 0.349796\n", + "\t65 9370.834115 9316.705476 0.375902 0.379320\n", + "\t70 9188.390217 9181.792936 0.366786 0.366714\n", + "\t75 9150.887903 9108.642539 0.346870 0.348132\n", + "\t80 9116.253822 9084.295103 0.330431 0.328849\n", + "\t85 9074.482396 9111.357500 0.312219 0.302365\n", + "\t90 9083.906896 9069.522485 0.289921 0.286715\n", + "\t95 9071.406685 9022.555097 0.271828 0.273829\n", + "\t100 9034.050780 9029.769617 0.259545 0.257064\n", + "\t105 9020.845402 8976.672363 0.243679 0.245541\n", + "\t110 9008.943817 9012.549872 0.229227 0.226280\n", + "\t115 8993.272549 8971.977997 0.218263 0.216976\n", + "\t120 8935.633387 8904.790154 0.212411 0.212322\n", + "\t125 8948.980261 8919.544981 0.200199 0.200177\n", + "\t130 8943.734949 8907.158270 0.187033 0.188602\n", + "\t135 8881.660936 8885.055501 0.183569 0.180874\n", + "\t140 8892.798021 8833.700643 0.173944 0.176308\n", + "\t145 8844.964402 8801.127863 0.167491 0.168953\n", + "\t150 8835.188012 8824.797408 0.159309 0.158740\n", + "\t155 8801.211139 8801.151948 0.154711 0.153259\n", + "\t160 8808.910540 8790.722508 0.147143 0.147153\n", + "\t165 8809.512980 8766.134921 0.139741 0.140835\n", + "\t170 8782.298215 8733.853914 0.134675 0.136649\n", + "\t175 8718.629476 8678.905305 0.132374 0.133883\n", + "\t180 8730.921502 8713.240812 0.126125 0.126614\n", + "\t185 8681.938497 8690.867087 0.122719 0.121146\n", + "\t190 8680.800852 8674.415597 0.117310 0.117001\n", + "\t195 8644.028642 8625.598670 0.114752 0.114779\n", + "\t200 8646.380875 8611.261354 0.109396 0.110876\n", + "\t205 8620.944955 8581.897782 0.106071 0.107376\n", + "\t210 8615.237945 8566.974887 0.101676 0.103806\n", + "\t215 8574.353124 8523.003297 0.098878 0.100800\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 23/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.51623e+42 erg / s Luminosity absorbed = 1.36856e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14466.699060 14470.495196 0.541765 0.540916\n", + "\t5 15379.257104 15344.013647 0.382662 0.384238\n", + "\t10 15730.556762 15650.287302 0.312481 0.316687\n", + "\t15 15839.987581 15649.137611 0.266450 0.275412\n", + "\t20 15549.993314 15355.037039 0.244379 0.255026\n", + "\t25 15034.693551 14855.790242 0.234763 0.242837\n", + "\t30 14386.349902 14198.679220 0.229501 0.239303\n", + "\t35 13537.848480 13337.263084 0.238753 0.253282\n", + "\t40 12672.745873 12471.883194 0.254498 0.272017\n", + "\t45 11883.354388 11709.781442 0.274462 0.290670\n", + "\t50 11143.884144 11062.479762 0.299847 0.308937\n", + "\t55 10478.176725 10407.487680 0.322281 0.334168\n", + "\t60 9864.967730 9774.616033 0.349796 0.364399\n", + "\t65 9316.705476 9271.982358 0.379320 0.385156\n", + "\t70 9181.792936 9121.059366 0.366714 0.378376\n", + "\t75 9108.642539 9056.972704 0.348132 0.356722\n", + "\t80 9084.295103 9016.594635 0.328849 0.339635\n", + "\t85 9111.357500 9006.654975 0.302365 0.318891\n", + "\t90 9069.522485 8972.763135 0.286715 0.300559\n", + "\t95 9022.555097 8968.768294 0.273829 0.281449\n", + "\t100 9029.769617 8942.190881 0.257064 0.267309\n", + "\t105 8976.672363 8900.738938 0.245541 0.254386\n", + "\t110 9012.549872 8896.915088 0.226280 0.239292\n", + "\t115 8971.977997 8900.791271 0.216976 0.227092\n", + "\t120 8904.790154 8848.896836 0.212322 0.218636\n", + "\t125 8919.544981 8843.978465 0.200177 0.207149\n", + "\t130 8907.158270 8824.093831 0.188602 0.197145\n", + "\t135 8885.055501 8809.102746 0.180874 0.188480\n", + "\t140 8833.700643 8771.761343 0.176308 0.182293\n", + "\t145 8801.127863 8783.647599 0.168953 0.171703\n", + "\t150 8824.797408 8736.470439 0.158740 0.166432\n", + "\t155 8801.151948 8718.525135 0.153259 0.161367\n", + "\t160 8790.722508 8694.231608 0.147153 0.154423\n", + "\t165 8766.134921 8649.088026 0.140835 0.150506\n", + "\t170 8733.853914 8621.804914 0.136649 0.144998\n", + "\t175 8678.905305 8629.947937 0.133883 0.137221\n", + "\t180 8713.240812 8618.940400 0.126614 0.132390\n", + "\t185 8690.867087 8632.160122 0.121146 0.125620\n", + "\t190 8674.415597 8589.174521 0.117001 0.121948\n", + "\t195 8625.598670 8586.796554 0.114779 0.117890\n", + "\t200 8611.261354 8550.096150 0.110876 0.114517\n", + "\t205 8581.897782 8546.014530 0.107376 0.109796\n", + "\t210 8566.974887 8487.939548 0.103806 0.108179\n", + "\t215 8523.003297 8461.893246 0.100800 0.104419\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 24/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.52062e+42 erg / s Luminosity absorbed = 1.36911e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14470.495196 14439.383342 0.540916 0.545080\n", + "\t5 15344.013647 15287.824637 0.384238 0.388787\n", + "\t10 15650.287302 15554.430528 0.316687 0.322520\n", + "\t15 15649.137611 15548.412490 0.275412 0.280082\n", + "\t20 15355.037039 15278.361758 0.255026 0.256587\n", + "\t25 14855.790242 14722.099510 0.242837 0.247162\n", + "\t30 14198.679220 14030.505526 0.239303 0.246144\n", + "\t35 13337.263084 13202.971353 0.253282 0.258033\n", + "\t40 12471.883194 12379.235050 0.272017 0.277166\n", + "\t45 11709.781442 11653.492906 0.290670 0.294545\n", + "\t50 11062.479762 10961.781850 0.308937 0.317106\n", + "\t55 10407.487680 10314.959040 0.334168 0.341358\n", + "\t60 9774.616033 9788.937173 0.364399 0.360526\n", + "\t65 9271.982358 9252.044247 0.385156 0.388297\n", + "\t70 9121.059366 9094.933115 0.378376 0.378186\n", + "\t75 9056.972704 9061.701483 0.356722 0.353253\n", + "\t80 9016.594635 8995.518124 0.339635 0.340515\n", + "\t85 9006.654975 8959.328296 0.318891 0.323211\n", + "\t90 8972.763135 8920.517810 0.300559 0.305046\n", + "\t95 8968.768294 8912.435094 0.281449 0.289535\n", + "\t100 8942.190881 8894.124908 0.267309 0.273591\n", + "\t105 8900.738938 8873.382355 0.254386 0.257205\n", + "\t110 8896.915088 8868.773717 0.239292 0.241261\n", + "\t115 8900.791271 8854.993081 0.227092 0.230346\n", + "\t120 8848.896836 8811.078110 0.218636 0.220893\n", + "\t125 8843.978465 8829.644050 0.207149 0.207952\n", + "\t130 8824.093831 8788.689000 0.197145 0.201215\n", + "\t135 8809.102746 8787.612627 0.188480 0.189961\n", + "\t140 8771.761343 8740.167292 0.182293 0.185001\n", + "\t145 8783.647599 8732.804547 0.171703 0.175840\n", + "\t150 8736.470439 8712.980426 0.166432 0.167455\n", + "\t155 8718.525135 8694.556614 0.161367 0.162622\n", + "\t160 8694.231608 8688.460087 0.154423 0.154070\n", + "\t165 8649.088026 8652.726333 0.150506 0.149510\n", + "\t170 8621.804914 8664.425423 0.144998 0.141927\n", + "\t175 8629.947937 8645.616623 0.137221 0.135993\n", + "\t180 8618.940400 8617.566209 0.132390 0.132218\n", + "\t185 8632.160122 8586.371277 0.125620 0.127863\n", + "\t190 8589.174521 8583.876718 0.121948 0.122524\n", + "\t195 8586.796554 8565.133414 0.117890 0.118756\n", + "\t200 8550.096150 8587.038961 0.114517 0.112478\n", + "\t205 8546.014530 8525.571532 0.109796 0.110728\n", + "\t210 8487.939548 8476.450531 0.108179 0.108114\n", + "\t215 8461.893246 8441.936810 0.104419 0.104832\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 25/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.60156e+42 erg / s Luminosity absorbed = 1.36095e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14439.383342 14437.116780 0.545080 0.545538\n", + "\t5 15287.824637 15208.388456 0.388787 0.394694\n", + "\t10 15554.430528 15465.034944 0.322520 0.329390\n", + "\t15 15548.412490 15412.457674 0.280082 0.287618\n", + "\t20 15278.361758 15145.831208 0.256587 0.263885\n", + "\t25 14722.099510 14553.799657 0.247162 0.255353\n", + "\t30 14030.505526 13823.788145 0.246144 0.258975\n", + "\t35 13202.971353 12984.359020 0.258033 0.272115\n", + "\t40 12379.235050 12237.744937 0.277166 0.287929\n", + "\t45 11653.492906 11476.331616 0.294545 0.312857\n", + "\t50 10961.781850 10851.867539 0.317106 0.331583\n", + "\t55 10314.959040 10213.094685 0.341358 0.358849\n", + "\t60 9788.937173 9627.334087 0.360526 0.387457\n", + "\t65 9252.044247 9122.601885 0.388297 0.412794\n", + "\t70 9094.933115 8965.806200 0.378186 0.403706\n", + "\t75 9061.701483 8919.477778 0.353253 0.378108\n", + "\t80 8995.518124 8851.061232 0.340515 0.364432\n", + "\t85 8959.328296 8852.046845 0.323211 0.344019\n", + "\t90 8920.517810 8831.845485 0.305046 0.321067\n", + "\t95 8912.435094 8812.422594 0.289535 0.305359\n", + "\t100 8894.124908 8759.712819 0.273591 0.294303\n", + "\t105 8873.382355 8787.423778 0.257205 0.269151\n", + "\t110 8868.773717 8805.995679 0.241261 0.251308\n", + "\t115 8854.993081 8753.994314 0.230346 0.243327\n", + "\t120 8811.078110 8722.670406 0.220893 0.231825\n", + "\t125 8829.644050 8704.253189 0.207952 0.222245\n", + "\t130 8788.689000 8686.428399 0.201215 0.212143\n", + "\t135 8787.612627 8668.273534 0.189961 0.202056\n", + "\t140 8740.167292 8623.070495 0.185001 0.196536\n", + "\t145 8732.804547 8659.909430 0.175840 0.183356\n", + "\t150 8712.980426 8652.405947 0.167455 0.175147\n", + "\t155 8694.556614 8611.353196 0.162622 0.168822\n", + "\t160 8688.460087 8592.789426 0.154070 0.161985\n", + "\t165 8652.726333 8570.267904 0.149510 0.156621\n", + "\t170 8664.425423 8570.576999 0.141927 0.150070\n", + "\t175 8645.616623 8538.715386 0.135993 0.145110\n", + "\t180 8617.566209 8539.488067 0.132218 0.138459\n", + "\t185 8586.371277 8483.200715 0.127863 0.136243\n", + "\t190 8583.876718 8473.866237 0.122524 0.130449\n", + "\t195 8565.133414 8459.491337 0.118756 0.125984\n", + "\t200 8587.038961 8471.330226 0.112478 0.120085\n", + "\t205 8525.571532 8442.341282 0.110728 0.116065\n", + "\t210 8476.450531 8383.081663 0.108114 0.114197\n", + "\t215 8441.936810 8349.425816 0.104832 0.110679\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 26/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.57549e+42 erg / s Luminosity absorbed = 1.36399e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14437.116780 14447.800661 0.545538 0.543522\n", + "\t5 15208.388456 15187.337939 0.394694 0.396558\n", + "\t10 15465.034944 15372.013233 0.329390 0.332810\n", + "\t15 15412.457674 15255.096011 0.287618 0.296214\n", + "\t20 15145.831208 14975.570690 0.263885 0.271200\n", + "\t25 14553.799657 14386.021279 0.255353 0.261695\n", + "\t30 13823.788145 13656.578942 0.258975 0.266606\n", + "\t35 12984.359020 12866.983707 0.272115 0.279457\n", + "\t40 12237.744937 12177.931229 0.287929 0.292067\n", + "\t45 11476.331616 11429.490010 0.312857 0.316759\n", + "\t50 10851.867539 10845.027168 0.331583 0.331514\n", + "\t55 10213.094685 10235.032432 0.358849 0.356731\n", + "\t60 9627.334087 9669.110203 0.387457 0.383669\n", + "\t65 9122.601885 9097.954569 0.412794 0.419061\n", + "\t70 8965.806200 8968.475708 0.403706 0.404309\n", + "\t75 8919.477778 8930.583222 0.378108 0.376530\n", + "\t80 8851.061232 8883.311408 0.364432 0.361427\n", + "\t85 8852.046845 8853.670421 0.344019 0.341969\n", + "\t90 8831.845485 8838.048898 0.321067 0.321419\n", + "\t95 8812.422594 8827.250729 0.305359 0.304083\n", + "\t100 8759.712819 8801.457588 0.294303 0.288052\n", + "\t105 8787.423778 8767.655170 0.269151 0.270964\n", + "\t110 8805.995679 8762.291342 0.251308 0.256165\n", + "\t115 8753.994314 8770.631556 0.243327 0.240710\n", + "\t120 8722.670406 8740.191499 0.231825 0.230293\n", + "\t125 8704.253189 8715.880329 0.222245 0.221697\n", + "\t130 8686.428399 8680.240453 0.212143 0.212627\n", + "\t135 8668.273534 8682.604150 0.202056 0.200232\n", + "\t140 8623.070495 8640.082127 0.196536 0.195253\n", + "\t145 8659.909430 8650.251766 0.183356 0.183872\n", + "\t150 8652.405947 8649.814169 0.175147 0.175618\n", + "\t155 8611.353196 8619.046960 0.168822 0.168567\n", + "\t160 8592.789426 8610.523603 0.161985 0.162408\n", + "\t165 8570.267904 8559.554560 0.156621 0.157239\n", + "\t170 8570.576999 8558.020831 0.150070 0.151176\n", + "\t175 8538.715386 8513.431640 0.145110 0.146494\n", + "\t180 8539.488067 8545.040169 0.138459 0.138197\n", + "\t185 8483.200715 8491.199260 0.136243 0.135345\n", + "\t190 8473.866237 8474.738077 0.130449 0.129895\n", + "\t195 8459.491337 8430.986868 0.125984 0.127507\n", + "\t200 8471.330226 8430.450850 0.120085 0.122018\n", + "\t205 8442.341282 8419.764772 0.116065 0.117632\n", + "\t210 8383.081663 8366.360454 0.114197 0.114850\n", + "\t215 8349.425816 8331.657948 0.110679 0.111728\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 27/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.51806e+42 erg / s Luminosity absorbed = 1.36987e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14447.800661 14417.219086 0.543522 0.549349\n", + "\t5 15187.337939 15181.195510 0.396558 0.398061\n", + "\t10 15372.013233 15328.307051 0.332810 0.334343\n", + "\t15 15255.096011 15203.511026 0.296214 0.298500\n", + "\t20 14975.570690 14808.409736 0.271200 0.279158\n", + "\t25 14386.021279 14261.242828 0.261695 0.269496\n", + "\t30 13656.578942 13521.940483 0.266606 0.273082\n", + "\t35 12866.983707 12680.830794 0.279457 0.290405\n", + "\t40 12177.931229 12012.770662 0.292067 0.301843\n", + "\t45 11429.490010 11314.197665 0.316759 0.325619\n", + "\t50 10845.027168 10718.769264 0.331514 0.344833\n", + "\t55 10235.032432 10175.844754 0.356731 0.362672\n", + "\t60 9669.110203 9659.545119 0.383669 0.384407\n", + "\t65 9097.954569 9133.583181 0.419061 0.411875\n", + "\t70 8968.475708 8983.550656 0.404309 0.400423\n", + "\t75 8930.583222 8916.883150 0.376530 0.376356\n", + "\t80 8883.311408 8881.311910 0.361427 0.359073\n", + "\t85 8853.670421 8848.822085 0.341969 0.338215\n", + "\t90 8838.048898 8828.974564 0.321419 0.319146\n", + "\t95 8827.250729 8807.691955 0.304083 0.302713\n", + "\t100 8801.457588 8785.221475 0.288052 0.285162\n", + "\t105 8767.655170 8751.387856 0.270964 0.270968\n", + "\t110 8762.291342 8780.883817 0.256165 0.254049\n", + "\t115 8770.631556 8751.480700 0.240710 0.242601\n", + "\t120 8740.191499 8734.457617 0.230293 0.230096\n", + "\t125 8715.880329 8704.113589 0.221697 0.221491\n", + "\t130 8680.240453 8653.751674 0.212627 0.213909\n", + "\t135 8682.604150 8661.234925 0.200232 0.201672\n", + "\t140 8640.082127 8658.835032 0.195253 0.192969\n", + "\t145 8650.251766 8641.881040 0.183872 0.184367\n", + "\t150 8649.814169 8613.747196 0.175618 0.177634\n", + "\t155 8619.046960 8555.853044 0.168567 0.172421\n", + "\t160 8610.523603 8579.102688 0.162408 0.164319\n", + "\t165 8559.554560 8542.446129 0.157239 0.157480\n", + "\t170 8558.020831 8533.533199 0.151176 0.151698\n", + "\t175 8513.431640 8496.442832 0.146494 0.146762\n", + "\t180 8545.040169 8524.482824 0.138197 0.138349\n", + "\t185 8491.199260 8487.251017 0.135345 0.135365\n", + "\t190 8474.738077 8460.332814 0.129895 0.130966\n", + "\t195 8430.986868 8434.379977 0.127507 0.126942\n", + "\t200 8430.450850 8412.147879 0.122018 0.122168\n", + "\t205 8419.764772 8426.552341 0.117632 0.116774\n", + "\t210 8366.360454 8383.211923 0.114850 0.113791\n", + "\t215 8331.657948 8351.844797 0.111728 0.110146\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 28/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.63368e+42 erg / s Luminosity absorbed = 1.35831e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14417.219086 14429.531917 0.549349 0.545585\n", + "\t5 15181.195510 15120.350364 0.398061 0.404133\n", + "\t10 15328.307051 15281.732868 0.334343 0.339321\n", + "\t15 15203.511026 15117.848316 0.298500 0.304393\n", + "\t20 14808.409736 14694.996090 0.279158 0.287399\n", + "\t25 14261.242828 14183.269980 0.269496 0.276461\n", + "\t30 13521.940483 13407.675917 0.273082 0.281302\n", + "\t35 12680.830794 12617.861166 0.290405 0.297246\n", + "\t40 12012.770662 11969.509130 0.301843 0.306747\n", + "\t45 11314.197665 11231.733197 0.325619 0.336649\n", + "\t50 10718.769264 10650.678996 0.344833 0.355468\n", + "\t55 10175.844754 10105.622482 0.362672 0.373025\n", + "\t60 9659.545119 9622.146412 0.384407 0.390830\n", + "\t65 9133.583181 9111.276842 0.411875 0.417521\n", + "\t70 8983.550656 8968.479051 0.400423 0.402578\n", + "\t75 8916.883150 8927.469964 0.376356 0.378112\n", + "\t80 8881.311910 8901.508883 0.359073 0.357221\n", + "\t85 8848.822085 8868.433596 0.338215 0.337688\n", + "\t90 8828.974564 8817.757551 0.319146 0.324247\n", + "\t95 8807.691955 8798.092101 0.302713 0.307739\n", + "\t100 8785.221475 8763.887474 0.285162 0.290757\n", + "\t105 8751.387856 8739.862756 0.270968 0.276310\n", + "\t110 8780.883817 8768.800462 0.254049 0.257413\n", + "\t115 8751.480700 8735.955476 0.242601 0.246462\n", + "\t120 8734.457617 8756.530513 0.230096 0.231126\n", + "\t125 8704.113589 8703.467418 0.221491 0.224571\n", + "\t130 8653.751674 8646.364373 0.213909 0.217122\n", + "\t135 8661.234925 8653.142702 0.201672 0.203528\n", + "\t140 8658.835032 8678.613405 0.192969 0.192395\n", + "\t145 8641.881040 8626.451663 0.184367 0.186953\n", + "\t150 8613.747196 8597.106111 0.177634 0.179226\n", + "\t155 8555.853044 8584.136268 0.172421 0.171616\n", + "\t160 8579.102688 8589.260883 0.164319 0.164299\n", + "\t165 8542.446129 8541.224977 0.157480 0.158702\n", + "\t170 8533.533199 8522.338318 0.151698 0.152727\n", + "\t175 8496.442832 8491.754843 0.146762 0.148037\n", + "\t180 8524.482824 8474.412917 0.138349 0.141995\n", + "\t185 8487.251017 8460.237138 0.135365 0.137380\n", + "\t190 8460.332814 8415.212522 0.130966 0.134130\n", + "\t195 8434.379977 8399.982738 0.126942 0.129201\n", + "\t200 8412.147879 8372.301416 0.122168 0.125072\n", + "\t205 8426.552341 8361.337581 0.116774 0.120960\n", + "\t210 8383.211923 8326.692458 0.113791 0.117308\n", + "\t215 8351.844797 8289.240860 0.110146 0.114643\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 29/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.63865e+42 erg / s Luminosity absorbed = 1.35826e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 14429.531917 14393.560704 0.545585 0.549791\n", + "\t5 15120.350364 15047.460876 0.404133 0.407487\n", + "\t10 15281.732868 15152.376157 0.339321 0.348021\n", + "\t15 15117.848316 15011.073356 0.304393 0.311534\n", + "\t20 14694.996090 14594.083857 0.287399 0.293825\n", + "\t25 14183.269980 14050.725200 0.276461 0.284887\n", + "\t30 13407.675917 13300.100420 0.281302 0.290669\n", + "\t35 12617.861166 12506.921436 0.297246 0.306635\n", + "\t40 11969.509130 11810.035443 0.306747 0.325268\n", + "\t45 11231.733197 11126.963002 0.336649 0.347387\n", + "\t50 10650.678996 10537.289550 0.355468 0.369531\n", + "\t55 10105.622482 10022.685606 0.373025 0.383605\n", + "\t60 9622.146412 9557.446390 0.390830 0.401964\n", + "\t65 9111.276842 9056.805821 0.417521 0.429370\n", + "\t70 8968.479051 8921.840347 0.402578 0.411349\n", + "\t75 8927.469964 8907.031457 0.378112 0.384014\n", + "\t80 8901.508883 8831.590758 0.357221 0.371482\n", + "\t85 8868.433596 8815.898171 0.337688 0.349352\n", + "\t90 8817.757551 8777.689182 0.324247 0.332044\n", + "\t95 8798.092101 8777.981323 0.307739 0.310802\n", + "\t100 8763.887474 8735.735990 0.290757 0.294033\n", + "\t105 8739.862756 8736.781935 0.276310 0.276744\n", + "\t110 8768.800462 8703.852852 0.257413 0.266497\n", + "\t115 8735.955476 8704.749811 0.246462 0.250630\n", + "\t120 8756.530513 8682.672809 0.231126 0.238432\n", + "\t125 8703.467418 8617.135647 0.224571 0.234778\n", + "\t130 8646.364373 8602.578401 0.217122 0.222175\n", + "\t135 8653.142702 8626.725758 0.203528 0.207815\n", + "\t140 8678.613405 8598.950945 0.192395 0.202267\n", + "\t145 8626.451663 8594.447574 0.186953 0.190719\n", + "\t150 8597.106111 8561.702948 0.179226 0.184284\n", + "\t155 8584.136268 8535.674486 0.171616 0.176376\n", + "\t160 8589.260883 8539.167829 0.164299 0.169219\n", + "\t165 8541.224977 8531.513673 0.158702 0.160695\n", + "\t170 8522.338318 8484.097260 0.152727 0.158442\n", + "\t175 8491.754843 8474.481043 0.148037 0.150545\n", + "\t180 8474.412917 8438.276493 0.141995 0.145788\n", + "\t185 8460.237138 8435.079927 0.137380 0.140271\n", + "\t190 8415.212522 8395.762702 0.134130 0.137036\n", + "\t195 8399.982738 8366.507497 0.129201 0.132203\n", + "\t200 8372.301416 8351.094536 0.125072 0.127218\n", + "\t205 8361.337581 8341.067731 0.120960 0.122846\n", + "\t210 8326.692458 8311.116368 0.117308 0.118902\n", + "\t215 8289.240860 8279.957190 0.114643 0.115706\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:348)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 13000.000 K -- next t_inner 13000.000 K (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 30/30 (\u001b[1mbase.py\u001b[0m:266)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 6.60081e+42 erg / s Luminosity absorbed = 1.36197e+43 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Simulation finished in 30 iterations and took 337.79 s (\u001b[1mbase.py\u001b[0m:306)\n" + ] + } + ], + "source": [ + "sim = run_tardis('blondin_model_compare_06.yml')" + ] + }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "Download Spectrum" + "Download Spectrum" ], "text/plain": [ "" ] }, - "execution_count": 28, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } From e8c6963f9c89e21c9979921cb25827492ea06eb8 Mon Sep 17 00:00:00 2001 From: Marc Williamson Date: Thu, 8 Aug 2019 10:03:37 +0200 Subject: [PATCH 070/467] Dilution factor fix (#956) * Replaced 'w' with 'dilution_factor' in csvy model * Added Warning for unsupported CSVY columns * Changed supported column checks to use Sets --- tardis/model/base.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/tardis/model/base.py b/tardis/model/base.py index acc2a9cdef6..dd7e9a32d80 100644 --- a/tardis/model/base.py +++ b/tardis/model/base.py @@ -14,6 +14,7 @@ from tardis.io.util import HDFWriterMixin from tardis.io.decay import IsotopeAbundances from tardis.model.density import HomologousDensity +from pyne import nucname logger = logging.getLogger(__name__) @@ -498,6 +499,9 @@ def from_csvy(cls, config): Radial1DModel """ + CSVY_SUPPORTED_COLUMNS = {'velocity', 'density', 't_rad', 'dilution_factor'} + + if os.path.isabs(config.csvy_model): csvy_model_fname = config.csvy_model else: @@ -507,9 +511,23 @@ def from_csvy(cls, config): base_dir = os.path.abspath(os.path.dirname(__file__)) schema_dir = os.path.join(base_dir, '..', 'io', 'schemas') csvy_schema_file = os.path.join(schema_dir, 'csvy_model.yml') - csvy_model_config = Configuration(validate_dict(csvy_model_config, + csvy_model_config = Configuration(validate_dict(csvy_model_config, schemapath=csvy_schema_file)) + if hasattr(csvy_model_data, 'columns'): + abund_names = set([name for name in csvy_model_data.columns + if nucname.iselement(name) or nucname.isnuclide(name)]) + unsupported_columns = set(csvy_model_data.columns) - abund_names - CSVY_SUPPORTED_COLUMNS + + field_names = set([field['name'] for field in csvy_model_config.datatype.fields]) + assert set(csvy_model_data.columns) - field_names == set(),\ + 'CSVY columns exist without field descriptions' + assert field_names - set(csvy_model_data.columns) == set(),\ + 'CSVY field descriptions exist without corresponding csv data' + if unsupported_columns != set(): + logger.warning("The following columns are specified in the csvy" + "model file, but are IGNORED by TARDIS: %s"%(str(unsupported_columns))) + time_explosion = config.supernova.time_explosion.cgs electron_densities = None @@ -562,8 +580,8 @@ def from_csvy(cls, config): dilution_factor = None if hasattr(csvy_model_data, 'columns'): - if 'w' in csvy_model_data.columns: - dilution_factor = csvy_model_data['w'].iloc[0:].to_numpy() + if 'dilution_factor' in csvy_model_data.columns: + dilution_factor = csvy_model_data['dilution_factor'].iloc[0:].to_numpy() elif config.plasma.initial_t_rad > 0 * u.K: t_radiative = np.ones(no_of_shells) * config.plasma.initial_t_rad From 2fcea6914e9b9c32b310034c74fc6b8df9f1c9f3 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 8 Aug 2019 17:38:39 +0200 Subject: [PATCH 071/467] add blondin converter (#957) * add blondin converter * add installation instruction --- docs/installation.rst | 8 +- docs/research/code_comparison/index.rst | 6 + .../toy_models/reading blondin toymodel.ipynb | 2082 ++++++++++++++++- docs/research/index.rst | 1 + tardis/io/parsers/__init__.py | 3 + tardis/io/parsers/blondin_toymodel.py | 38 +- 6 files changed, 2073 insertions(+), 65 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 58dd31d4e60..3304b8a5622 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -68,8 +68,12 @@ and after you are done with TARDIS you can deactivate:: One does not need to recreate the environment, but simply activate it every time TARDIS is used. -Since TARDIS has reached a mature state, we recommend always installing the -latest development version:: +For TARDIS development purposes please follow the steps :ref:`here ` +until the step to install TARDIS in the development mode +``python setup.py develop``. + +You can also install TARDIS for the latest development version +(but this is only recommended for pure users):: pip install git+https://github.com/tardis-sn/tardis diff --git a/docs/research/code_comparison/index.rst b/docs/research/code_comparison/index.rst index 2b26737bf3a..ea34b681d3c 100644 --- a/docs/research/code_comparison/index.rst +++ b/docs/research/code_comparison/index.rst @@ -6,6 +6,12 @@ codes to understand systematics uncertainties and different strategies. The first meeting is summarized `here `_. +The description of file formats used can be found here +``_. + +For our code comparison, we will calculate spectra at 5, 10, 15, 20 days post +explosion. + .. toctree:: toy_models/reading blondin toymodel diff --git a/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb b/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb index 13db7a52b0b..81764f130cc 100644 --- a/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb +++ b/docs/research/code_comparison/toy_models/reading blondin toymodel.ipynb @@ -22,16 +22,20 @@ } ], "source": [ - "import pandas as pd\n", "import re\n", - "from tardis.util.base import parse_quantity\n", + "import base64\n", + "\n", + "import pandas as pd\n", "import numpy as np\n", + "\n", "import yaml\n", + "\n", "from tardis import run_tardis\n", "from astropy import units as u\n", - "import base64\n", + "\n", "from IPython.display import HTML\n", - "\n" + "\n", + "from tardis.io.parsers import read_blondin_toymodel, convert_blondin_toymodel\n" ] }, { @@ -64,53 +68,7 @@ " return HTML(html)\n", "\n", "pattern_remove_bracket = re.compile('\\[.+\\]')\n", - "t0_pattern = re.compile('tend = (.+)\\n')\n", - "\n", - "\n", - "def read_blondin_toymodel(fname):\n", - " with open(fname, 'r') as fh:\n", - " for line in fh:\n", - " if line.startswith(\"#idx\"):\n", - " break\n", - " else:\n", - " raise ValueError('File {0} does not conform to Toy Model format as it does not contain #idx')\n", - " columns = [pattern_remove_bracket.sub('', item) for item in line[1:].split()]\n", - " \n", - " raw_blondin_csv = pd.read_csv(fname, delim_whitespace=True, comment='#', header=None, names=columns)\n", - " raw_blondin_csv.set_index('idx', inplace=True)\n", - " \n", - " blondin_csv = raw_blondin_csv.loc[:, ['vel', 'dens', 'temp', 'X_56Ni0', 'X_Ti', 'X_Ca', 'X_S', 'X_Si', 'X_O', 'X_C']]\n", - " rename_col_dict = {'vel':'velocity', 'dens':'density', 'temp':'t_rad'}\n", - " rename_col_dict.update({item:item[2:] for item in blondin_csv.columns[3:]})\n", - " rename_col_dict['X_56Ni0'] = 'Ni56'\n", - " blondin_csv.rename(columns=rename_col_dict, inplace=True)\n", - " blondin_csv.iloc[:, 3:] = blondin_csv.iloc[:,3:].divide(blondin_csv.iloc[:,3:].sum(axis=1), axis=0)\n", - " \n", - " \n", - " #changing velocities to outer boundary\n", - " new_velocities = 0.5 * (blondin_csv.velocity.iloc[:-1].values + blondin_csv.velocity.iloc[1:].values)\n", - " new_velocities = np.hstack((new_velocities, [2 * new_velocities[-1] - new_velocities[-2]]))\n", - " blondin_csv['velocity'] = new_velocities\n", - " \n", - " \n", - " \n", - " with open(fname, 'r') as fh:\n", - " t0_string = t0_pattern.findall(fh.read())[0]\n", - " \n", - " t0 = parse_quantity(t0_string.replace('DAYS', 'day'))\n", - " blondin_dict = {}\n", - " blondin_dict['model_density_time_0'] = str(t0)\n", - " blondin_dict['description'] = 'Converted {0} to csvy format'.format(fname)\n", - " blondin_dict['tardis_model_config_version'] = 'v1.0'\n", - " blondin_dict_fields = [dict(name='velocity', unit='km/s', desc='velocities of shell outer bounderies.')]\n", - " blondin_dict_fields.append(dict(name='density', unit='g/cm^3', desc='mean density of shell.'))\n", - " blondin_dict_fields.append(dict(name='t_rad', unit='K', desc='radiative temperature.'))\n", - " \n", - " for abund in blondin_csv.columns[3:]:\n", - " blondin_dict_fields.append(dict(name=abund, desc='Fraction {0} abundance'.format(abund)))\n", - " blondin_dict['datatype'] = {'fields':blondin_dict_fields}\n", - " \n", - " return blondin_dict, blondin_csv" + "t0_pattern = re.compile('tend = (.+)\\n')" ] }, { @@ -126,7 +84,16 @@ "metadata": {}, "outputs": [], "source": [ - "blondin_dict, blondin_csv = read_blondin_toymodel('snia_toy01.dat')" + "convert_blondin_toymodel('snia_toy01.dat', 'snia_toy01.test.csvy', 9000, 30000, conversion_t_electron_rad=1/0.9)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "!code snia_toy01.test.csvy" ] }, { @@ -4385,6 +4352,2017 @@ "create_df_download_link(spectrum, title='Download Spectrum', filename='spectrum.csv', type='csv')" ] }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
0123456789...210211212213214215216217218219
atomic_numberion_number
1403.371573e-152.836444e-152.419784e-152.136677e-151.999989e-152.054821e-152.110358e-152.153097e-152.178870e-152.396495e-15...3.099967e-093.105191e-093.119057e-093.211761e-093.355139e-093.226573e-093.442658e-093.458125e-093.453447e-093.465355e-09
12.022453e-061.705701e-061.462930e-061.291823e-061.208121e-061.225786e-061.248424e-061.263770e-061.269590e-061.375301e-06...7.935683e-027.986164e-028.051595e-028.248215e-028.528176e-028.360084e-028.762037e-028.833458e-028.872181e-028.938419e-02
23.887190e-013.393144e-013.008827e-012.707304e-012.546273e-012.514531e-012.505741e-012.486651e-012.454469e-012.545289e-01...9.206432e-019.201384e-019.194840e-019.175178e-019.147182e-019.163992e-019.123796e-019.116654e-019.112782e-019.106158e-01
36.112531e-016.606446e-016.990609e-017.291956e-017.452862e-017.484558e-017.493327e-017.512385e-017.544522e-017.453764e-01...3.653376e-093.585998e-093.481458e-093.266309e-092.989207e-093.137543e-092.781066e-092.722738e-092.685372e-092.637792e-09
42.587464e-053.930435e-055.492756e-057.275498e-058.533674e-058.983376e-059.201249e-059.513098e-059.956385e-059.331045e-05...3.671725e-253.512867e-253.268472e-252.814316e-252.286085e-252.557571e-251.930661e-251.837662e-251.778037e-251.706548e-25
50.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
60.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
70.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
80.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
90.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
100.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
110.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
120.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
130.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
140.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
1602.016802e-121.658852e-121.393517e-121.205457e-121.110193e-121.112130e-121.121180e-121.122548e-121.114228e-121.198344e-12...1.249653e-061.246017e-061.245134e-061.258252e-061.280630e-061.251831e-061.286763e-061.284397e-061.278783e-061.275507e-06
12.394294e-042.040317e-041.771086e-041.569568e-041.464626e-041.456358e-041.459572e-041.454903e-041.440266e-041.517962e-04...9.957734e-019.958178e-019.958872e-019.960498e-019.962669e-019.961392e-019.964290e-019.964735e-019.964994e-019.965363e-01
28.434871e-018.111234e-017.807144e-017.526197e-017.357674e-017.320337e-017.308866e-017.286039e-017.248339e-017.346920e-01...4.225326e-034.180994e-034.111542e-033.948930e-033.731861e-033.859506e-033.569744e-033.525171e-033.499367e-033.462394e-03
31.562730e-011.886718e-012.191073e-012.472216e-012.640839e-012.678184e-012.689651e-012.712481e-012.750194e-012.651538e-01...8.812221e-138.555966e-138.161771e-137.350285e-136.352517e-136.895675e-135.650228e-135.461861e-135.345989e-135.195702e-13
44.416652e-077.660508e-071.195779e-061.740700e-062.154429e-062.302852e-062.373892e-062.478209e-062.630008e-062.404086e-06...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
51.740392e-205.708941e-201.493104e-193.421705e-195.532661e-196.679461e-197.371750e-198.355242e-199.808088e-198.453664e-19...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
60.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
70.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
80.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
90.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
100.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
110.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
120.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
130.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
140.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
.....................................................................
27270.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2803.867508e-153.345109e-152.918472e-152.607352e-152.446026e-152.476290e-152.512104e-152.533291e-152.535729e-152.725434e-15...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
14.768144e-064.199161e-063.730841e-063.373334e-063.185213e-063.198249e-063.225992e-063.237521e-063.228287e-063.416276e-06...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
27.608692e-017.150802e-016.735910e-016.363741e-016.145266e-016.092583e-016.073952e-016.041015e-015.989427e-016.108105e-01...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
32.391261e-012.849156e-013.264053e-013.636225e-013.854702e-013.907384e-013.926015e-013.958952e-014.010540e-013.891860e-01...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
45.988713e-091.116299e-081.840678e-082.814457e-083.588567e-083.917661e-084.094012e-084.337653e-084.679478e-084.298233e-08...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
51.638349e-246.005792e-241.712472e-234.242307e-237.190971e-238.956895e-231.008317e-221.168034e-221.405184e-221.216072e-22...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
60.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
70.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
80.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
90.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
100.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
110.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
120.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
130.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
140.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
150.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
160.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
170.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
180.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
190.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
200.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
210.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
220.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
230.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
240.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
250.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
260.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
270.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
280.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", + "

137 rows × 220 columns

\n", + "
" + ], + "text/plain": [ + " 0 1 2 \\\n", + "atomic_number ion_number \n", + "14 0 3.371573e-15 2.836444e-15 2.419784e-15 \n", + " 1 2.022453e-06 1.705701e-06 1.462930e-06 \n", + " 2 3.887190e-01 3.393144e-01 3.008827e-01 \n", + " 3 6.112531e-01 6.606446e-01 6.990609e-01 \n", + " 4 2.587464e-05 3.930435e-05 5.492756e-05 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "16 0 2.016802e-12 1.658852e-12 1.393517e-12 \n", + " 1 2.394294e-04 2.040317e-04 1.771086e-04 \n", + " 2 8.434871e-01 8.111234e-01 7.807144e-01 \n", + " 3 1.562730e-01 1.886718e-01 2.191073e-01 \n", + " 4 4.416652e-07 7.660508e-07 1.195779e-06 \n", + " 5 1.740392e-20 5.708941e-20 1.493104e-19 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "... ... ... ... \n", + "27 27 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "28 0 3.867508e-15 3.345109e-15 2.918472e-15 \n", + " 1 4.768144e-06 4.199161e-06 3.730841e-06 \n", + " 2 7.608692e-01 7.150802e-01 6.735910e-01 \n", + " 3 2.391261e-01 2.849156e-01 3.264053e-01 \n", + " 4 5.988713e-09 1.116299e-08 1.840678e-08 \n", + " 5 1.638349e-24 6.005792e-24 1.712472e-23 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 19 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 20 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 21 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 22 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 23 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 24 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 25 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 26 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 27 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 28 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "\n", + " 3 4 5 \\\n", + "atomic_number ion_number \n", + "14 0 2.136677e-15 1.999989e-15 2.054821e-15 \n", + " 1 1.291823e-06 1.208121e-06 1.225786e-06 \n", + " 2 2.707304e-01 2.546273e-01 2.514531e-01 \n", + " 3 7.291956e-01 7.452862e-01 7.484558e-01 \n", + " 4 7.275498e-05 8.533674e-05 8.983376e-05 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "16 0 1.205457e-12 1.110193e-12 1.112130e-12 \n", + " 1 1.569568e-04 1.464626e-04 1.456358e-04 \n", + " 2 7.526197e-01 7.357674e-01 7.320337e-01 \n", + " 3 2.472216e-01 2.640839e-01 2.678184e-01 \n", + " 4 1.740700e-06 2.154429e-06 2.302852e-06 \n", + " 5 3.421705e-19 5.532661e-19 6.679461e-19 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "... ... ... ... \n", + "27 27 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "28 0 2.607352e-15 2.446026e-15 2.476290e-15 \n", + " 1 3.373334e-06 3.185213e-06 3.198249e-06 \n", + " 2 6.363741e-01 6.145266e-01 6.092583e-01 \n", + " 3 3.636225e-01 3.854702e-01 3.907384e-01 \n", + " 4 2.814457e-08 3.588567e-08 3.917661e-08 \n", + " 5 4.242307e-23 7.190971e-23 8.956895e-23 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 19 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 20 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 21 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 22 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 23 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 24 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 25 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 26 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 27 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 28 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "\n", + " 6 7 8 \\\n", + "atomic_number ion_number \n", + "14 0 2.110358e-15 2.153097e-15 2.178870e-15 \n", + " 1 1.248424e-06 1.263770e-06 1.269590e-06 \n", + " 2 2.505741e-01 2.486651e-01 2.454469e-01 \n", + " 3 7.493327e-01 7.512385e-01 7.544522e-01 \n", + " 4 9.201249e-05 9.513098e-05 9.956385e-05 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "16 0 1.121180e-12 1.122548e-12 1.114228e-12 \n", + " 1 1.459572e-04 1.454903e-04 1.440266e-04 \n", + " 2 7.308866e-01 7.286039e-01 7.248339e-01 \n", + " 3 2.689651e-01 2.712481e-01 2.750194e-01 \n", + " 4 2.373892e-06 2.478209e-06 2.630008e-06 \n", + " 5 7.371750e-19 8.355242e-19 9.808088e-19 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "... ... ... ... \n", + "27 27 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "28 0 2.512104e-15 2.533291e-15 2.535729e-15 \n", + " 1 3.225992e-06 3.237521e-06 3.228287e-06 \n", + " 2 6.073952e-01 6.041015e-01 5.989427e-01 \n", + " 3 3.926015e-01 3.958952e-01 4.010540e-01 \n", + " 4 4.094012e-08 4.337653e-08 4.679478e-08 \n", + " 5 1.008317e-22 1.168034e-22 1.405184e-22 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 19 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 20 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 21 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 22 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 23 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 24 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 25 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 26 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 27 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 28 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "\n", + " 9 ... 210 211 \\\n", + "atomic_number ion_number ... \n", + "14 0 2.396495e-15 ... 3.099967e-09 3.105191e-09 \n", + " 1 1.375301e-06 ... 7.935683e-02 7.986164e-02 \n", + " 2 2.545289e-01 ... 9.206432e-01 9.201384e-01 \n", + " 3 7.453764e-01 ... 3.653376e-09 3.585998e-09 \n", + " 4 9.331045e-05 ... 3.671725e-25 3.512867e-25 \n", + " 5 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + "16 0 1.198344e-12 ... 1.249653e-06 1.246017e-06 \n", + " 1 1.517962e-04 ... 9.957734e-01 9.958178e-01 \n", + " 2 7.346920e-01 ... 4.225326e-03 4.180994e-03 \n", + " 3 2.651538e-01 ... 8.812221e-13 8.555966e-13 \n", + " 4 2.404086e-06 ... 0.000000e+00 0.000000e+00 \n", + " 5 8.453664e-19 ... 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 ... 0.000000e+00 0.000000e+00 \n", + "... ... ... ... ... \n", + "27 27 0.000000e+00 ... NaN NaN \n", + "28 0 2.725434e-15 ... NaN NaN \n", + " 1 3.416276e-06 ... NaN NaN \n", + " 2 6.108105e-01 ... NaN NaN \n", + " 3 3.891860e-01 ... NaN NaN \n", + " 4 4.298233e-08 ... NaN NaN \n", + " 5 1.216072e-22 ... NaN NaN \n", + " 6 0.000000e+00 ... NaN NaN \n", + " 7 0.000000e+00 ... NaN NaN \n", + " 8 0.000000e+00 ... NaN NaN \n", + " 9 0.000000e+00 ... NaN NaN \n", + " 10 0.000000e+00 ... NaN NaN \n", + " 11 0.000000e+00 ... NaN NaN \n", + " 12 0.000000e+00 ... NaN NaN \n", + " 13 0.000000e+00 ... NaN NaN \n", + " 14 0.000000e+00 ... NaN NaN \n", + " 15 0.000000e+00 ... NaN NaN \n", + " 16 0.000000e+00 ... NaN NaN \n", + " 17 0.000000e+00 ... NaN NaN \n", + " 18 0.000000e+00 ... NaN NaN \n", + " 19 0.000000e+00 ... NaN NaN \n", + " 20 0.000000e+00 ... NaN NaN \n", + " 21 0.000000e+00 ... NaN NaN \n", + " 22 0.000000e+00 ... NaN NaN \n", + " 23 0.000000e+00 ... NaN NaN \n", + " 24 0.000000e+00 ... NaN NaN \n", + " 25 0.000000e+00 ... NaN NaN \n", + " 26 0.000000e+00 ... NaN NaN \n", + " 27 0.000000e+00 ... NaN NaN \n", + " 28 0.000000e+00 ... NaN NaN \n", + "\n", + " 212 213 214 \\\n", + "atomic_number ion_number \n", + "14 0 3.119057e-09 3.211761e-09 3.355139e-09 \n", + " 1 8.051595e-02 8.248215e-02 8.528176e-02 \n", + " 2 9.194840e-01 9.175178e-01 9.147182e-01 \n", + " 3 3.481458e-09 3.266309e-09 2.989207e-09 \n", + " 4 3.268472e-25 2.814316e-25 2.286085e-25 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "16 0 1.245134e-06 1.258252e-06 1.280630e-06 \n", + " 1 9.958872e-01 9.960498e-01 9.962669e-01 \n", + " 2 4.111542e-03 3.948930e-03 3.731861e-03 \n", + " 3 8.161771e-13 7.350285e-13 6.352517e-13 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "... ... ... ... \n", + "27 27 NaN NaN NaN \n", + "28 0 NaN NaN NaN \n", + " 1 NaN NaN NaN \n", + " 2 NaN NaN NaN \n", + " 3 NaN NaN NaN \n", + " 4 NaN NaN NaN \n", + " 5 NaN NaN NaN \n", + " 6 NaN NaN NaN \n", + " 7 NaN NaN NaN \n", + " 8 NaN NaN NaN \n", + " 9 NaN NaN NaN \n", + " 10 NaN NaN NaN \n", + " 11 NaN NaN NaN \n", + " 12 NaN NaN NaN \n", + " 13 NaN NaN NaN \n", + " 14 NaN NaN NaN \n", + " 15 NaN NaN NaN \n", + " 16 NaN NaN NaN \n", + " 17 NaN NaN NaN \n", + " 18 NaN NaN NaN \n", + " 19 NaN NaN NaN \n", + " 20 NaN NaN NaN \n", + " 21 NaN NaN NaN \n", + " 22 NaN NaN NaN \n", + " 23 NaN NaN NaN \n", + " 24 NaN NaN NaN \n", + " 25 NaN NaN NaN \n", + " 26 NaN NaN NaN \n", + " 27 NaN NaN NaN \n", + " 28 NaN NaN NaN \n", + "\n", + " 215 216 217 \\\n", + "atomic_number ion_number \n", + "14 0 3.226573e-09 3.442658e-09 3.458125e-09 \n", + " 1 8.360084e-02 8.762037e-02 8.833458e-02 \n", + " 2 9.163992e-01 9.123796e-01 9.116654e-01 \n", + " 3 3.137543e-09 2.781066e-09 2.722738e-09 \n", + " 4 2.557571e-25 1.930661e-25 1.837662e-25 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "16 0 1.251831e-06 1.286763e-06 1.284397e-06 \n", + " 1 9.961392e-01 9.964290e-01 9.964735e-01 \n", + " 2 3.859506e-03 3.569744e-03 3.525171e-03 \n", + " 3 6.895675e-13 5.650228e-13 5.461861e-13 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "... ... ... ... \n", + "27 27 NaN NaN NaN \n", + "28 0 NaN NaN NaN \n", + " 1 NaN NaN NaN \n", + " 2 NaN NaN NaN \n", + " 3 NaN NaN NaN \n", + " 4 NaN NaN NaN \n", + " 5 NaN NaN NaN \n", + " 6 NaN NaN NaN \n", + " 7 NaN NaN NaN \n", + " 8 NaN NaN NaN \n", + " 9 NaN NaN NaN \n", + " 10 NaN NaN NaN \n", + " 11 NaN NaN NaN \n", + " 12 NaN NaN NaN \n", + " 13 NaN NaN NaN \n", + " 14 NaN NaN NaN \n", + " 15 NaN NaN NaN \n", + " 16 NaN NaN NaN \n", + " 17 NaN NaN NaN \n", + " 18 NaN NaN NaN \n", + " 19 NaN NaN NaN \n", + " 20 NaN NaN NaN \n", + " 21 NaN NaN NaN \n", + " 22 NaN NaN NaN \n", + " 23 NaN NaN NaN \n", + " 24 NaN NaN NaN \n", + " 25 NaN NaN NaN \n", + " 26 NaN NaN NaN \n", + " 27 NaN NaN NaN \n", + " 28 NaN NaN NaN \n", + "\n", + " 218 219 \n", + "atomic_number ion_number \n", + "14 0 3.453447e-09 3.465355e-09 \n", + " 1 8.872181e-02 8.938419e-02 \n", + " 2 9.112782e-01 9.106158e-01 \n", + " 3 2.685372e-09 2.637792e-09 \n", + " 4 1.778037e-25 1.706548e-25 \n", + " 5 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 \n", + "16 0 1.278783e-06 1.275507e-06 \n", + " 1 9.964994e-01 9.965363e-01 \n", + " 2 3.499367e-03 3.462394e-03 \n", + " 3 5.345989e-13 5.195702e-13 \n", + " 4 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 \n", + "... ... ... \n", + "27 27 NaN NaN \n", + "28 0 NaN NaN \n", + " 1 NaN NaN \n", + " 2 NaN NaN \n", + " 3 NaN NaN \n", + " 4 NaN NaN \n", + " 5 NaN NaN \n", + " 6 NaN NaN \n", + " 7 NaN NaN \n", + " 8 NaN NaN \n", + " 9 NaN NaN \n", + " 10 NaN NaN \n", + " 11 NaN NaN \n", + " 12 NaN NaN \n", + " 13 NaN NaN \n", + " 14 NaN NaN \n", + " 15 NaN NaN \n", + " 16 NaN NaN \n", + " 17 NaN NaN \n", + " 18 NaN NaN \n", + " 19 NaN NaN \n", + " 20 NaN NaN \n", + " 21 NaN NaN \n", + " 22 NaN NaN \n", + " 23 NaN NaN \n", + " 24 NaN NaN \n", + " 25 NaN NaN \n", + " 26 NaN NaN \n", + " 27 NaN NaN \n", + " 28 NaN NaN \n", + "\n", + "[137 rows x 220 columns]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sim.plasma.ion_number_density / sim.plasma.number_density" + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/docs/research/index.rst b/docs/research/index.rst index 5a4636c39f7..73ca1d90e90 100644 --- a/docs/research/index.rst +++ b/docs/research/index.rst @@ -7,6 +7,7 @@ but also give an overview over our efforts. + .. toctree:: :maxdepth: 3 diff --git a/tardis/io/parsers/__init__.py b/tardis/io/parsers/__init__.py index e69de29bb2d..a5bdddb0a28 100644 --- a/tardis/io/parsers/__init__.py +++ b/tardis/io/parsers/__init__.py @@ -0,0 +1,3 @@ +from tardis.io.parsers.blondin_toymodel import (read_blondin_toymodel, + convert_blondin_toymodel) + diff --git a/tardis/io/parsers/blondin_toymodel.py b/tardis/io/parsers/blondin_toymodel.py index 7b9d248069c..ef7ac4ab7d2 100644 --- a/tardis/io/parsers/blondin_toymodel.py +++ b/tardis/io/parsers/blondin_toymodel.py @@ -9,8 +9,6 @@ from tardis.util.base import parse_quantity - - PATTERN_REMOVE_BRACKET = re.compile('\[.+\]') T0_PATTERN = re.compile('tend = (.+)\n') @@ -90,24 +88,42 @@ def read_blondin_toymodel(fname): return blondin_dict, blondin_csv -def convert_blondin_toymodel(in_fname, out_fname, v_inner, v_outer): +def convert_blondin_toymodel(in_fname, out_fname, v_inner, v_outer, + conversion_t_electron_rad=None): """ Parameters ---------- - in_fname - out_fname - v_inner - v_outer - - Returns - ------- - + in_fname: str + input toymodel file + out_fname: str + output csvy file + + conversion_t_electron_rad: float or None + multiplicative conversion factor from t_electron to t_rad. + if `None` t_rad is not calculated + + v_inner: float or astropy.unit.Quantity + inner boundary velocity. If float will be interpreted as km/s + v_outer: float or astropy.unit.Quantity + outer boundary velocity. If float will be interpreted as km/s """ blondin_dict, blondin_csv = read_blondin_toymodel(in_fname) blondin_dict['v_inner_boundary'] = str(u.Quantity(v_inner, u.km / u.s)) blondin_dict['v_outer_boundary'] = str(u.Quantity(v_outer, u.km / u.s)) + if conversion_t_electron_rad is not None: + blondin_dict['datatype']['fields'].append({ + 'desc': + 'converted radiation temperature ' + 'using multiplicative factor={0}'.format( + conversion_t_electron_rad), + 'name': 't_rad', 'unit': 'K'}) + + blondin_csv['t_rad'] = (conversion_t_electron_rad * + blondin_csv.t_electron) + + csvy_file = '---\n{0}\n---\n{1}'.format( yaml.dump(blondin_dict, default_flow_style=False), blondin_csv.to_csv(index=False)) From 86f8644482bac541ddc9efe9d43625d744cf7007 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 8 Aug 2019 17:51:01 +0200 Subject: [PATCH 072/467] add atom data downloader --- tardis/io/atom_data/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tardis/io/atom_data/__init__.py b/tardis/io/atom_data/__init__.py index 5c3a8c24595..10a3e57fd9b 100644 --- a/tardis/io/atom_data/__init__.py +++ b/tardis/io/atom_data/__init__.py @@ -1 +1,2 @@ -from tardis.io.atom_data.base import AtomData \ No newline at end of file +from tardis.io.atom_data.base import AtomData +from tardis.io.atom_data.atom_web_download import download_atom_data \ No newline at end of file From 6f4d2a2aefe7adc5394b8270319fcdbae0f59d54 Mon Sep 17 00:00:00 2001 From: Christian Vogl Date: Fri, 30 Aug 2019 17:32:10 +0200 Subject: [PATCH 073/467] Save integrated spectrum to hdf if requested (#960) --- tardis/io/util.py | 13 +++++++++++-- tardis/montecarlo/base.py | 8 ++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/tardis/io/util.py b/tardis/io/util.py index ce9821c4b1e..400e7571606 100644 --- a/tardis/io/util.py +++ b/tardis/io/util.py @@ -181,6 +181,11 @@ def check_equality(item1, item2): class HDFWriterMixin(object): + def __new__(cls, *args, **kwargs): + instance = super(HDFWriterMixin, cls).__new__(cls) + instance.optional_hdf_properties = [] + instance.__init__(*args, **kwargs) + return instance @staticmethod def to_hdf_util(path_or_buf, path, elements, complevel=9, complib='blosc'): @@ -270,9 +275,13 @@ def to_hdf_util(path_or_buf, path, elements, complevel=9, complib='blosc'): buf.close() def get_properties(self): - data = {name: getattr(self, name) for name in self.hdf_properties} + data = {name: getattr(self, name) for name in self.full_hdf_properties} return data + @property + def full_hdf_properties(self): + return self.optional_hdf_properties + self.hdf_properties + @staticmethod def convert_to_snake_case(s): s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', s) @@ -376,4 +385,4 @@ def download_from_url(url, dst): f.write(chunk) pbar.update(1024) pbar.close() - return file_size \ No newline at end of file + return file_size diff --git a/tardis/montecarlo/base.py b/tardis/montecarlo/base.py index b9a6d0b57dd..5a116cd3be4 100644 --- a/tardis/montecarlo/base.py +++ b/tardis/montecarlo/base.py @@ -44,7 +44,7 @@ def __init__(self, seed, spectrum_frequency, virtual_spectrum_range, sigma_thomson, enable_reflective_inner_boundary, enable_full_relativity, inner_boundary_albedo, line_interaction_type, integrator_settings, - v_packet_settings): + v_packet_settings, spectrum_method): self.seed = seed self.packet_source = packet_source.BlackBodySimpleSource(seed) @@ -57,8 +57,11 @@ def __init__(self, seed, spectrum_frequency, virtual_spectrum_range, self.line_interaction_type = line_interaction_type self.integrator_settings = integrator_settings self.v_packet_settings = v_packet_settings + self.spectrum_method = spectrum_method self._integrator = None self._spectrum_integrated = None + if self.spectrum_method == 'integrated': + self.optional_hdf_properties.append('spectrum_integrated') def _initialize_estimator_arrays(self, no_of_shells, tau_sobolev_shape): """ @@ -423,4 +426,5 @@ def from_config(cls, config): enable_full_relativity=config.montecarlo.enable_full_relativity, line_interaction_type=config.plasma.line_interaction_type, integrator_settings=config.spectrum.integrated, - v_packet_settings=config.spectrum.virtual) + v_packet_settings=config.spectrum.virtual, + spectrum_method=config.spectrum.method) From 2e8e0bfaf8580438a8297907b703ebd19d13bd8b Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 4 Sep 2019 13:04:54 -0400 Subject: [PATCH 074/467] Update simple_test_framework.yml for Azure Pipelines --- azure-pipelines/simple_test_framework.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines/simple_test_framework.yml b/azure-pipelines/simple_test_framework.yml index 90764c51277..3e22d4e28b4 100644 --- a/azure-pipelines/simple_test_framework.yml +++ b/azure-pipelines/simple_test_framework.yml @@ -59,7 +59,7 @@ jobs: source activate tardis conda install -y pytest-cov pip install git+https://github.com/tonybaloney/pytest-azurepipelines.git - pytest tardis --tardis-refdata=$(ref.data.home) --test-run-title="TARDIS test $(vm_Image)" --cov=tardis --cov-report=xml --cov-report=html + pytest tardis --tardis-refdata=$(ref.data.home) --cov=tardis --cov-report=xml --cov-report=html displayName: 'TARDIS test' From a2d1eb73fef43344b0a1509fef00b22900473815 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 4 Sep 2019 13:43:46 -0400 Subject: [PATCH 075/467] Update tardis_env3.yml --- tardis_env3.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis_env3.yml b/tardis_env3.yml index 1bb2df59eca..28d807d1ac0 100644 --- a/tardis_env3.yml +++ b/tardis_env3.yml @@ -49,7 +49,7 @@ dependencies: #Test/Coverage requirements - git-lfs -- pytest +- pytest=4 - pytest-html - requests - coverage From 7b8f28b1f563bcb2ed098afe5230e71fdf9882b4 Mon Sep 17 00:00:00 2001 From: Youssef15015 Date: Wed, 11 Sep 2019 10:22:21 -0500 Subject: [PATCH 076/467] Add issue template (#949) --- .github/ISSUE_TEMPLATE.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000000..40895f80a59 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,11 @@ +#### Code Sample, a copy-pastable example if possible + +```python +# Your code here + +``` +#### Problem description + +[this should explain **why** the current behaviour is a problem and why the expected output is a better solution.] + +#### Expected Output \ No newline at end of file From 8b8c3bcc942257c71c10a914e534177a8bca2dd0 Mon Sep 17 00:00:00 2001 From: Marc Williamson Date: Wed, 11 Sep 2019 11:24:00 -0400 Subject: [PATCH 077/467] Csvy model config dict (#959) * Modified test to have separate config files for csvy_model vs old model * Copied csvy model yaml fields to main config * Changed csvy model to get certain fields from copied yaml into main config file --- tardis/io/config_reader.py | 17 +++++ tardis/model/base.py | 28 +++++-- tardis/model/tests/data/config_csvy_full.yml | 25 ------ .../model/tests/data/config_csvy_full_old.yml | 76 +++++++++++++++++++ .../model/tests/data/config_csvy_full_rad.yml | 25 ------ .../tests/data/config_csvy_full_rad_old.yml | 76 +++++++++++++++++++ .../tests/data/config_csvy_nocsv_branch85.yml | 17 ----- .../data/config_csvy_nocsv_branch85_old.yml | 68 +++++++++++++++++ .../data/config_csvy_nocsv_exponential.yml | 19 ----- .../config_csvy_nocsv_exponential_old.yml | 70 +++++++++++++++++ .../tests/data/config_csvy_nocsv_powerlaw.yml | 20 ----- .../data/config_csvy_nocsv_powerlaw_old.yml | 71 +++++++++++++++++ .../tests/data/config_csvy_nocsv_uniform.yml | 18 ----- .../data/config_csvy_nocsv_uniform_old.yml | 69 +++++++++++++++++ tardis/model/tests/test_csvy_model.py | 28 ++++--- 15 files changed, 484 insertions(+), 143 deletions(-) create mode 100644 tardis/model/tests/data/config_csvy_full_old.yml create mode 100644 tardis/model/tests/data/config_csvy_full_rad_old.yml create mode 100644 tardis/model/tests/data/config_csvy_nocsv_branch85_old.yml create mode 100644 tardis/model/tests/data/config_csvy_nocsv_exponential_old.yml create mode 100644 tardis/model/tests/data/config_csvy_nocsv_powerlaw_old.yml create mode 100644 tardis/model/tests/data/config_csvy_nocsv_uniform_old.yml diff --git a/tardis/io/config_reader.py b/tardis/io/config_reader.py index 9ceeaf2920c..5927194d93d 100644 --- a/tardis/io/config_reader.py +++ b/tardis/io/config_reader.py @@ -7,6 +7,7 @@ import tardis from tardis.io import config_validator from tardis.io.util import YAMLLoader, yaml_load_file +from tardis.io.parsers.csvy import load_yaml_from_csvy pp = pprint.PrettyPrinter(indent=4) @@ -116,6 +117,22 @@ def __init__(self, value=None): else: raise (TypeError, 'expected dict') + if hasattr(self, 'csvy_model') and hasattr(self, 'model'): + raise ValueError('Cannot specify both model and csvy_model in main config file.') + if hasattr(self, 'csvy_model'): + model = dict() + csvy_model_path = os.path.join(self.config_dirname,self.csvy_model) + csvy_yml = load_yaml_from_csvy(csvy_model_path) + if 'v_inner_boundary' in csvy_yml: + model['v_inner_boundary'] = csvy_yml['v_inner_boundary'] + if 'v_outer_boundary' in csvy_yml: + model['v_outer_boundary'] = csvy_yml['v_outer_boundary'] + + self.__setitem__('model',model) + for key in self.model: + self.model.__setitem__(key, self.model[key]) + + def __setitem__(self, key, value): if isinstance(value, dict) and not isinstance(value, ConfigurationNameSpace): diff --git a/tardis/model/base.py b/tardis/model/base.py index dd7e9a32d80..fa82dfbe35d 100644 --- a/tardis/model/base.py +++ b/tardis/model/base.py @@ -533,15 +533,29 @@ def from_csvy(cls, config): electron_densities = None temperature = None - if hasattr(csvy_model_config, 'v_inner_boundary'): - v_boundary_inner = csvy_model_config.v_inner_boundary - else: - v_boundary_inner = None + #if hasattr(csvy_model_config, 'v_inner_boundary'): + # v_boundary_inner = csvy_model_config.v_inner_boundary + #else: + # v_boundary_inner = None + + #if hasattr(csvy_model_config, 'v_outer_boundary'): + # v_boundary_outer = csvy_model_config.v_outer_boundary + #else: + # v_boundary_outer = None + + if hasattr(config, 'model'): + if hasattr(config.model, 'v_inner_boundary'): + v_boundary_inner = config.model.v_inner_boundary + else: + v_boundary_inner = None - if hasattr(csvy_model_config, 'v_outer_boundary'): - v_boundary_outer = csvy_model_config.v_outer_boundary + if hasattr(config.model, 'v_outer_boundary'): + v_boundary_outer = config.model.v_outer_boundary + else: + v_boundary_outer = None else: - v_boundary_outer = None + v_boundary_inner = None + v_boundary_outer = None if hasattr(csvy_model_config, 'velocity'): velocity = quantity_linspace(csvy_model_config.velocity.start, diff --git a/tardis/model/tests/data/config_csvy_full.yml b/tardis/model/tests/data/config_csvy_full.yml index 8d56b81748d..d8881967dc2 100644 --- a/tardis/model/tests/data/config_csvy_full.yml +++ b/tardis/model/tests/data/config_csvy_full.yml @@ -11,31 +11,6 @@ atom_data: kurucz_cd23_chianti_H_He.h5 csvy_model: csvy_full.csvy -model: - structure: - #v_inner_boundary: 9500 km/s - type: file - filename: density.dat - filetype: simple_ascii - # showing different configuration options separated by comments - # simple uniform - #--------------- - #type: uniform - #value: 1e-40 g/cm^3 - #--------------- - # branch85_w7 - fit of seven order polynomial to W7 (like Branch 85) - #--------------- - #type: branch85_w7 - # default, no need to change - #w7_time_0: 19.9999584 s - # default, no need to change - #w7_rho_0: 3e29 g/cm^3 - #--------------- - - abundances: - type: file - filename: abund.dat - filetype: custom_composition plasma: #initial_t_inner: 10000 K diff --git a/tardis/model/tests/data/config_csvy_full_old.yml b/tardis/model/tests/data/config_csvy_full_old.yml new file mode 100644 index 00000000000..68175811f42 --- /dev/null +++ b/tardis/model/tests/data/config_csvy_full_old.yml @@ -0,0 +1,76 @@ +# Example YAML configuration for TARDIS +tardis_config_version: v1.0 + +supernova: + luminosity_requested: 8.770 log_lsun + time_explosion: 16 day + distance: 8.32 Mpc + +# standard atomic data base; get it from the tardis-refdata repository +atom_data: kurucz_cd23_chianti_H_He.h5 + + +model: + structure: + #v_inner_boundary: 9500 km/s + type: file + filename: density.dat + filetype: simple_ascii + # showing different configuration options separated by comments + # simple uniform + #--------------- + #type: uniform + #value: 1e-40 g/cm^3 + #--------------- + # branch85_w7 - fit of seven order polynomial to W7 (like Branch 85) + #--------------- + #type: branch85_w7 + # default, no need to change + #w7_time_0: 19.9999584 s + # default, no need to change + #w7_rho_0: 3e29 g/cm^3 + #--------------- + + abundances: + type: file + filename: abund.dat + filetype: custom_composition + +plasma: + #initial_t_inner: 10000 K + #initial_t_rad: 10000 K + disable_electron_scattering: no + ionization: lte + excitation: lte + # radiative_rates_type - currently supported are dilute-blackbody, detailed and blackbody + radiative_rates_type: dilute-blackbody + # line_interaction_type - currently supported are scatter, downbranch and macroatom + line_interaction_type: macroatom + +montecarlo: + seed: 23111963 + no_of_packets: 4.0e+4 + iterations: 20 + # Number of threads used in OMP mode; uncomment if you want to control the + # OMP behaviour via the config; otherwise the maximum available number of + # threads is used or the number specified in the OMP_NUM_THREADS environment + # variable + # -------- + #nthreads: 1 + + last_no_of_packets: 1.e+5 + no_of_virtual_packets: 10 + + convergence_strategy: + type: damped + damping_constant: 1.0 + threshold: 0.05 + fraction: 0.8 + hold_iterations: 3 + t_inner: + damping_constant: 1.0 + +spectrum: + start: 500 angstrom + stop: 20000 angstrom + num: 10000 diff --git a/tardis/model/tests/data/config_csvy_full_rad.yml b/tardis/model/tests/data/config_csvy_full_rad.yml index c56205c6ee0..1c04971b5b9 100644 --- a/tardis/model/tests/data/config_csvy_full_rad.yml +++ b/tardis/model/tests/data/config_csvy_full_rad.yml @@ -11,31 +11,6 @@ atom_data: kurucz_cd23_chianti_H_He.h5 csvy_model: csvy_full_rad.csvy -model: - structure: - #v_inner_boundary: 9500 km/s - type: file - filename: density.dat - filetype: simple_ascii - # showing different configuration options separated by comments - # simple uniform - #--------------- - #type: uniform - #value: 1e-40 g/cm^3 - #--------------- - # branch85_w7 - fit of seven order polynomial to W7 (like Branch 85) - #--------------- - #type: branch85_w7 - # default, no need to change - #w7_time_0: 19.9999584 s - # default, no need to change - #w7_rho_0: 3e29 g/cm^3 - #--------------- - - abundances: - type: file - filename: abund.dat - filetype: custom_composition plasma: #initial_t_inner: 10000 K diff --git a/tardis/model/tests/data/config_csvy_full_rad_old.yml b/tardis/model/tests/data/config_csvy_full_rad_old.yml new file mode 100644 index 00000000000..c98964cf628 --- /dev/null +++ b/tardis/model/tests/data/config_csvy_full_rad_old.yml @@ -0,0 +1,76 @@ +# Example YAML configuration for TARDIS +tardis_config_version: v1.0 + +supernova: + luminosity_requested: 8.770 log_lsun + time_explosion: 16 day + distance: 8.32 Mpc + +# standard atomic data base; get it from the tardis-refdata repository +atom_data: kurucz_cd23_chianti_H_He.h5 + + +model: + structure: + #v_inner_boundary: 9500 km/s + type: file + filename: density.dat + filetype: simple_ascii + # showing different configuration options separated by comments + # simple uniform + #--------------- + #type: uniform + #value: 1e-40 g/cm^3 + #--------------- + # branch85_w7 - fit of seven order polynomial to W7 (like Branch 85) + #--------------- + #type: branch85_w7 + # default, no need to change + #w7_time_0: 19.9999584 s + # default, no need to change + #w7_rho_0: 3e29 g/cm^3 + #--------------- + + abundances: + type: file + filename: abund.dat + filetype: custom_composition + +plasma: + #initial_t_inner: 10000 K + initial_t_rad: 7000 K + disable_electron_scattering: no + ionization: lte + excitation: lte + # radiative_rates_type - currently supported are dilute-blackbody, detailed and blackbody + radiative_rates_type: dilute-blackbody + # line_interaction_type - currently supported are scatter, downbranch and macroatom + line_interaction_type: macroatom + +montecarlo: + seed: 23111963 + no_of_packets: 4.0e+4 + iterations: 20 + # Number of threads used in OMP mode; uncomment if you want to control the + # OMP behaviour via the config; otherwise the maximum available number of + # threads is used or the number specified in the OMP_NUM_THREADS environment + # variable + # -------- + #nthreads: 1 + + last_no_of_packets: 1.e+5 + no_of_virtual_packets: 10 + + convergence_strategy: + type: damped + damping_constant: 1.0 + threshold: 0.05 + fraction: 0.8 + hold_iterations: 3 + t_inner: + damping_constant: 1.0 + +spectrum: + start: 500 angstrom + stop: 20000 angstrom + num: 10000 diff --git a/tardis/model/tests/data/config_csvy_nocsv_branch85.yml b/tardis/model/tests/data/config_csvy_nocsv_branch85.yml index ab9d6305fb8..5012ace9dc2 100644 --- a/tardis/model/tests/data/config_csvy_nocsv_branch85.yml +++ b/tardis/model/tests/data/config_csvy_nocsv_branch85.yml @@ -11,23 +11,6 @@ atom_data: kurucz_cd23_chianti_H_He.h5 csvy_model: csvy_nocsv.csvy -model: - structure: - type: specific - velocity: - start: 9000 km/s - stop: 12000 km/s - num: 5 - density: - type: branch85_w7 - - abundances: - type: uniform - H: 0.5 - He: 0.2 - O: 0.25 - Ni56: 0.04 - Ni58: 0.01 plasma: #initial_t_inner: 10000 K diff --git a/tardis/model/tests/data/config_csvy_nocsv_branch85_old.yml b/tardis/model/tests/data/config_csvy_nocsv_branch85_old.yml new file mode 100644 index 00000000000..51a5e88bebe --- /dev/null +++ b/tardis/model/tests/data/config_csvy_nocsv_branch85_old.yml @@ -0,0 +1,68 @@ +# Example YAML configuration for TARDIS +tardis_config_version: v1.0 + +supernova: + luminosity_requested: 8.770 log_lsun + time_explosion: 16 day + distance: 8.32 Mpc + +# standard atomic data base; get it from the tardis-refdata repository +atom_data: kurucz_cd23_chianti_H_He.h5 + + +model: + structure: + type: specific + velocity: + start: 9000 km/s + stop: 12000 km/s + num: 5 + density: + type: branch85_w7 + + abundances: + type: uniform + H: 0.5 + He: 0.2 + O: 0.25 + Ni56: 0.04 + Ni58: 0.01 + +plasma: + #initial_t_inner: 10000 K + #initial_t_rad: 10000 K + disable_electron_scattering: no + ionization: lte + excitation: lte + # radiative_rates_type - currently supported are dilute-blackbody, detailed and blackbody + radiative_rates_type: dilute-blackbody + # line_interaction_type - currently supported are scatter, downbranch and macroatom + line_interaction_type: macroatom + +montecarlo: + seed: 23111963 + no_of_packets: 4.0e+4 + iterations: 20 + # Number of threads used in OMP mode; uncomment if you want to control the + # OMP behaviour via the config; otherwise the maximum available number of + # threads is used or the number specified in the OMP_NUM_THREADS environment + # variable + # -------- + #nthreads: 1 + + last_no_of_packets: 1.e+5 + no_of_virtual_packets: 10 + + convergence_strategy: + type: damped + damping_constant: 1.0 + threshold: 0.05 + fraction: 0.8 + hold_iterations: 3 + t_inner: + damping_constant: 1.0 + +spectrum: + start: 500 angstrom + stop: 20000 angstrom + num: 10000 diff --git a/tardis/model/tests/data/config_csvy_nocsv_exponential.yml b/tardis/model/tests/data/config_csvy_nocsv_exponential.yml index 98bc7a7fdca..02bfeaa5dc4 100644 --- a/tardis/model/tests/data/config_csvy_nocsv_exponential.yml +++ b/tardis/model/tests/data/config_csvy_nocsv_exponential.yml @@ -11,25 +11,6 @@ atom_data: kurucz_cd23_chianti_H_He.h5 csvy_model: csvy_nocsv_exponential.csvy -model: - structure: - type: specific - velocity: - start: 9000 km/s - stop: 12000 km/s - num: 5 - density: - type: exponential - rho_0: 1e-9 g/cm^3 - v_0: 10000 km/s - - abundances: - type: uniform - H: 0.5 - He: 0.2 - O: 0.25 - Ni56: 0.04 - Ni58: 0.01 plasma: #initial_t_inner: 10000 K diff --git a/tardis/model/tests/data/config_csvy_nocsv_exponential_old.yml b/tardis/model/tests/data/config_csvy_nocsv_exponential_old.yml new file mode 100644 index 00000000000..0d49b256f1c --- /dev/null +++ b/tardis/model/tests/data/config_csvy_nocsv_exponential_old.yml @@ -0,0 +1,70 @@ +# Example YAML configuration for TARDIS +tardis_config_version: v1.0 + +supernova: + luminosity_requested: 8.770 log_lsun + time_explosion: 16 day + distance: 8.32 Mpc + +# standard atomic data base; get it from the tardis-refdata repository +atom_data: kurucz_cd23_chianti_H_He.h5 + + +model: + structure: + type: specific + velocity: + start: 9000 km/s + stop: 12000 km/s + num: 5 + density: + type: exponential + rho_0: 1e-9 g/cm^3 + v_0: 10000 km/s + + abundances: + type: uniform + H: 0.5 + He: 0.2 + O: 0.25 + Ni56: 0.04 + Ni58: 0.01 + +plasma: + #initial_t_inner: 10000 K + #initial_t_rad: 10000 K + disable_electron_scattering: no + ionization: lte + excitation: lte + # radiative_rates_type - currently supported are dilute-blackbody, detailed and blackbody + radiative_rates_type: dilute-blackbody + # line_interaction_type - currently supported are scatter, downbranch and macroatom + line_interaction_type: macroatom + +montecarlo: + seed: 23111963 + no_of_packets: 4.0e+4 + iterations: 20 + # Number of threads used in OMP mode; uncomment if you want to control the + # OMP behaviour via the config; otherwise the maximum available number of + # threads is used or the number specified in the OMP_NUM_THREADS environment + # variable + # -------- + #nthreads: 1 + + last_no_of_packets: 1.e+5 + no_of_virtual_packets: 10 + + convergence_strategy: + type: damped + damping_constant: 1.0 + threshold: 0.05 + fraction: 0.8 + hold_iterations: 3 + t_inner: + damping_constant: 1.0 + +spectrum: + start: 500 angstrom + stop: 20000 angstrom + num: 10000 diff --git a/tardis/model/tests/data/config_csvy_nocsv_powerlaw.yml b/tardis/model/tests/data/config_csvy_nocsv_powerlaw.yml index d65904e9382..edfdabb5ba5 100644 --- a/tardis/model/tests/data/config_csvy_nocsv_powerlaw.yml +++ b/tardis/model/tests/data/config_csvy_nocsv_powerlaw.yml @@ -11,26 +11,6 @@ atom_data: kurucz_cd23_chianti_H_He.h5 csvy_model: csvy_nocsv_powerlaw.csvy -model: - structure: - type: specific - velocity: - start: 9000 km/s - stop: 12000 km/s - num: 5 - density: - type: power_law - rho_0: 1e-9 g/cm^3 - v_0: 10000 km/s - exponent: -2 - - abundances: - type: uniform - H: 0.5 - He: 0.2 - O: 0.25 - Ni56: 0.04 - Ni58: 0.01 plasma: #initial_t_inner: 10000 K diff --git a/tardis/model/tests/data/config_csvy_nocsv_powerlaw_old.yml b/tardis/model/tests/data/config_csvy_nocsv_powerlaw_old.yml new file mode 100644 index 00000000000..8df81c4cce0 --- /dev/null +++ b/tardis/model/tests/data/config_csvy_nocsv_powerlaw_old.yml @@ -0,0 +1,71 @@ +# Example YAML configuration for TARDIS +tardis_config_version: v1.0 + +supernova: + luminosity_requested: 8.770 log_lsun + time_explosion: 16 day + distance: 8.32 Mpc + +# standard atomic data base; get it from the tardis-refdata repository +atom_data: kurucz_cd23_chianti_H_He.h5 + + +model: + structure: + type: specific + velocity: + start: 9000 km/s + stop: 12000 km/s + num: 5 + density: + type: power_law + rho_0: 1e-9 g/cm^3 + v_0: 10000 km/s + exponent: -2 + + abundances: + type: uniform + H: 0.5 + He: 0.2 + O: 0.25 + Ni56: 0.04 + Ni58: 0.01 + +plasma: + #initial_t_inner: 10000 K + #initial_t_rad: 10000 K + disable_electron_scattering: no + ionization: lte + excitation: lte + # radiative_rates_type - currently supported are dilute-blackbody, detailed and blackbody + radiative_rates_type: dilute-blackbody + # line_interaction_type - currently supported are scatter, downbranch and macroatom + line_interaction_type: macroatom + +montecarlo: + seed: 23111963 + no_of_packets: 4.0e+4 + iterations: 20 + # Number of threads used in OMP mode; uncomment if you want to control the + # OMP behaviour via the config; otherwise the maximum available number of + # threads is used or the number specified in the OMP_NUM_THREADS environment + # variable + # -------- + #nthreads: 1 + + last_no_of_packets: 1.e+5 + no_of_virtual_packets: 10 + + convergence_strategy: + type: damped + damping_constant: 1.0 + threshold: 0.05 + fraction: 0.8 + hold_iterations: 3 + t_inner: + damping_constant: 1.0 + +spectrum: + start: 500 angstrom + stop: 20000 angstrom + num: 10000 diff --git a/tardis/model/tests/data/config_csvy_nocsv_uniform.yml b/tardis/model/tests/data/config_csvy_nocsv_uniform.yml index e1c30cd826e..36ba9e0e547 100644 --- a/tardis/model/tests/data/config_csvy_nocsv_uniform.yml +++ b/tardis/model/tests/data/config_csvy_nocsv_uniform.yml @@ -11,24 +11,6 @@ atom_data: kurucz_cd23_chianti_H_He.h5 csvy_model: csvy_nocsv_uniform.csvy -model: - structure: - type: specific - velocity: - start: 9000 km/s - stop: 12000 km/s - num: 5 - density: - type: uniform - value: 1e-9 g/cm^3 - - abundances: - type: uniform - H: 0.5 - He: 0.2 - O: 0.25 - Ni56: 0.04 - Ni58: 0.01 plasma: #initial_t_inner: 10000 K diff --git a/tardis/model/tests/data/config_csvy_nocsv_uniform_old.yml b/tardis/model/tests/data/config_csvy_nocsv_uniform_old.yml new file mode 100644 index 00000000000..9f494eaa96e --- /dev/null +++ b/tardis/model/tests/data/config_csvy_nocsv_uniform_old.yml @@ -0,0 +1,69 @@ +# Example YAML configuration for TARDIS +tardis_config_version: v1.0 + +supernova: + luminosity_requested: 8.770 log_lsun + time_explosion: 16 day + distance: 8.32 Mpc + +# standard atomic data base; get it from the tardis-refdata repository +atom_data: kurucz_cd23_chianti_H_He.h5 + + +model: + structure: + type: specific + velocity: + start: 9000 km/s + stop: 12000 km/s + num: 5 + density: + type: uniform + value: 1e-9 g/cm^3 + + abundances: + type: uniform + H: 0.5 + He: 0.2 + O: 0.25 + Ni56: 0.04 + Ni58: 0.01 + +plasma: + #initial_t_inner: 10000 K + #initial_t_rad: 10000 K + disable_electron_scattering: no + ionization: lte + excitation: lte + # radiative_rates_type - currently supported are dilute-blackbody, detailed and blackbody + radiative_rates_type: dilute-blackbody + # line_interaction_type - currently supported are scatter, downbranch and macroatom + line_interaction_type: macroatom + +montecarlo: + seed: 23111963 + no_of_packets: 4.0e+4 + iterations: 20 + # Number of threads used in OMP mode; uncomment if you want to control the + # OMP behaviour via the config; otherwise the maximum available number of + # threads is used or the number specified in the OMP_NUM_THREADS environment + # variable + # -------- + #nthreads: 1 + + last_no_of_packets: 1.e+5 + no_of_virtual_packets: 10 + + convergence_strategy: + type: damped + damping_constant: 1.0 + threshold: 0.05 + fraction: 0.8 + hold_iterations: 3 + t_inner: + damping_constant: 1.0 + +spectrum: + start: 500 angstrom + stop: 20000 angstrom + num: 10000 diff --git a/tardis/model/tests/test_csvy_model.py b/tardis/model/tests/test_csvy_model.py index 73360c2d69e..35956dc63f5 100644 --- a/tardis/model/tests/test_csvy_model.py +++ b/tardis/model/tests/test_csvy_model.py @@ -9,20 +9,24 @@ DATA_PATH = os.path.join(tardis.__path__[0],'model','tests','data') -@pytest.fixture(scope="module", params=['config_csvy_full.yml', - 'config_csvy_nocsv_branch85.yml', - 'config_csvy_nocsv_uniform.yml', - 'config_csvy_nocsv_powerlaw.yml', - 'config_csvy_nocsv_exponential.yml', - 'config_csvy_full_rad.yml']) -def full_filename(request): - return os.path.join(DATA_PATH, request.param) +@pytest.fixture(scope="module", params=[('config_csvy_full.yml','config_csvy_full_old.yml'), + ('config_csvy_nocsv_branch85.yml','config_csvy_nocsv_branch85_old.yml'), + ('config_csvy_nocsv_uniform.yml','config_csvy_nocsv_uniform_old.yml'), + ('config_csvy_nocsv_powerlaw.yml','config_csvy_nocsv_powerlaw_old.yml'), + ('config_csvy_nocsv_exponential.yml','config_csvy_nocsv_exponential_old.yml'), + ('config_csvy_full_rad.yml','config_csvy_full_rad_old.yml')]) +def filename(request): + fn_tup = request.param + fn = os.path.join(DATA_PATH, fn_tup[0]) + fnold = os.path.join(DATA_PATH, fn_tup[1]) + return fn, fnold - -def test_compare_models(full_filename): - tardis_config = Configuration.from_yaml(full_filename) +def test_compare_models(filename): + fn, fnold = filename + tardis_config = Configuration.from_yaml(fn) + tardis_config_old = Configuration.from_yaml(fnold) csvy_model = Radial1DModel.from_csvy(tardis_config) - config_model = Radial1DModel.from_config(tardis_config) + config_model = Radial1DModel.from_config(tardis_config_old) csvy_model_props = csvy_model.get_properties().keys() config_model_props = config_model.get_properties().keys() npt.assert_array_equal(csvy_model_props, config_model_props) From 4e5c8ecb01e6d2003031aee22405c4d40e397f21 Mon Sep 17 00:00:00 2001 From: Christian Vogl Date: Thu, 26 Sep 2019 16:26:46 +0200 Subject: [PATCH 078/467] Raise error if requested atoms are not in the atomic data (#964) --- tardis/io/atom_data/base.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tardis/io/atom_data/base.py b/tardis/io/atom_data/base.py index f991e5ac577..33efd338b77 100644 --- a/tardis/io/atom_data/base.py +++ b/tardis/io/atom_data/base.py @@ -290,6 +290,8 @@ def prepare_atom_data( raise AtomDataNotPreparedError("AtomData was already prepared") self.selected_atomic_numbers = selected_atomic_numbers + self._check_selected_atomic_numbers() + self.nlte_species = nlte_species self.levels = self.levels[ @@ -395,6 +397,25 @@ def prepare_atom_data( self.nlte_data = NLTEData(self, nlte_species) + def _check_selected_atomic_numbers(self): + selected_atomic_numbers = self.selected_atomic_numbers + available_atomic_numbers = np.unique( + self.ionization_data.index.get_level_values(0) + ) + atomic_number_check = np.isin(selected_atomic_numbers, + available_atomic_numbers) + + if not all(atomic_number_check): + missing_atom_mask = np.logical_not(atomic_number_check) + missing_atomic_numbers = selected_atomic_numbers[missing_atom_mask] + missing_numbers_str = ','.join( + missing_atomic_numbers.astype('str') + ) + msg = "For atomic numbers {} there is no atomic data.".format( + missing_numbers_str + ) + raise AtomDataMissingError(msg) + def __repr__(self): return "" % \ (self.uuid1, self.md5, self.lines.atomic_number.count(), self.levels.energy.count()) From 52e454685295965c76d2b33f5ec809dde405d812 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 27 Sep 2019 15:59:07 -0400 Subject: [PATCH 079/467] fix AtomData repr. (#966) --- tardis/io/atom_data/base.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tardis/io/atom_data/base.py b/tardis/io/atom_data/base.py index 33efd338b77..8202ec8fcb4 100644 --- a/tardis/io/atom_data/base.py +++ b/tardis/io/atom_data/base.py @@ -417,8 +417,9 @@ def _check_selected_atomic_numbers(self): raise AtomDataMissingError(msg) def __repr__(self): - return "" % \ - (self.uuid1, self.md5, self.lines.atomic_number.count(), self.levels.energy.count()) + return "".format( + self.uuid1, self.md5, self.lines.line_id.count(), + self.levels.energy.count()) class NLTEData(object): From 1d7870eba64695ba6825e946a8d6d70f1275c657 Mon Sep 17 00:00:00 2001 From: Marc Williamson Date: Wed, 2 Oct 2019 11:12:57 -0400 Subject: [PATCH 080/467] Isotope time0 (#965) * Converted model_isotope_time_0 to a required property. * Added model_isotope_time_0. --- tardis/io/schemas/csvy_model.yml | 4 ++-- tardis/model/tests/data/csvy_full.csvy | 1 + tardis/model/tests/data/csvy_full_rad.csvy | 1 + tardis/model/tests/data/csvy_full_rad_abundance_test.csvy | 1 + tardis/model/tests/data/csvy_nocsv.csvy | 1 + tardis/model/tests/data/csvy_nocsv_exponential.csvy | 1 + tardis/model/tests/data/csvy_nocsv_powerlaw.csvy | 1 + tardis/model/tests/data/csvy_nocsv_uniform.csvy | 1 + 8 files changed, 9 insertions(+), 2 deletions(-) diff --git a/tardis/io/schemas/csvy_model.yml b/tardis/io/schemas/csvy_model.yml index afafdda084f..dc593e01d8f 100644 --- a/tardis/io/schemas/csvy_model.yml +++ b/tardis/io/schemas/csvy_model.yml @@ -12,8 +12,7 @@ properties: model_isotope_time_0: type: quantity - default: -1 day - description: initial time for isotope decay + description: Initial time for isotope decay. Set to 0 for no isotopes. description: type: string @@ -63,6 +62,7 @@ properties: required: - tardis_model_config_version +- model_isotope_time_0 definitions: density: diff --git a/tardis/model/tests/data/csvy_full.csvy b/tardis/model/tests/data/csvy_full.csvy index f5fb46f25e4..b5de335e032 100644 --- a/tardis/model/tests/data/csvy_full.csvy +++ b/tardis/model/tests/data/csvy_full.csvy @@ -1,6 +1,7 @@ --- name: csvy_full model_density_time_0: 1 day +model_isotope_time_0: 0 day description: Example csvy config file for TARDIS. tardis_model_config_version: v1.0 datatype: diff --git a/tardis/model/tests/data/csvy_full_rad.csvy b/tardis/model/tests/data/csvy_full_rad.csvy index f8f527c1b22..1cdf0afe185 100644 --- a/tardis/model/tests/data/csvy_full_rad.csvy +++ b/tardis/model/tests/data/csvy_full_rad.csvy @@ -1,6 +1,7 @@ --- name: csvy_full model_density_time_0: 1 day +model_isotope_time_0: 0 day description: Example csvy config file for TARDIS. tardis_model_config_version: v1.0 datatype: diff --git a/tardis/model/tests/data/csvy_full_rad_abundance_test.csvy b/tardis/model/tests/data/csvy_full_rad_abundance_test.csvy index be4061e367a..cdbefb10d68 100644 --- a/tardis/model/tests/data/csvy_full_rad_abundance_test.csvy +++ b/tardis/model/tests/data/csvy_full_rad_abundance_test.csvy @@ -1,6 +1,7 @@ --- name: csvy_full model_density_time_0: 1 day +model_isotope_time_0: 0 day description: Example csvy config file for TARDIS. tardis_model_config_version: v1.0 datatype: diff --git a/tardis/model/tests/data/csvy_nocsv.csvy b/tardis/model/tests/data/csvy_nocsv.csvy index 918dc92c9c1..c36450607ff 100644 --- a/tardis/model/tests/data/csvy_nocsv.csvy +++ b/tardis/model/tests/data/csvy_nocsv.csvy @@ -1,6 +1,7 @@ --- name: csvy_nocsv model_density_time_0: 1 day +model_isotope_time_0: 0 day description: Example csvy config file for TARDIS. tardis_model_config_version: v1.0 diff --git a/tardis/model/tests/data/csvy_nocsv_exponential.csvy b/tardis/model/tests/data/csvy_nocsv_exponential.csvy index fce51c1b11e..c2b7fb390f3 100644 --- a/tardis/model/tests/data/csvy_nocsv_exponential.csvy +++ b/tardis/model/tests/data/csvy_nocsv_exponential.csvy @@ -1,6 +1,7 @@ --- name: csvy_nocsv model_density_time_0: 1 day +model_isotope_time_0: 0 day description: Example csvy config file for TARDIS. tardis_model_config_version: v1.0 diff --git a/tardis/model/tests/data/csvy_nocsv_powerlaw.csvy b/tardis/model/tests/data/csvy_nocsv_powerlaw.csvy index 111ab3324fc..3f02fe17707 100644 --- a/tardis/model/tests/data/csvy_nocsv_powerlaw.csvy +++ b/tardis/model/tests/data/csvy_nocsv_powerlaw.csvy @@ -1,6 +1,7 @@ --- name: csvy_nocsv model_density_time_0: 1 day +model_isotope_time_0: 0 day description: Example csvy config file for TARDIS. tardis_model_config_version: v1.0 diff --git a/tardis/model/tests/data/csvy_nocsv_uniform.csvy b/tardis/model/tests/data/csvy_nocsv_uniform.csvy index f2dc0f6e9a8..198ce22c44e 100644 --- a/tardis/model/tests/data/csvy_nocsv_uniform.csvy +++ b/tardis/model/tests/data/csvy_nocsv_uniform.csvy @@ -1,6 +1,7 @@ --- name: csvy_nocsv model_density_time_0: 1 day +model_isotope_time_0: 0 day description: Example csvy config file for TARDIS. tardis_model_config_version: v1.0 From dbb7987d4eb24e80184f2db92449ab1dd21fcb70 Mon Sep 17 00:00:00 2001 From: James Gillanders Date: Mon, 7 Oct 2019 10:01:21 +0100 Subject: [PATCH 081/467] Fixed GUI #950 tardis/gui/widgets.py --- tardis/gui/widgets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis/gui/widgets.py b/tardis/gui/widgets.py index 514e8f32d9e..fd264a78880 100644 --- a/tardis/gui/widgets.py +++ b/tardis/gui/widgets.py @@ -977,7 +977,7 @@ def __init__(self, line_interaction_analysis, atom_data, lines_data, description species_abundances = ( line_interaction_species_group.wavelength.count().astype(float) / line_interaction_analysis.last_line_in.wavelength.count()).astype(float).tolist() - species_abundances = map(float, species_abundances) + species_abundances = list(map(float, species_abundances)) species_table_model.add_data(species_abundances) self.species_table.setModel(species_table_model) From 7b95ff66fb970e6b35cb3d5d503c39240ca533c5 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 29 Oct 2019 10:04:32 -0400 Subject: [PATCH 082/467] removed the conda update --- azure-pipelines/doc-build.yml | 2 +- azure-pipelines/simple_test_framework.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines/doc-build.yml b/azure-pipelines/doc-build.yml index d855b6cf347..80afa140ab9 100644 --- a/azure-pipelines/doc-build.yml +++ b/azure-pipelines/doc-build.yml @@ -56,7 +56,7 @@ jobs: # Update conda without asking for confirmation. - bash: | sudo chown -R $USER $CONDA - conda update -y conda + # conda update -y conda displayName: updating conda and activating # Install the conda environment made for tardis. - bash: | diff --git a/azure-pipelines/simple_test_framework.yml b/azure-pipelines/simple_test_framework.yml index 3e22d4e28b4..197af806610 100644 --- a/azure-pipelines/simple_test_framework.yml +++ b/azure-pipelines/simple_test_framework.yml @@ -39,7 +39,7 @@ jobs: - bash: | sudo chown -R $USER $CONDA - conda update -y conda + # conda update -y conda displayName: updating conda and activating - bash: | From 76db0d67544ea367eb1558a9bfc74eef13810c85 Mon Sep 17 00:00:00 2001 From: Christian Vogl Date: Wed, 30 Oct 2019 15:50:08 +0100 Subject: [PATCH 083/467] Fix formal integral spikes bug (see #970) (#971) --- tardis/montecarlo/formal_integral.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tardis/montecarlo/formal_integral.py b/tardis/montecarlo/formal_integral.py index d2bb0496c37..1e604cab8b0 100644 --- a/tardis/montecarlo/formal_integral.py +++ b/tardis/montecarlo/formal_integral.py @@ -199,9 +199,11 @@ def interpolate_integrator_quantities(self, att_S_ul, Jredlu, runner.electron_densities_integ = interp1d( r_middle, plasma.electron_densities, fill_value='extrapolate', kind='nearest')(r_middle_integ) + # Assume tau_sobolevs to be constant within a shell + # (as in the MC simulation) runner.tau_sobolevs_integ = interp1d( r_middle, plasma.tau_sobolevs, - fill_value='extrapolate')(r_middle_integ) + fill_value='extrapolate', kind='nearest')(r_middle_integ) att_S_ul = interp1d( r_middle, att_S_ul, fill_value='extrapolate')(r_middle_integ) Jredlu = interp1d( @@ -210,4 +212,10 @@ def interpolate_integrator_quantities(self, att_S_ul, Jredlu, r_middle, Jbluelu, fill_value='extrapolate')(r_middle_integ) e_dot_u = interp1d( r_middle, e_dot_u, fill_value='extrapolate')(r_middle_integ) + + # Set negative values from the extrapolation to zero + att_S_ul = att_S_ul.clip(0.) + Jbluelu = Jbluelu.clip(0.) + Jredlu = Jredlu.clip(0.) + e_dot_u = e_dot_u.clip(0.) return att_S_ul, Jredlu, Jbluelu, e_dot_u From 90f9a007c1767cc1adae7a35e63e848dd7327c3c Mon Sep 17 00:00:00 2001 From: Marc Williamson Date: Wed, 30 Oct 2019 11:04:34 -0400 Subject: [PATCH 084/467] Added Credits --- README.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.rst b/README.rst index 6a45bcfc626..e5f12ea7086 100644 --- a/README.rst +++ b/README.rst @@ -6,6 +6,12 @@ TARDIS is a tool that creates synthetic observations (spectra) for exploding stars (supernovae). Documentation can be found at https://tardis-sn.github.io/tardis/. +************* +CREDIT TARDIS +************* + +If you use TARDIS for your published research or presentations, please follow the Credits and Publication Policy: https://tardis-sn.github.io/tardis/credits.html + .. image:: https://dev.azure.com/tardis-sn/TARDIS/_apis/build/status/tardis-sn.tardis?branchName=master :target: https://dev.azure.com/tardis-sn/TARDIS/_build/latest?definitionId=1&branchName=master From f5b98cbcf7af8305963594851f1fcbbbbe9838e3 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 30 Oct 2019 11:13:19 -0400 Subject: [PATCH 085/467] Update doc-build.yml for Azure Pipelines --- azure-pipelines/doc-build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/azure-pipelines/doc-build.yml b/azure-pipelines/doc-build.yml index 80afa140ab9..3dbfab80113 100644 --- a/azure-pipelines/doc-build.yml +++ b/azure-pipelines/doc-build.yml @@ -65,6 +65,8 @@ jobs: # Activate the environment, use sphinx to make the html documentation of the build, and deploy to gh-pages. - bash: | source activate tardis + npm install -g github-changes + github-changes -o tardis-sn -r tardis --only-pulls --use-commit-body -f CHANGELOG.md -k $GITHUB_CHANGES_OAUTH bash deploy_docs.sh displayName: 'TARDIS build and deployment to gh-pages' # See github.com/tardis-sn/tardis for the contents of these files. \ No newline at end of file From 70092a44f2990273f60d57dc5992ddd12d94209a Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 30 Oct 2019 11:39:48 -0400 Subject: [PATCH 086/467] Update tardis_env3.yml --- tardis_env3.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis_env3.yml b/tardis_env3.yml index 28d807d1ac0..1116a9b29b8 100644 --- a/tardis_env3.yml +++ b/tardis_env3.yml @@ -6,7 +6,7 @@ channels: dependencies: - python=3 -- numpy=1.15 +- numpy=1.16 - scipy=1.1 - pandas=0.24 - astropy=3 From e73bc831aa17cd24f36e1c74892d5ac17da2f085 Mon Sep 17 00:00:00 2001 From: Marc Williamson Date: Wed, 30 Oct 2019 11:39:57 -0400 Subject: [PATCH 087/467] Incorporated Credit Policy directly --- README.rst | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 117 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index e5f12ea7086..7d8afb81bb3 100644 --- a/README.rst +++ b/README.rst @@ -6,11 +6,124 @@ TARDIS is a tool that creates synthetic observations (spectra) for exploding stars (supernovae). Documentation can be found at https://tardis-sn.github.io/tardis/. -************* -CREDIT TARDIS -************* +****************************** +Credits & Publication Policies +****************************** -If you use TARDIS for your published research or presentations, please follow the Credits and Publication Policy: https://tardis-sn.github.io/tardis/credits.html +We provide TARDIS as a free, open-source tool. If you are using it, please +adhere to a few policies and acknowledge the TARDIS Team. + +Publication Policies +==================== + +If you use this code for any publications or presentations please acknowledge +it. Please cite `Kerzendorf & Sim 2014 +`_ in the text + +Please add this paragraph to the Acknowledgement: + +.. code-block:: none + + This research made use of \textsc{Tardis}, a community-developed software + package for spectral synthesis in supernovae + \citep{2014MNRAS.440..387K, kerzendorf_wolfgang_2019_2590539}. + The development of \textsc{Tardis} received support from the + Google Summer of Code initiative + and from ESA's Summer of Code in Space program. \textsc{Tardis} makes + extensive use of Astropy and PyNE. + + + +If you use any of the full relativity treatments or use TARDIS for +modelling Type II supernovae you also add this citation to acknowledgement +`Spectral modeling of type II supernovae. I. Dilution factors +`_: + +.. code-block:: none + + \citep{2019A&A...621A..29V} + +The following bibtex entries are needed for the references. + +.. code-block:: none + + @ARTICLE{2014MNRAS.440..387K, + author = {{Kerzendorf}, W.~E. and {Sim}, S.~A.}, + title = "{A spectral synthesis code for rapid modelling of supernovae}", + journal = {\mnras}, + archivePrefix = "arXiv", + eprint = {1401.5469}, + primaryClass = "astro-ph.SR", + keywords = {radiative transfer, methods: numerical, supernovae: general}, + year = 2014, + month = may, + volume = 440, + pages = {387-404}, + doi = {10.1093/mnras/stu055}, + adsurl = {http://adsabs.harvard.edu/abs/2014MNRAS.440..387K}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} + } + + @ARTICLE{2019A&A...621A..29V, + author = {{Vogl}, C. and {Sim}, S.~A. and {Noebauer}, U.~M. and + {Kerzendorf}, W.~E. and {Hillebrandt}, W.}, + title = "{Spectral modeling of type II supernovae. I. Dilution factors}", + journal = {\aap}, + keywords = {radiative transfer, methods: numerical, stars: distances, supernovae: general, supernovae: individual: SN1999em, Astrophysics - High Energy Astrophysical Phenomena, Astrophysics - Solar and Stellar Astrophysics}, + year = "2019", + month = "Jan", + volume = {621}, + eid = {A29}, + pages = {A29}, + doi = {10.1051/0004-6361/201833701}, + archivePrefix = {arXiv}, + eprint = {1811.02543}, + primaryClass = {astro-ph.HE}, + adsurl = {https://ui.adsabs.harvard.edu/abs/2019A&A...621A..29V}, + adsnote = {Provided by the SAO/NASA Astrophysics Data System} + } + + + @misc{kerzendorf_wolfgang_2019_2590539, + author = {Kerzendorf, Wolfgang and + Nöbauer, Ulrich and + Sim, Stuart and + Lietzau, Stefan and + Jančauskas, Vytautas and + Vogl, Christian and + Mishin, Mikhail and + Tsamis, Fotis and + Boyle, Aoife and + Gupta, Vaibhav and + Desai, Karan and + Klauser, Michael and + Beaujean, Frederik and + Suban-Loewen, Adam and + Heringer, Epson and + Shingles, Luke and + Barna, Barnabas and + Gautam, Gaurav and + Patel, Maryam and + Barbosa, Talytha and + Varanasi, Kaushik and + Reinecke, Martin and + Bylund, Tomas and + Bentil, Laud and + Rajagopalan, Srinath and + Jain, Rinkle and + Singh, Sourav and + Talegaonkar, Chinmay and + Sofiatti, Caroline and + Patel, Pratik and + Yap, Kevin and + Wahi, Ujjwal and + Gupta, Suyash}, + title = {tardis-sn/tardis: TARDIS v3.0 alpha2}, + month = mar, + year = 2019, + doi = {10.5281/zenodo.2590539}, + url = {https://doi.org/10.5281/zenodo.2590539} + } .. image:: https://dev.azure.com/tardis-sn/TARDIS/_apis/build/status/tardis-sn.tardis?branchName=master :target: https://dev.azure.com/tardis-sn/TARDIS/_build/latest?definitionId=1&branchName=master From 00c021d17d4b8390796d2ac939b9ebb4289c1361 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 30 Oct 2019 11:49:45 -0400 Subject: [PATCH 088/467] Update doc-build.yml for Azure Pipelines --- azure-pipelines/doc-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines/doc-build.yml b/azure-pipelines/doc-build.yml index 3dbfab80113..16f3f454071 100644 --- a/azure-pipelines/doc-build.yml +++ b/azure-pipelines/doc-build.yml @@ -65,7 +65,7 @@ jobs: # Activate the environment, use sphinx to make the html documentation of the build, and deploy to gh-pages. - bash: | source activate tardis - npm install -g github-changes + sudo npm install -g github-changes github-changes -o tardis-sn -r tardis --only-pulls --use-commit-body -f CHANGELOG.md -k $GITHUB_CHANGES_OAUTH bash deploy_docs.sh displayName: 'TARDIS build and deployment to gh-pages' From b9b2194cab1675c325702bcfb8ce040992d16b5c Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 30 Oct 2019 11:51:28 -0400 Subject: [PATCH 089/467] Update tardis_env3.yml --- tardis_env3.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tardis_env3.yml b/tardis_env3.yml index 1116a9b29b8..65973f85548 100644 --- a/tardis_env3.yml +++ b/tardis_env3.yml @@ -6,11 +6,13 @@ channels: dependencies: - python=3 +- pip - numpy=1.16 - scipy=1.1 - pandas=0.24 - astropy=3 + - numba=0.43 - numexpr - Cython=0.29 From b4da5cb927ce71ee4c09239d31f6dfb462c96c5b Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 30 Oct 2019 12:04:23 -0400 Subject: [PATCH 090/467] Update doc-build.yml for Azure Pipelines --- azure-pipelines/doc-build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure-pipelines/doc-build.yml b/azure-pipelines/doc-build.yml index 16f3f454071..896bfd47218 100644 --- a/azure-pipelines/doc-build.yml +++ b/azure-pipelines/doc-build.yml @@ -66,7 +66,8 @@ jobs: - bash: | source activate tardis sudo npm install -g github-changes - github-changes -o tardis-sn -r tardis --only-pulls --use-commit-body -f CHANGELOG.md -k $GITHUB_CHANGES_OAUTH + echo github-changes -o tardis-sn -r tardis --only-pulls --use-commit-body -f CHANGELOG.md -k $(github_changes_oauth) + github-changes -o tardis-sn -r tardis --only-pulls --use-commit-body -f CHANGELOG.md -k $(github_changes_oauth) bash deploy_docs.sh displayName: 'TARDIS build and deployment to gh-pages' # See github.com/tardis-sn/tardis for the contents of these files. \ No newline at end of file From aaff2ced1c2033d6fc2e7f71c5118942c63142f7 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 30 Oct 2019 16:46:19 -0400 Subject: [PATCH 091/467] Update tardis_env3.yml --- tardis_env3.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis_env3.yml b/tardis_env3.yml index 65973f85548..0b6b85eff9e 100644 --- a/tardis_env3.yml +++ b/tardis_env3.yml @@ -24,7 +24,7 @@ dependencies: - pyyaml - jsonschema - pyne=0.5 -- pytables +- pytables=3.5 - h5py - requests - tqdm From d2de755a859cbc60ee6c27af27929bc453841f76 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 1 Nov 2019 10:11:28 -0400 Subject: [PATCH 092/467] Update tardis_env3.yml --- tardis_env3.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis_env3.yml b/tardis_env3.yml index 0b6b85eff9e..216e75faa45 100644 --- a/tardis_env3.yml +++ b/tardis_env3.yml @@ -7,7 +7,7 @@ channels: dependencies: - python=3 - pip -- numpy=1.16 +- numpy=1.17 - scipy=1.1 - pandas=0.24 - astropy=3 From 873ebd93b4f061e97f537e95602b5d89db1eed64 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 1 Nov 2019 10:15:23 -0400 Subject: [PATCH 093/467] Update tardis_env3.yml --- tardis_env3.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tardis_env3.yml b/tardis_env3.yml index 216e75faa45..68637ef283b 100644 --- a/tardis_env3.yml +++ b/tardis_env3.yml @@ -23,8 +23,8 @@ dependencies: # I/O - pyyaml - jsonschema -- pyne=0.5 -- pytables=3.5 +- pyne +- pytables - h5py - requests - tqdm From a73c464c89c42e68f995f65458cf77a1135b1826 Mon Sep 17 00:00:00 2001 From: jreichenbach-msu <56849859+jreichenbach-msu@users.noreply.github.com> Date: Tue, 12 Nov 2019 10:05:33 -0500 Subject: [PATCH 094/467] Add links to Quickstart (#975) * Change title of Quickstart * Add link for example yaml to quickstart --- docs/quickstart/quickstart.ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/quickstart/quickstart.ipynb b/docs/quickstart/quickstart.ipynb index 66464209843..dcc83aa2cf8 100644 --- a/docs/quickstart/quickstart.ipynb +++ b/docs/quickstart/quickstart.ipynb @@ -4,14 +4,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Quickstart ###" + "### Quickstart for TARDIS ###" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "After the [installation](../installation.rst) start a jupyter server executing `jupyter notebook` on the commandline in a directory that contains the configuration file (in our example `tardis_example.yml`). The atomic database (for more info refer to [atomic data](../atomic/atomic_data.rst) ) and a configuration file (more info at [configuration](../running/configuration/configuration.rst) ). You can obtain a copy of the atomic database from the\n", + "After the [installation](../installation.rst) start a jupyter server executing `jupyter notebook` on the commandline in a directory that contains the configuration file (in our example `tardis_example.yml`, which can be downloaded from [here] (https://raw.githubusercontent.com/tardis-sn/tardis/master/docs/models/examples/tardis_example.yml)). The atomic database (for more info refer to [atomic data](../atomic/atomic_data.rst) ) and a configuration file (more info at [configuration](../configuration/index.rst) ). You can obtain a copy of the atomic database from the\n", "(https://github.com/tardis-sn/tardis-refdata) repository\n", "(`atom_data` subfolder). We recommended to use the\n", "`kurucz_cd23_chianti_H_He.h5` dataset (which is auto-downloaded in the second cell already)." @@ -1231,7 +1231,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.8" + "version": "3.6.7" }, "nbsphinx": { "execute": "auto" From 0b947a4fbabe315a76c1376f131824acf5bb8ea8 Mon Sep 17 00:00:00 2001 From: jreichenbach-msu <56849859+jreichenbach-msu@users.noreply.github.com> Date: Tue, 12 Nov 2019 10:34:04 -0500 Subject: [PATCH 095/467] Add further fix to quickstart link (#978) --- docs/quickstart/quickstart.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/quickstart/quickstart.ipynb b/docs/quickstart/quickstart.ipynb index dcc83aa2cf8..0dfb7b7abc4 100644 --- a/docs/quickstart/quickstart.ipynb +++ b/docs/quickstart/quickstart.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "After the [installation](../installation.rst) start a jupyter server executing `jupyter notebook` on the commandline in a directory that contains the configuration file (in our example `tardis_example.yml`, which can be downloaded from [here] (https://raw.githubusercontent.com/tardis-sn/tardis/master/docs/models/examples/tardis_example.yml)). The atomic database (for more info refer to [atomic data](../atomic/atomic_data.rst) ) and a configuration file (more info at [configuration](../configuration/index.rst) ). You can obtain a copy of the atomic database from the\n", + "After the [installation](../installation.rst) start a jupyter server executing `jupyter notebook` on the commandline in a directory that contains the configuration file (in our example `tardis_example.yml`, which can be downloaded [here](https://raw.githubusercontent.com/tardis-sn/tardis/master/docs/models/examples/tardis_example.yml)). The atomic database (for more info refer to [atomic data](../atomic/atomic_data.rst) ) and a configuration file (more info at [configuration](../configuration/index.rst) ). You can obtain a copy of the atomic database from the\n", "(https://github.com/tardis-sn/tardis-refdata) repository\n", "(`atom_data` subfolder). We recommended to use the\n", "`kurucz_cd23_chianti_H_He.h5` dataset (which is auto-downloaded in the second cell already)." From 774e69c632d6f0ba8a7eeff1a27d4af97b98c6c1 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 12 Nov 2019 15:40:22 -0500 Subject: [PATCH 096/467] Update tardis_env3.yml --- tardis_env3.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis_env3.yml b/tardis_env3.yml index 68637ef283b..dbf035056dd 100644 --- a/tardis_env3.yml +++ b/tardis_env3.yml @@ -2,7 +2,7 @@ name: tardis channels: - conda-forge - - main + dependencies: - python=3 From 36ed619ad2f6c0af55245fcc7d5b2257822cff4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Thu, 14 Nov 2019 15:25:46 -0300 Subject: [PATCH 097/467] Pinned `numpy` to v1.15 (#982) --- tardis_env3.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis_env3.yml b/tardis_env3.yml index dbf035056dd..e4a05e47b42 100644 --- a/tardis_env3.yml +++ b/tardis_env3.yml @@ -7,7 +7,7 @@ channels: dependencies: - python=3 - pip -- numpy=1.17 +- numpy=1.15 - scipy=1.1 - pandas=0.24 - astropy=3 From d7732883f93909649782d7df14ee557a1bf65d02 Mon Sep 17 00:00:00 2001 From: jreichenbach-msu <56849859+jreichenbach-msu@users.noreply.github.com> Date: Sat, 16 Nov 2019 14:05:51 -0500 Subject: [PATCH 098/467] Fix git clone rendering in installation (#983) Add link to development guidelines --- docs/installation.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/installation.rst b/docs/installation.rst index 3304b8a5622..b05c5162abf 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -77,7 +77,9 @@ You can also install TARDIS for the latest development version pip install git+https://github.com/tardis-sn/tardis -Alternatively, you can manually clone our repository and install TARDIS by +Developement guidelines for TARDIS can be found `here `_. + +Alternatively, you can manually clone our repository and install TARDIS by:: git clone https://github.com/tardis-sn/tardis.git cd tardis From 6dc2f0fcd6475103b76eb99cce42ba8cce7c8709 Mon Sep 17 00:00:00 2001 From: jreichenbach-msu <56849859+jreichenbach-msu@users.noreply.github.com> Date: Tue, 19 Nov 2019 14:54:47 -0500 Subject: [PATCH 099/467] Fix typo (#985) --- docs/installation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation.rst b/docs/installation.rst index b05c5162abf..408db1764e6 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -77,7 +77,7 @@ You can also install TARDIS for the latest development version pip install git+https://github.com/tardis-sn/tardis -Developement guidelines for TARDIS can be found `here `_. +Development guidelines for TARDIS can be found `here `_. Alternatively, you can manually clone our repository and install TARDIS by:: From 537ea72c678a3f489893c67a5776dfcf8e2f42f6 Mon Sep 17 00:00:00 2001 From: kowal180 <56104113+kowal180@users.noreply.github.com> Date: Tue, 19 Nov 2019 14:56:08 -0500 Subject: [PATCH 100/467] Fixes numpydoc for util (#969) * Fixes numpydoc for until.py * Address comments by @WKerzendorf * Continued working on numpydoc_fix * Continuation of work on numpydoc_fix * Adressing fixes proposed by @wkerzendorf * Small fixes to numpydoc format of base.py --- tardis/util/base.py | 183 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 174 insertions(+), 9 deletions(-) diff --git a/tardis/util/base.py b/tardis/util/base.py index 5a17dc88313..59dd4beb2d1 100644 --- a/tardis/util/base.py +++ b/tardis/util/base.py @@ -72,6 +72,19 @@ def __str__(self): )) def int_to_roman(i): + """ + Convert an integer into its roman numeral representation. + + Parameters + ---------- + i: int + Integer to be converted into roman numerals + + Returns + ------- + : str + Returns roman numeral representation of i in str format. + """ result = [] for integer, numeral in NUMERAL_MAP: count = i // integer @@ -81,15 +94,17 @@ def int_to_roman(i): def roman_to_int(roman_string): """ + Convert a roman numeral into its corresponding integer. Parameters ---------- roman_string: str + Roman numeral to be converted into an integer Returns ------- : int - + Returns integer representation of roman_string """ NUMERALS_SET = set(list(zip(*NUMERAL_MAP))[1]) @@ -108,7 +123,33 @@ def roman_to_int(roman_string): def calculate_luminosity(spec_fname, distance, wavelength_column=0, wavelength_unit=u.angstrom, flux_column=1, flux_unit=u.Unit('erg / (Angstrom cm2 s)')): + """ + Calculates luminosity of star. + Parameters + ---------- + spec_fname: file or str + File or file name to be read + distance: float + Distance to star + wavelength_column: int, optional(default = 0) + Column index in which the wavelength is stored + wavelength_unit: float, optional(default = u.angstrom) + Dictates units used for calculating wavelength. + flux_column: int, optional(default = 1) + Column index in which the flux is stored + flux_unit: str, optional(default = u.Unit('erg / (Angstrom cm2 s)') + Dictates units used for flux + + Returns + ------- + luminosity.value: float + Returned luminosity value of star. + wavelength.min() + Minimum value of wavelength of light + wavelength.max() + Maximum value of wavelength of light + """ #BAD STYLE change to parse quantity distance = u.Unit(distance) @@ -121,6 +162,21 @@ def calculate_luminosity(spec_fname, distance, wavelength_column=0, wavelength_u def create_synpp_yaml(radial1d_mdl, fname, shell_no=0, lines_db=None): + """ + Create a yaml file that is readable from syn++ + + Parameters + ---------- + radial1d_mdl: Radial1DModel + Inputted object that will be read into YAML file + fname: str + File name for the synpp yaml + shell_no: int, optional(default = 0) + Number of shells + lines_db: file, optional(default = None) + + """ + logger.warning('Currently only works with Si and a special setup') if radial1d_mdl.atom_data.synpp_refs is not None: raise ValueError( @@ -179,11 +235,22 @@ def create_synpp_yaml(radial1d_mdl, fname, shell_no=0, lines_db=None): def intensity_black_body(nu, T): """ - Calculate the intensity of a black-body according to the following formula + Calculate the intensity of a black-body according to the following formula .. math:: I(\\nu, T) = \\frac{2h\\nu^3}{c^2}\frac{1}{e^{h\\nu \\beta_\\textrm{rad}} - 1} + Parameters + ---------- + nu: float + Frequency of light + T: float + Temperature in kelvin + + Returns + ------- + Intensity: float + Returns the intensity of the black body """ beta_rad = 1 / (k_B_cgs * T) coefficient = 2 * h_cgs / c_cgs ** 2 @@ -193,6 +260,22 @@ def intensity_black_body(nu, T): def species_tuple_to_string(species_tuple, roman_numerals=True): + """ + Convert a species tuple to its corresponding string representation. + + Parameters + ---------- + species_tuple: tuple + Tuple of 2 values indicated atomic number and number of electrons missing + + roman_numerals: bool, optional(default = TRUE) + Indicates whether the returned ion number is in roman numerals + + Returns + ------- + element_symbol, roman_ion_number: str + Returns corresponding string representation of given tuple + """ atomic_number, ion_number = species_tuple element_symbol = ATOMIC_NUMBER2SYMBOL[atomic_number] if roman_numerals: @@ -203,6 +286,24 @@ def species_tuple_to_string(species_tuple, roman_numerals=True): def species_string_to_tuple(species_string): + """ + Convert a species string to its corresponding tuple representation + + Parameters + ---------- + species_string: str + String containing species symbol (e.g. Si II, Fe III) + + Returns + ------- + atomic_number, ion_number: tuple + Returns tuple of length 2 indicating atomic number and ion number + + Raises + ------ + MalformedSpeciesError + If the inputted string does not match the species format + """ try: element_symbol, ion_number_string = re.match('^(\w+)\s*(\d+)', species_string).groups() @@ -230,6 +331,24 @@ def species_string_to_tuple(species_string): def parse_quantity(quantity_string): + """ + Changes a string into it's corresponding astropy.Quantity object. + + Parameters + ---------- + quantity_string: str + String to be converted into astropy.Quantity + + Returns + ------- + q: ~u.Quantity + Corresponding astropy.Quantity object for passed string + + Raises + ------ + MalformedQuantitiyError + If string is not properly formatted for Astropy Quantity + """ if not isinstance(quantity_string, str): raise MalformedQuantityError(quantity_string) @@ -253,6 +372,19 @@ def parse_quantity(quantity_string): def element_symbol2atomic_number(element_string): + """ + Takes an element symbol and returns its corresponding atomic number + + Parameters + ---------- + element_string: str + Inputted element symbol + + Returns + ------- + : int + Returned atomic number + """ reformatted_element_string = reformat_element_symbol(element_string) if reformatted_element_string not in SYMBOL2ATOMIC_NUMBER: raise MalformedElementSymbolError(element_string) @@ -261,22 +393,34 @@ def element_symbol2atomic_number(element_string): def atomic_number2element_symbol(atomic_number): """ - Convert atomic number to string symbol + Convert atomic number to string + + Parameters + ---------- + atomic_number: int + Inputted atomic number + + Returns + ------- + : str + Returned corresponding element symbol """ return ATOMIC_NUMBER2SYMBOL[atomic_number] def reformat_element_symbol(element_string): """ - Reformat the string so the first letter is uppercase and all subsequent letters lowercase + Reformat the string so the first letter is uppercase and all subsequent letters lowercase. Parameters ---------- - element_symbol: str + element_string: str + Inputted element symbol Returns ------- - reformated element symbol + : str + Returned reformatted element symbol """ return element_string[0].upper() + element_string[1:].lower() @@ -284,20 +428,26 @@ def reformat_element_symbol(element_string): def quantity_linspace(start, stop, num, **kwargs): """ - Calculate the linspace for a quantity start and stop. - Other than that essentially the same input parameters as linspace + Essentially the same input parameters as linspace, but calculated for an astropy quantity start and stop. Parameters ---------- start: ~astropy.Quantity + Starting value of the sequence stop: ~astropy.Quantity + End value of the sequence num: ~int + Number of samples to generate Returns ------- : ~astropy.Quantity + Returns num evenly spaced characters of type astropy.Quantity - + Raises + ------ + ValueError + If start and stop values have no unit attribute. """ if not (hasattr(start, 'unit') and hasattr(stop, 'unit')): raise ValueError('Both start and stop need to be quantities with a ' @@ -307,6 +457,21 @@ def quantity_linspace(start, stop, num, **kwargs): def convert_abundances_format(fname, delimiter='\s+'): + """ + Changes format of file containing abundances into data frame + + Parameters + ---------- + fname: file, str + File or file name that contains abundance info + delimiter: str, optional(default = '\s+') + Determines the separator for splitting file + + Returns + ------- + : DataFrame + Corresponding data frame + """ df = pd.read_csv(fname, delimiter=delimiter, comment='#', header=None) #Drop shell index column df.drop(df.columns[0], axis=1, inplace=True) From f451b6854c642192f1668203c26c303e37a2d2dd Mon Sep 17 00:00:00 2001 From: Kaushik Varanasi Date: Wed, 20 Nov 2019 21:43:57 +0530 Subject: [PATCH 101/467] log additional properties in hdf witeout when --with-vpacket-logging is present (#967) * log additional properties in hdf witeout when --with-vpacket-logging is enabled * tardis/montecarlo/base.py: added a check to see if with_vpacket_logging in get_disutils_option and then extend hdf_properties with the required properties * added import for get_distutils_option * Feature for logging additional properties when '--with-vpacket-logging' is enabled - working 1. /tardis/montecarlo/base.py - implemented logic to check if vpacket_logging is set to true in a file 'vpacket_config.yml' 2. /tardis/montecarlo/setup_package.py - function to set vpacket_logging to True when the flag is enabled at compile time --- tardis/data/vpacket_config.yml | 1 + tardis/montecarlo/base.py | 14 +++++++++++++- tardis/montecarlo/setup_package.py | 10 ++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tardis/data/vpacket_config.yml diff --git a/tardis/data/vpacket_config.yml b/tardis/data/vpacket_config.yml new file mode 100644 index 00000000000..44a93c4074d --- /dev/null +++ b/tardis/data/vpacket_config.yml @@ -0,0 +1 @@ +vpacket_logging: true diff --git a/tardis/montecarlo/base.py b/tardis/montecarlo/base.py index 5a116cd3be4..3bff3fe0e2c 100644 --- a/tardis/montecarlo/base.py +++ b/tardis/montecarlo/base.py @@ -1,7 +1,10 @@ +from tardis import __path__ as TARDIS_PATH import os import logging import warnings +import yaml + from astropy import units as u from tardis import constants as const @@ -16,7 +19,7 @@ import numpy as np logger = logging.getLogger(__name__) - +TARDIS_PATH = TARDIS_PATH[0] class MontecarloRunner(HDFWriterMixin): """ @@ -32,6 +35,14 @@ class MontecarloRunner(HDFWriterMixin): 'last_line_interaction_shell_id', 'packet_luminosity', 'spectrum', 'spectrum_virtual', 'spectrum_reabsorbed'] + + vpacket_config_file_path = os.path.join(TARDIS_PATH, 'data', 'vpacket_config.yml') + vpacket_logging_config = yaml.load(open(vpacket_config_file_path)) + if vpacket_logging_config['vpacket_logging']: + hdf_properties.extend(['virt_packet_last_interaction_in_nu', 'virt_packet_last_line_interaction_in_id', + 'virt_packet_last_line_interaction_out_id', 'virt_packet_nus', + 'virt_packet_energies']) + hdf_name = 'runner' w_estimator_constant = ((const.c ** 2 / (2 * const.h)) * (15 / np.pi ** 4) * (const.h / const.k_B) ** 4 / @@ -63,6 +74,7 @@ def __init__(self, seed, spectrum_frequency, virtual_spectrum_range, if self.spectrum_method == 'integrated': self.optional_hdf_properties.append('spectrum_integrated') + def _initialize_estimator_arrays(self, no_of_shells, tau_sobolev_shape): """ Initialize the output arrays of the montecarlo simulation. diff --git a/tardis/montecarlo/setup_package.py b/tardis/montecarlo/setup_package.py index 6f0a2e58bc2..44dcc1913f9 100644 --- a/tardis/montecarlo/setup_package.py +++ b/tardis/montecarlo/setup_package.py @@ -1,11 +1,15 @@ #setting the right include +from tardis import __path__ as TARDIS_PATH from setuptools import Extension import os from astropy_helpers.distutils_helpers import get_distutils_option from Cython.Build import cythonize +import yaml + from glob import glob +TARDIS_PATH = TARDIS_PATH[0] if get_distutils_option('with_openmp', ['build', 'install', 'develop']) is not None: compile_args = ['-fopenmp', '-W', '-Wall', '-Wmissing-prototypes', '-std=c99'] @@ -17,8 +21,14 @@ define_macros = [] +vpacket_config_file_path = os.path.join(TARDIS_PATH, 'data', 'vpacket_config.yml') if get_distutils_option('with_vpacket_logging', ['build', 'install', 'develop']) is not None: define_macros.append(('WITH_VPACKET_LOGGING', None)) + vpacket_config = {'vpacket_logging': True} +else: + vpacket_config = {'vpacket_logging': False} + +yaml.dump(vpacket_config, open(vpacket_config_file_path, "w"), default_flow_style=False) def get_extensions(): sources = ['tardis/montecarlo/montecarlo.pyx'] From df0ed42b03c5f049dad78ab4fbae4811ed5493ca Mon Sep 17 00:00:00 2001 From: kowal180 <56104113+kowal180@users.noreply.github.com> Date: Sun, 1 Dec 2019 14:13:52 -0500 Subject: [PATCH 102/467] Changes made to update_refdata documentation (#992) --- docs/development/update_refdata.rst | 43 +++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/docs/development/update_refdata.rst b/docs/development/update_refdata.rst index 48fb9ae3564..26a1d906efd 100644 --- a/docs/development/update_refdata.rst +++ b/docs/development/update_refdata.rst @@ -2,26 +2,41 @@ Procedure to update the reference data ************************************** -We asume that you have added the necessary changes to TARDIS and have a +We assume that you have added the necessary changes to TARDIS and have a PR open. -#. clone tardis-refdata (`git clone tardis-refdata`; you need to have git lfs installed) then make a new branch named - the same as your new tardis feature branch. -#. Generate new reference data (in your tardis directory and right branch) offline using +#. Fork the tardis ref-data repository like described in :ref:`development-workflow`. + +#. Clone tardis-refdata. Then make a new branch named the same as your new tardis feature branch. Make sure to set the upstream of the repository to `https://github.com/tardis-sn/tardis-refdata.git` + * You can check that you have the right upstream set using: + .. code-block:: None + + git checkout upstream/pr/11 + +#. Make sure to have sure to have git-lfs installed. If not already done, the process can be seen here: :ref:`git_lfs_instructions` + +#. Open tardis-refdata directory. Fetch from upstream and then use git-lfs to pull ref-data files from github using: + .. code-block:: None + + git lfs fetch upstream + git lfs pull + +#. Open into tardis directory. Generate new reference data (in the correct branch) offline using: .. code-block:: None python setup.py test --args="--tardis-refdata= --generate-reference" -#. Rerun the tests and see if it does not fail using +#. Rerun the tests to make sure it does not fail using: .. code-block:: None - + python setup.py test --args="--tardis-refdata=" +#. Open and run the refdata comparer notebook provided in TARDIS-refdata to check if there are any unexpected changes in the updated reference data and the previous reference data. + #. Switch to tardis-refdata. Commit the changed ref-data and open a PR on tardis-refdata -#. Make a copy of the refdata comparer notebook provided in TARDIS-refdata to check if there are - any unexpected changes in the updated reference data and the previous reference data + #. Switch back to the TARDIS directory. Open `.travis.yml` #. Change the following lines @@ -43,3 +58,15 @@ PR open. #. Then make sure that your TARDIS PR passes again. #. Then merge your PR to TARDIS master #. Congratulations - you updated TARDIS to be better. Have a beer and steak (or Tofu if you are vegetarian/vegan) + +Troubleshooting +############### + +* Unable to generate reference data + * If generating fails due to an inability to open chianti_He.h5, make sure that you have installed git-lfs and have pulled the files from github (See steps 3 and 4). + +* Error in running `comparer = ReferenceComparer(ref2_hash='upstream/pr/11')` on the comparer notebook: `No such file or directory: '.../unit_test_data.h5'` + * If notebook file is unable to find the file /unit_test_data.h5, make sure you have correctly set your upstream. To check this, use: + + + * If this fails, make sure that your upstream is set correctly to `https://github.com/tardis-sn/tardis-refdata.git` (See step 2). \ No newline at end of file From b3b45adaa07f210fc6d77cba9fa38e1b561c52bf Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 7 Dec 2019 07:54:55 -0500 Subject: [PATCH 103/467] Large cleanup operation (#994) * fix up util.py - PEP8 and warnings * fix warnings in stella.py * replace all '\s' with a raw string * cleanup analysis * fix plasma warnings * fix last two warnings * use yaml loader * clean model * fix model and simulation * fix plasma * further fixup * Update tardis/gui/widgets.py Co-Authored-By: Christian Vogl --- tardis/__init__.py | 8 +- tardis/analysis.py | 90 +++++++------ tardis/data/vpacket_config.yml | 2 +- tardis/gui/widgets.py | 2 +- tardis/io/atom_data/atom_web_download.py | 2 +- tardis/io/config_internal.py | 3 +- tardis/io/model_reader.py | 8 +- tardis/io/parsers/blondin_toymodel.py | 4 +- tardis/io/parsers/stella.py | 9 +- tardis/io/util.py | 2 +- tardis/model/base.py | 28 +---- tardis/montecarlo/base.py | 4 +- tardis/plasma/base.py | 11 +- tardis/plasma/properties/ion_population.py | 3 +- tardis/simulation/base.py | 13 +- tardis/tests/integration_tests/conftest.py | 2 +- tardis/tests/integration_tests/runner.py | 2 +- .../integration_tests/test_integration.py | 3 +- tardis/util/base.py | 118 ++++++++++-------- 19 files changed, 169 insertions(+), 145 deletions(-) diff --git a/tardis/__init__.py b/tardis/__init__.py index 9e2722557f2..77b6a16437b 100644 --- a/tardis/__init__.py +++ b/tardis/__init__.py @@ -1,5 +1,10 @@ # Licensed under a 3-clause BSD style license - see LICENSE.rst -import logging, sys +import sys +import logging +import warnings + +import pyne.data + from tardis.util.colored_logger import ColoredFormatter, formatter_message # Affiliated packages may add whatever they like to this file, but # should keep this content at the top. @@ -9,6 +14,7 @@ from tardis.base import run_tardis from tardis.io.util import yaml_load_config_file as yaml_load +warnings.filterwarnings('ignore', category=pyne.data.QAWarning) FORMAT = "[$BOLD%(name)-20s$RESET][%(levelname)-18s] %(message)s ($BOLD%(filename)s$RESET:%(lineno)d)" COLOR_FORMAT = formatter_message(FORMAT, True) diff --git a/tardis/analysis.py b/tardis/analysis.py index fc3360f31e0..8118eca7ce0 100644 --- a/tardis/analysis.py +++ b/tardis/analysis.py @@ -13,10 +13,13 @@ class LastLineInteraction(object): @classmethod def from_model(cls, model): - return cls(model.runner.last_line_interaction_in_id, model.runner.last_line_interaction_out_id, - model.runner.last_line_interaction_shell_id, model.runner.output_nu, model.plasma.atomic_data.lines) + return cls(model.runner.last_line_interaction_in_id, + model.runner.last_line_interaction_out_id, + model.runner.last_line_interaction_shell_id, + model.runner.output_nu, model.plasma.atomic_data.lines) - def __init__(self, last_line_interaction_in_id, last_line_interaction_out_id, last_line_interaction_shell_id, + def __init__(self, last_line_interaction_in_id, + last_line_interaction_out_id, last_line_interaction_shell_id, output_nu, lines, packet_filter_mode='packet_nu'): # mask out packets which did not perform a line interaction # TODO mask out packets which do not escape to observer? @@ -24,7 +27,8 @@ def __init__(self, last_line_interaction_in_id, last_line_interaction_out_id, la self.last_line_interaction_in_id = last_line_interaction_in_id[mask] self.last_line_interaction_out_id = last_line_interaction_out_id[mask] self.last_line_interaction_shell_id = last_line_interaction_shell_id[mask] - self.last_line_interaction_angstrom = output_nu.to(u.Angstrom, equivalencies=u.spectral())[mask] + self.last_line_interaction_angstrom = output_nu.to( + u.Angstrom, equivalencies=u.spectral())[mask] self.lines = lines self._wavelength_start = 0 * u.angstrom @@ -78,25 +82,36 @@ def ion_number(self, value): def update_last_interaction_filter(self): if self.packet_filter_mode == 'packet_nu': - packet_filter = (self.last_line_interaction_angstrom > self.wavelength_start) & \ - (self.last_line_interaction_angstrom < self.wavelength_end) + packet_filter = ( + (self.last_line_interaction_angstrom > + self.wavelength_start) & + (self.last_line_interaction_angstrom < + self.wavelength_end)) elif self.packet_filter_mode == 'line_in_nu': - line_in_nu = self.lines.wavelength.iloc[self.last_line_interaction_in_id].values - packet_filter = (line_in_nu > self.wavelength_start.to(u.angstrom).value) & \ - (line_in_nu < self.wavelength_end.to(u.angstrom).value) + line_in_nu = ( + self.lines.wavelength.iloc[ + self.last_line_interaction_in_id].values) + packet_filter = ( + (line_in_nu > self.wavelength_start.to(u.angstrom).value) & + (line_in_nu < self.wavelength_end.to(u.angstrom).value)) - self.last_line_in = self.lines.iloc[self.last_line_interaction_in_id[packet_filter]] - self.last_line_out = self.lines.iloc[self.last_line_interaction_out_id[packet_filter]] + self.last_line_in = self.lines.iloc[ + self.last_line_interaction_in_id[packet_filter]] + self.last_line_out = self.lines.iloc[ + self.last_line_interaction_out_id[packet_filter]] if self.atomic_number is not None: - self.last_line_in = self.last_line_in.xs(self.atomic_number, level='atomic_number', drop_level=False) - self.last_line_out = self.last_line_out.xs(self.atomic_number, level='atomic_number', drop_level=False) + self.last_line_in = self.last_line_in.xs( + self.atomic_number, level='atomic_number', drop_level=False) + self.last_line_out = self.last_line_out.xs( + self.atomic_number, level='atomic_number', drop_level=False) if self.ion_number is not None: - self.last_line_in = self.last_line_in.xs(self.ion_number, level='ion_number', drop_level=False) - self.last_line_out = self.last_line_out.xs(self.ion_number, level='ion_number', drop_level=False) - + self.last_line_in = self.last_line_in.xs( + self.ion_number, level='ion_number', drop_level=False) + self.last_line_out = self.last_line_out.xs( + self.ion_number, level='ion_number', drop_level=False) last_line_in_count = self.last_line_in.line_id.value_counts() last_line_out_count = self.last_line_out.line_id.value_counts() @@ -106,17 +121,15 @@ def update_last_interaction_filter(self): 'wavelength', 'atomic_number', 'ion_number', 'level_number_lower', 'level_number_upper']] self.last_line_in_table['count'] = last_line_in_count - self.last_line_in_table.sort_values(by='count', ascending=False, inplace=True) + self.last_line_in_table.sort_values(by='count', ascending=False, + inplace=True) self.last_line_out_table = self.last_line_out.reset_index()[ [ 'wavelength', 'atomic_number', 'ion_number', 'level_number_lower', 'level_number_upper']] self.last_line_out_table['count'] = last_line_out_count - self.last_line_out_table.sort_values(by='count', ascending=False, inplace=True) - - - def update_last_interaction_line_in_nu_filter(self): - pass + self.last_line_out_table.sort_values(by='count', ascending=False, + inplace=True) def plot_wave_in_out(self, fig, do_clf=True, plot_resonance=True): if do_clf: @@ -151,12 +164,11 @@ def onpress(event): fig.canvas.mpl_connect('pick_event', onpick) fig.canvas.mpl_connect('on_press', onpress) + class TARDISHistory(object): """ Records the history of the model """ - - def __init__(self, hdf5_fname, iterations=None): self.hdf5_fname = hdf5_fname if iterations is None: @@ -165,7 +177,8 @@ def __init__(self, hdf5_fname, iterations=None): for key in hdf_store.keys(): if key.split('/')[1] == 'atom_data': continue - iterations.append(int(re.match('model(\d+)', key.split('/')[1]).groups()[0])) + iterations.append( + int(re.match(r'model(\d+)', key.split('/')[1]).groups()[0])) self.iterations = np.sort(np.unique(iterations)) hdf_store.close() @@ -234,10 +247,9 @@ def load_ws(self, iterations=None): else: iterations = self.iterations[iterations] - for iter in iterations: - current_iter = 'iter%03d' % iter - ws_dict[current_iter] = hdf_store['model%03d/ws' % iter] + current_iter = 'iter{:03d}'.format(iter) + ws_dict[current_iter] = hdf_store['model{:03d}/ws'.format(iter)] hdf_store.close() @@ -255,10 +267,10 @@ def load_level_populations(self, iterations=None): else: iterations = self.iterations[iterations] - for iter in iterations: current_iter = 'iter%03d' % iter - level_populations_dict[current_iter] = hdf_store['model%03d/level_populations' % iter] + level_populations_dict[current_iter] = hdf_store[ + 'model{:03d}/level_populations'.format(iter)] hdf_store.close() if is_scalar: @@ -278,10 +290,10 @@ def load_jblues(self, iterations=None): else: iterations = self.iterations[iterations] - for iter in iterations: - current_iter = 'iter%03d' % iter - jblues_dict[current_iter] = hdf_store['model%03d/j_blues' % iter] + current_iter = 'iter{:03d}'.format(iter) + jblues_dict[current_iter] = hdf_store[ + 'model{:03d}/j_blues'.format(iter)] hdf_store.close() if is_scalar: @@ -303,10 +315,10 @@ def load_ion_populations(self, iterations=None): else: iterations = self.iterations[iterations] - for iter in iterations: - current_iter = 'iter%03d' % iter - ion_populations_dict[current_iter] = hdf_store['model%03d/ion_populations' % iter] + current_iter = 'iter{:03d}'.format(iter) + ion_populations_dict[current_iter] = hdf_store[ + 'model{:03d}/ion_populations'.format(iter)] hdf_store.close() if is_scalar: @@ -328,8 +340,10 @@ def calculate_relative_lte_level_populations(self, species, iteration=-1): species_levels = self.levels.ix[species] - relative_lte_level_populations = (species_levels.g.values[np.newaxis].T / float(species_levels.g.ix[0])) * \ - np.exp(-beta_rads * species_levels.energy.values[np.newaxis].T) + relative_lte_level_populations = ( + (species_levels.g.values[np.newaxis].T / + float(species_levels.g.loc[0])) * + np.exp(-beta_rads * species_levels.energy.values[np.newaxis].T)) return pd.DataFrame(relative_lte_level_populations, index=species_levels.index) diff --git a/tardis/data/vpacket_config.yml b/tardis/data/vpacket_config.yml index 44a93c4074d..9b1c095ec3f 100644 --- a/tardis/data/vpacket_config.yml +++ b/tardis/data/vpacket_config.yml @@ -1 +1 @@ -vpacket_logging: true +vpacket_logging: false diff --git a/tardis/gui/widgets.py b/tardis/gui/widgets.py index fd264a78880..49d822199bd 100644 --- a/tardis/gui/widgets.py +++ b/tardis/gui/widgets.py @@ -207,7 +207,7 @@ def __init__(self, yamlconfigfile, parent=None): super(ConfigEditor, self).__init__(parent) #Configurations from the input and template - configDict = yaml.load(open(yamlconfigfile)) + configDict = yaml.load(open(yamlconfigfile), Loader=yaml.CLoader)) templatedictionary ={'tardis_config_version':[True, 'v1.0'], 'supernova':{ 'luminosity_requested':[True, '1 solLum'], 'time_explosion':[True, None], diff --git a/tardis/io/atom_data/atom_web_download.py b/tardis/io/atom_data/atom_web_download.py index a19647b08f9..3abd24d884a 100644 --- a/tardis/io/atom_data/atom_web_download.py +++ b/tardis/io/atom_data/atom_web_download.py @@ -18,7 +18,7 @@ def get_atomic_repo_config(): """ atomic_repo_fname = get_internal_data_path('atomic_data_repo.yml') - return yaml.load(open(atomic_repo_fname)) + return yaml.load(open(atomic_repo_fname), Loader=yaml.CLoader) def download_atom_data(atomic_data_name=None): diff --git a/tardis/io/config_internal.py b/tardis/io/config_internal.py index 6a8bc381677..0963696fd4d 100644 --- a/tardis/io/config_internal.py +++ b/tardis/io/config_internal.py @@ -15,7 +15,8 @@ def get_internal_configuration(): if not os.path.exists(config_fpath): logger.warning("Configuration File {0} does not exist - creating new one from default".format(config_fpath)) shutil.copy(DEFAULT_CONFIG_PATH, config_fpath) - return yaml.load(open(config_fpath)) + with open(config_fpath) as config_fh: + return yaml.load(config_fh, Loader=yaml.CLoader) diff --git a/tardis/io/model_reader.py b/tardis/io/model_reader.py index 79aca012fc0..4812e1236fc 100644 --- a/tardis/io/model_reader.py +++ b/tardis/io/model_reader.py @@ -285,7 +285,7 @@ def read_cmfgen_density(fname): warnings.warn("The current CMFGEN model parser is deprecated", DeprecationWarning) - df = pd.read_csv(fname, comment='#', delimiter='\s+', skiprows=[0, 2]) + df = pd.read_csv(fname, comment='#', delimiter=r'\s+', skiprows=[0, 2]) with open(fname) as fh: for row_index, line in enumerate(fh): @@ -333,7 +333,7 @@ def read_simple_ascii_abundances(fname): return index, abundances -def read_cmfgen_composition(fname, delimiter='\s+'): +def read_cmfgen_composition(fname, delimiter=r'\s+'): """Read composition from a CMFGEN model file The CMFGEN file format contains information about the ejecta state in the @@ -353,7 +353,7 @@ def read_cmfgen_composition(fname, delimiter='\s+'): skip_columns=4, skip_rows=[0, 2, 3]) -def read_csv_composition(fname, delimiter='\s+'): +def read_csv_composition(fname, delimiter=r'\s+'): """Read composition from a simple CSV file The CSV file can contain specific isotopes or elemental abundances in the @@ -373,7 +373,7 @@ def read_csv_composition(fname, delimiter='\s+'): skip_columns=0, skip_rows=[1]) -def read_csv_isotope_abundances(fname, delimiter='\s+', skip_columns=0, +def read_csv_isotope_abundances(fname, delimiter=r'\s+', skip_columns=0, skip_rows=[1]): """ A generic parser for a TARDIS composition stored as a CSV file diff --git a/tardis/io/parsers/blondin_toymodel.py b/tardis/io/parsers/blondin_toymodel.py index ef7ac4ab7d2..b6dece9f488 100644 --- a/tardis/io/parsers/blondin_toymodel.py +++ b/tardis/io/parsers/blondin_toymodel.py @@ -9,9 +9,10 @@ from tardis.util.base import parse_quantity -PATTERN_REMOVE_BRACKET = re.compile('\[.+\]') +PATTERN_REMOVE_BRACKET = re.compile(r'\[.+\]') T0_PATTERN = re.compile('tend = (.+)\n') + def read_blondin_toymodel(fname): """ Reading the Blondin toy-model format and returns a dictionary and a @@ -30,7 +31,6 @@ def read_blondin_toymodel(fname): blondin_csv: pandas.DataFrame DataFrame containing the csv part of the toymodel - """ with open(fname, 'r') as fh: for line in fh: diff --git a/tardis/io/parsers/stella.py b/tardis/io/parsers/stella.py index 5265d3d2730..8d0119bf730 100644 --- a/tardis/io/parsers/stella.py +++ b/tardis/io/parsers/stella.py @@ -6,9 +6,12 @@ def read_stella_data(filename): with open(filename) as fh: col = fh.readlines()[5] - col_names = re.split('\s{3,}', col.strip()) - col_names = [re.sub('\s\(.+\)', '', col_name).replace(' ', '_') for col_name in col_names] - data = pd.read_csv(filename, skiprows=7, delim_whitespace=True, names = col_names) + col_names = re.split(r'\s{3,}', col.strip()) + col_names = [re.sub(r'\s\(.+\)', '', col_name).replace(' ', '_') for + col_name in col_names] + data = pd.read_csv(filename, skiprows=7, delim_whitespace=True, + names = col_names) + # drop last row of data data = data.iloc[0:-1] return data diff --git a/tardis/io/util.py b/tardis/io/util.py index 400e7571606..97e28613981 100644 --- a/tardis/io/util.py +++ b/tardis/io/util.py @@ -126,7 +126,7 @@ def mapping_constructor(self, node): def yaml_load_file(filename, loader=yaml.Loader): with open(filename) as stream: - return yaml.load(stream, loader) + return yaml.load(stream, Loader=loader) def yaml_load_config_file(filename): diff --git a/tardis/model/base.py b/tardis/model/base.py index fa82dfbe35d..3a31139d1c7 100644 --- a/tardis/model/base.py +++ b/tardis/model/base.py @@ -225,16 +225,8 @@ def r_middle(self): @property def velocity(self): -# if self.v_boundary_inner in self.raw_velocity: -# v_inner_ind = np.argwhere(self.raw_velocity == self.v_boundary_inner)[0][0] -# else: -# v_inner_ind = np.searchsorted(self.raw_velocity, self.v_boundary_inner) - 1 -# if self.v_boundary_outer in self.raw_velocity: -# v_outer_ind = np.argwhere(self.raw_velocity == self.v_boundary_outer)[0][0] -# else: -# v_outer_ind = np.searchsorted(self.raw_velocity, self.v_boundary_outer) - if not self._velocity: + if self._velocity is None: self._velocity = self.raw_velocity[self.v_boundary_inner_index:self.v_boundary_outer_index + 1] self._velocity[0] = self.v_boundary_inner self._velocity[-1] = self.v_boundary_outer @@ -256,29 +248,11 @@ def v_middle(self): @property def density(self): -# if self.v_boundary_inner in self.raw_velocity: -# v_inner_ind = np.argwhere(self.raw_velocity == self.v_boundary_inner)[0][0] -# else: -# v_inner_ind = np.searchsorted(self.raw_velocity, self.v_boundary_inner) - 1 -# if self.v_boundary_outer in self.raw_velocity: -# v_outer_ind = np.argwhere(self.raw_velocity == self.v_boundary_outer)[0][0] -# else: -# v_outer_ind = np.searchsorted(self.raw_velocity, self.v_boundary_outer) - density = self.homologous_density.calculate_density_at_time_of_simulation(self.time_explosion) return density[self.v_boundary_inner_index+1:self.v_boundary_outer_index+1] @property def abundance(self): -# if self.v_boundary_inner in self.raw_velocity: -# v_inner_ind = np.argwhere(self.raw_velocity == self.v_boundary_inner)[0][0] -# else: -# v_inner_ind = np.searchsorted(self.raw_velocity, self.v_boundary_inner) - 1 -# if self.v_boundary_outer in self.raw_velocity: -# v_outer_ind = np.argwhere(self.raw_velocity == self.v_boundary_outer)[0][0] -# else: -# v_outer_ind = np.searchsorted(self.raw_velocity, self.v_boundary_outer) - if not self.raw_isotope_abundance.empty: self._abundance = self.raw_isotope_abundance.decay(self.time_explosion).merge(self.raw_abundance) abundance = self._abundance.loc[:, self.v_boundary_inner_index:self.v_boundary_outer_index - 1] diff --git a/tardis/montecarlo/base.py b/tardis/montecarlo/base.py index 3bff3fe0e2c..d0120de2e1a 100644 --- a/tardis/montecarlo/base.py +++ b/tardis/montecarlo/base.py @@ -37,7 +37,9 @@ class MontecarloRunner(HDFWriterMixin): 'spectrum_virtual', 'spectrum_reabsorbed'] vpacket_config_file_path = os.path.join(TARDIS_PATH, 'data', 'vpacket_config.yml') - vpacket_logging_config = yaml.load(open(vpacket_config_file_path)) + with open(vpacket_config_file_path) as fh: + vpacket_logging_config = yaml.load(fh, Loader=yaml.CLoader) + if vpacket_logging_config['vpacket_logging']: hdf_properties.extend(['virt_packet_last_interaction_in_nu', 'virt_packet_last_line_interaction_in_id', 'virt_packet_last_line_interaction_out_id', 'virt_packet_nus', diff --git a/tardis/plasma/base.py b/tardis/plasma/base.py index ebae6b27516..b90f3ab2ddd 100644 --- a/tardis/plasma/base.py +++ b/tardis/plasma/base.py @@ -242,11 +242,12 @@ def write_to_tex(self, fname_graph): texmode='raw')) for line in fileinput.input(fname_graph, inplace = 1): - print(line.replace('\documentclass{article}', - '\documentclass[class=minimal,border=20pt]{standalone}'), end='') + print(line.replace(r'\documentclass{article}', + r'\documentclass[class=minimal,border=20pt]{standalone}'), + end='') for line in fileinput.input(fname_graph, inplace = 1): - print(line.replace('\enlargethispage{100cm}', ''), end='') + print(line.replace(r'\enlargethispage{100cm}', ''), end='') def remove_hidden_properties(self, print_graph): for item in self.plasma_properties_dict.values(): @@ -254,8 +255,8 @@ def remove_hidden_properties(self, print_graph): if (issubclass(module, HiddenPlasmaProperty)): output = module.outputs[0] for value in self.plasma_properties_dict.keys(): - if output in getattr(self.plasma_properties_dict[value], - 'inputs', []): + if output in getattr( + self.plasma_properties_dict[value], 'inputs', []): for input in self.plasma_properties_dict[ item.name].inputs: try: diff --git a/tardis/plasma/properties/ion_population.py b/tardis/plasma/properties/ion_population.py index a98a957997f..92ef72747e9 100644 --- a/tardis/plasma/properties/ion_population.py +++ b/tardis/plasma/properties/ion_population.py @@ -59,8 +59,7 @@ def calculate(g_electron, beta_rad, partition_function, ionization_data): phis[start_id - i:end_id - i - 1] = current_phis broadcast_ionization_energy = ( - ionization_data.loc[ - partition_function.index].dropna()) + ionization_data[partition_function.index].dropna()) phi_index = broadcast_ionization_energy.index broadcast_ionization_energy = broadcast_ionization_energy.values diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index 4f4e5b09c05..e4d09f38070 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -2,7 +2,7 @@ import logging import numpy as np import pandas as pd -from astropy import units as u +from astropy import units as u, constants as const from collections import OrderedDict from tardis.montecarlo import MontecarloRunner @@ -100,6 +100,7 @@ class Simulation(PlasmaStateStorerMixin, HDFWriterMixin): 'iterations_t_rad', 'iterations_electron_densities', 'iterations_t_inner'] hdf_name = 'simulation' + def __init__(self, iterations, model, plasma, runner, no_of_packets, no_of_virtual_packets, luminosity_nu_start, luminosity_nu_end, last_no_of_packets, @@ -446,11 +447,13 @@ def from_config(cls, config, **kwargs): luminosity_nu_start = config.supernova.luminosity_wavelength_end.to( u.Hz, u.spectral()) - try: - luminosity_nu_end = config.supernova.luminosity_wavelength_start.to( - u.Hz, u.spectral()) - except ZeroDivisionError: + if u.isclose( + config.supernova.luminosity_wavelength_start, 0 * u.angstrom): luminosity_nu_end = np.inf * u.Hz + else: + luminosity_nu_end = ( + const.c / + config.supernova.luminosity_wavelength_start).to(u.Hz) last_no_of_packets = config.montecarlo.last_no_of_packets if last_no_of_packets is None or last_no_of_packets < 0: diff --git a/tardis/tests/integration_tests/conftest.py b/tardis/tests/integration_tests/conftest.py index f087bcce884..29ee6e51a2c 100644 --- a/tardis/tests/integration_tests/conftest.py +++ b/tardis/tests/integration_tests/conftest.py @@ -16,7 +16,7 @@ def pytest_configure(config): os.path.expanduser(integration_tests_configpath) ) config.integration_tests_config = yaml.load( - open(integration_tests_configpath)) + open(integration_tests_configpath), Loader=yaml.CLoader) if not config.getoption("--generate-reference"): # Used by DokuReport class to show build environment details in report. diff --git a/tardis/tests/integration_tests/runner.py b/tardis/tests/integration_tests/runner.py index 4b65062222f..ea9392f10fc 100644 --- a/tardis/tests/integration_tests/runner.py +++ b/tardis/tests/integration_tests/runner.py @@ -24,7 +24,7 @@ def run_tests(): args = parser.parse_args() - integration_tests_config = yaml.load(open(args.yaml_filepath)) + integration_tests_config = yaml.load(open(args.yaml_filepath), Loader=yaml.CLoader) doku_conn = dokuwiki.DokuWiki( url=integration_tests_config['dokuwiki']['url'], user=integration_tests_config['dokuwiki']['username'], diff --git a/tardis/tests/integration_tests/test_integration.py b/tardis/tests/integration_tests/test_integration.py index ebab62f649f..9aae36d17e1 100644 --- a/tardis/tests/integration_tests/test_integration.py +++ b/tardis/tests/integration_tests/test_integration.py @@ -84,7 +84,8 @@ def setup(self, request, reference, data_path, pytestconfig): # A quick hack to use atom data per setup. Atom data is ingested from # local HDF or downloaded and cached from a url, depending on data_path # keys. - atom_data_name = yaml.load(open(self.config_file))['atom_data'] + atom_data_name = yaml.load( + open(self.config_file), Loader=yaml.CLoader)['atom_data'] # Get the path to HDF file: atom_data_filepath = os.path.join( diff --git a/tardis/util/base.py b/tardis/util/base.py index 59dd4beb2d1..38db9694109 100644 --- a/tardis/util/base.py +++ b/tardis/util/base.py @@ -20,6 +20,22 @@ m_e_cgs = constants.m_e.cgs.value e_charge_gauss = constants.e.gauss.value +logger = logging.getLogger(__name__) +tardis_dir = os.path.realpath(tardis.__path__[0]) + +ATOMIC_SYMBOLS_DATA = pd.read_csv(get_internal_data_path('atomic_symbols.dat'), delim_whitespace=True, + names=['atomic_number', 'symbol']).set_index('atomic_number').squeeze() + +ATOMIC_NUMBER2SYMBOL = OrderedDict(ATOMIC_SYMBOLS_DATA.to_dict()) +SYMBOL2ATOMIC_NUMBER = OrderedDict((y, x) for x, y in ATOMIC_NUMBER2SYMBOL.items()) + +synpp_default_yaml_fname = get_internal_data_path('synpp_default.yaml') + + +NUMERAL_MAP = tuple(zip( + (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1), + ('M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I') +)) class MalformedError(Exception): pass @@ -31,7 +47,8 @@ def __init__(self, malformed_element_symbol): self.malformed_element_symbol = malformed_element_symbol def __str__(self): - return 'Expecting a species notation (e.g. "Si 2", "Si II", "Fe IV") - supplied %s' % self.malformed_element_symbol + return ('Expecting a species notation (e.g. "Si 2", "Si II", "Fe IV") ' + '- supplied {0}'.format(self.malformed_element_symbol)) class MalformedElementSymbolError(MalformedError): @@ -40,7 +57,8 @@ def __init__(self, malformed_element_symbol): self.malformed_element_symbol = malformed_element_symbol def __str__(self): - return 'Expecting an atomic symbol (e.g. Fe) - supplied %s' % self.malformed_element_symbol + return ('Expecting an atomic symbol (e.g. Fe) - supplied {0}').format( + self.malformed_element_symbol) class MalformedQuantityError(MalformedError): @@ -49,27 +67,9 @@ def __init__(self, malformed_quantity_string): self.malformed_quantity_string = malformed_quantity_string def __str__(self): - return 'Expecting a quantity string(e.g. "5 km/s") for keyword - supplied %s' % self.malformed_quantity_string - + return ('Expecting a quantity string(e.g. "5 km/s") for keyword ' + '- supplied {0}').format(self.malformed_quantity_string) -logger = logging.getLogger(__name__) -tardis_dir = os.path.realpath(tardis.__path__[0]) - - - -ATOMIC_SYMBOLS_DATA = pd.read_csv(get_internal_data_path('atomic_symbols.dat'), delim_whitespace=True, - names=['atomic_number', 'symbol']).set_index('atomic_number').squeeze() - -ATOMIC_NUMBER2SYMBOL = OrderedDict(ATOMIC_SYMBOLS_DATA.to_dict()) -SYMBOL2ATOMIC_NUMBER = OrderedDict((y, x) for x, y in ATOMIC_NUMBER2SYMBOL.items()) - -synpp_default_yaml_fname = get_internal_data_path('synpp_default.yaml') - - -NUMERAL_MAP = tuple(zip( - (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1), - ('M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I') -)) def int_to_roman(i): """ @@ -110,7 +110,8 @@ def roman_to_int(roman_string): NUMERALS_SET = set(list(zip(*NUMERAL_MAP))[1]) roman_string = roman_string.upper() if len(set(list(roman_string.upper())) - NUMERALS_SET) != 0: - raise ValueError('{0} does not seem to be a roman numeral'.format(roman_string)) + raise ValueError('{0} does not seem to be a roman numeral'.format( + roman_string)) i = result = 0 for integer, numeral in NUMERAL_MAP: while roman_string[i:i + len(numeral)] == numeral: @@ -121,8 +122,10 @@ def roman_to_int(roman_string): return result -def calculate_luminosity(spec_fname, distance, wavelength_column=0, wavelength_unit=u.angstrom, flux_column=1, - flux_unit=u.Unit('erg / (Angstrom cm2 s)')): +def calculate_luminosity( + spec_fname, distance, wavelength_column=0, + wavelength_unit=u.angstrom, flux_column=1, + flux_unit=u.Unit('erg / (Angstrom cm2 s)')): """ Calculates luminosity of star. @@ -180,7 +183,8 @@ def create_synpp_yaml(radial1d_mdl, fname, shell_no=0, lines_db=None): logger.warning('Currently only works with Si and a special setup') if radial1d_mdl.atom_data.synpp_refs is not None: raise ValueError( - 'The current atom dataset does not contain the necesarry reference files (please contact the authors)') + 'The current atom dataset does not contain the ' + 'necesarry reference files (please contact the authors)') radial1d_mdl.atom_data.synpp_refs['ref_log_tau'] = -99.0 for key, value in radial1d_mdl.atom_data.synpp_refs.iterrows(): @@ -191,24 +195,29 @@ def create_synpp_yaml(radial1d_mdl, fname, shell_no=0, lines_db=None): pass - relevant_synpp_refs = radial1d_mdl.atom_data.synpp_refs[radial1d_mdl.atom_data.synpp_refs['ref_log_tau'] > -50] + relevant_synpp_refs = radial1d_mdl.atom_data.synpp_refs[ + radial1d_mdl.atom_data.synpp_refs['ref_log_tau'] > -50] with open(synpp_default_yaml_fname) as stream: - yaml_reference = yaml.load(stream) + yaml_reference = yaml.load(stream, Loader=yaml.CLoader) if lines_db is not None: yaml_reference['opacity']['line_dir'] = os.path.join(lines_db, 'lines') yaml_reference['opacity']['line_dir'] = os.path.join(lines_db, 'refs.dat') - yaml_reference['output']['min_wl'] = float(radial1d_mdl.runner.spectrum.wavelength.to('angstrom').value.min()) - yaml_reference['output']['max_wl'] = float(radial1d_mdl.runner.spectrum.wavelength.to('angstrom').value.max()) + yaml_reference['output']['min_wl'] = float( + radial1d_mdl.runner.spectrum.wavelength.to('angstrom').value.min()) + yaml_reference['output']['max_wl'] = float( + radial1d_mdl.runner.spectrum.wavelength.to('angstrom').value.max()) #raise Exception("there's a problem here with units what units does synpp expect?") - yaml_reference['opacity']['v_ref'] = float((radial1d_mdl.tardis_config.structure.v_inner[0].to('km/s') / - (1000. * u.km / u.s)).value) - yaml_reference['grid']['v_outer_max'] = float((radial1d_mdl.tardis_config.structure.v_outer[-1].to('km/s') / - (1000. * u.km / u.s)).value) + yaml_reference['opacity']['v_ref'] = float( + (radial1d_mdl.tardis_config.structure.v_inner[0].to('km/s') / + (1000. * u.km / u.s)).value) + yaml_reference['grid']['v_outer_max'] = float( + (radial1d_mdl.tardis_config.structure.v_outer[-1].to('km/s') / + (1000. * u.km / u.s)).value) #pdb.set_trace() @@ -229,6 +238,7 @@ def create_synpp_yaml(radial1d_mdl, fname, shell_no=0, lines_db=None): yaml_setup['v_min'].append(yaml_reference['opacity']['v_ref']) yaml_setup['v_max'].append(yaml_reference['grid']['v_outer_max']) yaml_setup['aux'].append(1e200) + with open(fname, 'w') as f: yaml.dump(yaml_reference, stream=f, explicit_start=True) @@ -237,8 +247,9 @@ def intensity_black_body(nu, T): """ Calculate the intensity of a black-body according to the following formula - .. math:: - I(\\nu, T) = \\frac{2h\\nu^3}{c^2}\frac{1}{e^{h\\nu \\beta_\\textrm{rad}} - 1} + .. math:: + I(\\nu, T) = \\frac{2h\\nu^3}{c^2}\frac{1} + {e^{h\\nu \\beta_\\textrm{rad}} - 1} Parameters ---------- @@ -266,7 +277,8 @@ def species_tuple_to_string(species_tuple, roman_numerals=True): Parameters ---------- species_tuple: tuple - Tuple of 2 values indicated atomic number and number of electrons missing + Tuple of 2 values indicated atomic number and number of + electrons missing roman_numerals: bool, optional(default = TRUE) Indicates whether the returned ion number is in roman numerals @@ -306,13 +318,15 @@ def species_string_to_tuple(species_string): """ try: - element_symbol, ion_number_string = re.match('^(\w+)\s*(\d+)', species_string).groups() + element_symbol, ion_number_string = re.match(r'^(\w+)\s*(\d+)', + species_string).groups() except AttributeError: try: element_symbol, ion_number_string = species_string.split() except ValueError: - raise MalformedSpeciesError('Species string "{0}" is not of format ' - '(e.g. Fe 2, Fe2, ..)'.format(species_string)) + raise MalformedSpeciesError( + 'Species string "{0}" is not of format ' + ' (e.g. Fe 2, Fe2, ..)'.format(species_string)) atomic_number = element_symbol2atomic_number(element_symbol) @@ -322,10 +336,13 @@ def species_string_to_tuple(species_string): try: ion_number = int(ion_number_string) except ValueError: - raise MalformedSpeciesError("Given ion number ('{}') could not be parsed ".format(ion_number_string)) + raise MalformedSpeciesError( + "Given ion number ('{}') could not be parsed".format( + ion_number_string)) if ion_number > atomic_number: - raise ValueError('Species given does not exist: ion number > atomic number') + raise ValueError( + 'Species given does not exist: ion number > atomic number') return atomic_number, ion_number - 1 @@ -410,7 +427,8 @@ def atomic_number2element_symbol(atomic_number): def reformat_element_symbol(element_string): """ - Reformat the string so the first letter is uppercase and all subsequent letters lowercase. + Reformat the string so the first letter is uppercase and all subsequent + letters lowercase. Parameters ---------- @@ -428,7 +446,8 @@ def reformat_element_symbol(element_string): def quantity_linspace(start, stop, num, **kwargs): """ - Essentially the same input parameters as linspace, but calculated for an astropy quantity start and stop. + Essentially the same input parameters as linspace, but + calculated for an astropy quantity start and stop. Parameters ---------- @@ -453,10 +472,11 @@ def quantity_linspace(start, stop, num, **kwargs): raise ValueError('Both start and stop need to be quantities with a ' 'unit attribute') - return np.linspace(start.value, stop.to(start.unit).value, num, **kwargs) * start.unit + return (np.linspace(start.value, stop.to(start.unit).value, num, **kwargs) + * start.unit) -def convert_abundances_format(fname, delimiter='\s+'): +def convert_abundances_format(fname, delimiter=r'\s+'): """ Changes format of file containing abundances into data frame @@ -464,7 +484,7 @@ def convert_abundances_format(fname, delimiter='\s+'): ---------- fname: file, str File or file name that contains abundance info - delimiter: str, optional(default = '\s+') + delimiter: str, optional(default = '\\s+') Determines the separator for splitting file Returns @@ -473,9 +493,9 @@ def convert_abundances_format(fname, delimiter='\s+'): Corresponding data frame """ df = pd.read_csv(fname, delimiter=delimiter, comment='#', header=None) - #Drop shell index column + # Drop shell index column df.drop(df.columns[0], axis=1, inplace=True) - #Assign header row + # Assign header row df.columns = [nucname.name(i) for i in range(1, df.shape[1] + 1)] return df \ No newline at end of file From 9de9900dfa0d65e25eeaeb359c0cf909028c3c02 Mon Sep 17 00:00:00 2001 From: Marc Williamson Date: Wed, 15 Jan 2020 21:07:27 -0500 Subject: [PATCH 104/467] Custom source packets (#1003) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add injection * added pass-through of packet source Co-authored-by: Andreas Flörs Co-authored-by: Christian Vogl * Restructured packet class Co-authored-by: Christian Vogl Co-authored-by: Andreas Flörs * finalize new packet source Co-authored-by: Christian Vogl Co-authored-by: Andreas Flörs * Finished packet-source upgrade Co-authored-by: Christian Vogl Co-authored-by: Andreas Flörs Co-authored-by: Marc Williamson * tests for new packet source * Added notebook to use a truncated blackbody source (#1002) * Added notebook to use a truncated blackbody source * Add notebook on custom packet sources to documentation * added documentation to the custom source jupyter notebook Co-authored-by: Christian Vogl * Updated black body source test * Moved binary files to tardis-refdata unit_tests_data.h5 Co-authored-by: Wolfgang Kerzendorf Co-authored-by: Andreas Flörs <33418619+afloers@users.noreply.github.com> Co-authored-by: Christian Vogl --- docs/running/custom_source.ipynb | 173 ++++++++++++++++++ docs/running/index.rst | 1 + tardis/base.py | 7 +- tardis/montecarlo/base.py | 16 +- tardis/montecarlo/formal_integral.py | 1 - tardis/montecarlo/packet_source.py | 133 +++++++++----- .../tests/data/mc_packets_100_t10000.npy | Bin 880 -> 0 bytes tardis/montecarlo/tests/test_packet_source.py | 19 +- tardis/simulation/base.py | 10 +- 9 files changed, 294 insertions(+), 66 deletions(-) create mode 100644 docs/running/custom_source.ipynb delete mode 100644 tardis/montecarlo/tests/data/mc_packets_100_t10000.npy diff --git a/docs/running/custom_source.ipynb b/docs/running/custom_source.ipynb new file mode 100644 index 00000000000..6a2e756d4ad --- /dev/null +++ b/docs/running/custom_source.ipynb @@ -0,0 +1,173 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Running TARDIS with a custom packet source" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from tardis import constants as const\n", + "from astropy import units as u\n", + "from tardis.montecarlo.packet_source import BasePacketSource\n", + "from tardis import run_tardis\n", + "import matplotlib.pyplot as plt\n", + "from tardis.io.atom_data import download_atom_data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "download_atom_data('kurucz_cd23_chianti_H_He')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Custom packet source class that is derived from BasePacketSource. The method create_packets (which returns ```nus, mus, energies```) has to be defined." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "class TruncBlackbodySource(BasePacketSource):\n", + " \"\"\"\n", + " Custom inner boundary source class to replace the Blackbody source\n", + " with a truncated Blackbody source.\n", + " \"\"\"\n", + " \n", + " def __init__(self, seed, truncation_wavelength):\n", + " super().__init__(seed)\n", + " self.truncation_wavelength = truncation_wavelength\n", + " \n", + " def create_packets(self, T, no_of_packets,\n", + " drawing_sample_size=None):\n", + " \"\"\"\n", + " Packet source that generates a truncated Blackbody source.\n", + " \n", + " Parameters\n", + " ----------\n", + " T : float\n", + " Blackbody temperature\n", + " no_of_packets : int\n", + " number of packets to be created\n", + " truncation_wavelength : float\n", + " truncation wavelength in Angstrom. \n", + " Only wavelengths higher than the truncation wavelength\n", + " will be sampled.\n", + " \"\"\"\n", + " \n", + " \n", + " # Use mus and energies from normal blackbody source.\n", + " mus = self.create_zero_limb_darkening_packet_mus(no_of_packets)\n", + " energies = self.create_uniform_packet_energies(no_of_packets)\n", + "\n", + " # If not specified, draw 2 times as many packets and reject any beyond no_of_packets.\n", + " if drawing_sample_size is None:\n", + " drawing_sample_size = 2 * no_of_packets\n", + "\n", + " # Blackbody will be truncated below truncation_wavelength / above truncation_frequency.\n", + " truncation_frequency = u.Quantity(self.truncation_wavelength, u.Angstrom).to(\n", + " u.Hz, equivalencies=u.spectral()).value\n", + " \n", + " # Draw nus from blackbody distribution and reject based on truncation_frequency.\n", + " # If more nus.shape[0] > no_of_packets use only the first no_of_packets.\n", + " nus = self.create_blackbody_packet_nus(T, drawing_sample_size)\n", + " nus = nus[nus no_of_packets.\n", + " while nus.shape[0] < no_of_packets:\n", + " additional_nus = self.create_blackbody_packet_nus(\n", + " T, drawing_sample_size\n", + " )\n", + " mask = additional_nus < truncation_frequency\n", + " additional_nus = additional_nus[mask][:no_of_packets]\n", + " nus = np.hstack([nus, additional_nus])[:no_of_packets]\n", + " \n", + " return nus, mus, energies" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "packet_source = TruncBlackbodySource(\n", + " 53253, truncation_wavelength=2000\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mdl = run_tardis('tardis_example.yml',\n", + " packet_source=packet_source)\n", + "mdl_norm = run_tardis('tardis_example.yml')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "plt.plot(mdl.runner.spectrum_virtual.wavelength,\n", + " mdl.runner.spectrum_virtual.luminosity_density_lambda,\n", + " color='red', label='truncated blackbody')\n", + "plt.plot(mdl_norm.runner.spectrum_virtual.wavelength,\n", + " mdl_norm.runner.spectrum_virtual.luminosity_density_lambda,\n", + " color='blue', label='normal blackbody')\n", + "plt.xlabel('$\\lambda [\\AA]$')\n", + "plt.ylabel('$L_\\lambda$ [erg/s/$\\AA$]')\n", + "plt.xlim(500, 10000)\n", + "plt.legend()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.7" + }, + "nbsphinx": { + "execute": "always", + "timeout": 600 + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/running/index.rst b/docs/running/index.rst index 1368a1c8c25..51012e1a933 100644 --- a/docs/running/index.rst +++ b/docs/running/index.rst @@ -24,6 +24,7 @@ A quick start guide to run TARDIS can be found commandline gui interaction/index + custom_source .. toctree:: diff --git a/tardis/base.py b/tardis/base.py index 66856c0fdd2..1969240bc5b 100644 --- a/tardis/base.py +++ b/tardis/base.py @@ -1,6 +1,7 @@ # functions that are important for the general usage of TARDIS -def run_tardis(config, atom_data=None, simulation_callbacks=[]): +def run_tardis(config, atom_data=None, packet_source=None, + simulation_callbacks=[]): """ This function is one of the core functions to run TARDIS from a given config object. @@ -34,7 +35,9 @@ def run_tardis(config, atom_data=None, simulation_callbacks=[]): except TypeError: tardis_config = Configuration.from_config_dict(config) - simulation = Simulation.from_config(tardis_config, atom_data=atom_data) + simulation = Simulation.from_config(tardis_config, + packet_source=packet_source, + atom_data=atom_data) for cb in simulation_callbacks: simulation.add_callback(cb) diff --git a/tardis/montecarlo/base.py b/tardis/montecarlo/base.py index d0120de2e1a..c75dcfb9b62 100644 --- a/tardis/montecarlo/base.py +++ b/tardis/montecarlo/base.py @@ -13,7 +13,7 @@ from tardis.util.base import quantity_linspace from tardis.io.util import HDFWriterMixin -from tardis.montecarlo import montecarlo, packet_source +from tardis.montecarlo import montecarlo, packet_source as source from tardis.montecarlo.formal_integral import FormalIntegrator import numpy as np @@ -57,10 +57,15 @@ def __init__(self, seed, spectrum_frequency, virtual_spectrum_range, sigma_thomson, enable_reflective_inner_boundary, enable_full_relativity, inner_boundary_albedo, line_interaction_type, integrator_settings, - v_packet_settings, spectrum_method): + v_packet_settings, spectrum_method, + packet_source=None): self.seed = seed - self.packet_source = packet_source.BlackBodySimpleSource(seed) + if packet_source is None: + self.packet_source = source.BlackBodySimpleSource(seed) + else: + self.packet_source = packet_source + # inject different packets self.spectrum_frequency = spectrum_frequency self.virtual_spectrum_range = virtual_spectrum_range self.sigma_thomson = sigma_thomson @@ -406,7 +411,7 @@ def calculate_f_lambda(self, wavelength): pass @classmethod - def from_config(cls, config): + def from_config(cls, config, packet_source=None): """ Create a new MontecarloRunner instance from a Configuration object. @@ -441,4 +446,5 @@ def from_config(cls, config): line_interaction_type=config.plasma.line_interaction_type, integrator_settings=config.spectrum.integrated, v_packet_settings=config.spectrum.virtual, - spectrum_method=config.spectrum.method) + spectrum_method=config.spectrum.method, + packet_source=packet_source) diff --git a/tardis/montecarlo/formal_integral.py b/tardis/montecarlo/formal_integral.py index 1e604cab8b0..ad9463153e9 100644 --- a/tardis/montecarlo/formal_integral.py +++ b/tardis/montecarlo/formal_integral.py @@ -13,7 +13,6 @@ class IntegrationError(Exception): pass - class FormalIntegrator(object): def __init__(self, model, plasma, runner, points=1000): diff --git a/tardis/montecarlo/packet_source.py b/tardis/montecarlo/packet_source.py index 033e88e91e3..eaed2ddd5d4 100644 --- a/tardis/montecarlo/packet_source.py +++ b/tardis/montecarlo/packet_source.py @@ -1,78 +1,115 @@ +import abc + import numpy as np import numexpr as ne from tardis import constants as const -class BlackBodySimpleSource(object): - """ - Simple packet source that generates packets for the Montecarlo part. - This uses the algorithm described in Bjorkman & Wood 2001 (page 4) which - references Carter & Cashwell 1975: - - First, generate a uniform random number, :math:`\\xi_0`, in - the range 0 to 1, and determine the minimum value of $l$, - $l_{\\rm min}$, that satisfies the condition - % - \\begin{equation} - \\sum_{i=1}^{l} i^{-4} \\ge {{\\pi^4}\\over{90}} \\m_0 \\; . - \\end{equation} - % - Next obtain four additional uniform random numbers (in the range 0 to 1), - $\\xi_1$, $\\xi_2$, $\\xi_3$, and $\\xi_4$. Finally, the packet - frequency is given by - % - \\begin{equation} - x = -\\ln{(\\xi_1\\xi_2\\xi_3\\xi_4)}/l_{\\rm min}\\; . - \\end{equation} - - where :math:`x=h\\nu/kT` - """ - def __init__(self, seed, l_samples=1000): +class BasePacketSource(abc.ABC): + + def __init__(self, seed): + self.seed = seed np.random.seed(seed) - self.l_samples = l_samples - self.l_array = np.cumsum(np.arange(1, l_samples, dtype=np.float64)**-4) - self.l_coef = np.pi**4 / 90.0 + + @abc.abstractmethod + def create_packets(self, seed=None, **kwargs): + pass - def create_packet_nus(self, T, no_of_packets): + @staticmethod + def create_zero_limb_darkening_packet_mus(no_of_packets): """ - Creating packets with a blackbody distribution - of temperature + Create zero-limb-darkening packet :math:`\mu` distributed + according to :math:`\\mu=\\sqrt{z}, z \isin [0, 1]` + + Parameters + ---------- + no_of_packets : int + number of packets to be created + """ + + return np.sqrt(np.random.random(no_of_packets)) + @staticmethod + def create_uniform_packet_energies(no_of_packets): + """ + Uniformly distribute energy in arbitrary units where the ensemble of + packets has energy of 1. + + Parameters ---------- - T : ~float + no_of_packets : int + number of packets + + Returns + ------- + : numpy.ndarray + energies for packets + """ + return np.ones(no_of_packets) / no_of_packets + + + @staticmethod + def create_blackbody_packet_nus(T, no_of_packets, l_samples=1000): + """ + + Create packet :math:`\\nu` distributed using the algorithm described in + Bjorkman & Wood 2001 (page 4) which references + Carter & Cashwell 1975: + + First, generate a uniform random number, :math:`\\xi_0 \\in [0, 1]` and + determine the minimum value of + :math:`l, l_{\\rm min}`, that satisfies the condition + + .. math:: + \\sum_{i=1}^{l} i^{-4} \\ge {{\\pi^4}\\over{90}} m_0 \\; . + + Next obtain four additional uniform random numbers (in the range 0 + to 1) :math:`\\xi_1, \\xi_2, \\xi_3, {\\rm and } \\xi_4`. + + Finally, the packet frequency is given by + + .. math:: + x = -\\ln{(\\xi_1\\xi_2\\xi_3\\xi_4)}/l_{\\rm min}\\; . + + + where :math:`x=h\\nu/kT` + + Parameters + ---------- + T : float temperature - no_of_packets: ~int + no_of_packets: int + l_samples: int + number of l_samples needed in the algorithm Returns ------- - : ~numpy.ndarray + : numpy.ndarray array of frequencies """ + l_samples = l_samples + l_array = np.cumsum(np.arange(1, l_samples, dtype=np.float64)**-4) + l_coef = np.pi**4 / 90.0 xis = np.random.random((5, no_of_packets)) - l = self.l_array.searchsorted(xis[0]*self.l_coef) + 1. + l = l_array.searchsorted(xis[0]*l_coef) + 1. xis_prod = np.prod(xis[1:], 0) x = ne.evaluate('-log(xis_prod)/l') return x * (const.k_B.cgs.value * T) / const.h.cgs.value - def create_packet_mus(self, no_of_packets): - """ - Create - :param no_of_packets: - :return: - """ - return np.sqrt(np.random.random(no_of_packets)) - - def create_packet_energies(self, no_of_packets): - return np.ones(no_of_packets) / no_of_packets +class BlackBodySimpleSource(BasePacketSource): + """ + Simple packet source that generates Blackbody packets for the Montecarlo + part. + """ def create_packets(self, T, no_of_packets): - nus = self.create_packet_nus(T, no_of_packets) - mus = self.create_packet_mus(no_of_packets) - energies = self.create_packet_energies(no_of_packets) + nus = self.create_blackbody_packet_nus(T, no_of_packets) + mus = self.create_zero_limb_darkening_packet_mus(no_of_packets) + energies = self.create_uniform_packet_energies(no_of_packets) return nus, mus, energies \ No newline at end of file diff --git a/tardis/montecarlo/tests/data/mc_packets_100_t10000.npy b/tardis/montecarlo/tests/data/mc_packets_100_t10000.npy deleted file mode 100644 index 7dc78d4f46dd8f26c9ac0ed6d42dd9471fe43253..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 880 zcmV-$1CRWZPE}1%Spfh>0DC87WpiV4CpsV}JZ3m2EFdRlZ*p{UVQyb3&Oq1qOMfXBIn~O)g2oXcr9~4l?(fUG-SwG@J`4B?{=%1vO)cQhVWB&W~69q%3 zPt20m75+lXU4Yf6vJ*o!Okgq7kpe@Sz>wO%W9mZ7`M0_{N$WzTR5QThh11SCUj+|9Z% zGf)tIe-}e2m<`ugTlqo?n2-&5WDY}F&q!9pKMzCvV~Ei+j0r<&b^=gU zs}MsP)!}5ZD+WWxq&+TaXaqw9wMGN{7Xd?; zKAEIMZVf}cV?=;6kJ~~}+?^MvI_^TZ%D0|v{_jFUTH{7Z@diUK{I-RQJq1Gt$DkfG zr4K{ojXobzD*i$!rF&a3h7m)9RDBD!;0Hs$IKr3Bw+urCUsh{N8RtTC{~t~m<_JSl zDYsyO72ZM{AhJ)JY5PL$diW7jtHR)c`|i3LZZ_Ruw}_r3H#GG6O>(<>9gC zIRZlwS6hS+Kng?SVwd^YFa|^Q#?yRwK?g&ZZWSe&M)^Y4&HRXJ66Qim%%bCIg9bwo zBZ$+yBK<-Q_~>YKA`?Sdc2A3Li}*read1KW01QJ|)rY@{n$$x2@K|QW)b~PI=)zr@ GAO=I!yLxK? diff --git a/tardis/montecarlo/tests/test_packet_source.py b/tardis/montecarlo/tests/test_packet_source.py index c409a66b088..638cbff18d2 100644 --- a/tardis/montecarlo/tests/test_packet_source.py +++ b/tardis/montecarlo/tests/test_packet_source.py @@ -1,22 +1,25 @@ import os import numpy as np +import pandas as pd import pytest import tardis from tardis.montecarlo.packet_source import BlackBodySimpleSource + @pytest.fixture def data_path(): return os.path.join(tardis.__path__[0], 'montecarlo', 'tests', 'data') - - -def test_bb_packet_source(data_path): +def test_bb_packet_sampling(tardis_ref_data): bb = BlackBodySimpleSource(2508) - packets = bb.create_packet_nus(10000, 100) - reference_packets = np.load(os.path.join(data_path, 'mc_packets_100_t10000.npy')) - assert np.all(np.isclose(packets, reference_packets)) - - + #ref_df = pd.read_hdf('test_bb_sampling.h5') + ref_df = tardis_ref_data['/packet_unittest/blackbody'] + nus = bb.create_blackbody_packet_nus(10000, 100) + mus = bb.create_zero_limb_darkening_packet_mus(100) + unif_energies = bb.create_uniform_packet_energies(100) + assert np.all(np.isclose(nus, ref_df['nus'])) + assert np.all(np.isclose(mus, ref_df['mus'])) + assert np.all(np.isclose(unif_energies, ref_df['energies'])) \ No newline at end of file diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index e4d09f38070..95cddd93527 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -9,6 +9,7 @@ from tardis.model import Radial1DModel from tardis.plasma.standard_plasmas import assemble_plasma from tardis.io.util import HDFWriterMixin +from tardis.io.config_reader import ConfigurationError # Adding logging support logger = logging.getLogger(__name__) @@ -408,7 +409,7 @@ def remove_callback(self, id): return False @classmethod - def from_config(cls, config, **kwargs): + def from_config(cls, config, packet_source=None, **kwargs): """ Create a new Simulation instance from a Configuration object. @@ -440,9 +441,14 @@ def from_config(cls, config, **kwargs): plasma = assemble_plasma(config, model, atom_data=kwargs.get('atom_data', None)) if 'runner' in kwargs: + if packet_source is not None: + raise ConfigurationError( + 'Cannot specify packet_source and runner at the same time.' + ) runner = kwargs['runner'] else: - runner = MontecarloRunner.from_config(config) + runner = MontecarloRunner.from_config(config, + packet_source=packet_source) luminosity_nu_start = config.supernova.luminosity_wavelength_end.to( u.Hz, u.spectral()) From efd57af8a46b1fa5612a66545a1fde66d2c9d7ed Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 15 Jan 2020 18:24:31 -0800 Subject: [PATCH 105/467] Update doc-build.yml installing TARDIS into the doc deployment pipeline --- azure-pipelines/doc-build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure-pipelines/doc-build.yml b/azure-pipelines/doc-build.yml index 896bfd47218..cd6ab84799a 100644 --- a/azure-pipelines/doc-build.yml +++ b/azure-pipelines/doc-build.yml @@ -65,9 +65,10 @@ jobs: # Activate the environment, use sphinx to make the html documentation of the build, and deploy to gh-pages. - bash: | source activate tardis + python setup.py install sudo npm install -g github-changes echo github-changes -o tardis-sn -r tardis --only-pulls --use-commit-body -f CHANGELOG.md -k $(github_changes_oauth) github-changes -o tardis-sn -r tardis --only-pulls --use-commit-body -f CHANGELOG.md -k $(github_changes_oauth) bash deploy_docs.sh displayName: 'TARDIS build and deployment to gh-pages' -# See github.com/tardis-sn/tardis for the contents of these files. \ No newline at end of file +# See github.com/tardis-sn/tardis for the contents of these files. From 8ae6ae431858b42d1e2b4b793be8ad57c372da78 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 16 Jan 2020 11:07:42 -0800 Subject: [PATCH 106/467] added new link to running --- docs/running/tardis_example.yml | 1 + 1 file changed, 1 insertion(+) create mode 120000 docs/running/tardis_example.yml diff --git a/docs/running/tardis_example.yml b/docs/running/tardis_example.yml new file mode 120000 index 00000000000..70d6fb1f440 --- /dev/null +++ b/docs/running/tardis_example.yml @@ -0,0 +1 @@ +../models/examples/tardis_example.yml \ No newline at end of file From 51b3f59ef6fa50ad23f94a6ab87c4b5aeb6534d5 Mon Sep 17 00:00:00 2001 From: Marc Williamson Date: Thu, 16 Jan 2020 19:02:29 -0500 Subject: [PATCH 107/467] Fixed csvy abundance indexing bug (#1004) --- tardis/model/base.py | 2 + tardis/model/tests/data/config_v_filter.yml | 53 +++++++++++++++++++++ tardis/model/tests/data/csvy_vfilter.csvy | 30 ++++++++++++ tardis/model/tests/test_csvy_model.py | 12 +++++ 4 files changed, 97 insertions(+) create mode 100644 tardis/model/tests/data/config_v_filter.yml create mode 100644 tardis/model/tests/data/csvy_vfilter.csvy diff --git a/tardis/model/base.py b/tardis/model/base.py index 3a31139d1c7..223d68034f6 100644 --- a/tardis/model/base.py +++ b/tardis/model/base.py @@ -594,6 +594,8 @@ def from_csvy(cls, config): abundance = abundance.replace(np.nan, 0.0) abundance = abundance[abundance.sum(axis=1) > 0] + abundance = abundance.loc[:, 1:] + abundance.columns = np.arange(abundance.shape[1]) norm_factor = abundance.sum(axis=0) + isotope_abundance.sum(axis=0) diff --git a/tardis/model/tests/data/config_v_filter.yml b/tardis/model/tests/data/config_v_filter.yml new file mode 100644 index 00000000000..647d87b05de --- /dev/null +++ b/tardis/model/tests/data/config_v_filter.yml @@ -0,0 +1,53 @@ +# Example YAML configuration for TARDIS +tardis_config_version: v1.0 + +supernova: + luminosity_requested: 8.770 log_lsun + time_explosion: 1 day + distance: 8.32 Mpc + +# standard atomic data base; get it from the tardis-refdata repository +#atom_data: kurucz_cd23_chianti_H_He.h5 +atom_data: /Users/marcwilliamson/Research/TARDIS/tardis-refdata/atom_data/kurucz_cd23_chianti_H_He.h5 + +csvy_model: csvy_vfilter.csvy + + +plasma: + #initial_t_inner: 10000 K + #initial_t_rad: 10000 K + disable_electron_scattering: no + ionization: lte + excitation: lte + # radiative_rates_type - currently supported are dilute-blackbody, detailed and blackbody + radiative_rates_type: dilute-blackbody + # line_interaction_type - currently supported are scatter, downbranch and macroatom + line_interaction_type: macroatom + +montecarlo: + seed: 23111963 + no_of_packets: 4.0e+4 + iterations: 20 + # Number of threads used in OMP mode; uncomment if you want to control the + # OMP behaviour via the config; otherwise the maximum available number of + # threads is used or the number specified in the OMP_NUM_THREADS environment + # variable + # -------- + #nthreads: 1 + + last_no_of_packets: 1.e+4 + no_of_virtual_packets: 10 + + convergence_strategy: + type: damped + damping_constant: 1.0 + threshold: 0.05 + fraction: 0.8 + hold_iterations: 3 + t_inner: + damping_constant: 1.0 + +spectrum: + start: 500 angstrom + stop: 20000 angstrom + num: 10000 diff --git a/tardis/model/tests/data/csvy_vfilter.csvy b/tardis/model/tests/data/csvy_vfilter.csvy new file mode 100644 index 00000000000..195484e7412 --- /dev/null +++ b/tardis/model/tests/data/csvy_vfilter.csvy @@ -0,0 +1,30 @@ +--- +name: csvy_vfilter +model_density_time_0: 1 day +model_isotope_time_0: 0 day +description: Example csvy config file for TARDIS. +tardis_model_config_version: v1.0 +datatype: + fields: + - name: velocity + unit: km/s + desc: velocities of shell outer bounderies. + - name: density + unit: g/cm^3 + desc: density of shell. + - name: H + desc: fractional H abundance + - name: He + desc: fractional He abundance + +v_inner_boundary: 11000 km/s +v_outer_boundary: 14500 km/s +--- +velocity,density,H,He +9000, 5e-10, 0.5, 0.5 +10500, 2.0e-10, 0.0, 1.0 +12000, 9e-11, 0.35, 0.65 +13000, 9e-12, 0.3, 0.7 +14000, 6e-12, 0.6, 0.4 +15000, 4e-12, 0.4, 0.6 +16000, 3e-12, 0.2, 0.8 diff --git a/tardis/model/tests/test_csvy_model.py b/tardis/model/tests/test_csvy_model.py index 35956dc63f5..d29e08e27e4 100644 --- a/tardis/model/tests/test_csvy_model.py +++ b/tardis/model/tests/test_csvy_model.py @@ -1,4 +1,5 @@ import numpy as np +import pandas as pd import numpy.testing as npt import tardis import os @@ -43,3 +44,14 @@ def test_compare_models(filename): npt.assert_array_almost_equal(csvy_model_val, config_model_val) +def test_csvy_abundance(): + csvypath = os.path.join(DATA_PATH, 'config_v_filter.yml') + config = Configuration.from_yaml(csvypath) + csvy_model = Radial1DModel.from_csvy(config) + csvy_abund = csvy_model.abundance + + ref_abund = pd.DataFrame(np.array([[0.35,0.3, 0.6, 0.4],[0.65,0.7,0.4,0.6]])) + ref_abund.index.name = 'atomic_number' + ref_abund.index = np.array([1, 2]) + + assert csvy_abund.equals(ref_abund) \ No newline at end of file From 5c90622573a825f10b4ad2f323b475afb0815e5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Fri, 17 Jan 2020 20:21:02 -0300 Subject: [PATCH 108/467] Add YML file for release version (#1005) --- .github/workflows/release.yml | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000000..75c88da5f50 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,42 @@ +name: Release a new TARDIS version + +on: + push: + branches: + - master + +jobs: + release: + + name: Main job + runs-on: ubuntu-latest + steps: + # Every step starts with '-' + - uses: actions/checkout@v2 + + - name: Create TARDIS environment + uses: goanpeca/setup-miniconda@v1.0.2 + with: + auto-update-conda: True + activate-environment: tardis + environment-file: tardis_env3.yml + auto-activate-base: False + + - name: Build and install TARDIS + shell: bash -l {0} + run: | + python setup.py install + + - name: Get TARDIS version number + shell: bash -l {0} + run: | + # This is the only way I found to share variables across steps + echo "::set-env name=VERSION::$(python -c 'import tardis; print(tardis.__version__)')" + + - name: Automatic Releases + uses: marvinpinto/action-automatic-releases@v0.2.2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + automatic_release_tag: ${{ env.VERSION }} + prerelease: True + title: ${{ env.VERSION }} From ff873fbb7e54bf15711af7997d35cd39ee4cf84a Mon Sep 17 00:00:00 2001 From: Kaushik Varanasi Date: Tue, 21 Jan 2020 01:01:36 +0530 Subject: [PATCH 109/467] Checking failing tests on Azure (#995) * checking failing tests by pinning astropy version to 3.2.1 * printing config data for debugging * running only integral test to debug further * disabling openMP and adding debug statements * adding inttypes.h to make data types platform independent * free memory to avoid memory leaks * remove caching for spectrum_integrated --- azure-pipelines/simple_test_framework.yml | 2 +- tardis/montecarlo/base.py | 8 +++++--- tardis/montecarlo/src/integrator.c | 6 ++++-- tardis/tests/test_tardis_full_formal_integral.py | 4 +++- tardis_env3.yml | 2 +- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/azure-pipelines/simple_test_framework.yml b/azure-pipelines/simple_test_framework.yml index 197af806610..5d0ca5c307e 100644 --- a/azure-pipelines/simple_test_framework.yml +++ b/azure-pipelines/simple_test_framework.yml @@ -59,7 +59,7 @@ jobs: source activate tardis conda install -y pytest-cov pip install git+https://github.com/tonybaloney/pytest-azurepipelines.git - pytest tardis --tardis-refdata=$(ref.data.home) --cov=tardis --cov-report=xml --cov-report=html + pytest -s tardis/tests/test_tardis_full_formal_integral.py --tardis-refdata=$(ref.data.home) --cov=tardis --cov-report=xml --cov-report=html displayName: 'TARDIS test' diff --git a/tardis/montecarlo/base.py b/tardis/montecarlo/base.py index c75dcfb9b62..f11d39c5ae8 100644 --- a/tardis/montecarlo/base.py +++ b/tardis/montecarlo/base.py @@ -164,9 +164,11 @@ def spectrum_virtual(self): @property def spectrum_integrated(self): - if self._spectrum_integrated is None: - self._spectrum_integrated = self.integrator.calculate_spectrum( - self.spectrum_frequency[:-1], **self.integrator_settings) + self._spectrum_integrated = self.integrator.calculate_spectrum( + self.spectrum_frequency[:-1], **self.integrator_settings) + # if self._spectrum_integrated is None: + # self._spectrum_integrated = self.integrator.calculate_spectrum( + # self.spectrum_frequency[:-1], **self.integrator_settings) return self._spectrum_integrated @property diff --git a/tardis/montecarlo/src/integrator.c b/tardis/montecarlo/src/integrator.c index 3d7f5bf6c86..c885257d458 100644 --- a/tardis/montecarlo/src/integrator.c +++ b/tardis/montecarlo/src/integrator.c @@ -1,5 +1,6 @@ #define _USE_MATH_DEFINES +#include #include #include #include @@ -210,7 +211,7 @@ _formal_integral( for (i = 0; i < size_tau; ++i) { exp_tau[i] = exp( -storage->line_lists_tau_sobolevs_i[i]); } - calculate_p_values(storage->r_outer_i[storage->no_of_shells_i - 1], N, pp); + calculate_p_values(R_max, N, pp); // Done with the initialization // Loop over wavelengths in spectrum @@ -335,7 +336,8 @@ _formal_integral( } } // Free everything allocated on heap + free(exp_tau); printf("\n"); } return L; -} +} \ No newline at end of file diff --git a/tardis/tests/test_tardis_full_formal_integral.py b/tardis/tests/test_tardis_full_formal_integral.py index acd150487d2..d3de68501c4 100644 --- a/tardis/tests/test_tardis_full_formal_integral.py +++ b/tardis/tests/test_tardis_full_formal_integral.py @@ -7,7 +7,7 @@ from tardis.simulation.base import Simulation from tardis.io.config_reader import Configuration - +import astropy config_line_modes = ['downbranch', 'macroatom'] interpolate_shells = [-1, 30] @@ -24,6 +24,7 @@ def base_config(request): config["montecarlo"]["no_of_virtual_packets"] = 0 config["spectrum"]["method"] = "integrated" config["spectrum"]["integrated"]["points"] = 200 + print("config", config) return config @@ -92,6 +93,7 @@ def test_spectrum_integrated(self, runner, refdata): luminosity = u.Quantity( refdata('spectrum_integrated/luminosity'), 'erg /s') + print("actual, desired: ", luminosity, runner.spectrum_integrated.luminosity) assert_quantity_allclose( runner.spectrum_integrated.luminosity, luminosity) diff --git a/tardis_env3.yml b/tardis_env3.yml index e4a05e47b42..5927ca67ed2 100644 --- a/tardis_env3.yml +++ b/tardis_env3.yml @@ -10,7 +10,7 @@ dependencies: - numpy=1.15 - scipy=1.1 - pandas=0.24 -- astropy=3 +- astropy=3.2.1 - numba=0.43 From 4161630bc2d16fde954b699013d330bca3221b70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Tue, 21 Jan 2020 16:24:25 -0300 Subject: [PATCH 110/467] Fix for vboundary tests (#1007) --- tardis/plasma/setup_package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis/plasma/setup_package.py b/tardis/plasma/setup_package.py index 27d17b1d1a8..a36ef1659a3 100644 --- a/tardis/plasma/setup_package.py +++ b/tardis/plasma/setup_package.py @@ -4,7 +4,7 @@ import numpy as np def get_package_data(): - return {'tardis.plasma.tests':['data/*.dat', 'data/*.yml', 'data/*.h5', 'data/*.dot', 'data/*.tex']} + return {'tardis.plasma.tests':['data/*.dat', 'data/*.txt', 'data/*.yml', 'data/*.h5', 'data/*.dot', 'data/*.tex']} if get_distutils_option('with_openmp', ['build', 'install', 'develop']) is not None: compile_args = ['-fopenmp', '-W', '-Wall', '-Wmissing-prototypes', '-std=c99'] From 71dad349b1ae65b347d587f13bfc12e4d9ba5819 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Tue, 21 Jan 2020 20:18:55 -0300 Subject: [PATCH 111/467] Fix for packet source unit test (#1009) * Initial commit * Suggested name change --- tardis/montecarlo/tests/test_packet_source.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tardis/montecarlo/tests/test_packet_source.py b/tardis/montecarlo/tests/test_packet_source.py index 638cbff18d2..1bacfc50872 100644 --- a/tardis/montecarlo/tests/test_packet_source.py +++ b/tardis/montecarlo/tests/test_packet_source.py @@ -12,10 +12,19 @@ def data_path(): return os.path.join(tardis.__path__[0], 'montecarlo', 'tests', 'data') +@pytest.fixture +def packet_unit_test_fpath(tardis_ref_path): + return os.path.abspath(os.path.join( + tardis_ref_path, 'packet_unittest.h5')) -def test_bb_packet_sampling(tardis_ref_data): +def test_bb_packet_sampling(tardis_ref_data, packet_unit_test_fpath): bb = BlackBodySimpleSource(2508) #ref_df = pd.read_hdf('test_bb_sampling.h5') + if pytest.config.getvalue("--generate-reference"): + ref_bb = pd.read_hdf(packet_unit_test_fpath, key='/blackbody') + ref_bb.to_hdf(tardis_ref_data, key='/packet_unittest/blackbody', + mode='a') + ref_df = tardis_ref_data['/packet_unittest/blackbody'] nus = bb.create_blackbody_packet_nus(10000, 100) mus = bb.create_zero_limb_darkening_packet_mus(100) From 6bb343a747bc24e21d123b7bba6e617277a393f8 Mon Sep 17 00:00:00 2001 From: Marc Williamson Date: Thu, 23 Jan 2020 07:27:15 -0500 Subject: [PATCH 112/467] Gui fix (#1011) * Fixed paren type * Added velocity to table * removed comment --- tardis/gui/widgets.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tardis/gui/widgets.py b/tardis/gui/widgets.py index 49d822199bd..01c04041d1f 100644 --- a/tardis/gui/widgets.py +++ b/tardis/gui/widgets.py @@ -207,7 +207,7 @@ def __init__(self, yamlconfigfile, parent=None): super(ConfigEditor, self).__init__(parent) #Configurations from the input and template - configDict = yaml.load(open(yamlconfigfile), Loader=yaml.CLoader)) + configDict = yaml.load(open(yamlconfigfile), Loader=yaml.CLoader) templatedictionary ={'tardis_config_version':[True, 'v1.0'], 'supernova':{ 'luminosity_requested':[True, '1 solLum'], 'time_explosion':[True, None], @@ -425,7 +425,7 @@ def __init__(self, tablecreator, parent=None): self.plotTabWidget.addTab(self.spectrumWidget, "S&pectrum") #Table widget - self.tablemodel = self.createTable([['Shell: '], ["Rad. temp", "Ws"]], + self.tablemodel = self.createTable([['Shell: '], ["Rad. temp", "Ws", "V"]], (1, 0)) self.tableview = QtGui.QTableView() self.tableview.setMinimumWidth(200) @@ -575,6 +575,7 @@ def change_model(self, model): self.tablemodel.arraydata = [] self.tablemodel.add_data(model.model.t_rad.value.tolist()) self.tablemodel.add_data(model.model.w.tolist()) + self.tablemodel.add_data(model.model.velocity.value.tolist()) def change_spectrum_to_spec_virtual_flux_angstrom(self): """Change the spectrum data to the virtual spectrum.""" From 741b18ece8984ba7322dd1d89564218d89224f44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Thu, 23 Jan 2020 13:20:01 -0300 Subject: [PATCH 113/467] Improvements for the update_reference section [docs] (#1008) * Initial commit * Minor changes * Last changes --- docs/development/git_workflow.rst | 2 + docs/development/update_refdata.rst | 76 +++++++++++++++++------------ 2 files changed, 46 insertions(+), 32 deletions(-) diff --git a/docs/development/git_workflow.rst b/docs/development/git_workflow.rst index be1bcb2c98e..95c4d66b1dc 100644 --- a/docs/development/git_workflow.rst +++ b/docs/development/git_workflow.rst @@ -476,6 +476,8 @@ If you forgot to make a backup branch:: git reset --hard cool-feature@{2} +.. _reviewing-and-helping-with-pr: + Reviewing and helping others with Pull Requests ----------------------------------------------- diff --git a/docs/development/update_refdata.rst b/docs/development/update_refdata.rst index 26a1d906efd..f7a77ad2537 100644 --- a/docs/development/update_refdata.rst +++ b/docs/development/update_refdata.rst @@ -2,71 +2,83 @@ Procedure to update the reference data ************************************** -We assume that you have added the necessary changes to TARDIS and have a -PR open. +We assume that you have added the necessary changes to TARDIS and have an open pull request. -#. Fork the tardis ref-data repository like described in :ref:`development-workflow`. +#. Fork the ``tardis-refdata`` repository like described in :ref:`development-workflow`. -#. Clone tardis-refdata. Then make a new branch named the same as your new tardis feature branch. Make sure to set the upstream of the repository to `https://github.com/tardis-sn/tardis-refdata.git` - * You can check that you have the right upstream set using: - .. code-block:: None - - git checkout upstream/pr/11 +#. Clone ``tardis-refdata`` to your computer. Then make a new branch named the same as your new TARDIS feature branch. Make sure to have correctly set up the ``upstream`` remote as explained in :ref:`reviewing-and-helping-with-pr`. -#. Make sure to have sure to have git-lfs installed. If not already done, the process can be seen here: :ref:`git_lfs_instructions` +#. Activate your ``tardis`` conda environment. -#. Open tardis-refdata directory. Fetch from upstream and then use git-lfs to pull ref-data files from github using: .. code-block:: None + + conda activate tardis + +#. Navigate to your ``tardis-refdata`` directory and type: + .. code-block:: None + + git lfs install git lfs fetch upstream git lfs pull -#. Open into tardis directory. Generate new reference data (in the correct branch) offline using: +#. Go to your ``tardis`` directory. Make sure you are working on the correct branch and generate new reference data using: .. code-block:: None - python setup.py test --args="--tardis-refdata= --generate-reference" + python setup.py test --args="--tardis-refdata= --generate-reference" -#. Rerun the tests to make sure it does not fail using: +#. Re-run the tests to make sure it does not fail using: .. code-block:: None - python setup.py test --args="--tardis-refdata=" + python setup.py test --args="--tardis-refdata=" -#. Open and run the refdata comparer notebook provided in TARDIS-refdata to check if there are any unexpected changes in the updated reference data and the previous reference data. +#. Go back to your ``tardis-refdata`` folder, and run a Jupyter Notebook session inside the ``notebook`` folder. -#. Switch to tardis-refdata. Commit the changed ref-data and open a PR on tardis-refdata +#. Open the ``ref_data_compare.ipynb`` file notebook and look for the cell with the following code: -#. Switch back to the TARDIS directory. Open `.travis.yml` + .. code-block:: None -#. Change the following lines + comparer = ReferenceComparer(ref2_hash='upstream/pr/24') + + Replace '24' for the number of the last merged pull request showed `here `_. + +#. Run all cells and check if there are any unexpected changes in the updated reference data respect the previous one. + +#. Commit the changes made to the reference data and open a PR on ``tardis-refdata``. + +#. Switch back to the ``tardis`` directory. Open the ``.travis.yml`` file and change the following lines: .. code-block:: None - - if [[ $TEST_MODE == 'spectrum' ]]; then git fetch origin pull//head:; fi + - if [[ $TEST_MODE == 'spectrum' ]]; then git fetch origin pull//head:; fi - if [[ $TEST_MODE == 'spectrum' ]]; then git checkout ; fi``` -#. Commit the `.travis.yml` to your Pull request -#. Make sure that your TARDIS PR now passes on TRAVIS. -#. Then merge the PR on tardis-refdata. -#. Then change `.travis.yml` to +#. Commit the ``.travis.yml`` to your pull request. + +#. Make sure that your TARDIS pull request now passes all tests on Travis-CI. + +#. Ask for review for your PR on ``tardis-refdata`` and wait for merge. + +#. Then change the ``.travis.yml`` in ``tardis`` directory to: .. code-block:: None - if [[ $TEST_MODE == 'spectrum' ]]; then git fetch origin; fi - if [[ $TEST_MODE == 'spectrum' ]]; then git checkout origin/master; fi``` -#. Then make sure that your TARDIS PR passes again. -#. Then merge your PR to TARDIS master -#. Congratulations - you updated TARDIS to be better. Have a beer and steak (or Tofu if you are vegetarian/vegan) + +#. Ensure TARDIS pull request passes Travis-CI again and ping someone to merge your PR to the TARDIS master branch. + + +Congratulations! You have updated TARDIS to be better. Have a beer and steak (or Tofu if you are vegetarian/vegan) + Troubleshooting ############### * Unable to generate reference data - * If generating fails due to an inability to open chianti_He.h5, make sure that you have installed git-lfs and have pulled the files from github (See steps 3 and 4). - -* Error in running `comparer = ReferenceComparer(ref2_hash='upstream/pr/11')` on the comparer notebook: `No such file or directory: '.../unit_test_data.h5'` - * If notebook file is unable to find the file /unit_test_data.h5, make sure you have correctly set your upstream. To check this, use: - + * If generating fails due to an inability to open ``chianti_He.h5``, make sure that you have activated your `tardis` conda environment, and ``git-lfs`` is installed. Fetch and pull the files from GitHub as explained in step 4. - * If this fails, make sure that your upstream is set correctly to `https://github.com/tardis-sn/tardis-refdata.git` (See step 2). \ No newline at end of file +* Error when running ``comparer = ReferenceComparer(ref2_hash='upstream/pr/XX')`` on the comparer notebook: ``No such file or directory: '.../unit_test_data.h5'`` + * If notebook file is unable to find the file ``unit_test_data.h5``, make sure you have correctly set your upstream as explained in :ref:`reviewing-and-helping-with-pr`. From f41f130a32ffb623de19470ac52c10f4669a1a3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Fri, 24 Jan 2020 02:38:05 -0300 Subject: [PATCH 114/467] Trying to get the right version number for automatic release (#1006) * Initial commit * Change release title to TARDIS v[...] --- .github/workflows/release.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 75c88da5f50..ebaaa093dce 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,7 +25,8 @@ jobs: - name: Build and install TARDIS shell: bash -l {0} run: | - python setup.py install + git clone https://github.com/tardis.git tardis-repo-clone + cd tardis-repo-clone; python setup.py install - name: Get TARDIS version number shell: bash -l {0} @@ -37,6 +38,6 @@ jobs: uses: marvinpinto/action-automatic-releases@v0.2.2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} - automatic_release_tag: ${{ env.VERSION }} + automatic_release_tag: v${{ env.VERSION }} prerelease: True - title: ${{ env.VERSION }} + title: TARDIS v${{ env.VERSION }} From 4635460496cad446f742368bdf50bb4c91af69be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Fri, 24 Jan 2020 19:25:46 -0300 Subject: [PATCH 115/467] Fixed typo (#1013) --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ebaaa093dce..d9827184d9a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,7 +25,7 @@ jobs: - name: Build and install TARDIS shell: bash -l {0} run: | - git clone https://github.com/tardis.git tardis-repo-clone + git clone https://github.com/tardis-sn/tardis.git tardis-repo-clone cd tardis-repo-clone; python setup.py install - name: Get TARDIS version number From 4c4be6025f8d2ba8e848ebb567113787cb89225f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Sat, 25 Jan 2020 19:58:01 -0300 Subject: [PATCH 116/467] Removed GH Action for release versions (#1016) --- .github/workflows/release.yml | 43 ----------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index d9827184d9a..00000000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: Release a new TARDIS version - -on: - push: - branches: - - master - -jobs: - release: - - name: Main job - runs-on: ubuntu-latest - steps: - # Every step starts with '-' - - uses: actions/checkout@v2 - - - name: Create TARDIS environment - uses: goanpeca/setup-miniconda@v1.0.2 - with: - auto-update-conda: True - activate-environment: tardis - environment-file: tardis_env3.yml - auto-activate-base: False - - - name: Build and install TARDIS - shell: bash -l {0} - run: | - git clone https://github.com/tardis-sn/tardis.git tardis-repo-clone - cd tardis-repo-clone; python setup.py install - - - name: Get TARDIS version number - shell: bash -l {0} - run: | - # This is the only way I found to share variables across steps - echo "::set-env name=VERSION::$(python -c 'import tardis; print(tardis.__version__)')" - - - name: Automatic Releases - uses: marvinpinto/action-automatic-releases@v0.2.2 - with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - automatic_release_tag: v${{ env.VERSION }} - prerelease: True - title: TARDIS v${{ env.VERSION }} From 2284d9c43182907c3d8d59357fb0cd7eca529e02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Sat, 25 Jan 2020 20:35:35 -0300 Subject: [PATCH 117/467] Pipeline for comparing reference data (#1010) * Pipeline for comparing reference data (Initial commit) [skip ci] * Update compare-refdata.yml for Azure Pipelines Setting up the pipeline (1) * Update compare-refdata.yml for Azure Pipelines * Update compare-refdata.yml for Azure Pipelines * Update compare-refdata.yml for Azure Pipelines * Update compare-refdata.yml for Azure Pipelines * Update compare-refdata.yml for Azure Pipelines * Update compare-refdata.yml for Azure Pipelines * Add download artifact task * Fixing bad indentation * Tweaking item pattern value * Update compare-refdata.yml for Azure Pipelines * Still trying to upload the report * Update compare-refdata.yml for Azure Pipelines * Testing checkout to upstream/pr * Update compare-refdata.yml for Azure Pipelines * Checking if we can write in /tmp * Update compare-refdata.yml for Azure Pipelines * Update compare-refdata.yml for Azure Pipelines * Update compare-refdata.yml for Azure Pipelines * Update compare-refdata.yml for Azure Pipelines * Update compare-refdata.yml for Azure Pipelines * See what's inside /tmp after job fails * Update compare-refdata.yml for Azure Pipelines * Update compare-refdata.yml for Azure Pipelines * Update compare-refdata.yml for Azure Pipelines * Move YAML file to azure-pipelines dir * Update compare-refdata.yml for Azure Pipelines * Update compare-refdata.yml for Azure Pipelines * Update compare-refdata.yml for Azure Pipelines * Update compare-refdata.yml for Azure Pipelines * Update compare-refdata.yml for Azure Pipelines * Add Install Bokeh step * Update compare-refdata.yml for Azure Pipelines * Use `--allow-errors` flag in nbconvert * Update compare-refdata.yml for Azure Pipelines * Trying to debug notebook * Update compare-refdata.yml for Azure Pipelines * Update compare-refdata.yml for Azure Pipelines Co-authored-by: Wolfgang Kerzendorf --- azure-pipelines/compare-refdata.yml | 70 +++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 azure-pipelines/compare-refdata.yml diff --git a/azure-pipelines/compare-refdata.yml b/azure-pipelines/compare-refdata.yml new file mode 100644 index 00000000000..520a18cbef3 --- /dev/null +++ b/azure-pipelines/compare-refdata.yml @@ -0,0 +1,70 @@ +# Starter pipeline +# Start with a minimal pipeline that you can customize to build and deploy your code. +# Add steps that build, run tests, deploy, and more: +# https://aka.ms/yaml + +variables: + system.debug: "true" + ref.data.home: "$(Agent.BuildDirectory)/tardis-refdata" + ref.data.github.url: "https://github.com/tardis-sn/tardis-refdata.git" + tardis.build.dir: $(Build.Repository.LocalPath) + +jobs: + - job: report + pool: + vmImage: "ubuntu-latest" + + steps: + - bash: | + echo "##vso[task.prependpath]$CONDA/bin" + sudo chown -R $USER $CONDA + displayName: "Add CONDA to path" + + - bash: | + sh ci-helpers/install_tardis_env.sh + displayName: "Install TARDIS env" + + - bash: | + source activate tardis + conda install bokeh -c conda-forge --no-update-deps --yes + displayName: "Install Bokeh" + + - bash: | + source activate tardis + git clone https://github.com/tardis-sn/tardis-refdata.git $(ref.data.home) + displayName: "Fetch ALL reference data" + + - bash: | + source activate tardis + python setup.py build_ext --inplace + displayName: "Build & install TARDIS" + + - bash: | + source activate tardis + python setup.py test --args="--tardis-refdata=$(ref.data.home) --generate-reference" + displayName: "Generate new reference data" + + - bash: | + source activate tardis + cd $(ref.data.home) + git remote add upstream https://github.com/tardis-sn/tardis-refdata.git + git fetch upstream + git fetch upstream "+refs/pull/*/head:refs/remotes/upstream/pr/*" + cd notebooks + jupyter nbconvert ref_data_compare.ipynb --to html --execute --allow-errors --ExecutePreprocessor.timeout=6000 + displayName: "Generating report" + + - task: PublishPipelineArtifact@1 + inputs: + targetPath: "$(ref.data.home)/notebooks/ref_data_compare.html" + artifact: "report" + publishLocation: "pipeline" + + - bash: | + ls -lR /tmp + echo + condition: succeededOrFailed() + displayName: "Check files in /tmp" + +# Keep this line, is useful for testing without changing the notebook. +# sed -i "s/ref2_hash='upstream\/pr\/24'/ref1_hash='c998f44', ref2_hash='master'/g" ref_data_compare.ipynb \ No newline at end of file From cc1ddde0fd1bc97d43025c8c4e3d1accd499965f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Thu, 30 Jan 2020 02:11:24 -0300 Subject: [PATCH 118/467] Updated .mailmap (#1018) --- .mailmap | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/.mailmap b/.mailmap index 73b6d50a5d2..87864245277 100644 --- a/.mailmap +++ b/.mailmap @@ -83,3 +83,23 @@ Frederik Beaujean Frederik Beaujean Laud Bentil Laud Bentil + +Nilesh Patra <37436956+nileshpatra@users.noreply.github.com> + +Debajyoti Dasgupta + +Barnabás Barna + +Nance Sarafina <31808841+sarafina325@users.noreply.github.com> + +Nathan Kowalski <56104113+kowal180@users.noreply.github.com> + +Ezequiel Pássaro + +John Reichenbach <56849859+jreichenbach-msu@users.noreply.github.com> + +Youssef Eweis +Youssef Eweis Youssef Eweis + +Marc Williamson +Marc Williamson Marc Williamson \ No newline at end of file From be9c0478f17e6e44ef924b4fadc5fe992c0b57bb Mon Sep 17 00:00:00 2001 From: livnehra Date: Sun, 2 Feb 2020 17:51:14 +0200 Subject: [PATCH 119/467] Update .mailmap (#1020) --- .mailmap | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.mailmap b/.mailmap index 87864245277..a80c33ed03a 100644 --- a/.mailmap +++ b/.mailmap @@ -102,4 +102,6 @@ Youssef Eweis Youssef Eweis Youssef Eweis Marc Williamson -Marc Williamson Marc Williamson \ No newline at end of file +Marc Williamson Marc Williamson + +Ran Livneh From 0185768b435ed97f294e73b8ce0aa292fd082b48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Sun, 2 Feb 2020 16:01:38 -0300 Subject: [PATCH 120/467] Set up release TARDIS version with Azure Pipelines (#1015) * Set up release TARDIS version with Azure Pipelines [skip ci] * Update release-version.yml for Azure Pipelines * Update release-version.yml for Azure Pipelines * Update release-version.yml for Azure Pipelines * Update release-version.yml for Azure Pipelines * Update release-version.yml for Azure Pipelines * Update release-version.yml for Azure Pipelines * Update release-version.yml for Azure Pipelines * Update release-version.yml for Azure Pipelines --- azure-pipelines/release-version.yml | 54 +++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 azure-pipelines/release-version.yml diff --git a/azure-pipelines/release-version.yml b/azure-pipelines/release-version.yml new file mode 100644 index 00000000000..db29d4f5c92 --- /dev/null +++ b/azure-pipelines/release-version.yml @@ -0,0 +1,54 @@ +# Starter pipeline +# Start with a minimal pipeline that you can customize to build and deploy your code. +# Add steps that build, run tests, deploy, and more: +# https://aka.ms/yaml + +trigger: + batch: true + branches: + include: + - master + +variables: + system.debug: "true" + tardis.build.dir: $(Build.Repository.LocalPath) + +pool: + vmImage: "ubuntu-latest" + +steps: + - bash: | + echo "##vso[task.prependpath]$CONDA/bin" + sudo chown -R $USER $CONDA + displayName: "Add CONDA to path" + + - bash: | + sh ci-helpers/install_tardis_env.sh + displayName: "Install TARDIS env" + + - bash: | + source activate tardis + python setup.py install + displayName: "Build & install TARDIS" + + - bash: | + source activate tardis + echo "##vso[task.setvariable variable=version]$(python -c 'import tardis; print(tardis.__version__)')" + displayName: "Get TARDIS version number" + + - bash: | + echo $(VERSION) + displayName: "Recover TARDIS version number" + + - task: GitHubRelease@1 + inputs: + gitHubConnection: "wkerzendorf" + repositoryName: "$(Build.Repository.Name)" + action: "create" + target: "$(Build.SourceVersion)" + tagSource: "userSpecifiedTag" + tag: "$(VERSION)" + title: "TARDIS v$(VERSION)" + isPreRelease: true + changeLogCompareToRelease: "lastFullRelease" + changeLogType: "commitBased" From adff6dbae5da1fafc2f2ca3836c68e41feb73d75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Sun, 2 Feb 2020 18:56:05 -0300 Subject: [PATCH 121/467] Set cron job, disable CI and PR (#1021) --- azure-pipelines/release-version.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/azure-pipelines/release-version.yml b/azure-pipelines/release-version.yml index db29d4f5c92..e85a73fa8e5 100644 --- a/azure-pipelines/release-version.yml +++ b/azure-pipelines/release-version.yml @@ -3,11 +3,15 @@ # Add steps that build, run tests, deploy, and more: # https://aka.ms/yaml -trigger: - batch: true - branches: - include: - - master +trigger: none +pr: none +schedules: + - cron: "30 22 * * 0" + displayName: Weekly Sunday build + branches: + include: + - master + always: true variables: system.debug: "true" From 9cef13483c3e3c1eb605e4f300c8ccaa51e124cc Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 2 Feb 2020 21:30:05 -0500 Subject: [PATCH 122/467] Update .mailmap --- .mailmap | 1 + 1 file changed, 1 insertion(+) diff --git a/.mailmap b/.mailmap index a80c33ed03a..316b4eced48 100644 --- a/.mailmap +++ b/.mailmap @@ -105,3 +105,4 @@ Marc Williamson Marc Williamson Marc Williamson Ran Livneh +Ran Livneh livnehra From d2ac48a15ab48788099d197ffb2af9b687317abe Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 2 Feb 2020 22:17:54 -0500 Subject: [PATCH 123/467] add orcid contributor information --- .orcid.csv | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .orcid.csv diff --git a/.orcid.csv b/.orcid.csv new file mode 100644 index 00000000000..29dab6bc575 --- /dev/null +++ b/.orcid.csv @@ -0,0 +1,10 @@ +email,orcid +wkerzendorf@gmail.com,0000-0002-0479-7235 +unaudio@gmail.com,0000-0002-6051-210X +yeganer@gmx.de,0000-0002-7131-3341 +ulrich.noebauer@gmail.com,0000-0002-2453-853X +ftsamis@gmail.com,0000-0003-4875-1623 +s.sim@qub.ac.uk,0000-0002-9774-1192 +beaujean@mpp.mpg.de,0000-0001-9901-8785 +epson.heringer@gmail.com,0000-0002-1502-9127 +yssavo.camacho@gmail.com,0000-0002-9830-3880 \ No newline at end of file From c9aca8b124710511b7dc1a3a483587e3157ac75d Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 3 Feb 2020 12:23:46 -0500 Subject: [PATCH 124/467] Update team.rst update stuart's role and remove contributors as we now have Zenodo --- docs/team.rst | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/docs/team.rst b/docs/team.rst index f7dbc8b6480..f9971c93b87 100644 --- a/docs/team.rst +++ b/docs/team.rst @@ -18,7 +18,7 @@ Team (in alphabetical order) * Yssa Camacho-Neves * Alice Harpole * Vytautas Jancauskas - * Stuart Sim + * Stuart Sim - Co-Founder * Christian Vogl - Lead Type II supernovae * Marc Williamson @@ -45,14 +45,3 @@ Current and Former GSoC and SOCIS Students * Fotis Tsamis (GSoC 2016) * Ezequiel Passaro (GSoC 2019) * Jaladh Singhal (GSoC 2019) - - -Contributors ------------- - - * Maryam Patel (documentation, test environment) - * Adam Suban-Loewen (GUI, profiling and parallelization) - * Chris Sasaki and Mike Reid (Logo) - * Knox Long & Christian Knigge (comparisons with "Python" and ionization data) - * Erik Bray (help with incorporating Astropy's setuphelpers) - * Robert Ryans (testing installation process) From a13084a9aaee787487a33b1a2e27a3748e591ee6 Mon Sep 17 00:00:00 2001 From: Christian Vogl Date: Mon, 3 Feb 2020 20:14:39 +0100 Subject: [PATCH 125/467] Update orcids --- .orcid.csv | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.orcid.csv b/.orcid.csv index 29dab6bc575..4ee6282d84b 100644 --- a/.orcid.csv +++ b/.orcid.csv @@ -7,4 +7,5 @@ ftsamis@gmail.com,0000-0003-4875-1623 s.sim@qub.ac.uk,0000-0002-9774-1192 beaujean@mpp.mpg.de,0000-0001-9901-8785 epson.heringer@gmail.com,0000-0002-1502-9127 -yssavo.camacho@gmail.com,0000-0002-9830-3880 \ No newline at end of file +yssavo.camacho@gmail.com,0000-0002-9830-3880 +cvogl@mpa-garching.mpg.de,0000-0002-7941-5692 From f4dc1f2e36cc0406c9b90f8255ec74083c6ffc51 Mon Sep 17 00:00:00 2001 From: Alice Harpole Date: Mon, 3 Feb 2020 15:41:08 -0500 Subject: [PATCH 126/467] added Alice's orcid (#1022) Co-authored-by: Wolfgang Kerzendorf --- .orcid.csv | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/.orcid.csv b/.orcid.csv index 4ee6282d84b..6f82703509a 100644 --- a/.orcid.csv +++ b/.orcid.csv @@ -1,11 +1,13 @@ -email,orcid -wkerzendorf@gmail.com,0000-0002-0479-7235 -unaudio@gmail.com,0000-0002-6051-210X -yeganer@gmx.de,0000-0002-7131-3341 -ulrich.noebauer@gmail.com,0000-0002-2453-853X -ftsamis@gmail.com,0000-0003-4875-1623 -s.sim@qub.ac.uk,0000-0002-9774-1192 -beaujean@mpp.mpg.de,0000-0001-9901-8785 -epson.heringer@gmail.com,0000-0002-1502-9127 -yssavo.camacho@gmail.com,0000-0002-9830-3880 -cvogl@mpa-garching.mpg.de,0000-0002-7941-5692 +email,orcid +wkerzendorf@gmail.com,0000-0002-0479-7235 +unaudio@gmail.com,0000-0002-6051-210X +yeganer@gmx.de,0000-0002-7131-3341 +ulrich.noebauer@gmail.com,0000-0002-2453-853X +ftsamis@gmail.com,0000-0003-4875-1623 +s.sim@qub.ac.uk,0000-0002-9774-1192 +beaujean@mpp.mpg.de,0000-0001-9901-8785 +epson.heringer@gmail.com,0000-0002-1502-9127 +yssavo.camacho@gmail.com,0000-0002-9830-3880 +aliceharpole@gmail.com,0000-0002-1530-781X +cvogl@mpa-garching.mpg.de,0000-0002-7941-5692 + From 0e056133ca0d4f6a689b6e6de39e95ac64741e2b Mon Sep 17 00:00:00 2001 From: Christian Vogl Date: Tue, 4 Feb 2020 10:19:31 +0100 Subject: [PATCH 127/467] Add A. Floers's orcid --- .orcid.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.orcid.csv b/.orcid.csv index 6f82703509a..91a978dbf38 100644 --- a/.orcid.csv +++ b/.orcid.csv @@ -10,4 +10,4 @@ epson.heringer@gmail.com,0000-0002-1502-9127 yssavo.camacho@gmail.com,0000-0002-9830-3880 aliceharpole@gmail.com,0000-0002-1530-781X cvogl@mpa-garching.mpg.de,0000-0002-7941-5692 - +afloers@mpa-garching.mpg.de,0000-0003-2024-2819 From 735fac9a0a284f5bf70f91851264a498e58fbd28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Tue, 4 Feb 2020 15:56:02 -0300 Subject: [PATCH 128/467] Add epassaro orcid (#1024) --- .orcid.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/.orcid.csv b/.orcid.csv index 91a978dbf38..d706c3ebfa0 100644 --- a/.orcid.csv +++ b/.orcid.csv @@ -11,3 +11,4 @@ yssavo.camacho@gmail.com,0000-0002-9830-3880 aliceharpole@gmail.com,0000-0002-1530-781X cvogl@mpa-garching.mpg.de,0000-0002-7941-5692 afloers@mpa-garching.mpg.de,0000-0003-2024-2819 +epassaro15@gmail.com,0000-0002-3707-1975 From d315f469b25bdc79fe2f3efc5e00fd8336cc9bd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Fl=C3=B6rs?= <33418619+afloers@users.noreply.github.com> Date: Tue, 4 Feb 2020 20:33:20 +0100 Subject: [PATCH 129/467] Changed orcid order --- .orcid.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.orcid.csv b/.orcid.csv index d706c3ebfa0..c99e4deeec2 100644 --- a/.orcid.csv +++ b/.orcid.csv @@ -10,5 +10,5 @@ epson.heringer@gmail.com,0000-0002-1502-9127 yssavo.camacho@gmail.com,0000-0002-9830-3880 aliceharpole@gmail.com,0000-0002-1530-781X cvogl@mpa-garching.mpg.de,0000-0002-7941-5692 -afloers@mpa-garching.mpg.de,0000-0003-2024-2819 epassaro15@gmail.com,0000-0002-3707-1975 +afloers@mpa-garching.mpg.de,0000-0003-2024-2819 From 56a04e436fba759a2ab4714d2898a06c79f491e7 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 4 Feb 2020 15:25:43 -0500 Subject: [PATCH 130/467] Update .mailmap for Andreas and Alice --- .mailmap | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.mailmap b/.mailmap index 316b4eced48..eee91f328f8 100644 --- a/.mailmap +++ b/.mailmap @@ -96,8 +96,7 @@ Nathan Kowalski <56104113+kowal180@users.noreply.github.com> Ezequiel Pássaro -John Reichenbach <56849859+jreichenbach-msu@users.noreply.github.com> - +John Reichenbach <56849859+jreichenbach-msu@users.noreply.github.com>😍 Youssef Eweis Youssef Eweis Youssef Eweis @@ -106,3 +105,10 @@ Marc Williamson Marc Williamson Ran Livneh livnehra + +Andreas Flörs +Andreas Flörs Andreas Flörs <33418619+afloers@users.noreply.github.com> + +Alice Harpole +Alice Harpole Alice Harpole + From 1cb08081f86afcd87280c2677dada59051537e5a Mon Sep 17 00:00:00 2001 From: Marc Williamson Date: Tue, 4 Feb 2020 19:23:54 -0500 Subject: [PATCH 131/467] Update .orcid.csv Added Marc Williamson --- .orcid.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/.orcid.csv b/.orcid.csv index c99e4deeec2..05fd67cf984 100644 --- a/.orcid.csv +++ b/.orcid.csv @@ -12,3 +12,4 @@ aliceharpole@gmail.com,0000-0002-1530-781X cvogl@mpa-garching.mpg.de,0000-0002-7941-5692 epassaro15@gmail.com,0000-0002-3707-1975 afloers@mpa-garching.mpg.de,0000-0003-2024-2819 +mew488@nyu.edu,0000-0003-2544-4516 From d611b5a79ca579648865ec1ca138c162228b56ce Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 5 Feb 2020 11:47:19 -0500 Subject: [PATCH 132/467] Update .mailmap --- .mailmap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.mailmap b/.mailmap index eee91f328f8..7e744e05373 100644 --- a/.mailmap +++ b/.mailmap @@ -96,7 +96,7 @@ Nathan Kowalski <56104113+kowal180@users.noreply.github.com> Ezequiel Pássaro -John Reichenbach <56849859+jreichenbach-msu@users.noreply.github.com>😍 +John Reichenbach <56849859+jreichenbach-msu@users.noreply.github.com> Youssef Eweis Youssef Eweis Youssef Eweis From 145c709640710bab59e67bec9c2f3edf76b67e1f Mon Sep 17 00:00:00 2001 From: MarkMageeAstro <53613663+MarkMageeAstro@users.noreply.github.com> Date: Fri, 7 Feb 2020 15:00:35 +0000 Subject: [PATCH 133/467] Added Mark Magee (#1027) --- .orcid.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/.orcid.csv b/.orcid.csv index 05fd67cf984..0da13715160 100644 --- a/.orcid.csv +++ b/.orcid.csv @@ -13,3 +13,4 @@ cvogl@mpa-garching.mpg.de,0000-0002-7941-5692 epassaro15@gmail.com,0000-0002-3707-1975 afloers@mpa-garching.mpg.de,0000-0003-2024-2819 mew488@nyu.edu,0000-0003-2544-4516 +mrmagee.astro@gmail.com,0000-0002-0629-8931 From 293506846aeff41d30e776cc93b355e4c4889731 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Wed, 12 Feb 2020 15:13:12 -0300 Subject: [PATCH 134/467] Minor changes (#1026) --- azure-pipelines/release-version.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines/release-version.yml b/azure-pipelines/release-version.yml index e85a73fa8e5..5f4c3a9b223 100644 --- a/azure-pipelines/release-version.yml +++ b/azure-pipelines/release-version.yml @@ -51,8 +51,8 @@ steps: action: "create" target: "$(Build.SourceVersion)" tagSource: "userSpecifiedTag" - tag: "$(VERSION)" + tag: "v$(VERSION)" title: "TARDIS v$(VERSION)" - isPreRelease: true + isPreRelease: false changeLogCompareToRelease: "lastFullRelease" changeLogType: "commitBased" From 13a80105289ee08093ab4963eae94d887ecdf334 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Wed, 12 Feb 2020 16:38:17 -0300 Subject: [PATCH 135/467] Add `compilers` to environment YAML file (#1025) --- tardis_env3.yml | 111 ++++++++++++++++++++++++------------------------ 1 file changed, 55 insertions(+), 56 deletions(-) diff --git a/tardis_env3.yml b/tardis_env3.yml index 5927ca67ed2..275cd1aa364 100644 --- a/tardis_env3.yml +++ b/tardis_env3.yml @@ -1,70 +1,69 @@ name: tardis channels: - - conda-forge - + - conda-forge dependencies: -- python=3 -- pip -- numpy=1.15 -- scipy=1.1 -- pandas=0.24 -- astropy=3.2.1 - + - python=3 + - pip + - numpy=1.15 + - scipy=1.1 + - pandas=0.24 + - astropy=3.2.1 -- numba=0.43 -- numexpr -- Cython=0.29 + - numba=0.43 + - numexpr + - Cython=0.29 -# Plasma -- networkx + - compilers -# I/O -- pyyaml -- jsonschema -- pyne -- pytables -- h5py -- requests -- tqdm + # Plasma + - networkx -# Analysis -- jupyter -- notebook -- matplotlib -- graphviz -- pygraphviz + # I/O + - pyyaml + - jsonschema + - pyne + - pytables + - h5py + - requests + - tqdm -# Documentation -- sphinx -- nbconvert -- numpydoc -- docutils -- nbformat -- nbsphinx -- sphinx_bootstrap_theme -- sphinxcontrib-bibtex -- sphinxcontrib-apidoc -- sphinx_rtd_theme -- recommonmark + # Analysis + - jupyter + - notebook + - matplotlib + - graphviz + - pygraphviz -#Test/Coverage requirements -- git-lfs -- pytest=4 -- pytest-html -- requests -- coverage -- docopt -- pytest-cov -- codecov + # Documentation + - sphinx + - nbconvert + - numpydoc + - docutils + - nbformat + - nbsphinx + - sphinx_bootstrap_theme + - sphinxcontrib-bibtex + - sphinxcontrib-apidoc + - sphinx_rtd_theme + - recommonmark + #Test/Coverage requirements + - git-lfs + - pytest=4 + - pytest-html + - requests + - coverage + - docopt + - pytest-cov + - codecov -- pip: - # Documentation - - sphinxcontrib-tikz + - pip: + # Documentation + - sphinxcontrib-tikz - - dokuwiki - - dot2tex - - sphinx-jsonschema - - git+https://github.com/Naereen/dot2tex.git + - dokuwiki + - dot2tex + - sphinx-jsonschema + - git+https://github.com/Naereen/dot2tex.git From f9052df27fa5ae256629ce9e54a6b04070ffee56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Wed, 12 Feb 2020 18:29:42 -0300 Subject: [PATCH 136/467] Add Mark Magee to .mailmap (#1032) --- .mailmap | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.mailmap b/.mailmap index 7e744e05373..84f9a8e7f93 100644 --- a/.mailmap +++ b/.mailmap @@ -100,6 +100,8 @@ John Reichenbach <56849859+jreichenbach-msu@users.noreply.github.com> Youssef Eweis Youssef Eweis Youssef Eweis +Mark Magee <53613663+MarkMageeAstro@users.noreply.github.com> + Marc Williamson Marc Williamson Marc Williamson From 02303e88e3daea8a10ac0072bac41cfd5134c74b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Wed, 12 Feb 2020 19:52:50 -0300 Subject: [PATCH 137/467] Update .mailmap (#1034) --- .mailmap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.mailmap b/.mailmap index 84f9a8e7f93..55799715e8c 100644 --- a/.mailmap +++ b/.mailmap @@ -106,7 +106,7 @@ Marc Williamson Marc Williamson Marc Williamson Ran Livneh -Ran Livneh livnehra +Ran Livneh Ran Livneh Andreas Flörs Andreas Flörs Andreas Flörs <33418619+afloers@users.noreply.github.com> From 5c97cb8f980f3fcf0177998cf49d6fd2c8fe2550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Wed, 12 Feb 2020 22:25:46 -0300 Subject: [PATCH 138/467] Update .mailmap (#1035) --- .mailmap | 1 + 1 file changed, 1 insertion(+) diff --git a/.mailmap b/.mailmap index 55799715e8c..8935976fcbe 100644 --- a/.mailmap +++ b/.mailmap @@ -107,6 +107,7 @@ Marc Williamson Marc Williamson Ran Livneh Ran Livneh +Ran Livneh livnehra Andreas Flörs Andreas Flörs Andreas Flörs <33418619+afloers@users.noreply.github.com> From 155a183d0710c00f4f798bffe3acae4589fadfa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Wed, 12 Feb 2020 23:24:14 -0300 Subject: [PATCH 139/467] Update zenodo.json (#1036) --- .zenodo.json | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 169 insertions(+), 1 deletion(-) diff --git a/.zenodo.json b/.zenodo.json index 61421a3169a..4a8b4608106 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -1 +1,169 @@ -{"creators": [{"orcid": "0000-0002-0479-7235", "affiliation": "European Southern Observatory", "name": "Kerzendorf, Wolfgang"}, {"orcid": "0000-0002-2453-853X", "affiliation": "Max-Planck-Institut f\u00fcr Astrophysik", "name": "N\u00f6bauer, Ulrich"}, {"orcid": "0000-0002-9774-1192", "name": "Sim, Stuart"}, {"name": "Lietzau, Stefan"}, {"orcid": "0000-0002-6051-210X", "name": "Jan\u010dauskas, Vytautas"}, {"name": "Vogl, Christian"}, {"name": "Mishin, Mikhail"}, {"orcid": "0000-0003-4875-1623", "affiliation": "National Observatory of Athens", "name": "Tsamis, Fotis"}, {"name": "Boyle, Aoife"}, {"name": "Gupta, Vaibhav"}, {"name": "Desai, Karan"}, {"name": "Klauser, Michael"}, {"orcid": "0000-0001-9901-8785", "affiliation": "Ludwig-Maximilians-Universit\u00e4t M\u00fcnchen Fakult\u00e4t f\u00fcr Physik", "name": "Beaujean, Frederik"}, {"name": "Suban-Loewen, Adam"}, {"orcid": "0000-0002-1502-9127", "affiliation": "University of Toronto", "name": "Heringer, Epson"}, {"name": "Shingles, Luke"}, {"name": "Barna, Barnabas"}, {"name": "Gautam, Gaurav"}, {"name": "Patel, Maryam"}, {"name": "Barbosa, Talytha"}, {"name": "Varanasi, Kaushik"}, {"name": "Reinecke, Martin"}, {"name": "Bylund, Tomas"}, {"name": "Bentil, Laud"}, {"name": "Rajagopalan, Srinath"}, {"name": "Jain, Rinkle"}, {"name": "Singh, Sourav"}, {"name": "Talegaonkar, Chinmay"}, {"name": "Sofiatti, Caroline"}, {"name": "Patel, Pratik"}, {"name": "Yap, Kevin"}, {"name": "Wahi, Ujjwal"}, {"name": "Gupta, Suyash"}]} \ No newline at end of file +{ + "creators": [ + { + "name": "Kerzendorf, Wolfgang", + "orcid": "0000-0002-0479-7235", + "affiliation": "Michigan State University" + }, + { + "name": "Sim, Stuart", + "orcid": "0000-0002-9774-1192", + "affiliation": "Queen's University Belfast" + }, + { + "name": "Vogl, Christian", + "orcid": "0000-0002-7941-5692", + "affiliation": "Max-Planck-Institut f\u00fcr Astrophysik" + }, + { + "name": "Williamson, Marc" + }, + { + "name": "P\u00e1ssaro, Ezequiel", + "orcid": "0000-0002-3707-1975" + }, + { + "name": "Fl\u00f6rs, Andreas", + "orcid": "0000-0003-2024-2819" + }, + { + "name": "Camacho, Yssa", + "orcid": "0000-0002-9830-3880" + }, + { + "name": "Jan\u010dauskas, Vytautas", + "orcid": "0000-0002-6051-210X" + }, + { + "name": "Harpole, Alice", + "orcid": "0000-0002-1530-781X", + "affiliation": "Stony Brook University" + }, + { + "name": "N\u00f6bauer, Ulrich", + "orcid": "0000-0002-2453-853X", + "affiliation": "Max-Planck-Institut f\u00fcr Astrophysik" + }, + { + "name": "Lietzau, Stefan", + "orcid": "0000-0002-7131-3341" + }, + { + "name": "Mishin, Mikhail" + }, + { + "name": "Tsamis, Fotis", + "orcid": "0000-0003-4875-1623", + "affiliation": "National Observatory of Athens" + }, + { + "name": "Boyle, Aoife" + }, + { + "name": "Shingles, Luke" + }, + { + "name": "Gupta, Vaibhav" + }, + { + "name": "Desai, Karan" + }, + { + "name": "Klauser, Michael" + }, + { + "name": "Beaujean, Frederik", + "orcid": "0000-0001-9901-8785", + "affiliation": "Ludwig-Maximilians-Universit\u00e4t M\u00fcnchen Fakult\u00e4t f\u00fcr Physik" + }, + { + "name": "Suban-Loewen, Adam" + }, + { + "name": "Heringer, Epson", + "orcid": "0000-0002-1502-9127", + "affiliation": "University of Toronto" + }, + { + "name": "Barna, Barnab\u00e1s" + }, + { + "name": "Barbosa, Talytha" + }, + { + "name": "Gautam, Gaurav" + }, + { + "name": "Patel, Maryam" + }, + { + "name": "Varanasi, Kaushik" + }, + { + "name": "Reinecke, Martin" + }, + { + "name": "Eweis, Youssef" + }, + { + "name": "Bylund, Tomas" + }, + { + "name": "Bentil, Laud" + }, + { + "name": "Livneh, Ran" + }, + { + "name": "Rajagopalan, Srinath" + }, + { + "name": "Reichenbach, John" + }, + { + "name": "Jain, Rinkle" + }, + { + "name": "Singh, Sourav" + }, + { + "name": "Talegaonkar, Chinmay" + }, + { + "name": "Kowalski, Nathan" + }, + { + "name": "Sofiatti, Caroline" + }, + { + "name": "Selsing, Jonatan" + }, + { + "name": "Wahi, Ujjwal" + }, + { + "name": "Sarafina, Nance" + }, + { + "name": "Gillanders, James" + }, + { + "name": "Dasgupta, Debajyoti" + }, + { + "name": "Gupta, Suyash" + }, + { + "name": "Yap, Kevin" + }, + { + "name": "Magee, Mark" + }, + { + "name": "Patel, Pratik" + }, + { + "name": "Patra, Nilesh" + } + ] +} \ No newline at end of file From 536482d4828c52e8837eff11fd2897979d809ccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Sun, 16 Feb 2020 15:25:32 -0300 Subject: [PATCH 140/467] Create Zenodo JSON file (#1031) * Add new job to release-version.yml * Add new job to release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Split step in smaller steps * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml * Update release-version.yml --- azure-pipelines/release-version.yml | 155 +++++++++++++++++++++------- 1 file changed, 117 insertions(+), 38 deletions(-) diff --git a/azure-pipelines/release-version.yml b/azure-pipelines/release-version.yml index 5f4c3a9b223..df192ecbaa2 100644 --- a/azure-pipelines/release-version.yml +++ b/azure-pipelines/release-version.yml @@ -4,10 +4,10 @@ # https://aka.ms/yaml trigger: none -pr: none +#pr: none schedules: - cron: "30 22 * * 0" - displayName: Weekly Sunday build + displayName: Weekly build branches: include: - master @@ -15,44 +15,123 @@ schedules: variables: system.debug: "true" + tardis.zenodo.home: "$(Agent.BuildDirectory)/tardis_zenodo" tardis.build.dir: $(Build.Repository.LocalPath) pool: vmImage: "ubuntu-latest" -steps: - - bash: | - echo "##vso[task.prependpath]$CONDA/bin" - sudo chown -R $USER $CONDA - displayName: "Add CONDA to path" - - - bash: | - sh ci-helpers/install_tardis_env.sh - displayName: "Install TARDIS env" - - - bash: | - source activate tardis - python setup.py install - displayName: "Build & install TARDIS" - - - bash: | - source activate tardis - echo "##vso[task.setvariable variable=version]$(python -c 'import tardis; print(tardis.__version__)')" - displayName: "Get TARDIS version number" - - - bash: | - echo $(VERSION) - displayName: "Recover TARDIS version number" - - - task: GitHubRelease@1 - inputs: - gitHubConnection: "wkerzendorf" - repositoryName: "$(Build.Repository.Name)" - action: "create" - target: "$(Build.SourceVersion)" - tagSource: "userSpecifiedTag" - tag: "v$(VERSION)" - title: "TARDIS v$(VERSION)" - isPreRelease: false - changeLogCompareToRelease: "lastFullRelease" - changeLogType: "commitBased" +jobs: + - job: zenodo_json + displayName: Create Zenodo JSON file + steps: + - task: DownloadSecureFile@1 + name: zenodoSecretKey + displayName: "Download Zenodo secret key" + inputs: + secureFile: "key_secret.json" + + - task: DownloadSecureFile@1 + name: authorOrder + displayName: "Download author order file" + inputs: + secureFile: "author_order.txt" + + - task: DownloadSecureFile@1 + name: nonCommitContributors + displayName: "Download non commit contributors file" + inputs: + secureFile: "non_commit_contributors.txt" + + - bash: | + echo "##vso[task.prependpath]$CONDA/bin" + sudo chown -R $USER $CONDA + displayName: "Add CONDA to path" + + - bash: | + conda create -n zenodo python=3.6 --yes + source activate zenodo + conda install jupyter nbconvert numpy pandas orcid -c conda-forge --yes + displayName: "Create Zenodo env" + + #- bash: | + # source activate zenodo + # git clone git@github.com:tardis-sn/tardis_zenodo.git $(tardis.zenodo.home) + # displayName: "Clone tardis_zenodo repo" + + - bash: | + cd ..; mkdir tardis_zenodo + cd $(tardis.zenodo.home) + wget https://gist.githubusercontent.com/epassaro/12364cd3b33e4b2923ff1861d80ef6d8/raw/d71ca46ca1816f6f46c768314c2da59ed017861e/gather_data.ipynb + displayName: "Downloading notebook (workaround)" + + - bash: | + cp $(zenodoSecretKey.secureFilePath) $(tardis.zenodo.home) + cp $(authorOrder.secureFilePath) $(tardis.zenodo.home) + cp $(nonCommitContributors.secureFilePath) $(tardis.zenodo.home) + displayName: "Recovering secrets" + + - bash: | + source activate zenodo + cd $(tardis.zenodo.home) + jupyter nbconvert gather_data.ipynb --to html --allow-errors --execute --ExecutePreprocessor.timeout=6000 + displayName: "Running notebook (allow errors)" + + - bash: | + source activate zenodo + cd $(tardis.zenodo.home) + jupyter nbconvert gather_data.ipynb --to html --execute --ExecutePreprocessor.timeout=6000 + displayName: "Running notebook (not allow errors)" + + - task: PublishPipelineArtifact@1 + inputs: + targetPath: "$(tardis.zenodo.home)/.zenodo.json" + artifact: "zenodo_json" + publishLocation: "pipeline" + + - task: PublishPipelineArtifact@1 + inputs: + targetPath: "$(tardis.zenodo.home)/gather_data.html" + artifact: "report" + publishLocation: "pipeline" + condition: succeededOrFailed() + +#- job: gh_release +# displayName: Upload GitHub release +# dependsOn: zenodo_json +# steps: +# - bash: | +# echo "##vso[task.prependpath]$CONDA/bin" +# sudo chown -R $USER $CONDA +# displayName: "Add CONDA to path" +# +# - bash: | +# sh ci-helpers/install_tardis_env.sh +# displayName: "Install TARDIS env" +# +# - bash: | +# source activate tardis +# python setup.py install +# displayName: "Build & install TARDIS" +# +# - bash: | +# source activate tardis +# echo "##vso[task.setvariable variable=version]$(python -c 'import tardis; print(tardis.__version__)')" +# displayName: "Get TARDIS version number" +# +# - bash: | +# echo $(VERSION) +# displayName: "Recover TARDIS version number" +# +# - task: GitHubRelease@1 +# inputs: +# gitHubConnection: "wkerzendorf" +# repositoryName: "$(Build.Repository.Name)" +# action: "create" +# target: "$(Build.SourceVersion)" +# tagSource: "userSpecifiedTag" +# tag: "$(VERSION)" +# title: "TARDIS v$(VERSION)" +# isPreRelease: true +# changeLogCompareToRelease: "lastFullRelease" +# changeLogType: "commitBased" From 20de586ba791dd465fddb8149cceb11ca1b02a9d Mon Sep 17 00:00:00 2001 From: Marc Williamson Date: Wed, 19 Feb 2020 10:55:08 -0500 Subject: [PATCH 141/467] Update .orcid.csv --- .orcid.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.orcid.csv b/.orcid.csv index 0da13715160..ca6a835ff6d 100644 --- a/.orcid.csv +++ b/.orcid.csv @@ -12,5 +12,5 @@ aliceharpole@gmail.com,0000-0002-1530-781X cvogl@mpa-garching.mpg.de,0000-0002-7941-5692 epassaro15@gmail.com,0000-0002-3707-1975 afloers@mpa-garching.mpg.de,0000-0003-2024-2819 -mew488@nyu.edu,0000-0003-2544-4516 +marxwillia@gmail.com,0000-0003-2544-4516 mrmagee.astro@gmail.com,0000-0002-0629-8931 From 2202606aff728be02e8fbfadb05d819d6d1119e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Sun, 23 Feb 2020 06:09:47 -0300 Subject: [PATCH 142/467] Update .mailmap (#1039) --- .mailmap | 1 + 1 file changed, 1 insertion(+) diff --git a/.mailmap b/.mailmap index 8935976fcbe..439eace1302 100644 --- a/.mailmap +++ b/.mailmap @@ -104,6 +104,7 @@ Mark Magee <53613663+MarkMageeAstro@users.noreply.github.com> Marc Williamson Marc Williamson Marc Williamson +Marc Williamson Marc Williamson Ran Livneh Ran Livneh Ran Livneh From 54987d98e75739ea1a5468e71d2f56027fbd8869 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 24 Feb 2020 11:28:13 -0500 Subject: [PATCH 143/467] add PR template --- .github/PULL_REQUEST_TEMPLATE.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000000..3d240bf1a7f --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,28 @@ + + +## Description + + +## Motivation and Context + + + +## How Has This Been Tested? + + + + +## Screenshots (if appropriate): + +## Types of changes + +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) + +## Checklist: + + +- [ ] My code follows the code style of this project. +- [ ] My change requires a change to the documentation. +- [ ] I have updated the documentation accordingly. From 92a41d3a02a2701f3e2cf5a1489c6ce34b572ea2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Mon, 24 Feb 2020 13:53:34 -0300 Subject: [PATCH 144/467] Re-activate release job (#1040) * Re-activate release job * Make Zenodo job fail if there are changes in JSON file * Minor changes --- azure-pipelines/release-version.yml | 94 +++++++++++++++-------------- 1 file changed, 48 insertions(+), 46 deletions(-) diff --git a/azure-pipelines/release-version.yml b/azure-pipelines/release-version.yml index df192ecbaa2..fe018dee3f8 100644 --- a/azure-pipelines/release-version.yml +++ b/azure-pipelines/release-version.yml @@ -4,7 +4,7 @@ # https://aka.ms/yaml trigger: none -#pr: none +pr: none schedules: - cron: "30 22 * * 0" displayName: Weekly build @@ -54,11 +54,7 @@ jobs: conda install jupyter nbconvert numpy pandas orcid -c conda-forge --yes displayName: "Create Zenodo env" - #- bash: | - # source activate zenodo - # git clone git@github.com:tardis-sn/tardis_zenodo.git $(tardis.zenodo.home) - # displayName: "Clone tardis_zenodo repo" - + # Actually this is a workaround. We need to grab this from `tardis_zenodo` private repo. - bash: | cd ..; mkdir tardis_zenodo cd $(tardis.zenodo.home) @@ -83,11 +79,17 @@ jobs: jupyter nbconvert gather_data.ipynb --to html --execute --ExecutePreprocessor.timeout=6000 displayName: "Running notebook (not allow errors)" + # This step should fail if there are changes in .zenodo.json + - bash: | + diff $(tardis.zenodo.json)/.zenodo.json $(tardis.build.dir)/.zenodo.json + displayName: "Look for changes in JSON" + - task: PublishPipelineArtifact@1 inputs: targetPath: "$(tardis.zenodo.home)/.zenodo.json" artifact: "zenodo_json" publishLocation: "pipeline" + condition: succeededOrFailed() - task: PublishPipelineArtifact@1 inputs: @@ -95,43 +97,43 @@ jobs: artifact: "report" publishLocation: "pipeline" condition: succeededOrFailed() - -#- job: gh_release -# displayName: Upload GitHub release -# dependsOn: zenodo_json -# steps: -# - bash: | -# echo "##vso[task.prependpath]$CONDA/bin" -# sudo chown -R $USER $CONDA -# displayName: "Add CONDA to path" -# -# - bash: | -# sh ci-helpers/install_tardis_env.sh -# displayName: "Install TARDIS env" -# -# - bash: | -# source activate tardis -# python setup.py install -# displayName: "Build & install TARDIS" -# -# - bash: | -# source activate tardis -# echo "##vso[task.setvariable variable=version]$(python -c 'import tardis; print(tardis.__version__)')" -# displayName: "Get TARDIS version number" -# -# - bash: | -# echo $(VERSION) -# displayName: "Recover TARDIS version number" -# -# - task: GitHubRelease@1 -# inputs: -# gitHubConnection: "wkerzendorf" -# repositoryName: "$(Build.Repository.Name)" -# action: "create" -# target: "$(Build.SourceVersion)" -# tagSource: "userSpecifiedTag" -# tag: "$(VERSION)" -# title: "TARDIS v$(VERSION)" -# isPreRelease: true -# changeLogCompareToRelease: "lastFullRelease" -# changeLogType: "commitBased" + + - job: gh_release + displayName: Upload GitHub release + dependsOn: zenodo_json + steps: + - bash: | + echo "##vso[task.prependpath]$CONDA/bin" + sudo chown -R $USER $CONDA + displayName: "Add CONDA to path" + + - bash: | + sh ci-helpers/install_tardis_env.sh + displayName: "Install TARDIS env" + + - bash: | + source activate tardis + python setup.py install + displayName: "Build & install TARDIS" + + - bash: | + source activate tardis + echo "##vso[task.setvariable variable=version]$(python -c 'import tardis; print(tardis.__version__)')" + displayName: "Get TARDIS version number" + + - bash: | + echo $(VERSION) + displayName: "Recover TARDIS version number" + + - task: GitHubRelease@1 + inputs: + gitHubConnection: "wkerzendorf" + repositoryName: "$(Build.Repository.Name)" + action: "create" + target: "$(Build.SourceVersion)" + tagSource: "userSpecifiedTag" + tag: "v$(VERSION)" + title: "TARDIS v$(VERSION)" + isPreRelease: false + changeLogCompareToRelease: "lastFullRelease" + changeLogType: "commitBased" From ada6e5f9db2f4a281aadd11f4931d432f41628a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Tue, 25 Feb 2020 01:02:14 -0300 Subject: [PATCH 145/467] Fix file paths at `diff` step in release pipeline (#1045) * Fix tardis repo directory path * Fix tardis repo directory path (again) * Enable the pipeline for this PR * Enable the pipeline for this PR (again) * Enable the pipeline for this PR (again) * Fix tardis repo directory path (again) * Fix tardis repo directory path (again) * Fix tardis repo directory path (again) * Fix tardis repo directory path (again) * Fix tardis repo directory path (again) * Final changes --- azure-pipelines/release-version.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines/release-version.yml b/azure-pipelines/release-version.yml index fe018dee3f8..e6e6ccb5eae 100644 --- a/azure-pipelines/release-version.yml +++ b/azure-pipelines/release-version.yml @@ -81,7 +81,7 @@ jobs: # This step should fail if there are changes in .zenodo.json - bash: | - diff $(tardis.zenodo.json)/.zenodo.json $(tardis.build.dir)/.zenodo.json + diff $(tardis.zenodo.home)/.zenodo.json .zenodo.json displayName: "Look for changes in JSON" - task: PublishPipelineArtifact@1 From 7de0206fed4b01205f76029fdf0326ca614f7194 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Tue, 25 Feb 2020 01:02:45 -0300 Subject: [PATCH 146/467] Updated zenodo.json (#1046) --- .zenodo.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.zenodo.json b/.zenodo.json index 4a8b4608106..01ea13690e3 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -16,7 +16,9 @@ "affiliation": "Max-Planck-Institut f\u00fcr Astrophysik" }, { - "name": "Williamson, Marc" + "name": "Williamson, Marc", + "orcid": "0000-0003-2544-4516", + "affiliation": "New York University" }, { "name": "P\u00e1ssaro, Ezequiel", From 5d7a9e0b00e3b206ba288482f7b475727e3503ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Tue, 25 Feb 2020 12:00:52 -0300 Subject: [PATCH 147/467] Re-activate TARDIS tests (#1048) --- azure-pipelines/simple_test_framework.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines/simple_test_framework.yml b/azure-pipelines/simple_test_framework.yml index 5d0ca5c307e..197af806610 100644 --- a/azure-pipelines/simple_test_framework.yml +++ b/azure-pipelines/simple_test_framework.yml @@ -59,7 +59,7 @@ jobs: source activate tardis conda install -y pytest-cov pip install git+https://github.com/tonybaloney/pytest-azurepipelines.git - pytest -s tardis/tests/test_tardis_full_formal_integral.py --tardis-refdata=$(ref.data.home) --cov=tardis --cov-report=xml --cov-report=html + pytest tardis --tardis-refdata=$(ref.data.home) --cov=tardis --cov-report=xml --cov-report=html displayName: 'TARDIS test' From 847b562022ccda2db2486549f739188ba48f172c Mon Sep 17 00:00:00 2001 From: Ashwin Nayak U <31366763+not4win@users.noreply.github.com> Date: Sat, 29 Feb 2020 21:10:37 +0530 Subject: [PATCH 148/467] renamed capmanager class functions (#1055) --- tardis/tests/integration_tests/test_integration.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tardis/tests/integration_tests/test_integration.py b/tardis/tests/integration_tests/test_integration.py index 9aae36d17e1..82c1d0407bc 100644 --- a/tardis/tests/integration_tests/test_integration.py +++ b/tardis/tests/integration_tests/test_integration.py @@ -120,8 +120,8 @@ def setup(self, request, reference, data_path, pytestconfig): # We now do a run with prepared config and get the simulation object. self.result = Simulation.from_config(tardis_config, atom_data=self.atom_data) + capmanager.suspend_global_capture(True) - capmanager.suspendcapture(True) # If current test run is just for collecting reference data, store the # output model to HDF file, save it at specified path. Skip all tests. # Else simply perform the run and move further for performing @@ -139,7 +139,7 @@ def setup(self, request, reference, data_path, pytestconfig): pytest.skip("Reference data saved at {0}".format( data_path['reference_path'] )) - capmanager.resumecapture() + capmanager.resume_global_capture() # Get the reference data through the fixture. self.reference = reference @@ -234,4 +234,4 @@ def plot_spectrum(self): deviation, color='black') deviation_ax.set_xlabel("Wavelength [Angstrom]") - return plt.gcf() + return plt.gcf() \ No newline at end of file From 57f0fcbdaab66ff37d22b5fabcdfbe736a778dec Mon Sep 17 00:00:00 2001 From: Phantsure Date: Mon, 9 Mar 2020 20:28:23 +0530 Subject: [PATCH 149/467] [UPDATE] made changes to docs format --- tardis/util/base.py | 90 +++++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 43 deletions(-) diff --git a/tardis/util/base.py b/tardis/util/base.py index 38db9694109..7777cf756e1 100644 --- a/tardis/util/base.py +++ b/tardis/util/base.py @@ -77,12 +77,12 @@ def int_to_roman(i): Parameters ---------- - i: int + i : int Integer to be converted into roman numerals Returns ------- - : str + str Returns roman numeral representation of i in str format. """ result = [] @@ -98,12 +98,12 @@ def roman_to_int(roman_string): Parameters ---------- - roman_string: str + roman_string : str Roman numeral to be converted into an integer Returns ------- - : int + int Returns integer representation of roman_string """ @@ -131,26 +131,26 @@ def calculate_luminosity( Parameters ---------- - spec_fname: file or str + spec_fname : file or str File or file name to be read - distance: float + distance : float Distance to star - wavelength_column: int, optional(default = 0) + wavelength_column : int, optional(default = 0) Column index in which the wavelength is stored - wavelength_unit: float, optional(default = u.angstrom) + wavelength_unit : float, optional(default = u.angstrom) Dictates units used for calculating wavelength. - flux_column: int, optional(default = 1) + flux_column : int, optional(default = 1) Column index in which the flux is stored - flux_unit: str, optional(default = u.Unit('erg / (Angstrom cm2 s)') + flux_unit : str, optional(default = u.Unit('erg / (Angstrom cm2 s)') Dictates units used for flux Returns ------- - luminosity.value: float + luminosity.value : float Returned luminosity value of star. - wavelength.min() + wavelength.min() : float Minimum value of wavelength of light - wavelength.max() + wavelength.max() : float Maximum value of wavelength of light """ #BAD STYLE change to parse quantity @@ -170,21 +170,25 @@ def create_synpp_yaml(radial1d_mdl, fname, shell_no=0, lines_db=None): Parameters ---------- - radial1d_mdl: Radial1DModel + radial1d_mdl : Radial1DModel Inputted object that will be read into YAML file - fname: str + fname : str File name for the synpp yaml - shell_no: int, optional(default = 0) + shell_no : int, optional(default = 0) Number of shells - lines_db: file, optional(default = None) - + lines_db : file, optional(default = None) + + Raises + ------ + ValueError + If the current dataset does not contain necessary reference files """ logger.warning('Currently only works with Si and a special setup') if radial1d_mdl.atom_data.synpp_refs is not None: raise ValueError( 'The current atom dataset does not contain the ' - 'necesarry reference files (please contact the authors)') + 'necessary reference files (please contact the authors)') radial1d_mdl.atom_data.synpp_refs['ref_log_tau'] = -99.0 for key, value in radial1d_mdl.atom_data.synpp_refs.iterrows(): @@ -253,14 +257,14 @@ def intensity_black_body(nu, T): Parameters ---------- - nu: float + nu : float Frequency of light - T: float + T : float Temperature in kelvin Returns ------- - Intensity: float + Intensity : float Returns the intensity of the black body """ beta_rad = 1 / (k_B_cgs * T) @@ -276,16 +280,16 @@ def species_tuple_to_string(species_tuple, roman_numerals=True): Parameters ---------- - species_tuple: tuple + species_tuple : tuple Tuple of 2 values indicated atomic number and number of electrons missing - roman_numerals: bool, optional(default = TRUE) + roman_numerals : bool, optional(default = TRUE) Indicates whether the returned ion number is in roman numerals Returns ------- - element_symbol, roman_ion_number: str + element_symbol, roman_ion_number : str Returns corresponding string representation of given tuple """ atomic_number, ion_number = species_tuple @@ -303,12 +307,12 @@ def species_string_to_tuple(species_string): Parameters ---------- - species_string: str + species_string : str String containing species symbol (e.g. Si II, Fe III) Returns ------- - atomic_number, ion_number: tuple + atomic_number, ion_number : tuple Returns tuple of length 2 indicating atomic number and ion number Raises @@ -353,17 +357,17 @@ def parse_quantity(quantity_string): Parameters ---------- - quantity_string: str + quantity_string : str String to be converted into astropy.Quantity Returns ------- - q: ~u.Quantity + q : ~u.Quantity Corresponding astropy.Quantity object for passed string Raises ------ - MalformedQuantitiyError + MalformedQuantityError If string is not properly formatted for Astropy Quantity """ @@ -394,12 +398,12 @@ def element_symbol2atomic_number(element_string): Parameters ---------- - element_string: str + element_string : str Inputted element symbol Returns ------- - : int + int Returned atomic number """ reformatted_element_string = reformat_element_symbol(element_string) @@ -414,12 +418,12 @@ def atomic_number2element_symbol(atomic_number): Parameters ---------- - atomic_number: int + atomic_number : int Inputted atomic number Returns ------- - : str + str Returned corresponding element symbol """ return ATOMIC_NUMBER2SYMBOL[atomic_number] @@ -432,12 +436,12 @@ def reformat_element_symbol(element_string): Parameters ---------- - element_string: str + element_string : str Inputted element symbol Returns ------- - : str + str Returned reformatted element symbol """ @@ -451,16 +455,16 @@ def quantity_linspace(start, stop, num, **kwargs): Parameters ---------- - start: ~astropy.Quantity + start : ~astropy.Quantity Starting value of the sequence - stop: ~astropy.Quantity + stop : ~astropy.Quantity End value of the sequence - num: ~int + num : int Number of samples to generate Returns ------- - : ~astropy.Quantity + ~astropy.Quantity Returns num evenly spaced characters of type astropy.Quantity Raises @@ -482,14 +486,14 @@ def convert_abundances_format(fname, delimiter=r'\s+'): Parameters ---------- - fname: file, str + fname : file, str File or file name that contains abundance info - delimiter: str, optional(default = '\\s+') + delimiter : str, optional(default = '\\s+') Determines the separator for splitting file Returns ------- - : DataFrame + DataFrame Corresponding data frame """ df = pd.read_csv(fname, delimiter=delimiter, comment='#', header=None) From ad91bef1a4dc40b247dfc11951bb4e517a09545f Mon Sep 17 00:00:00 2001 From: jordi5 <45364266+jordi5@users.noreply.github.com> Date: Tue, 10 Mar 2020 11:57:16 -0300 Subject: [PATCH 150/467] Migrate gui to PyQt5 (issue #988) (#1068) * add profiling yo plasma base * added nbs * removed profiling from plasma base.py * fix gui widgets calls * fix gui widgets calls * remove signal calls * remove option for pyside * restore pyside support via pyside2 * fixed gui docs * datahandler.py: fix signal calls widgets.py: fix signal calls tardis_env3.yml: add pyside2 * add tardis/gui/test add tardis/gui/tests/ * add test * fix calls * modified: tardis/gui/__init__.py modified: tardis/gui/tests/test_gui.py test now working * add QT_API variable for azure * remove extra init file * fix mistake * add profiling yo plasma base * added nbs * removed profiling from plasma base.py * fix gui widgets calls * fix gui widgets calls * remove signal calls * remove option for pyside * restore pyside support via pyside2 * fixed gui docs * datahandler.py: fix signal calls widgets.py: fix signal calls tardis_env3.yml: add pyside2 * add tardis/gui/test add tardis/gui/tests/ * add test * fix calls * modified: tardis/gui/__init__.py modified: tardis/gui/tests/test_gui.py test now working * add QT_API variable for azure * remove extra init file * fix mistake --- azure-pipelines/simple_test_framework.yml | 2 + docs/running/gui.rst | 45 ++++--- tardis/gui/{__init__.py => __init.py__} | 0 tardis/gui/datahandler.py | 24 ++-- tardis/gui/interface.py | 6 +- tardis/gui/tests/__init__.py | 0 tardis/gui/tests/test_gui.py | 49 ++++++++ tardis/gui/widgets.py | 146 +++++++++++----------- tardis_env3.yml | 1 + 9 files changed, 166 insertions(+), 107 deletions(-) rename tardis/gui/{__init__.py => __init.py__} (100%) create mode 100644 tardis/gui/tests/__init__.py create mode 100644 tardis/gui/tests/test_gui.py diff --git a/azure-pipelines/simple_test_framework.yml b/azure-pipelines/simple_test_framework.yml index 197af806610..815502f8111 100644 --- a/azure-pipelines/simple_test_framework.yml +++ b/azure-pipelines/simple_test_framework.yml @@ -59,7 +59,9 @@ jobs: source activate tardis conda install -y pytest-cov pip install git+https://github.com/tonybaloney/pytest-azurepipelines.git + export QT_API=pyqt pytest tardis --tardis-refdata=$(ref.data.home) --cov=tardis --cov-report=xml --cov-report=html + export QT_API=pyqt displayName: 'TARDIS test' diff --git a/docs/running/gui.rst b/docs/running/gui.rst index d23c94ba5e5..ab62f23aa0d 100644 --- a/docs/running/gui.rst +++ b/docs/running/gui.rst @@ -4,32 +4,32 @@ Graphical User Interface ************************ -TARDIS uses the `PyQt4 framework `_ for its cross-platform +TARDIS uses the `PyQt5 framework `_ for its cross-platform interface. -Creating an instance of the :class:`ModelViewer`-class requires that PyQt4/PySide has already been initialized in -IPython. The above command to start IPython accomplishes this. -gui.py contains all the classes used to create the GUI for Tardis. -This module must be imported inside IPython console started above. The console provides the event loop and the place +This module can be imported inside IPython console or Jupyter Notebook. The console provides the event loop and the place to create/calculate the tardis model. So the module is basically a tool to visualize results. **To setup and run the GUI (under development) follow these steps:** -The gui can use one of two python bindings for qt, namely PyQt4 -and PySide. You can choose which binding is used by setting the -environment variable QT_API in your bash. Currently, the TARDIS team uses PyQT4 +The GUI can use one of two python bindings for qt, namely PyQt5 +and PySide2. You can choose which binding is used by setting the +environment variable QT_API in your bash. Currently, the TARDIS team uses PyQT5 **1**. Installing required packages +PyQt is installed by default in the tardis enviroment (see installation). +To use PySide2: + .. code-block:: shell conda activate tardis - conda install pyqt=4.8.7 + conda install pyside2 -c conda-forge --no-update-deps -**2**. Choosing between PySide and PyQt4 +**2**. Choosing between PySide2 and PyQt5 .. code-block:: shell @@ -41,17 +41,24 @@ environment variable QT_API in your bash. Currently, the TARDIS team uses PyQT4 **3**. An example of creating a model and GUI -To show the gui from the ipython shell use the following commands. +First get the example file `tardis_example.yml `_. -.. code-block:: shell +To download a copy of the atomic database (if you haven't already) add: + + +.. code-block:: python + + from tardis.io.atom_data.util import download_atom_data + download_atom_data('kurucz_cd23_chianti_H_He') + +To show the GUI from a Jupyter Notebook use the following commands - jupyter notebook .. code-block:: python from tardis import run_tardis from tardis.gui import interface - sim = run_tardis('yamlconfigfile.yml', 'atomdatafile.h5') + sim = run_tardis('tardis_example.yml', 'kurucz_cd23_chianti_H_He.h5') interface.show(sim) @@ -76,12 +83,12 @@ accordingly set QT_API in shell:: Start the IPython console with eventloop integration:: - ipython --pylab=qt4 + ipython Display your model:: from tardis import run_tardis - mdl = run_tardis('yamlconfigfile.yml', 'atomdatafile.h5') + mdl = run_tardis('tardis_example.yml','kurucz_cd23_chianti_H_He.h5') from tardis.gui import interface interface.show(mdl) @@ -93,7 +100,7 @@ tardis/tardis/gui. Then use the command:: GUI Layout and Features ----------------------- -When you launch the gui the first screen that you see will be something like the snapshot below. +When you launch the GUI the first screen that you see will be something like the snapshot below. You can inspect the plot of shells on this window and use the toggle button to change between the plot of dilution factor and the radiation temperature in shells. @@ -105,7 +112,7 @@ Shell Info To see the abundances in a shell double-click on the shell number in the table. You can follow a similar strategy in the tables that appear to bring up the ion and level populations for each shell. The snapshot below shows all the tables that you can bring up by successively clicking the horizontal -table headers. +table headers. This feature is not supported at the moment. .. image:: images/ShellInfo.png :width: 900 @@ -114,7 +121,7 @@ Line Info ~~~~~~~~~ If you switch to the spectrum tab you can see the spectrum plot and a button to show line info. Once again you can double-click the table headers to get further information. The snapshot below -shows all the tables that you can bring up in this window. +shows all the tables that you can bring up in this window. This feature is not supported at the moment. .. image:: images/LineInfo.png :width: 900 diff --git a/tardis/gui/__init__.py b/tardis/gui/__init.py__ similarity index 100% rename from tardis/gui/__init__.py rename to tardis/gui/__init.py__ diff --git a/tardis/gui/datahandler.py b/tardis/gui/datahandler.py index 1c6215e6ab5..b7bc9a803a2 100644 --- a/tardis/gui/datahandler.py +++ b/tardis/gui/datahandler.py @@ -7,9 +7,9 @@ if os.environ.get('QT_API', None)=='pyqt': - from PyQt4 import QtGui, QtCore + from PyQt5 import QtGui, QtCore, QtWidgets elif os.environ.get('QT_API', None)=='pyside': - from PySide import QtGui, QtCore + from PySide2 import QtGui, QtCore, QtWidgets else: raise ImportError('QT_API was not set! Please exit the IPython console\n' ' and at the bash prompt use : \n\n export QT_API=pyside \n or\n' @@ -416,14 +416,14 @@ def dict_from_node(self, node): return children[0].get_data(0) -class TreeDelegate(QtGui.QStyledItemDelegate): +class TreeDelegate(QtWidgets.QStyledItemDelegate): """Create a custom delegate to modify the columnview that displays the TreeModel. """ def __init__(self, parent=None): """Call the constructor of the superclass.""" - QtGui.QStyledItemDelegate.__init__(self, parent) + QtWidgets.QStyledItemDelegate.__init__(self, parent) #Mandatory methods for subclassing def createEditor(self, parent, option, index): @@ -435,7 +435,7 @@ def createEditor(self, parent, option, index): combobox.setEditable(False) return combobox else: - editor = QtGui.QLineEdit(parent) + editor = QtWidgets.QLineEdit(parent) editor.setText(str(node.get_data(0))) editor.returnPressed.connect(self.close_and_commit) return editor @@ -470,18 +470,18 @@ def setModelData(self, editor, model, index): if nd in model.disabledNodes: model.disabledNodes.remove(nd) - elif isinstance(editor, QtGui.QLineEdit): + elif isinstance(editor, QtWidgets.QLineEdit): node.setData(0, str(editor.text())) else: - QtGui.QStyledItemDelegate.setModelData(self, editor, model, index) + QtWidgets.QStyledItemDelegate.setModelData(self, editor, model, index) #Custom methods def close_and_commit(self): """Saver for the line edits.""" editor = self.sender() - if isinstance(editor, QtGui.QLineEdit): + if isinstance(editor, QtWidgets.QLineEdit): self.commitData.emit(editor) - self.closeEditor.emit(editor, QtGui.QAbstractItemDelegate.NoHint) + self.closeEditor.emit(editor, QtWidgets.QAbstractItemDelegate.NoHint) class SimpleTableModel(QtCore.QAbstractTableModel): """Create a table data structure for the table widgets.""" @@ -544,9 +544,9 @@ def setData(self, index, value, role=QtCore.Qt.EditRole): elif role != QtCore.Qt.EditRole: return False self.arraydata[index.column()][index.row()] = value - self.emit(QtCore.SIGNAL( - 'dataChanged(const QModelIndex &, const QModelIndex &)'), - index, index) + + self.dataChanged=QtCore.Signal(QtGui.QModelIndex(),QtGui.QModelIndex()) + self.dataChanged.emit(index, index) return True #Methods used to inderact with the SimpleTableModel diff --git a/tardis/gui/interface.py b/tardis/gui/interface.py index fe37da8e0fc..a79d0cb555c 100644 --- a/tardis/gui/interface.py +++ b/tardis/gui/interface.py @@ -1,8 +1,8 @@ import os if os.environ.get('QT_API', None)=='pyqt': - from PyQt4 import QtCore, QtGui + from PyQt5 import QtCore, QtWidgets elif os.environ.get('QT_API', None)=='pyside': - from PySide import QtCore, QtGui + from PySide2 import QtCore,QtWidgets else: raise ImportError('QT_API was not set! Please exit the IPython console\n' ' and at the bash prompt use : \n\n export QT_API=pyside \n or\n' @@ -34,7 +34,7 @@ def show(model): """ if importFailed: - app = QtGui.QApplication([]) + app = QtWidgets.QApplication([]) else: app = get_app_qt4() diff --git a/tardis/gui/tests/__init__.py b/tardis/gui/tests/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tardis/gui/tests/test_gui.py b/tardis/gui/tests/test_gui.py new file mode 100644 index 00000000000..7aca7b0e8b2 --- /dev/null +++ b/tardis/gui/tests/test_gui.py @@ -0,0 +1,49 @@ +import os +import pytest +from tardis.io.config_reader import Configuration +from tardis.simulation import Simulation +import astropy.units as u +from tardis.gui import interface +from tardis.gui.widgets import Tardis +from tardis.gui.datahandler import SimpleTableModel +from PyQt5 import QtWidgets + + + + + +@pytest.fixture(scope='module') +def refdata(tardis_ref_data): + def get_ref_data(key): + return tardis_ref_data[os.path.join( + 'test_simulation', key)] + return get_ref_data + + +@pytest.fixture(scope='module') +def config(): + return Configuration.from_yaml( + 'tardis/io/tests/data/tardis_configv1_verysimple.yml') + + +@pytest.fixture(scope='module') +def simulation_one_loop( + atomic_data_fname, config, + tardis_ref_data, generate_reference): + config.atom_data = atomic_data_fname + config.montecarlo.iterations = 2 + config.montecarlo.no_of_packets = int(4e4) + config.montecarlo.last_no_of_packets = int(4e4) + + simulation = Simulation.from_config(config) + simulation.run() + + return simulation + +def test_gui(simulation_one_loop): + simulation = simulation_one_loop + app = QtWidgets.QApplication([]) + tablemodel = SimpleTableModel + win = Tardis(tablemodel) + win.show_model(simulation) + app.quit() diff --git a/tardis/gui/widgets.py b/tardis/gui/widgets.py index 01c04041d1f..bde5acb7110 100644 --- a/tardis/gui/widgets.py +++ b/tardis/gui/widgets.py @@ -3,9 +3,9 @@ import tardis.util.base if os.environ.get('QT_API', None)=='pyqt': - from PyQt4 import QtGui, QtCore + from PyQt5 import QtGui, QtCore, QtWidgets elif os.environ.get('QT_API', None)=='pyside': - from PySide import QtGui, QtCore + from PySide2 import QtGui, QtCore,QtWidgets else: raise ImportError('QT_API was not set! Please exit the IPython console\n' ' and at the bash prompt use : \n\n export QT_API=pyside \n or\n' @@ -47,8 +47,8 @@ def __init__(self, tablecreator, parent, fig=None): self.span = None super(MatplotlibWidget, self).__init__(self.figure) - super(MatplotlibWidget, self).setSizePolicy(QtGui.QSizePolicy.Expanding, - QtGui.QSizePolicy.Expanding) + super(MatplotlibWidget, self).setSizePolicy(QtWidgets.QSizePolicy.Expanding, + QtWidgets.QSizePolicy.Expanding) super(MatplotlibWidget, self).updateGeometry() if fig != 'model': self.toolbar = NavigationToolbar(self, parent) @@ -185,7 +185,7 @@ def __init__(self, index, center, r_inner, r_outer, **kwargs): self.r_inner = r_inner self.width = r_outer - r_inner -class ConfigEditor(QtGui.QWidget): +class ConfigEditor(QtWidgets.QWidget): """The configuration editor widget. This widget is added to the stacked widget that is the central widget of @@ -299,11 +299,11 @@ def __init__(self, yamlconfigfile, parent=None): } self.match_dicts(configDict, templatedictionary) - self.layout = QtGui.QVBoxLayout() + self.layout = QtWidgets.QVBoxLayout() #Make tree self.trmodel = TreeModel(templatedictionary) - self.colView = QtGui.QColumnView() + self.colView = QtWidgets.QColumnView() self.colView.setModel(self.trmodel) #Five columns of width 256 each can be visible at once self.colView.setFixedWidth(256*5) @@ -311,7 +311,7 @@ def __init__(self, yamlconfigfile, parent=None): self.layout.addWidget(self.colView) #Recalculate button - button = QtGui.QPushButton('Recalculate') + button = QtWidgets.QPushButton('Recalculate') button.setFixedWidth(90) self.layout.addWidget(button) button.clicked.connect(self.recalculate) @@ -394,7 +394,7 @@ def recalculate(self): """ pass -class ModelViewer(QtGui.QWidget): +class ModelViewer(QtWidgets.QWidget): """The widget that holds all the plots and tables that visualize the data in the tardis model. This is also appended to the stacked widget in the top level window. @@ -403,7 +403,7 @@ class ModelViewer(QtGui.QWidget): def __init__(self, tablecreator, parent=None): """Create all widgets that are children of ModelViewer.""" - QtGui.QWidget.__init__(self, parent) + QtWidgets.QWidget.__init__(self, parent) #Data structures self.model = None @@ -420,47 +420,48 @@ def __init__(self, tablecreator, parent=None): self.spectrumWidget = self.make_spectrum_widget() #Plot tab widget - self.plotTabWidget = QtGui.QTabWidget() + self.plotTabWidget = QtWidgets.QTabWidget() self.plotTabWidget.addTab(self.shellWidget,"&Shells") self.plotTabWidget.addTab(self.spectrumWidget, "S&pectrum") #Table widget self.tablemodel = self.createTable([['Shell: '], ["Rad. temp", "Ws", "V"]], (1, 0)) - self.tableview = QtGui.QTableView() + self.tableview = QtWidgets.QTableView() self.tableview.setMinimumWidth(200) - self.tableview.connect(self.tableview.verticalHeader(), - QtCore.SIGNAL('sectionClicked(int)'), self.graph.highlight_shell) - self.tableview.connect(self.tableview.verticalHeader(), - QtCore.SIGNAL('sectionDoubleClicked(int)'), - self.on_header_double_clicked) + + self.sectionClicked=QtCore.Signal(int) + self.tableview.verticalHeader().sectionClicked.connect(self.graph.highlight_shell) + + self.sectionDoubleClicked=QtCore.Signal(int) + self.tableview.verticalHeader().sectionDoubleClicked.connect(self.on_header_double_clicked) #Label for text output - self.outputLabel = QtGui.QLabel() - self.outputLabel.setFrameStyle(QtGui.QFrame.StyledPanel | - QtGui.QFrame.Sunken) + self.outputLabel = QtWidgets.QLabel() + self.outputLabel.setFrameStyle(QtWidgets.QFrame.StyledPanel | + QtWidgets.QFrame.Sunken) self.outputLabel.setStyleSheet("QLabel{background-color:white;}") #Group boxes - graphsBox = QtGui.QGroupBox("Visualized results") - textsBox = QtGui.QGroupBox("Model parameters") - tableBox = QtGui.QGroupBox("Tabulated results") + graphsBox = QtWidgets.QGroupBox("Visualized results") + textsBox = QtWidgets.QGroupBox("Model parameters") + tableBox = QtWidgets.QGroupBox("Tabulated results") #For textbox - textlayout = QtGui.QHBoxLayout() + textlayout = QtWidgets.QHBoxLayout() textlayout.addWidget(self.outputLabel) - tableslayout = QtGui.QVBoxLayout() + tableslayout = QtWidgets.QVBoxLayout() tableslayout.addWidget(self.tableview) tableBox.setLayout(tableslayout) - visualayout = QtGui.QVBoxLayout() + visualayout = QtWidgets.QVBoxLayout() visualayout.addWidget(self.plotTabWidget) graphsBox.setLayout(visualayout) - self.layout = QtGui.QHBoxLayout() + self.layout = QtWidgets.QHBoxLayout() self.layout.addWidget(graphsBox) - textntablelayout = QtGui.QVBoxLayout() + textntablelayout = QtWidgets.QVBoxLayout() textsBox.setLayout(textlayout) textntablelayout.addWidget(textsBox) textntablelayout.addWidget(tableBox) @@ -495,26 +496,26 @@ def make_shell_widget(self): """ #Widgets for plot of shells self.graph = MatplotlibWidget(self.createTable, self, 'model') - self.graph_label = QtGui.QLabel('Select Property:') - self.graph_button = QtGui.QToolButton() + self.graph_label = QtWidgets.QLabel('Select Property:') + self.graph_button = QtWidgets.QToolButton() self.graph_button.setText('Rad. temp') - self.graph_button.setPopupMode(QtGui.QToolButton.MenuButtonPopup) - self.graph_button.setMenu(QtGui.QMenu(self.graph_button)) + self.graph_button.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup) + self.graph_button.setMenu(QtWidgets.QMenu(self.graph_button)) self.graph_button.menu().addAction('Rad. temp').triggered.connect( self.change_graph_to_t_rads) self.graph_button.menu().addAction('Ws').triggered.connect( self.change_graph_to_ws) #Layouts: bottom up - self.graph_subsublayout = QtGui.QHBoxLayout() + self.graph_subsublayout = QtWidgets.QHBoxLayout() self.graph_subsublayout.addWidget(self.graph_label) self.graph_subsublayout.addWidget(self.graph_button) - self.graph_sublayout = QtGui.QVBoxLayout() + self.graph_sublayout = QtWidgets.QVBoxLayout() self.graph_sublayout.addLayout(self.graph_subsublayout) self.graph_sublayout.addWidget(self.graph) - containerWidget = QtGui.QWidget() + containerWidget = QtWidgets.QWidget() containerWidget.setLayout(self.graph_sublayout) return containerWidget @@ -524,33 +525,33 @@ def make_spectrum_widget(self): """ self.spectrum = MatplotlibWidget(self.createTable, self) - self.spectrum_label = QtGui.QLabel('Select Spectrum:') - self.spectrum_button = QtGui.QToolButton() + self.spectrum_label = QtWidgets.QLabel('Select Spectrum:') + self.spectrum_button = QtWidgets.QToolButton() self.spectrum_button.setText('spec_flux_angstrom') - self.spectrum_button.setPopupMode(QtGui.QToolButton.MenuButtonPopup) - self.spectrum_button.setMenu(QtGui.QMenu(self.spectrum_button)) + self.spectrum_button.setPopupMode(QtWidgets.QToolButton.MenuButtonPopup) + self.spectrum_button.setMenu(QtWidgets.QMenu(self.spectrum_button)) self.spectrum_button.menu().addAction('spec_flux_angstrom' ).triggered.connect(self.change_spectrum_to_spec_flux_angstrom) self.spectrum_button.menu().addAction('spec_virtual_flux_angstrom' ).triggered.connect(self.change_spectrum_to_spec_virtual_flux_angstrom) - self.spectrum_span_button = QtGui.QPushButton('Show Wavelength Range') + self.spectrum_span_button = QtWidgets.QPushButton('Show Wavelength Range') self.spectrum_span_button.clicked.connect(self.spectrum.show_span) - self.spectrum_line_info_button = QtGui.QPushButton('Show Line Info') + self.spectrum_line_info_button = QtWidgets.QPushButton('Show Line Info') self.spectrum_line_info_button.hide() self.spectrum_line_info_button.clicked.connect(self.spectrum.show_line_info) - self.spectrum_subsublayout = QtGui.QHBoxLayout() + self.spectrum_subsublayout = QtWidgets.QHBoxLayout() self.spectrum_subsublayout.addWidget(self.spectrum_span_button) self.spectrum_subsublayout.addWidget(self.spectrum_label) self.spectrum_subsublayout.addWidget(self.spectrum_button) - self.spectrum_sublayout = QtGui.QVBoxLayout() + self.spectrum_sublayout = QtWidgets.QVBoxLayout() self.spectrum_sublayout.addLayout(self.spectrum_subsublayout) self.spectrum_sublayout.addWidget(self.spectrum_line_info_button) self.spectrum_sublayout.addWidget(self.spectrum) self.spectrum_sublayout.addWidget(self.spectrum.toolbar) - containerWidget = QtGui.QWidget() + containerWidget = QtWidgets.QWidget() containerWidget.setLayout(self.spectrum_sublayout) return containerWidget @@ -715,7 +716,7 @@ def on_header_double_clicked(self, index): """Callback to get counts for different Z from table.""" self.shell_info[index] = ShellInfo(index, self.createTable, self) -class ShellInfo(QtGui.QDialog): +class ShellInfo(QtWidgets.QDialog): """Dialog to display Shell abundances.""" def __init__(self, index, tablecreator, parent=None): @@ -727,12 +728,11 @@ def __init__(self, index, tablecreator, parent=None): self.shell_index = index self.setGeometry(400, 150, 200, 400) self.setWindowTitle('Shell %d Abundances' % (self.shell_index + 1)) - self.atomstable = QtGui.QTableView() - self.ionstable = QtGui.QTableView() - self.levelstable = QtGui.QTableView() - self.atomstable.connect(self.atomstable.verticalHeader(), - QtCore.SIGNAL('sectionClicked(int)'), - self.on_atom_header_double_clicked) + self.atomstable = QtWidgets.QTableView() + self.ionstable = QtWidgets.QTableView() + self.levelstable = QtWidgets.QTableView() + self.sectionClicked=QtCore.Signal(int) + self.atomstable.verticalHeader().sectionClicked.connect(self.on_atom_header_double_clicked) self.table1_data = self.parent.model.plasma.abundance[ @@ -745,7 +745,7 @@ def __init__(self, index, tablecreator, parent=None): self.atomsdata.add_data(self.table1_data.values.tolist()) self.atomstable.setModel(self.atomsdata) - self.layout = QtGui.QHBoxLayout() + self.layout = QtWidgets.QHBoxLayout() self.layout.addWidget(self.atomstable) self.layout.addWidget(self.ionstable) self.layout.addWidget(self.levelstable) @@ -773,8 +773,8 @@ def on_atom_header_double_clicked(self, index): self.ionsdata.add_data(normalized_data) self.ionstable.setModel(self.ionsdata) - self.ionstable.connect(self.ionstable.verticalHeader(), QtCore.SIGNAL( - 'sectionClicked(int)'),self.on_ion_header_double_clicked) + self.sectionClicked=QtCore.Signal(int) + self.ionstable.verticalHeader().sectionClicked.connect(self.on_ion_header_double_clicked) self.levelstable.hide() self.ionstable.setColumnWidth(0, 120) self.ionstable.show() @@ -814,7 +814,7 @@ def update_tables(self): self.setGeometry(400, 150, 200, 400) self.show() -class LineInfo(QtGui.QDialog): +class LineInfo(QtWidgets.QDialog): """Dialog to show the line info used by spectrum widget.""" def __init__(self, parent, wavelength_start, wavelength_end, tablecreator): """Create the dialog and set data in it from the model. @@ -825,7 +825,7 @@ def __init__(self, parent, wavelength_start, wavelength_end, tablecreator): self.setGeometry(180 + len(self.parent.line_info) * 20, 150, 250, 400) self.setWindowTitle('Line Interaction: %.2f - %.2f (A) ' % ( wavelength_start, wavelength_end,)) - self.layout = QtGui.QVBoxLayout() + self.layout = QtWidgets.QVBoxLayout() packet_nu_line_interaction = analysis.LastLineInteraction.from_model( self.parent.model) packet_nu_line_interaction.packet_filter_mode = 'packet_nu' @@ -950,7 +950,7 @@ def on_atom_clicked2(self, index): self.setGeometry(180 + len(self.parent.line_info) * 20, 150, 750, 400) self.show() -class LineInteractionTables(QtGui.QWidget): +class LineInteractionTables(QtWidgets.QWidget): """Widget to hold the line interaction tables used by LineInfo which in turn is used by spectrum widget. @@ -961,10 +961,10 @@ def __init__(self, line_interaction_analysis, atom_data, lines_data, description """Create the widget and set data.""" super(LineInteractionTables, self).__init__() self.createTable = tablecreator - self.text_description = QtGui.QLabel(str(description)) - self.species_table = QtGui.QTableView() - self.transitions_table = QtGui.QTableView() - self.layout = QtGui.QHBoxLayout() + self.text_description = QtWidgets.QLabel(str(description)) + self.species_table = QtWidgets.QTableView() + self.transitions_table = QtWidgets.QTableView() + self.layout = QtWidgets.QHBoxLayout() self.line_interaction_analysis = line_interaction_analysis self.atom_data = atom_data self.lines_data = lines_data.reset_index().set_index('line_id') @@ -985,8 +985,8 @@ def __init__(self, line_interaction_analysis, atom_data, lines_data, description line_interaction_species_group.wavelength.count() self.layout.addWidget(self.text_description) self.layout.addWidget(self.species_table) - self.species_table.connect(self.species_table.verticalHeader(), - QtCore.SIGNAL('sectionClicked(int)'), self.on_species_clicked) + self.sectionClicked=QtCore.Signal(int) + self.species_table.verticalHeader().sectionClicked.connect(self.on_species_clicked) self.layout.addWidget(self.transitions_table) self.setLayout(self.layout) @@ -1034,7 +1034,7 @@ def on_species_clicked(self, index): last_line_in_model.add_data(last_line_count) self.transitions_table.setModel(last_line_in_model) -class Tardis(QtGui.QMainWindow): +class Tardis(QtWidgets.QMainWindow): """Create the top level window for the GUI and wait for call to display data. @@ -1076,7 +1076,7 @@ def __init__(self, tablemodel, config=None, atom_data=None, parent=None): # except ImportError: # app.exec_() - QtGui.QMainWindow.__init__(self, parent) + QtWidgets.QMainWindow.__init__(self, parent) #path to icons folder self.path = os.path.join(tardis.__path__[0],'gui','images') @@ -1089,22 +1089,22 @@ def __init__(self, tablemodel, config=None, atom_data=None, parent=None): #Statusbar statusbr = self.statusBar() lblstr = 'Calculation did not converge' - self.successLabel = QtGui.QLabel(lblstr) - self.successLabel.setFrameStyle(QtGui.QFrame.StyledPanel | - QtGui.QFrame.Sunken) + self.successLabel = QtWidgets.QLabel(lblstr) + self.successLabel.setFrameStyle(QtWidgets.QFrame.StyledPanel | + QtWidgets.QFrame.Sunken) statusbr.addPermanentWidget(self.successLabel) - self.modeLabel = QtGui.QLabel('Passive mode') + self.modeLabel = QtWidgets.QLabel('Passive mode') statusbr.addPermanentWidget(self.modeLabel) statusbr.showMessage(self.mode, 5000) statusbr.showMessage("Ready", 5000) #Actions - quitAction = QtGui.QAction("&Quit", self) + quitAction = QtWidgets.QAction("&Quit", self) quitAction.setIcon(QtGui.QIcon(os.path.join(self.path, 'closeicon.png'))) quitAction.triggered.connect(self.close) - self.viewMdv = QtGui.QAction("View &Model", self) + self.viewMdv = QtWidgets.QAction("View &Model", self) self.viewMdv.setIcon(QtGui.QIcon(os.path.join(self.path, 'mdvswitch.png'))) self.viewMdv.setCheckable(True) @@ -1112,7 +1112,7 @@ def __init__(self, tablemodel, config=None, atom_data=None, parent=None): self.viewMdv.setEnabled(False) self.viewMdv.triggered.connect(self.switch_to_mdv) - self.viewForm = QtGui.QAction("&Edit Model", self) + self.viewForm = QtWidgets.QAction("&Edit Model", self) self.viewForm.setIcon(QtGui.QIcon(os.path.join(self.path, 'formswitch.png'))) self.viewForm.setCheckable(True) @@ -1138,7 +1138,7 @@ def __init__(self, tablemodel, config=None, atom_data=None, parent=None): viewToolbar.addAction(self.viewForm) #Central Widget - self.stackedWidget = QtGui.QStackedWidget() + self.stackedWidget = QtWidgets.QStackedWidget() self.mdv = ModelViewer(tablemodel) self.stackedWidget.addWidget(self.mdv) diff --git a/tardis_env3.yml b/tardis_env3.yml index 275cd1aa364..8f0539b7893 100644 --- a/tardis_env3.yml +++ b/tardis_env3.yml @@ -35,6 +35,7 @@ dependencies: - matplotlib - graphviz - pygraphviz + - pyside2 # Documentation - sphinx From 883c60501ef3fa47034e551ff68933fb39c1a5c2 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 30 Apr 2019 22:31:58 -0400 Subject: [PATCH 151/467] commenting out the montecarlo part --- tardis/montecarlo/base.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tardis/montecarlo/base.py b/tardis/montecarlo/base.py index f11d39c5ae8..23db0f435a2 100644 --- a/tardis/montecarlo/base.py +++ b/tardis/montecarlo/base.py @@ -220,11 +220,11 @@ def run(self, model, plasma, no_of_packets, self._initialize_packets(model.t_inner.value, no_of_packets) - montecarlo.montecarlo_radial1d( - model, plasma, self, - virtual_packet_flag=no_of_virtual_packets, - nthreads=nthreads, - last_run=last_run) + #montecarlo.montecarlo_radial1d( + # model, plasma, self, + # virtual_packet_flag=no_of_virtual_packets, + # nthreads=nthreads, + # last_run=last_run) # Workaround so that j_blue_estimator is in the right ordering # They are written as an array of dimension (no_of_shells, no_of_lines) # but python expects (no_of_lines, no_of_shells) From 059cbffc2d0d5f407b2276e2997cc8d718b86dc7 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 1 May 2019 11:47:46 -0400 Subject: [PATCH 152/467] Add new numba stuff Co-authored-by: Christian Vogl Co-authored-by: Alice Harpole Co-authored-by: Yssavo Camacho-Neves --- .../montecarlo/montecarlo_numba/__init__.py | 0 .../montecarlo_numba/compute_distance.py | 256 ++++++++++++++++++ tardis/montecarlo/montecarlo_numba/rpacket.py | 27 ++ .../montecarlo_numba/storage_model.py | 172 ++++++++++++ 4 files changed, 455 insertions(+) create mode 100644 tardis/montecarlo/montecarlo_numba/__init__.py create mode 100644 tardis/montecarlo/montecarlo_numba/compute_distance.py create mode 100644 tardis/montecarlo/montecarlo_numba/rpacket.py create mode 100644 tardis/montecarlo/montecarlo_numba/storage_model.py diff --git a/tardis/montecarlo/montecarlo_numba/__init__.py b/tardis/montecarlo/montecarlo_numba/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tardis/montecarlo/montecarlo_numba/compute_distance.py b/tardis/montecarlo/montecarlo_numba/compute_distance.py new file mode 100644 index 00000000000..fc7ed21e231 --- /dev/null +++ b/tardis/montecarlo/montecarlo_numba/compute_distance.py @@ -0,0 +1,256 @@ +from numba import jitclass, njit +import numpy as np +import scipy.constants + +@njit +def compute_distance2boundary(rpacket, storage): + r = rpacket_get_r(packet) + mu = rpacket_get_mu(packet) + r_outer = storage.r_outer[rpacket_get_current_shell_id (packet)] + r_inner = storage.r_inner[rpacket_get_current_shell_id (packet)] + + distance = 0.0 + + if (mu > 0.0): + # direction outward + rpacket_set_next_shell_id(packet, 1) + distance = np.sqrt(r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu) + else: + # going inward + check = r_inner * r_inner + (r * r * (mu * my - 1.0)) + + if (check >= 0.0): + # hit inner boundary + rpacket_set_next_shell_id(packet, -1) + distance = -r * mu - np.sqrt(check) + else: + # miss inner boundary + rpacket_set_next_shell_id(packet, 1) + distance = np.sqrt(r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu) + + rpacket_set_d_boundary(packet, distance) + + + +void +compute_distance2boundary (rpacket_t * packet, const storage_model_t * storage) +{ + double r = rpacket_get_r (packet); + double mu = rpacket_get_mu (packet); + double r_outer = storage->r_outer[rpacket_get_current_shell_id (packet)]; + double r_inner = storage->r_inner[rpacket_get_current_shell_id (packet)]; + double check, distance; + if (mu > 0.0) + { // direction outward + rpacket_set_next_shell_id (packet, 1); + distance = sqrt (r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu); + } + else + { // going inward + if ( (check = r_inner * r_inner + (r * r * (mu * mu - 1.0)) )>= 0.0) + { // hit inner boundary + rpacket_set_next_shell_id (packet, -1); + distance = - r * mu - sqrt (check); + } + else + { // miss inner boundary + rpacket_set_next_shell_id (packet, 1); + distance = sqrt (r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu); + } + } + rpacket_set_d_boundary (packet, distance); +} + +tardis_error_t + + +@njit +def compute_distance2line(rpacket, storage): + if not rpacket_get_last_line(packet): + r = rpacket_get_r(packet) + mu = rpacket_get_mu(packet) + nu = rpacket_get_nu(packet) + nu_line = rpacket_get_nu_line(packet) + + distance = 0 + nu_diff = 0 + + ct = storage.time_explosion * c + doppler_factor = rpacket_doppler_factor(packet, storage) + comov_nu = nu * doppler_factor + + if (nu_diff = comov_nu - nu_line) >= 0: + if not storage.full_relativity: + distance = (nu_diff/nu) * ct + else: + double nu_r = nu_line / nu + distance = - mu * r + (ct - nu_r * nu_r * np.sqrt(ct * ct - (1 + r * r * (1 - mu * mu) * (1 + pow(nu_r, -2))))) / (1 + nu_r * nu_r) + rpacket_set_d_line (packet, distance) + return TARDIS_ERROR_OK + else: + if not storage.full_relativity: + distance = (nu_diff / nu) * ct + else: + double nu_r = nu_line / nu + +compute_distance2line (rpacket_t * packet, const storage_model_t * storage) +{ + if (!rpacket_get_last_line (packet)) + { + double r = rpacket_get_r (packet); + double mu = rpacket_get_mu (packet); + double nu = rpacket_get_nu (packet); + double nu_line = rpacket_get_nu_line (packet); + double distance, nu_diff; + double ct = storage->time_explosion * c; + double doppler_factor = rpacket_doppler_factor (packet, storage); + double comov_nu = nu * doppler_factor; + if ( (nu_diff = comov_nu - nu_line) >= 0) + { + if (!storage->full_relativity) + { + distance = (nu_diff / nu) * ct; + } + else + { + double nu_r = nu_line / nu; + distance = - mu * r + (ct - nu_r * nu_r * sqrt(ct * ct - + (1 + r * r * (1 - mu * mu) * (1 + pow(nu_r, -2))))) / (1 + nu_r * nu_r); + } + rpacket_set_d_line (packet, distance); + return TARDIS_ERROR_OK; + } + else + { + if (rpacket_get_next_line_id (packet) == storage->no_of_lines - 1) + { + fprintf (stderr, "last_line = %f\n", + storage-> + line_list_nu[rpacket_get_next_line_id (packet) - 1]); + fprintf (stderr, "Last line in line list reached!"); + } + else if (rpacket_get_next_line_id (packet) == 0) + { + fprintf (stderr, "First line in line list!"); + fprintf (stderr, "next_line = %f\n", + storage-> + line_list_nu[rpacket_get_next_line_id (packet) + 1]); + } + else + { + fprintf (stderr, "last_line = %f\n", + storage-> + line_list_nu[rpacket_get_next_line_id (packet) - 1]); + fprintf (stderr, "next_line = %f\n", + storage-> + line_list_nu[rpacket_get_next_line_id (packet) + 1]); + } + fprintf (stderr, "ERROR: Comoving nu less than nu_line!\n"); + fprintf (stderr, "comov_nu = %f\n", comov_nu); + fprintf (stderr, "nu_line = %f\n", nu_line); + fprintf (stderr, "(comov_nu - nu_line) / nu_line = %f\n", + (comov_nu - nu_line) / nu_line); + fprintf (stderr, "r = %f\n", r); + fprintf (stderr, "mu = %f\n", mu); + fprintf (stderr, "nu = %f\n", nu); + fprintf (stderr, "doppler_factor = %f\n", doppler_factor); + fprintf (stderr, "cur_zone_id = %" PRIi64 "\n", rpacket_get_current_shell_id (packet)); + return TARDIS_ERROR_COMOV_NU_LESS_THAN_NU_LINE; + } + } + else + { + rpacket_set_d_line (packet, MISS_DISTANCE); + return TARDIS_ERROR_OK; + } +} + +@ngit +def compute_distance2continuum(packet, storage): + chi_continuum = 0.0 + d_continuum = 0.0 + + chi_electron = storage.electron_densities[rpacket_get_current_shell_id(packet)] * storage.sigma_thomson + + if (storange.full_relativity): + chi_electron *= rpacket_doppler_factor(packet, storage) + + if (storage.cont_status == CONTINUUM_ON): + if (packet.compute_chi_bf): + calculate_chi_bf(packet, storage) + calculate_chi_ff(packet, storage) + else: + packet.compute_chi_bf = True + + chi_continuum = rpacket_get_chi_boundfree(packet) + rpacket_get_chi_freefree(packet) + chi_electron + d_continuum = rpacket_get_tau_event(packet) / chi_continuum + else: + chi_continuum = chi_electron + d_continuum = storage.inverse_electron_densities[rpacket_get_current_shell_id(packet)] * \ + storage.inverse_sigma_thomson * rpacket_get_tau_event(packet) + + if (rpacket_get_virtual_packet(packet) > 0): + # set all continuum distances to MISS_DISTANCE in case of a virtual_packet + d_continuum = MISS_DISTANCE + packet.compute_chi_bf = False + else: + rpacket_set_chi_electron(packet, chi_continuum) + + rpacket_set_chi_continuum(packet, chi_continuum) + rpacket_set_d_continuum(packet, d_continuum) + + +void +compute_distance2continuum (rpacket_t * packet, storage_model_t * storage) +{ + double chi_continuum, d_continuum; + double chi_electron = storage->electron_densities[rpacket_get_current_shell_id(packet)] * + storage->sigma_thomson; + if (storage->full_relativity) + { + chi_electron *= rpacket_doppler_factor (packet, storage); + } + + if (storage->cont_status == CONTINUUM_ON) + { + if (packet->compute_chi_bf) + { + calculate_chi_bf (packet, storage); + calculate_chi_ff (packet, storage); + } + else + { + packet->compute_chi_bf=true; + } + chi_continuum = rpacket_get_chi_boundfree (packet) + rpacket_get_chi_freefree (packet) + chi_electron; + d_continuum = rpacket_get_tau_event (packet) / chi_continuum; + } + else + { + chi_continuum = chi_electron; + d_continuum = storage->inverse_electron_densities[rpacket_get_current_shell_id (packet)] * + storage->inverse_sigma_thomson * rpacket_get_tau_event (packet); + } + + if (rpacket_get_virtual_packet(packet) > 0) + { + //Set all continuum distances to MISS_DISTANCE in case of an virtual_packet + d_continuum = MISS_DISTANCE; + packet->compute_chi_bf = false; + } + else + { + + // fprintf(stderr, "--------\n"); + // fprintf(stderr, "nu = %e \n", rpacket_get_nu(packet)); + // fprintf(stderr, "chi_electron = %e\n", chi_electron); + // fprintf(stderr, "chi_boundfree = %e\n", calculate_chi_bf(packet, storage)); + // fprintf(stderr, "chi_line = %e \n", rpacket_get_tau_event(packet) / rpacket_get_d_line(packet)); + // fprintf(stderr, "--------\n"); + + //rpacket_set_chi_freefree(packet, chi_freefree); + rpacket_set_chi_electron (packet, chi_electron); + } + rpacket_set_chi_continuum (packet, chi_continuum); + rpacket_set_d_continuum (packet, d_continuum); +} \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py new file mode 100644 index 00000000000..e5565475150 --- /dev/null +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -0,0 +1,27 @@ +from numba import int64, float64 +from numba import jitclass, njit + + +rpacket_spec = [ + ('r', float64), + ('mu', float64), + ('tau_event', float64) + ('nu_line', float64) + ('d_line', float64) # Distance to electron event. + ('d_electron', float64) #/**< Distance to line event. */ + ('d_boundary', float64) # distance to boundary + ('shell_id', int64) +] + +@jitclass(rpacket_rspec) +class RPacket(object): + def __init__(self, r, mu, tau_event): + self.r = r + self.mu = mu + self.nu = nu + self.tau_event = tau_event + self.nu_line = nu_line + + @staticmethod + def get_tau_event(): + return -np.log(np.random.random()) \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/storage_model.py b/tardis/montecarlo/montecarlo_numba/storage_model.py new file mode 100644 index 00000000000..6ceef7694ad --- /dev/null +++ b/tardis/montecarlo/montecarlo_numba/storage_model.py @@ -0,0 +1,172 @@ +from numba import int64, float64 +storage_model_spec = [ + ('*packet_nus', double), + ('*packet_mus', double), + ('*packet_energies', double), + ('*output_nus', double), + ('*output_energies', double), + ('*last_interaction_in_nu', double), + ('*last_line_interaction_in_id', int64_t), + ('*last_line_interaction_out_id', int64_t), + ('*last_line_interaction_shell_id', int64_t), + ('*last_interaction_type', int64_t), + ('*last_interaction_out_type', int64_t), + ('no_of_packets', int64_t), + ('no_of_shells', int64_t), + ('no_of_shells_i', int64_t), + ('*r_inner', double), + ('*r_outer', double), + ('*r_inner_i', double), + ('*r_outer_i', double), + ('*v_inner', double), + ('time_explosion', double), + ('inverse_time_explosion', double), + ('*electron_densities', double), + ('*electron_densities_i', double), + ('*inverse_electron_densities', double), + ('*line_list_nu', double), + ('*continuum_list_nu', double), + ('*line_lists_tau_sobolevs', double), + ('*line_lists_tau_sobolevs_i', double), + ('line_lists_tau_sobolevs_nd', int64_t), + ('*line_lists_j_blues', double), + ('line_lists_j_blues_nd', int64_t), + ('*line_lists_Edotlu', double), + ('no_of_lines', int64_t), + ('no_of_edges', int64_t), + ('line_interaction_id', int64_t), + ('*transition_probabilities', double), + ('transition_probabilities_nd', int64_t), + ('*line2macro_level_upper', int64_t), + ('*macro_block_references', int64_t), + ('*transition_type', int64_t), + ('*destination_level_id', int64_t), + ('*transition_line_id', int64_t), + ('*js', double), + ('*nubars', double), + ('spectrum_start_nu', double), + ('spectrum_delta_nu', double), + ('spectrum_end_nu', double), + ('spectrum_virt_start_nu', double), + ('spectrum_virt_end_nu', double), + ('*spectrum_virt_nu', double), + ('sigma_thomson', double), + ('inverse_sigma_thomson', double), + ('inner_boundary_albedo', double), + ('reflective_inner_boundary', int64_t), + ('current_packet_id', int64_t), + photo_xsect_1level **photo_xsect; + ('*chi_ff_factor', double), + ('*t_electrons', double), + ('*l_pop', double), + ('*l_pop_r', double), + ContinuumProcessesStatus cont_status; + bound_free_treatment bf_treatment; + ('*virt_packet_nus', double), + ('*virt_packet_energies', double), + ('*virt_packet_last_interaction_in_nu', double), + ('*virt_packet_last_interaction_type', int64_t), + ('*virt_packet_last_line_interaction_in_id', int64_t), + ('*virt_packet_last_line_interaction_out_id', int64_t), + ('virt_packet_count', int64_t), + ('virt_array_size', int64_t), + ('kpacket2macro_level', int64_t), + ('*cont_edge2macro_level', int64_t), + ('*photo_ion_estimator', double), + ('*stim_recomb_estimator', double), + ('*photo_ion_estimator_statistics', int64_t), + ('*bf_heating_estimator', double), + ('*ff_heating_estimator', double), + ('*stim_recomb_cooling_estimator', double), + ('full_relativity', int), + ('survival_probability', double), + ('tau_russian', double), + ('*tau_bias', double), + ('enable_biasing', int), +] +typedef struct StorageModel +{ + double *packet_nus; + double *packet_mus; + double *packet_energies; + double *output_nus; + double *output_energies; + double *last_interaction_in_nu; + int64_t *last_line_interaction_in_id; + int64_t *last_line_interaction_out_id; + int64_t *last_line_interaction_shell_id; + int64_t *last_interaction_type; + int64_t *last_interaction_out_type; + int64_t no_of_packets; + int64_t no_of_shells; + int64_t no_of_shells_i; + double *r_inner; + double *r_outer; + double *r_inner_i; + double *r_outer_i; + double *v_inner; + double time_explosion; + double inverse_time_explosion; + double *electron_densities; + double *electron_densities_i; + double *inverse_electron_densities; + double *line_list_nu; + double *continuum_list_nu; + double *line_lists_tau_sobolevs; + double *line_lists_tau_sobolevs_i; + int64_t line_lists_tau_sobolevs_nd; + double *line_lists_j_blues; + int64_t line_lists_j_blues_nd; + double *line_lists_Edotlu; + int64_t no_of_lines; + int64_t no_of_edges; + int64_t line_interaction_id; + double *transition_probabilities; + int64_t transition_probabilities_nd; + int64_t *line2macro_level_upper; + int64_t *macro_block_references; + int64_t *transition_type; + int64_t *destination_level_id; + int64_t *transition_line_id; + double *js; + double *nubars; + double spectrum_start_nu; + double spectrum_delta_nu; + double spectrum_end_nu; + double spectrum_virt_start_nu; + double spectrum_virt_end_nu; + double *spectrum_virt_nu; + double sigma_thomson; + double inverse_sigma_thomson; + double inner_boundary_albedo; + int64_t reflective_inner_boundary; + int64_t current_packet_id; + photo_xsect_1level **photo_xsect; + double *chi_ff_factor; + double *t_electrons; + double *l_pop; + double *l_pop_r; + ContinuumProcessesStatus cont_status; + bound_free_treatment bf_treatment; + double *virt_packet_nus; + double *virt_packet_energies; + double *virt_packet_last_interaction_in_nu; + int64_t *virt_packet_last_interaction_type; + int64_t *virt_packet_last_line_interaction_in_id; + int64_t *virt_packet_last_line_interaction_out_id; + int64_t virt_packet_count; + int64_t virt_array_size; + int64_t kpacket2macro_level; + int64_t *cont_edge2macro_level; + double *photo_ion_estimator; + double *stim_recomb_estimator; + int64_t *photo_ion_estimator_statistics; + double *bf_heating_estimator; + double *ff_heating_estimator; + double *stim_recomb_cooling_estimator; + int full_relativity; + double survival_probability; + double tau_russian; + double *tau_bias; + int enable_biasing; +} storage_model_t; \ No newline at end of file From 532b4145384220897246315c422230857182c8c7 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 1 May 2019 14:18:07 -0400 Subject: [PATCH 153/467] add more numba conversions Co-authored-by: Christian Vogl Co-authored-by: Alice Harpole Co-authored-by: Yssavo Camacho-Neves --- .../montecarlo/montecarlo_numba/__init__.py | 1 + tardis/montecarlo/montecarlo_numba/base.py | 105 +++++ .../montecarlo_numba/compute_distance.py | 426 +++++++++--------- .../montecarlo_numba/packet_loop.py | 64 +++ .../montecarlo_numba/storage_model.py | 219 ++------- 5 files changed, 443 insertions(+), 372 deletions(-) create mode 100644 tardis/montecarlo/montecarlo_numba/base.py create mode 100644 tardis/montecarlo/montecarlo_numba/packet_loop.py diff --git a/tardis/montecarlo/montecarlo_numba/__init__.py b/tardis/montecarlo/montecarlo_numba/__init__.py index e69de29bb2d..ca0b060eaf2 100644 --- a/tardis/montecarlo/montecarlo_numba/__init__.py +++ b/tardis/montecarlo/montecarlo_numba/__init__.py @@ -0,0 +1 @@ +from tardis.montecarlo.montecarlo_numba.rpacket import RPacket \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py new file mode 100644 index 00000000000..7a336a916b7 --- /dev/null +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -0,0 +1,105 @@ + +from numba import prange, njit +from tardis.montecarlo.montecarlo_numba.rpacket import RPacket + +def montecarlo_radial1d(model, plasma, runner): + storage_model_kwargs = {'packet_nus', packet_mus, packet_energies, + output_nus, output_energies, no_of_packets, no_of_shells, + r_inner, r_outer, v_inner, time_explosion, electron_densities, line_list_nu, line_lists_tau_sobolevs, line_lists_tau_sobolevs_nd, + no_of_lines, no_of_edges, line_interaction_id, + inverse_sigma_thomson} + pass + #montecarlo.montecarlo_radial1d( + # model, plasma, self, + # virtual_packet_flag=no_of_virtual_packets, + # nthreads=nthreads, + # last_run=last_run) + # Workaround so that j_blue_estimator is in the right ordering + # They are written as an array of dimension (no_of_shells, no_of_lines) + # but python expects (no_of_lines, no_of_shells) + +@njit +def montecarlo_main_loop(storage): + for i in prange(storage.no_of_packets): + from + + +void +montecarlo_main_loop(storage_model_t * storage, int64_t virtual_packet_flag, int nthreads, unsigned long seed) +{ + int64_t finished_packets = 0; + storage->virt_packet_count = 0; +#ifdef WITH_VPACKET_LOGGING + storage->virt_packet_nus = (double *)safe_malloc(sizeof(double) * storage->no_of_packets); + storage->virt_packet_energies = (double *)safe_malloc(sizeof(double) * storage->no_of_packets); + storage->virt_packet_last_interaction_in_nu = (double *)safe_malloc(sizeof(double) * storage->no_of_packets); + storage->virt_packet_last_interaction_type = (int64_t *)safe_malloc(sizeof(int64_t) * storage->no_of_packets); + storage->virt_packet_last_line_interaction_in_id = (int64_t *)safe_malloc(sizeof(int64_t) * storage->no_of_packets); + storage->virt_packet_last_line_interaction_out_id = (int64_t *)safe_malloc(sizeof(int64_t) * storage->no_of_packets); + storage->virt_array_size = storage->no_of_packets; +#endif // WITH_VPACKET_LOGGING +#ifdef WITHOPENMP + omp_set_dynamic(0); + if (nthreads > 0) + { + omp_set_num_threads(nthreads); + } + +#pragma omp parallel firstprivate(finished_packets) + { + rk_state mt_state; + rk_seed (seed + omp_get_thread_num(), &mt_state); +#pragma omp master + { + fprintf(stderr, "Running with OpenMP - %d threads\n", omp_get_num_threads()); + print_progress(0, storage->no_of_packets); + } +#else + rk_state mt_state; + rk_seed (seed, &mt_state); + fprintf(stderr, "Running without OpenMP\n"); +#endif + int64_t chi_bf_tmp_size = (storage->cont_status) ? storage->no_of_edges : 0; + double *chi_bf_tmp_partial = safe_malloc(sizeof(double) * chi_bf_tmp_size); + + #pragma omp for + for (int64_t packet_index = 0; packet_index < storage->no_of_packets; ++packet_index) + { + int reabsorbed = 0; + rpacket_t packet; + rpacket_set_id(&packet, packet_index); + rpacket_init(&packet, storage, packet_index, virtual_packet_flag, chi_bf_tmp_partial); + if (virtual_packet_flag > 0) + { + reabsorbed = montecarlo_one_packet(storage, &packet, -1, &mt_state); + } + reabsorbed = montecarlo_one_packet(storage, &packet, 0, &mt_state); + storage->output_nus[packet_index] = rpacket_get_nu(&packet); + if (reabsorbed == 1) + { + storage->output_energies[packet_index] = -rpacket_get_energy(&packet); + } + else + { + storage->output_energies[packet_index] = rpacket_get_energy(&packet); + } + if ( ++finished_packets%100 == 0 ) + { +#ifdef WITHOPENMP + // WARNING: This only works with a static sheduler and gives an approximation of progress. + // The alternative would be to have a shared variable but that could potentially decrease performance when using many threads. + if (omp_get_thread_num() == 0 ) + print_progress(finished_packets * omp_get_num_threads(), storage->no_of_packets); +#else + print_progress(finished_packets, storage->no_of_packets); +#endif + } + } + free(chi_bf_tmp_partial); +#ifdef WITHOPENMP + } +#endif + print_progress(storage->no_of_packets, storage->no_of_packets); + fprintf(stderr,"\n"); +} + diff --git a/tardis/montecarlo/montecarlo_numba/compute_distance.py b/tardis/montecarlo/montecarlo_numba/compute_distance.py index fc7ed21e231..d39451e913b 100644 --- a/tardis/montecarlo/montecarlo_numba/compute_distance.py +++ b/tardis/montecarlo/montecarlo_numba/compute_distance.py @@ -1,19 +1,19 @@ from numba import jitclass, njit import numpy as np -import scipy.constants +from astropy import constants as const -@njit -def compute_distance2boundary(rpacket, storage): - r = rpacket_get_r(packet) - mu = rpacket_get_mu(packet) - r_outer = storage.r_outer[rpacket_get_current_shell_id (packet)] - r_inner = storage.r_inner[rpacket_get_current_shell_id (packet)] +C_SPEED_OF_LIGHT = const.c.to('cm/s').value - distance = 0.0 +@njit +def compute_distance2boundary(packet, storage): + r = packet.r + mu = packet.mu + r_outer = storage.r_outer[packet.shell_id] + r_inner = storage.r_inner[packet.shell_id] if (mu > 0.0): # direction outward - rpacket_set_next_shell_id(packet, 1) + packet.shell_id += 1 distance = np.sqrt(r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu) else: # going inward @@ -21,236 +21,256 @@ def compute_distance2boundary(rpacket, storage): if (check >= 0.0): # hit inner boundary - rpacket_set_next_shell_id(packet, -1) + packet.shell_id -= 1 distance = -r * mu - np.sqrt(check) else: # miss inner boundary - rpacket_set_next_shell_id(packet, 1) + packet.shell_id += 1 distance = np.sqrt(r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu) - rpacket_set_d_boundary(packet, distance) + packet.d_boundary = distance -void -compute_distance2boundary (rpacket_t * packet, const storage_model_t * storage) -{ - double r = rpacket_get_r (packet); - double mu = rpacket_get_mu (packet); - double r_outer = storage->r_outer[rpacket_get_current_shell_id (packet)]; - double r_inner = storage->r_inner[rpacket_get_current_shell_id (packet)]; - double check, distance; - if (mu > 0.0) - { // direction outward - rpacket_set_next_shell_id (packet, 1); - distance = sqrt (r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu); - } - else - { // going inward - if ( (check = r_inner * r_inner + (r * r * (mu * mu - 1.0)) )>= 0.0) - { // hit inner boundary - rpacket_set_next_shell_id (packet, -1); - distance = - r * mu - sqrt (check); - } - else - { // miss inner boundary - rpacket_set_next_shell_id (packet, 1); - distance = sqrt (r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu); - } - } - rpacket_set_d_boundary (packet, distance); -} +# void +# compute_distance2boundary (rpacket_t * packet, const storage_model_t * storage) +# { +# double r = rpacket_get_r (packet); +# double mu = rpacket_get_mu (packet); +# double r_outer = storage->r_outer[rpacket_get_current_shell_id (packet)]; +# double r_inner = storage->r_inner[rpacket_get_current_shell_id (packet)]; +# double check, distance; +# if (mu > 0.0) +# { // direction outward +# rpacket_set_next_shell_id (packet, 1); +# distance = sqrt (r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu); +# } +# else +# { // going inward +# if ( (check = r_inner * r_inner + (r * r * (mu * mu - 1.0)) )>= 0.0) +# { // hit inner boundary +# rpacket_set_next_shell_id (packet, -1); +# distance = - r * mu - sqrt (check); +# } +# else +# { // miss inner boundary +# rpacket_set_next_shell_id (packet, 1); +# distance = sqrt (r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu); +# } +# } +# rpacket_set_d_boundary (packet, distance); +# } -tardis_error_t +# tardis_error_t @njit -def compute_distance2line(rpacket, storage): +def compute_distance2line(rpacket, storage, c=C_SPEED_OF_LIGHT): if not rpacket_get_last_line(packet): - r = rpacket_get_r(packet) - mu = rpacket_get_mu(packet) - nu = rpacket_get_nu(packet) + r = rpacket.r + mu = rpacket.mu + nu = rpacket.nu nu_line = rpacket_get_nu_line(packet) - distance = 0 - nu_diff = 0 + distance = 0.0 + nu_diff = 0.0 ct = storage.time_explosion * c doppler_factor = rpacket_doppler_factor(packet, storage) comov_nu = nu * doppler_factor - if (nu_diff = comov_nu - nu_line) >= 0: + nu_diff = comov_nu - nu_line + if nu_diff >= 0: if not storage.full_relativity: distance = (nu_diff/nu) * ct else: - double nu_r = nu_line / nu - distance = - mu * r + (ct - nu_r * nu_r * np.sqrt(ct * ct - (1 + r * r * (1 - mu * mu) * (1 + pow(nu_r, -2))))) / (1 + nu_r * nu_r) + nu_r = nu_line / nu + distance = - mu * r + (ct - nu_r * nu_r * + np.sqrt(ct * ct - (1 + r * r * (1 - mu * mu) * (1 + pow(nu_r, -2))))) / (1 + nu_r * nu_r) rpacket_set_d_line (packet, distance) return TARDIS_ERROR_OK else: - if not storage.full_relativity: - distance = (nu_diff / nu) * ct + if rpacket_get_next_line_id(packet) == storage.no_of_lines - 1: + print("last_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) - 1])) + print("Last line in line list reached!") + else if rpacket_get_next_line_id(packet) == 0: + print("First line in line list!") + print("next_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) + 1])) else: - double nu_r = nu_line / nu + print("last_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) - 1])) + print("next_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) + 1])) + print("ERROR: Comoving nu less than nu_line!") + print("comov_nu = {}".format(comov_nu)) + print("nu_line = {}".format(nu_line)) + print("(comov_nu - nu_line) / nu_line = {}".format(comov_nu-nu_line/nu_line)) + print("r = {}".format(r)) + print("mu = {}".format(mu)) + print("nu = {}".format(nu)) + print("doppler_factor = {}".format(doppler_factor)) + print("cur_zone_id = {}".format(rpacket_get_current_shell_id(packet)) + return TARDIS_ERROR_COMOV_NU_LESS_THAN_NU_LINE + else: + rpacket_set_d_line(packet, MISS_DISTANCE) + return TARDIS_ERROR_OK -compute_distance2line (rpacket_t * packet, const storage_model_t * storage) -{ - if (!rpacket_get_last_line (packet)) - { - double r = rpacket_get_r (packet); - double mu = rpacket_get_mu (packet); - double nu = rpacket_get_nu (packet); - double nu_line = rpacket_get_nu_line (packet); - double distance, nu_diff; - double ct = storage->time_explosion * c; - double doppler_factor = rpacket_doppler_factor (packet, storage); - double comov_nu = nu * doppler_factor; - if ( (nu_diff = comov_nu - nu_line) >= 0) - { - if (!storage->full_relativity) - { - distance = (nu_diff / nu) * ct; - } - else - { - double nu_r = nu_line / nu; - distance = - mu * r + (ct - nu_r * nu_r * sqrt(ct * ct - - (1 + r * r * (1 - mu * mu) * (1 + pow(nu_r, -2))))) / (1 + nu_r * nu_r); - } - rpacket_set_d_line (packet, distance); - return TARDIS_ERROR_OK; - } - else - { - if (rpacket_get_next_line_id (packet) == storage->no_of_lines - 1) - { - fprintf (stderr, "last_line = %f\n", - storage-> - line_list_nu[rpacket_get_next_line_id (packet) - 1]); - fprintf (stderr, "Last line in line list reached!"); - } - else if (rpacket_get_next_line_id (packet) == 0) - { - fprintf (stderr, "First line in line list!"); - fprintf (stderr, "next_line = %f\n", - storage-> - line_list_nu[rpacket_get_next_line_id (packet) + 1]); - } - else - { - fprintf (stderr, "last_line = %f\n", - storage-> - line_list_nu[rpacket_get_next_line_id (packet) - 1]); - fprintf (stderr, "next_line = %f\n", - storage-> - line_list_nu[rpacket_get_next_line_id (packet) + 1]); - } - fprintf (stderr, "ERROR: Comoving nu less than nu_line!\n"); - fprintf (stderr, "comov_nu = %f\n", comov_nu); - fprintf (stderr, "nu_line = %f\n", nu_line); - fprintf (stderr, "(comov_nu - nu_line) / nu_line = %f\n", - (comov_nu - nu_line) / nu_line); - fprintf (stderr, "r = %f\n", r); - fprintf (stderr, "mu = %f\n", mu); - fprintf (stderr, "nu = %f\n", nu); - fprintf (stderr, "doppler_factor = %f\n", doppler_factor); - fprintf (stderr, "cur_zone_id = %" PRIi64 "\n", rpacket_get_current_shell_id (packet)); - return TARDIS_ERROR_COMOV_NU_LESS_THAN_NU_LINE; - } - } - else - { - rpacket_set_d_line (packet, MISS_DISTANCE); - return TARDIS_ERROR_OK; - } -} - -@ngit -def compute_distance2continuum(packet, storage): - chi_continuum = 0.0 - d_continuum = 0.0 + + +# compute_distance2line (rpacket_t * packet, const storage_model_t * storage) +# { +# if (!rpacket_get_last_line (packet)) +# { +# double r = rpacket_get_r (packet); +# double mu = rpacket_get_mu (packet); +# double nu = rpacket_get_nu (packet); +# double nu_line = rpacket_get_nu_line (packet); +# double distance, nu_diff; +# double ct = storage->time_explosion * c; +# double doppler_factor = rpacket_doppler_factor (packet, storage); +# double comov_nu = nu * doppler_factor; +# if ( (nu_diff = comov_nu - nu_line) >= 0) +# { +# if (!storage->full_relativity) +# { +# distance = (nu_diff / nu) * ct; +# } +# else +# { +# double nu_r = nu_line / nu; +# distance = - mu * r + (ct - nu_r * nu_r * sqrt(ct * ct - +# (1 + r * r * (1 - mu * mu) * (1 + pow(nu_r, -2))))) / (1 + nu_r * nu_r); +# } +# rpacket_set_d_line (packet, distance); +# return TARDIS_ERROR_OK; +# } +# else +# { +# if (rpacket_get_next_line_id (packet) == storage->no_of_lines - 1) +# { +# fprintf (stderr, "last_line = %f\n", +# storage-> +# line_list_nu[rpacket_get_next_line_id (packet) - 1]); +# fprintf (stderr, "Last line in line list reached!"); +# } +# else if (rpacket_get_next_line_id (packet) == 0) +# { +# fprintf (stderr, "First line in line list!"); +# fprintf (stderr, "next_line = %f\n", +# storage-> +# line_list_nu[rpacket_get_next_line_id (packet) + 1]); +# } +# else +# { +# fprintf (stderr, "last_line = %f\n", +# storage-> +# line_list_nu[rpacket_get_next_line_id (packet) - 1]); +# fprintf (stderr, "next_line = %f\n", +# storage-> +# line_list_nu[rpacket_get_next_line_id (packet) + 1]); +# } +# fprintf (stderr, "ERROR: Comoving nu less than nu_line!\n"); +# fprintf (stderr, "comov_nu = %f\n", comov_nu); +# fprintf (stderr, "nu_line = %f\n", nu_line); +# fprintf (stderr, "(comov_nu - nu_line) / nu_line = %f\n", +# (comov_nu - nu_line) / nu_line); +# fprintf (stderr, "r = %f\n", r); +# fprintf (stderr, "mu = %f\n", mu); +# fprintf (stderr, "nu = %f\n", nu); +# fprintf (stderr, "doppler_factor = %f\n", doppler_factor); +# fprintf (stderr, "cur_zone_id = %" PRIi64 "\n", rpacket_get_current_shell_id (packet)); +# return TARDIS_ERROR_COMOV_NU_LESS_THAN_NU_LINE; +# } +# } +# else +# { +# rpacket_set_d_line (packet, MISS_DISTANCE); +# return TARDIS_ERROR_OK; +# } +# } - chi_electron = storage.electron_densities[rpacket_get_current_shell_id(packet)] * storage.sigma_thomson +@njit +def compute_distance2continuum(packet, storage): + # chi_continuum = 0.0 + # d_continuum = 0.0 + # chi_electron = storage.electron_densities[packet.shell_id] * storage.sigma_thomson - if (storange.full_relativity): - chi_electron *= rpacket_doppler_factor(packet, storage) + # if (storage.full_relativity): + # chi_electron *= packet.doppler_factor(storage) - if (storage.cont_status == CONTINUUM_ON): - if (packet.compute_chi_bf): - calculate_chi_bf(packet, storage) - calculate_chi_ff(packet, storage) - else: - packet.compute_chi_bf = True - - chi_continuum = rpacket_get_chi_boundfree(packet) + rpacket_get_chi_freefree(packet) + chi_electron - d_continuum = rpacket_get_tau_event(packet) / chi_continuum - else: - chi_continuum = chi_electron - d_continuum = storage.inverse_electron_densities[rpacket_get_current_shell_id(packet)] * \ - storage.inverse_sigma_thomson * rpacket_get_tau_event(packet) + # if (storage.cont_status == CONTINUUM_ON): + # if (packet.compute_chi_bf): + # calculate_chi_bf(packet, storage) + # calculate_chi_ff(packet, storage) + # else: + # packet.compute_chi_bf = True + # chi_continuum = packet.chi_boundfree + packet.chi_freefree + chi_electron + # d_continuum = packet.tau_event / chi_continuum - if (rpacket_get_virtual_packet(packet) > 0): - # set all continuum distances to MISS_DISTANCE in case of a virtual_packet - d_continuum = MISS_DISTANCE - packet.compute_chi_bf = False - else: - rpacket_set_chi_electron(packet, chi_continuum) + # else: + # chi_continuum = chi_electron + # d_continuum = storage.inverse_electron_densities[packet.shell_id] * \ + # storage.inverse_sigma_thomson * packet.tau_event - rpacket_set_chi_continuum(packet, chi_continuum) - rpacket_set_d_continuum(packet, d_continuum) + # if (packet.virtual_packet > 0): + # # set all continuum distances to MISS_DISTANCE in case of a virtual_packet + # d_continuum = MISS_DISTANCE + # packet.compute_chi_bf = False + # else: + # packet.chi_electron = chi_electron + packet.d_continuum = storage.inverse_electron_densities[packet.shell_id] * \ + storage.inverse_sigma_thomson * packet.tau_event -void -compute_distance2continuum (rpacket_t * packet, storage_model_t * storage) -{ - double chi_continuum, d_continuum; - double chi_electron = storage->electron_densities[rpacket_get_current_shell_id(packet)] * - storage->sigma_thomson; - if (storage->full_relativity) - { - chi_electron *= rpacket_doppler_factor (packet, storage); - } +# void +# compute_distance2continuum (rpacket_t * packet, storage_model_t * storage) +# { +# double chi_continuum, d_continuum; +# double chi_electron = storage->electron_densities[rpacket_get_current_shell_id(packet)] * +# storage->sigma_thomson; +# if (storage->full_relativity) +# { +# chi_electron *= rpacket_doppler_factor (packet, storage); +# } - if (storage->cont_status == CONTINUUM_ON) - { - if (packet->compute_chi_bf) - { - calculate_chi_bf (packet, storage); - calculate_chi_ff (packet, storage); - } - else - { - packet->compute_chi_bf=true; - } - chi_continuum = rpacket_get_chi_boundfree (packet) + rpacket_get_chi_freefree (packet) + chi_electron; - d_continuum = rpacket_get_tau_event (packet) / chi_continuum; - } - else - { - chi_continuum = chi_electron; - d_continuum = storage->inverse_electron_densities[rpacket_get_current_shell_id (packet)] * - storage->inverse_sigma_thomson * rpacket_get_tau_event (packet); - } +# if (storage->cont_status == CONTINUUM_ON) +# { +# if (packet->compute_chi_bf) +# { +# calculate_chi_bf (packet, storage); +# calculate_chi_ff (packet, storage); +# } +# else +# { +# packet->compute_chi_bf=true; +# } +# chi_continuum = rpacket_get_chi_boundfree (packet) + rpacket_get_chi_freefree (packet) + chi_electron; +# d_continuum = rpacket_get_tau_event (packet) / chi_continuum; +# } +# else +# { +# chi_continuum = chi_electron; +# d_continuum = storage->inverse_electron_densities[rpacket_get_current_shell_id (packet)] * +# storage->inverse_sigma_thomson * rpacket_get_tau_event (packet); +# } - if (rpacket_get_virtual_packet(packet) > 0) - { - //Set all continuum distances to MISS_DISTANCE in case of an virtual_packet - d_continuum = MISS_DISTANCE; - packet->compute_chi_bf = false; - } - else - { +# if (rpacket_get_virtual_packet(packet) > 0) +# { +# //Set all continuum distances to MISS_DISTANCE in case of an virtual_packet +# d_continuum = MISS_DISTANCE; +# packet->compute_chi_bf = false; +# } +# else +# { - // fprintf(stderr, "--------\n"); - // fprintf(stderr, "nu = %e \n", rpacket_get_nu(packet)); - // fprintf(stderr, "chi_electron = %e\n", chi_electron); - // fprintf(stderr, "chi_boundfree = %e\n", calculate_chi_bf(packet, storage)); - // fprintf(stderr, "chi_line = %e \n", rpacket_get_tau_event(packet) / rpacket_get_d_line(packet)); - // fprintf(stderr, "--------\n"); +# // fprintf(stderr, "--------\n"); +# // fprintf(stderr, "nu = %e \n", rpacket_get_nu(packet)); +# // fprintf(stderr, "chi_electron = %e\n", chi_electron); +# // fprintf(stderr, "chi_boundfree = %e\n", calculate_chi_bf(packet, storage)); +# // fprintf(stderr, "chi_line = %e \n", rpacket_get_tau_event(packet) / rpacket_get_d_line(packet)); +# // fprintf(stderr, "--------\n"); - //rpacket_set_chi_freefree(packet, chi_freefree); - rpacket_set_chi_electron (packet, chi_electron); - } - rpacket_set_chi_continuum (packet, chi_continuum); - rpacket_set_d_continuum (packet, d_continuum); -} \ No newline at end of file +# //rpacket_set_chi_freefree(packet, chi_freefree); +# rpacket_set_chi_electron (packet, chi_electron); +# } +# rpacket_set_chi_continuum (packet, chi_continuum); +# rpacket_set_d_continuum (packet, d_continuum); +# } \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/packet_loop.py b/tardis/montecarlo/montecarlo_numba/packet_loop.py new file mode 100644 index 00000000000..e382c58e5ed --- /dev/null +++ b/tardis/montecarlo/montecarlo_numba/packet_loop.py @@ -0,0 +1,64 @@ +def montecarlo_packet_loop(storage, packet, virtual_packet, mt_state): + packet.tau_event = 0.0 + packet.nu_line = 0.0 + packet.virtual_packet = virtual_packet + packet.status = TARDIS_PACKET_STATUS_IN_PROCESS + # intializing tau_event if it's a real packet + if (virtual_packet == 0): + packet.reset_tau_event(mt_state) + + +int64_t +montecarlo_one_packet_loop (storage_model_t * storage, rpacket_t * packet, + int64_t virtual_packet, rk_state *mt_state) +{ + rpacket_set_tau_event (packet, 0.0); + rpacket_set_nu_line (packet, 0.0); + rpacket_set_virtual_packet (packet, virtual_packet); + rpacket_set_status (packet, TARDIS_PACKET_STATUS_IN_PROCESS); + // Initializing tau_event if it's a real packet. + if (virtual_packet == 0) + { + rpacket_reset_tau_event (packet,mt_state); + } + // For a virtual packet tau_event is the sum of all the tau's that the packet passes. + while (rpacket_get_status (packet) == TARDIS_PACKET_STATUS_IN_PROCESS) + { + // Check if we are at the end of line list. + if (!rpacket_get_last_line (packet)) + { + rpacket_set_nu_line (packet, + storage-> + line_list_nu[rpacket_get_next_line_id + (packet)]); + } + double distance; + get_event_handler (packet, storage, &distance, mt_state) (packet, storage, + distance, mt_state); + if (virtual_packet > 0 && rpacket_get_tau_event (packet) > storage->tau_russian) + { + double event_random = rk_double (mt_state); + if (event_random > storage->survival_probability) + { + rpacket_set_energy(packet, 0.0); + rpacket_set_status (packet, TARDIS_PACKET_STATUS_EMITTED); + } + else + { + rpacket_set_energy(packet, + rpacket_get_energy (packet) / storage->survival_probability * + exp (-1.0 * rpacket_get_tau_event (packet))); + rpacket_set_tau_event (packet, 0.0); + } + } + } + if (virtual_packet > 0) + { + rpacket_set_energy (packet, + rpacket_get_energy (packet) * exp (-1.0 * + rpacket_get_tau_event + (packet))); + } + return rpacket_get_status (packet) == + TARDIS_PACKET_STATUS_REABSORBED ? 1 : 0; +} diff --git a/tardis/montecarlo/montecarlo_numba/storage_model.py b/tardis/montecarlo/montecarlo_numba/storage_model.py index 6ceef7694ad..f1ae4114934 100644 --- a/tardis/montecarlo/montecarlo_numba/storage_model.py +++ b/tardis/montecarlo/montecarlo_numba/storage_model.py @@ -1,172 +1,53 @@ from numba import int64, float64 +from astropy import constants as const storage_model_spec = [ - ('*packet_nus', double), - ('*packet_mus', double), - ('*packet_energies', double), - ('*output_nus', double), - ('*output_energies', double), - ('*last_interaction_in_nu', double), - ('*last_line_interaction_in_id', int64_t), - ('*last_line_interaction_out_id', int64_t), - ('*last_line_interaction_shell_id', int64_t), - ('*last_interaction_type', int64_t), - ('*last_interaction_out_type', int64_t), - ('no_of_packets', int64_t), - ('no_of_shells', int64_t), - ('no_of_shells_i', int64_t), - ('*r_inner', double), - ('*r_outer', double), - ('*r_inner_i', double), - ('*r_outer_i', double), - ('*v_inner', double), - ('time_explosion', double), - ('inverse_time_explosion', double), - ('*electron_densities', double), - ('*electron_densities_i', double), - ('*inverse_electron_densities', double), - ('*line_list_nu', double), - ('*continuum_list_nu', double), - ('*line_lists_tau_sobolevs', double), - ('*line_lists_tau_sobolevs_i', double), - ('line_lists_tau_sobolevs_nd', int64_t), - ('*line_lists_j_blues', double), - ('line_lists_j_blues_nd', int64_t), - ('*line_lists_Edotlu', double), - ('no_of_lines', int64_t), - ('no_of_edges', int64_t), - ('line_interaction_id', int64_t), - ('*transition_probabilities', double), - ('transition_probabilities_nd', int64_t), - ('*line2macro_level_upper', int64_t), - ('*macro_block_references', int64_t), - ('*transition_type', int64_t), - ('*destination_level_id', int64_t), - ('*transition_line_id', int64_t), - ('*js', double), - ('*nubars', double), - ('spectrum_start_nu', double), - ('spectrum_delta_nu', double), - ('spectrum_end_nu', double), - ('spectrum_virt_start_nu', double), - ('spectrum_virt_end_nu', double), - ('*spectrum_virt_nu', double), - ('sigma_thomson', double), - ('inverse_sigma_thomson', double), - ('inner_boundary_albedo', double), - ('reflective_inner_boundary', int64_t), - ('current_packet_id', int64_t), - photo_xsect_1level **photo_xsect; - ('*chi_ff_factor', double), - ('*t_electrons', double), - ('*l_pop', double), - ('*l_pop_r', double), - ContinuumProcessesStatus cont_status; - bound_free_treatment bf_treatment; - ('*virt_packet_nus', double), - ('*virt_packet_energies', double), - ('*virt_packet_last_interaction_in_nu', double), - ('*virt_packet_last_interaction_type', int64_t), - ('*virt_packet_last_line_interaction_in_id', int64_t), - ('*virt_packet_last_line_interaction_out_id', int64_t), - ('virt_packet_count', int64_t), - ('virt_array_size', int64_t), - ('kpacket2macro_level', int64_t), - ('*cont_edge2macro_level', int64_t), - ('*photo_ion_estimator', double), - ('*stim_recomb_estimator', double), - ('*photo_ion_estimator_statistics', int64_t), - ('*bf_heating_estimator', double), - ('*ff_heating_estimator', double), - ('*stim_recomb_cooling_estimator', double), - ('full_relativity', int), - ('survival_probability', double), - ('tau_russian', double), - ('*tau_bias', double), - ('enable_biasing', int), + ('packet_nus', float64[:]), + ('packet_mus', float64[:]), + ('packet_energies', float64[:]), + ('output_nus', float64[:]), + ('output_energies', float64[:]), + ('no_of_packets', int64), + ('no_of_shells', int64), + ('r_inner', float64[:]), + ('r_outer', float64[:]), + ('v_inner', float64[:]), + ('time_explosion', float64), + ('inverse_time_explosion', float64), + ('*electron_densities', float64), + ('*inverse_electron_densities', float64), + ('*line_list_nu', float64), + ('*line_lists_tau_sobolevs', float64), + ('line_lists_tau_sobolevs_nd', int64), + ('no_of_lines', int64), + ('no_of_edges', int64), + ('line_interaction_id', int64), +# ('*js', float64), +# ('*nubars', float64), + ('sigma_thomson', float64), + ('inverse_sigma_thomson', float64), ] -typedef struct StorageModel -{ - double *packet_nus; - double *packet_mus; - double *packet_energies; - double *output_nus; - double *output_energies; - double *last_interaction_in_nu; - int64_t *last_line_interaction_in_id; - int64_t *last_line_interaction_out_id; - int64_t *last_line_interaction_shell_id; - int64_t *last_interaction_type; - int64_t *last_interaction_out_type; - int64_t no_of_packets; - int64_t no_of_shells; - int64_t no_of_shells_i; - double *r_inner; - double *r_outer; - double *r_inner_i; - double *r_outer_i; - double *v_inner; - double time_explosion; - double inverse_time_explosion; - double *electron_densities; - double *electron_densities_i; - double *inverse_electron_densities; - double *line_list_nu; - double *continuum_list_nu; - double *line_lists_tau_sobolevs; - double *line_lists_tau_sobolevs_i; - int64_t line_lists_tau_sobolevs_nd; - double *line_lists_j_blues; - int64_t line_lists_j_blues_nd; - double *line_lists_Edotlu; - int64_t no_of_lines; - int64_t no_of_edges; - int64_t line_interaction_id; - double *transition_probabilities; - int64_t transition_probabilities_nd; - int64_t *line2macro_level_upper; - int64_t *macro_block_references; - int64_t *transition_type; - int64_t *destination_level_id; - int64_t *transition_line_id; - double *js; - double *nubars; - double spectrum_start_nu; - double spectrum_delta_nu; - double spectrum_end_nu; - double spectrum_virt_start_nu; - double spectrum_virt_end_nu; - double *spectrum_virt_nu; - double sigma_thomson; - double inverse_sigma_thomson; - double inner_boundary_albedo; - int64_t reflective_inner_boundary; - int64_t current_packet_id; - photo_xsect_1level **photo_xsect; - double *chi_ff_factor; - double *t_electrons; - double *l_pop; - double *l_pop_r; - ContinuumProcessesStatus cont_status; - bound_free_treatment bf_treatment; - double *virt_packet_nus; - double *virt_packet_energies; - double *virt_packet_last_interaction_in_nu; - int64_t *virt_packet_last_interaction_type; - int64_t *virt_packet_last_line_interaction_in_id; - int64_t *virt_packet_last_line_interaction_out_id; - int64_t virt_packet_count; - int64_t virt_array_size; - int64_t kpacket2macro_level; - int64_t *cont_edge2macro_level; - double *photo_ion_estimator; - double *stim_recomb_estimator; - int64_t *photo_ion_estimator_statistics; - double *bf_heating_estimator; - double *ff_heating_estimator; - double *stim_recomb_cooling_estimator; - int full_relativity; - double survival_probability; - double tau_russian; - double *tau_bias; - int enable_biasing; -} storage_model_t; \ No newline at end of file + +class StorageModel(object): + def __init__(self, packet_nus, packet_mus, packet_energies, + output_nus, output_energies, no_of_packets, no_of_shells, + r_inner, r_outer, v_inner, time_explosion, electron_densities, line_list_nu, line_lists_tau_sobolevs, line_lists_tau_sobolevs_nd, + no_of_lines, no_of_edges, line_interaction_id, + inverse_sigma_thomson): + self.packet_nus = packet_nus + self.packet_mus = packet_mus + self.packet_energies = packet_energies + self.output_nus = output_nus + self.output_energies = output_energies + self.r_inner = r_inner + self.r_outer = r_outer + self.v_inner = v_inner + + self.time_explosion = time_explosion + self.inverse_time_explosion = 1 / time_explosion + + self.electron_densities = electron_densities + + self.inverse_electron_densities = 1 / electron_densities + + self.sigma_thomson = const.sigma_T.to('cm^2').value + self.inverse_sigma_thomson = 1 / self.sigma_thomson From 7df78ae18274df04e89e10eec2169794cdb3f764 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 1 May 2019 15:02:09 -0400 Subject: [PATCH 154/467] getting closer - TARDIS now fails Co-authored-by: Christian Vogl Co-authored-by: Alice Harpole Co-authored-by: Yssavo Camacho-Neves --- tardis/montecarlo/base.py | 4 +- tardis/montecarlo/montecarlo_numba/base.py | 109 +++--------- .../montecarlo_numba/packet_loop.py | 155 ++++++++++------- tardis/montecarlo/montecarlo_numba/rpacket.py | 157 ++++++++++++++++-- .../montecarlo_numba/storage_model.py | 34 +++- 5 files changed, 294 insertions(+), 165 deletions(-) diff --git a/tardis/montecarlo/base.py b/tardis/montecarlo/base.py index 23db0f435a2..fe50b53257b 100644 --- a/tardis/montecarlo/base.py +++ b/tardis/montecarlo/base.py @@ -16,6 +16,8 @@ from tardis.montecarlo import montecarlo, packet_source as source from tardis.montecarlo.formal_integral import FormalIntegrator +from tardis.montecarlo.montecarlo_numba import montecarlo_radial1d + import numpy as np logger = logging.getLogger(__name__) @@ -219,7 +221,7 @@ def run(self, model, plasma, no_of_packets, self._initialize_packets(model.t_inner.value, no_of_packets) - + montecarlo_radial1d(model, plasma, self) #montecarlo.montecarlo_radial1d( # model, plasma, self, # virtual_packet_flag=no_of_virtual_packets, diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index 7a336a916b7..48872c63f28 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -1,13 +1,15 @@ from numba import prange, njit -from tardis.montecarlo.montecarlo_numba.rpacket import RPacket +from tardis.montecarlo.montecarlo_numba.rpacket import RPacket, PacketStatus +from tardis.montecarlo.montecarlo_numba.storage_model import StorageModel +from tardis.montecarlo.montecarlo_numba.packet_loop import one_packet_loop + + def montecarlo_radial1d(model, plasma, runner): - storage_model_kwargs = {'packet_nus', packet_mus, packet_energies, - output_nus, output_energies, no_of_packets, no_of_shells, - r_inner, r_outer, v_inner, time_explosion, electron_densities, line_list_nu, line_lists_tau_sobolevs, line_lists_tau_sobolevs_nd, - no_of_lines, no_of_edges, line_interaction_id, - inverse_sigma_thomson} + storage_model = initialize_storage_model(model, plasma, runner) + montecarlo_main_loop(storage_model) + pass #montecarlo.montecarlo_radial1d( # model, plasma, self, @@ -19,87 +21,16 @@ def montecarlo_radial1d(model, plasma, runner): # but python expects (no_of_lines, no_of_shells) @njit -def montecarlo_main_loop(storage): +def montecarlo_main_loop(storage_model): for i in prange(storage.no_of_packets): - from - - -void -montecarlo_main_loop(storage_model_t * storage, int64_t virtual_packet_flag, int nthreads, unsigned long seed) -{ - int64_t finished_packets = 0; - storage->virt_packet_count = 0; -#ifdef WITH_VPACKET_LOGGING - storage->virt_packet_nus = (double *)safe_malloc(sizeof(double) * storage->no_of_packets); - storage->virt_packet_energies = (double *)safe_malloc(sizeof(double) * storage->no_of_packets); - storage->virt_packet_last_interaction_in_nu = (double *)safe_malloc(sizeof(double) * storage->no_of_packets); - storage->virt_packet_last_interaction_type = (int64_t *)safe_malloc(sizeof(int64_t) * storage->no_of_packets); - storage->virt_packet_last_line_interaction_in_id = (int64_t *)safe_malloc(sizeof(int64_t) * storage->no_of_packets); - storage->virt_packet_last_line_interaction_out_id = (int64_t *)safe_malloc(sizeof(int64_t) * storage->no_of_packets); - storage->virt_array_size = storage->no_of_packets; -#endif // WITH_VPACKET_LOGGING -#ifdef WITHOPENMP - omp_set_dynamic(0); - if (nthreads > 0) - { - omp_set_num_threads(nthreads); - } - -#pragma omp parallel firstprivate(finished_packets) - { - rk_state mt_state; - rk_seed (seed + omp_get_thread_num(), &mt_state); -#pragma omp master - { - fprintf(stderr, "Running with OpenMP - %d threads\n", omp_get_num_threads()); - print_progress(0, storage->no_of_packets); - } -#else - rk_state mt_state; - rk_seed (seed, &mt_state); - fprintf(stderr, "Running without OpenMP\n"); -#endif - int64_t chi_bf_tmp_size = (storage->cont_status) ? storage->no_of_edges : 0; - double *chi_bf_tmp_partial = safe_malloc(sizeof(double) * chi_bf_tmp_size); - - #pragma omp for - for (int64_t packet_index = 0; packet_index < storage->no_of_packets; ++packet_index) - { - int reabsorbed = 0; - rpacket_t packet; - rpacket_set_id(&packet, packet_index); - rpacket_init(&packet, storage, packet_index, virtual_packet_flag, chi_bf_tmp_partial); - if (virtual_packet_flag > 0) - { - reabsorbed = montecarlo_one_packet(storage, &packet, -1, &mt_state); - } - reabsorbed = montecarlo_one_packet(storage, &packet, 0, &mt_state); - storage->output_nus[packet_index] = rpacket_get_nu(&packet); - if (reabsorbed == 1) - { - storage->output_energies[packet_index] = -rpacket_get_energy(&packet); - } - else - { - storage->output_energies[packet_index] = rpacket_get_energy(&packet); - } - if ( ++finished_packets%100 == 0 ) - { -#ifdef WITHOPENMP - // WARNING: This only works with a static sheduler and gives an approximation of progress. - // The alternative would be to have a shared variable but that could potentially decrease performance when using many threads. - if (omp_get_thread_num() == 0 ) - print_progress(finished_packets * omp_get_num_threads(), storage->no_of_packets); -#else - print_progress(finished_packets, storage->no_of_packets); -#endif - } - } - free(chi_bf_tmp_partial); -#ifdef WITHOPENMP - } -#endif - print_progress(storage->no_of_packets, storage->no_of_packets); - fprintf(stderr,"\n"); -} - + r_packet = RPacket(r=storage.r_inner[0], + mu=storage.packet_nus[i], + nu=storage.packet_mus[i], + energy=storage.packet_energies[i]) + r_packet_final_state = one_packet_loop(r_packet) + storage_model.output_nus[i] = rpacket.nu + if r_packet_final_state == PacketStatus.REABSORBED: + storage_model.output_energies[i] = -r_packet.energy + elif r_packet_final_state == PacketStatus.EMITTED: + storage_model.output_energies[i] = r_packet.energy + return None diff --git a/tardis/montecarlo/montecarlo_numba/packet_loop.py b/tardis/montecarlo/montecarlo_numba/packet_loop.py index e382c58e5ed..c9cff9d5e04 100644 --- a/tardis/montecarlo/montecarlo_numba/packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/packet_loop.py @@ -1,64 +1,105 @@ -def montecarlo_packet_loop(storage, packet, virtual_packet, mt_state): +from numba import njit +import numpy as np +from enum import Enum + +class PacketStatus(Enum): + IN_PROCESS = 0 + EMITTED = 1 + REABSORBED = 2 + +@njit +def one_packet_loop(storage, packet, virtual_packet, mt_state): packet.tau_event = 0.0 packet.nu_line = 0.0 packet.virtual_packet = virtual_packet - packet.status = TARDIS_PACKET_STATUS_IN_PROCESS - # intializing tau_event if it's a real packet - if (virtual_packet == 0): + packet.status = PacketStatus.IN_PROCESS + # initializing tau_event if it's a real packet + if virtual_packet == 0: packet.reset_tau_event(mt_state) + + # for a virtual packet tau_event is the sum of all the tau's that the packet passes + while packet.status == PacketStatus.IN_PROCESS: + # Check if we are at the end of line list. + if not packet.last_line: + packet.nu_line = storeage.line_list_nu[packet.next_line_id] + + # FIXME: get_event_handler(packet, storage, &distance, mt_state) (packet, storage, distance, mt_state) + + if virtual_packet > 0 and packet.tau_event > storage.tau_russian: + event_random = rk_double(mt_state) + + if event_random > storage.survival_probability: + packet.energy = 0.0 + packet.status = PacketStatus.EMITTED + else: + packet.energy = packet.energy / storage.survival_probability * \ + np.exp(-1.0 * packet.tau_event) + + if virtual_packet > 0: + packet.energy = packet.energy * np.exp(-1.0 * packet.tau_event) + if packet.status == PacketStatus.REABSORBED: + return 1 + else: + return 0 + + +def rpacket_interactions(rpacket): + if int64_t -montecarlo_one_packet_loop (storage_model_t * storage, rpacket_t * packet, - int64_t virtual_packet, rk_state *mt_state) -{ - rpacket_set_tau_event (packet, 0.0); - rpacket_set_nu_line (packet, 0.0); - rpacket_set_virtual_packet (packet, virtual_packet); - rpacket_set_status (packet, TARDIS_PACKET_STATUS_IN_PROCESS); - // Initializing tau_event if it's a real packet. - if (virtual_packet == 0) - { - rpacket_reset_tau_event (packet,mt_state); - } - // For a virtual packet tau_event is the sum of all the tau's that the packet passes. - while (rpacket_get_status (packet) == TARDIS_PACKET_STATUS_IN_PROCESS) - { - // Check if we are at the end of line list. - if (!rpacket_get_last_line (packet)) - { - rpacket_set_nu_line (packet, - storage-> - line_list_nu[rpacket_get_next_line_id - (packet)]); - } - double distance; - get_event_handler (packet, storage, &distance, mt_state) (packet, storage, - distance, mt_state); - if (virtual_packet > 0 && rpacket_get_tau_event (packet) > storage->tau_russian) - { - double event_random = rk_double (mt_state); - if (event_random > storage->survival_probability) - { - rpacket_set_energy(packet, 0.0); - rpacket_set_status (packet, TARDIS_PACKET_STATUS_EMITTED); - } - else - { - rpacket_set_energy(packet, - rpacket_get_energy (packet) / storage->survival_probability * - exp (-1.0 * rpacket_get_tau_event (packet))); - rpacket_set_tau_event (packet, 0.0); - } - } - } - if (virtual_packet > 0) - { - rpacket_set_energy (packet, - rpacket_get_energy (packet) * exp (-1.0 * - rpacket_get_tau_event - (packet))); - } - return rpacket_get_status (packet) == - TARDIS_PACKET_STATUS_REABSORBED ? 1 : 0; -} + +# Void +# montecarlo_one_packet_loop (storage_model_t * storage, rpacket_t * packet, +# int64_t virtual_packet, rk_state *mt_state) +# { +# rpacket_set_tau_event (packet, 0.0); +# rpacket_set_nu_line (packet, 0.0); +# rpacket_set_virtual_packet (packet, virtual_packet); +# rpacket_set_status (packet, TARDIS_PACKET_STATUS_IN_PROCESS); +# // Initializing tau_event if it's a real packet. +# if (virtual_packet == 0) +# { +# rpacket_reset_tau_event (packet,mt_state); +# } +# // For a virtual packet tau_event is the sum of all the tau's that the packet passes. +# while (rpacket_get_status (packet) == TARDIS_PACKET_STATUS_IN_PROCESS) +# { +# // Check if we are at the end of line list. +# if (!rpacket_get_last_line (packet)) +# { +# rpacket_set_nu_line (packet, +# storage-> +# line_list_nu[rpacket_get_next_line_id +# (packet)]); +# } +# double distance; +# get_event_handler (packet, storage, &distance, mt_state) (packet, storage, +# distance, mt_state); +# if (virtual_packet > 0 && rpacket_get_tau_event (packet) > storage->tau_russian) +# { +# double event_random = rk_double (mt_state); +# if (event_random > storage->survival_probability) +# { +# rpacket_set_energy(packet, 0.0); +# rpacket_set_status (packet, TARDIS_PACKET_STATUS_EMITTED); +# } +# else +# { +# rpacket_set_energy(packet, +# rpacket_get_energy (packet) / storage->survival_probability * +# exp (-1.0 * rpacket_get_tau_event (packet))); +# rpacket_set_tau_event (packet, 0.0); +# } +# } +# } +# if (virtual_packet > 0) +# { +# rpacket_set_energy (packet, +# rpacket_get_energy (packet) * exp (-1.0 * +# rpacket_get_tau_event +# (packet))); +# } +# return rpacket_get_status (packet) == +# TARDIS_PACKET_STATUS_REABSORBED ? 1 : 0; +# } diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index e5565475150..38d527c5623 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -1,27 +1,162 @@ +import numpy as np +from enum import Enum from numba import int64, float64 from numba import jitclass, njit +from tardis.montecarlo.montecarlo_numba.compute_distance import (compute_distance2boundary, + + compute_distance2continuum) + +from astropy import constants as const + + + +C_SPEED_OF_LIGHT = const.c.to('cm/s').value + +class PacketStatus(Enum): + IN_PROCESS = 0 + EMITTED = 1 + REABSORBED = 2 + +class InteractionType(Enum): + ESCATTERING = 0 + BOUNDARY = 1 + LINE = 2 rpacket_spec = [ ('r', float64), ('mu', float64), - ('tau_event', float64) - ('nu_line', float64) - ('d_line', float64) # Distance to electron event. - ('d_electron', float64) #/**< Distance to line event. */ - ('d_boundary', float64) # distance to boundary - ('shell_id', int64) + ('nu', float64), + ('energy', float64) + ('tau_event', float64), + # ('nu_line', float64) + # ('d_line', float64) # Distance to electron event. + ('d_electron', float64), #/**< Distance to line event. */ + ('d_boundary', float64), # distance to boundary + ('current_shell_id', int64), + ('next_shell_id', int64), + ('next_interaction', enum) ] -@jitclass(rpacket_rspec) + +@jitclass(rpacket_spec) class RPacket(object): - def __init__(self, r, mu, tau_event): + def __init__(self, r, mu, nu): self.r = r self.mu = mu self.nu = nu - self.tau_event = tau_event - self.nu_line = nu_line + self.energy = energy + self.tau_event = self.get_tau_event() + #self.nu_line = line_search() # TODO: Implement this + self.current_shell_id = 0 + self.compute_distances() + #self.nu_line = nu_line @staticmethod def get_tau_event(): - return -np.log(np.random.random()) \ No newline at end of file + return np.random.exponential() + + def compute_distances(self, storage): + compute_distance2continuum(self, storage) + compute_distance2boundary(self, storage) + if packet.d_boundary < packet.d_electron: + next_interaction = InteractionType.BOUNDARY + else: + next_interaction = InteractionType.ESCATTERING + packet.next_interaction = next_interaction + +# double +# rpacket_doppler_factor (const rpacket_t *packet, const storage_model_t *storage) +# { +# double beta = rpacket_get_r (packet) * storage->inverse_time_explosion * INVERSE_C; +# if (!storage->full_relativity) +# { +# return 1.0 - rpacket_get_mu (packet) * beta; +# } +# else +# { +# return (1.0 - rpacket_get_mu (packet) * beta) / sqrt (1 - beta * beta); +# } +# } + + def get_doppler_factor(self, storage): + beta = self.r * storage.inverse_time_explosion / C_SPEED_OF_LIGHT + + if not storage.full_relativity: + return 1.0 - self.mu * beta + else: + return (1.0 - self.mu * beta) / np.sqrt(1 - beta*beta) + + def move_packet(self, storage, distance): + doppler_factor = self.get_doppler_factor(storage) + r = packet.r + if (distance > 0.0): + new_r = np.sqrt (r * r + distance * distance + + 2.0 * r * distance * packet.mu) + packet.mu = (packet.mu * r + distance) / new_r + packet.r = new_r + + + def move_packet_across_shell_boundary(self, storage, distance, mt_state): + self.move_packet(storage, distance) + + if self.virtual_packet > 0: + delta_tau_event = self.chi_continuum * distance + self.tau_event = self.tau_event + delta_tau_event + self.compute_chi_bf = True + else: + self.reset_tau_event(mt_state) + + if ((self.current_shell_id < storage.no_of_shells - 1) and packet.next_shell_id == 1) or () + + void +move_packet_across_shell_boundary (rpacket_t * packet, + storage_model_t * storage, double distance, rk_state *mt_state) +{ + move_packet (packet, storage, distance); + if (rpacket_get_virtual_packet (packet) > 0) + { + double delta_tau_event = rpacket_get_chi_continuum(packet) * distance; + rpacket_set_tau_event (packet, + rpacket_get_tau_event (packet) + + delta_tau_event); + packet->compute_chi_bf = true; + } + else + { + rpacket_reset_tau_event (packet, mt_state); + } + if ((rpacket_get_current_shell_id (packet) < storage->no_of_shells - 1 + && rpacket_get_next_shell_id (packet) == 1) + || (rpacket_get_current_shell_id (packet) > 0 + && rpacket_get_next_shell_id (packet) == -1)) + { + rpacket_set_current_shell_id (packet, + rpacket_get_current_shell_id (packet) + + rpacket_get_next_shell_id (packet)); + } + else if (rpacket_get_next_shell_id (packet) == 1) + { + rpacket_set_status (packet, TARDIS_PACKET_STATUS_EMITTED); + } + else if ((storage->reflective_inner_boundary == 0) || + (rk_double (mt_state) > storage->inner_boundary_albedo)) + { + rpacket_set_status (packet, TARDIS_PACKET_STATUS_REABSORBED); + } + else + { + double doppler_factor = rpacket_doppler_factor (packet, storage); + double comov_nu = rpacket_get_nu (packet) * doppler_factor; + double comov_energy = rpacket_get_energy (packet) * doppler_factor; + // TODO: correct + rpacket_set_mu (packet, rk_double (mt_state)); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); + rpacket_set_nu (packet, comov_nu * inverse_doppler_factor); + rpacket_set_energy (packet, comov_energy * inverse_doppler_factor); + if (rpacket_get_virtual_packet_flag (packet) > 0) + { + montecarlo_one_packet (storage, packet, -2, mt_state); + } + } +} \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/storage_model.py b/tardis/montecarlo/montecarlo_numba/storage_model.py index f1ae4114934..edbe5a7b924 100644 --- a/tardis/montecarlo/montecarlo_numba/storage_model.py +++ b/tardis/montecarlo/montecarlo_numba/storage_model.py @@ -13,13 +13,11 @@ ('v_inner', float64[:]), ('time_explosion', float64), ('inverse_time_explosion', float64), - ('*electron_densities', float64), - ('*inverse_electron_densities', float64), - ('*line_list_nu', float64), - ('*line_lists_tau_sobolevs', float64), - ('line_lists_tau_sobolevs_nd', int64), + ('electron_densities', float64[:]), + ('inverse_electron_densities', float64[:]), # Maybe remove the inverse things + ('line_list_nu', float64[:]), + ('line_lists_tau_sobolevs', float64[:]), ('no_of_lines', int64), - ('no_of_edges', int64), ('line_interaction_id', int64), # ('*js', float64), # ('*nubars', float64), @@ -30,7 +28,7 @@ class StorageModel(object): def __init__(self, packet_nus, packet_mus, packet_energies, output_nus, output_energies, no_of_packets, no_of_shells, - r_inner, r_outer, v_inner, time_explosion, electron_densities, line_list_nu, line_lists_tau_sobolevs, line_lists_tau_sobolevs_nd, + r_inner, r_outer, v_inner, time_explosion, electron_densities, line_list_nu, line_lists_tau_sobolevs, no_of_lines, no_of_edges, line_interaction_id, inverse_sigma_thomson): self.packet_nus = packet_nus @@ -51,3 +49,25 @@ def __init__(self, packet_nus, packet_mus, packet_energies, self.sigma_thomson = const.sigma_T.to('cm^2').value self.inverse_sigma_thomson = 1 / self.sigma_thomson + +def initialize_storage_model(model, plasma, runner): + storage_model_kwargs = {'packet_nus': runner.input_nu, + 'packet_mus': runner.input_mu, + 'packet_energies': runner.input_energy, + 'output_nus': _output_nu, + 'output_energies': _output_energy, + 'no_of_packets': runner.input_nu.size, + 'no_of_shells': model.no_of_shells, + 'r_inner': runner.r_inner_cgs, + 'r_outer': runner.r_outer_cgs, + 'v_inner': runner.v_inner_cgs, + 'time_explosion': model.time_explosion.to('s').value, + 'electron_densities': plasma.electron_densities.values, + 'line_list_nu': plasma.atomic_data.lines.nu.values, + 'line_lists_tau_sobolevs': runner.line_lists_tau_sobolevs, + 'no_of_lines': plasma.atomic_data.lines.nu.values.size, + 'line_interaction_id': runner.get_line_interaction_id( + runner.line_interaction_type), + 'inverse_sigma_thomson': 1.0 / storage.sigma_thomson} + + return StorageModel(**storage_model_kwargs)) \ No newline at end of file From 90bfb229708460588c55ef581143de1c65b28700 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 1 May 2019 16:40:27 -0400 Subject: [PATCH 155/467] final numba test - seems to work. Co-authored-by: Christian Vogl Co-authored-by: Alice Harpole Co-authored-by: Yssavo Camacho-Neves --- .../montecarlo/montecarlo_numba/__init__.py | 7 +- tardis/montecarlo/montecarlo_numba/base.py | 38 ++- .../montecarlo_numba/compute_distance.py | 218 ++---------------- .../montecarlo_numba/packet_loop.py | 112 +++------ tardis/montecarlo/montecarlo_numba/rpacket.py | 163 ++++--------- .../montecarlo_numba/storage_model.py | 25 +- 6 files changed, 132 insertions(+), 431 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/__init__.py b/tardis/montecarlo/montecarlo_numba/__init__.py index ca0b060eaf2..3190e8d8620 100644 --- a/tardis/montecarlo/montecarlo_numba/__init__.py +++ b/tardis/montecarlo/montecarlo_numba/__init__.py @@ -1 +1,6 @@ -from tardis.montecarlo.montecarlo_numba.rpacket import RPacket \ No newline at end of file +from llvmlite import binding +binding.set_option("tmp", "-non-global-value-max-name-size=2048") + +from tardis.montecarlo.montecarlo_numba.rpacket import RPacket +from tardis.montecarlo.montecarlo_numba.base import montecarlo_radial1d + diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index 48872c63f28..b734b2a6172 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -1,7 +1,6 @@ - from numba import prange, njit -from tardis.montecarlo.montecarlo_numba.rpacket import RPacket, PacketStatus -from tardis.montecarlo.montecarlo_numba.storage_model import StorageModel +from tardis.montecarlo.montecarlo_numba.rpacket import RPacket, REABSORBED, EMITTED +from tardis.montecarlo.montecarlo_numba.storage_model import StorageModel, initialize_storage_model from tardis.montecarlo.montecarlo_numba.packet_loop import one_packet_loop @@ -9,28 +8,21 @@ def montecarlo_radial1d(model, plasma, runner): storage_model = initialize_storage_model(model, plasma, runner) montecarlo_main_loop(storage_model) - - pass - #montecarlo.montecarlo_radial1d( - # model, plasma, self, - # virtual_packet_flag=no_of_virtual_packets, - # nthreads=nthreads, - # last_run=last_run) - # Workaround so that j_blue_estimator is in the right ordering - # They are written as an array of dimension (no_of_shells, no_of_lines) - # but python expects (no_of_lines, no_of_shells) @njit def montecarlo_main_loop(storage_model): - for i in prange(storage.no_of_packets): - r_packet = RPacket(r=storage.r_inner[0], - mu=storage.packet_nus[i], - nu=storage.packet_mus[i], - energy=storage.packet_energies[i]) - r_packet_final_state = one_packet_loop(r_packet) - storage_model.output_nus[i] = rpacket.nu - if r_packet_final_state == PacketStatus.REABSORBED: + + for i in prange(storage_model.no_of_packets): + r_packet = RPacket(storage_model.r_inner[0], + storage_model.packet_mus[i], + storage_model.packet_nus[i], + storage_model.packet_energies[i]) + r_packet.compute_distances(storage_model) + one_packet_loop(storage_model, r_packet) + storage_model.output_nus[i] = r_packet.nu + #print('!!!! THIS IS THE FINAL STATE !!!!!!!', r_packet_final_state) + #return + if r_packet.status == REABSORBED: storage_model.output_energies[i] = -r_packet.energy - elif r_packet_final_state == PacketStatus.EMITTED: + elif r_packet.status == EMITTED: storage_model.output_energies[i] = r_packet.energy - return None diff --git a/tardis/montecarlo/montecarlo_numba/compute_distance.py b/tardis/montecarlo/montecarlo_numba/compute_distance.py index d39451e913b..4588ef0a4c8 100644 --- a/tardis/montecarlo/montecarlo_numba/compute_distance.py +++ b/tardis/montecarlo/montecarlo_numba/compute_distance.py @@ -8,69 +8,37 @@ def compute_distance2boundary(packet, storage): r = packet.r mu = packet.mu - r_outer = storage.r_outer[packet.shell_id] - r_inner = storage.r_inner[packet.shell_id] + r_outer = storage.r_outer[packet.current_shell_id] + r_inner = storage.r_inner[packet.current_shell_id] if (mu > 0.0): # direction outward - packet.shell_id += 1 + packet.delta_shell_id = +1 distance = np.sqrt(r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu) else: # going inward - check = r_inner * r_inner + (r * r * (mu * my - 1.0)) + check = r_inner * r_inner + (r * r * (mu * mu - 1.0)) if (check >= 0.0): # hit inner boundary - packet.shell_id -= 1 + packet.delta_shell_id = -1 distance = -r * mu - np.sqrt(check) else: # miss inner boundary - packet.shell_id += 1 + packet.delta_shell_id = + 1 distance = np.sqrt(r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu) packet.d_boundary = distance - -# void -# compute_distance2boundary (rpacket_t * packet, const storage_model_t * storage) -# { -# double r = rpacket_get_r (packet); -# double mu = rpacket_get_mu (packet); -# double r_outer = storage->r_outer[rpacket_get_current_shell_id (packet)]; -# double r_inner = storage->r_inner[rpacket_get_current_shell_id (packet)]; -# double check, distance; -# if (mu > 0.0) -# { // direction outward -# rpacket_set_next_shell_id (packet, 1); -# distance = sqrt (r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu); -# } -# else -# { // going inward -# if ( (check = r_inner * r_inner + (r * r * (mu * mu - 1.0)) )>= 0.0) -# { // hit inner boundary -# rpacket_set_next_shell_id (packet, -1); -# distance = - r * mu - sqrt (check); -# } -# else -# { // miss inner boundary -# rpacket_set_next_shell_id (packet, 1); -# distance = sqrt (r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu); -# } -# } -# rpacket_set_d_boundary (packet, distance); -# } - -# tardis_error_t - - +""" @njit -def compute_distance2line(rpacket, storage, c=C_SPEED_OF_LIGHT): - if not rpacket_get_last_line(packet): - r = rpacket.r - mu = rpacket.mu - nu = rpacket.nu - nu_line = rpacket_get_nu_line(packet) +def compute_distance2line(packet, storage, c=C_SPEED_OF_LIGHT): + if not packet.last_line: + r = packet.r + mu = packet.mu + nu = packet.nu + nu_line = packet.nu_line distance = 0.0 nu_diff = 0.0 @@ -93,7 +61,7 @@ def compute_distance2line(rpacket, storage, c=C_SPEED_OF_LIGHT): if rpacket_get_next_line_id(packet) == storage.no_of_lines - 1: print("last_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) - 1])) print("Last line in line list reached!") - else if rpacket_get_next_line_id(packet) == 0: + elif rpacket_get_next_line_id(packet) == 0: print("First line in line list!") print("next_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) + 1])) else: @@ -114,163 +82,11 @@ def compute_distance2line(rpacket, storage, c=C_SPEED_OF_LIGHT): return TARDIS_ERROR_OK - -# compute_distance2line (rpacket_t * packet, const storage_model_t * storage) -# { -# if (!rpacket_get_last_line (packet)) -# { -# double r = rpacket_get_r (packet); -# double mu = rpacket_get_mu (packet); -# double nu = rpacket_get_nu (packet); -# double nu_line = rpacket_get_nu_line (packet); -# double distance, nu_diff; -# double ct = storage->time_explosion * c; -# double doppler_factor = rpacket_doppler_factor (packet, storage); -# double comov_nu = nu * doppler_factor; -# if ( (nu_diff = comov_nu - nu_line) >= 0) -# { -# if (!storage->full_relativity) -# { -# distance = (nu_diff / nu) * ct; -# } -# else -# { -# double nu_r = nu_line / nu; -# distance = - mu * r + (ct - nu_r * nu_r * sqrt(ct * ct - -# (1 + r * r * (1 - mu * mu) * (1 + pow(nu_r, -2))))) / (1 + nu_r * nu_r); -# } -# rpacket_set_d_line (packet, distance); -# return TARDIS_ERROR_OK; -# } -# else -# { -# if (rpacket_get_next_line_id (packet) == storage->no_of_lines - 1) -# { -# fprintf (stderr, "last_line = %f\n", -# storage-> -# line_list_nu[rpacket_get_next_line_id (packet) - 1]); -# fprintf (stderr, "Last line in line list reached!"); -# } -# else if (rpacket_get_next_line_id (packet) == 0) -# { -# fprintf (stderr, "First line in line list!"); -# fprintf (stderr, "next_line = %f\n", -# storage-> -# line_list_nu[rpacket_get_next_line_id (packet) + 1]); -# } -# else -# { -# fprintf (stderr, "last_line = %f\n", -# storage-> -# line_list_nu[rpacket_get_next_line_id (packet) - 1]); -# fprintf (stderr, "next_line = %f\n", -# storage-> -# line_list_nu[rpacket_get_next_line_id (packet) + 1]); -# } -# fprintf (stderr, "ERROR: Comoving nu less than nu_line!\n"); -# fprintf (stderr, "comov_nu = %f\n", comov_nu); -# fprintf (stderr, "nu_line = %f\n", nu_line); -# fprintf (stderr, "(comov_nu - nu_line) / nu_line = %f\n", -# (comov_nu - nu_line) / nu_line); -# fprintf (stderr, "r = %f\n", r); -# fprintf (stderr, "mu = %f\n", mu); -# fprintf (stderr, "nu = %f\n", nu); -# fprintf (stderr, "doppler_factor = %f\n", doppler_factor); -# fprintf (stderr, "cur_zone_id = %" PRIi64 "\n", rpacket_get_current_shell_id (packet)); -# return TARDIS_ERROR_COMOV_NU_LESS_THAN_NU_LINE; -# } -# } -# else -# { -# rpacket_set_d_line (packet, MISS_DISTANCE); -# return TARDIS_ERROR_OK; -# } -# } + """ + @njit def compute_distance2continuum(packet, storage): - # chi_continuum = 0.0 - # d_continuum = 0.0 - # chi_electron = storage.electron_densities[packet.shell_id] * storage.sigma_thomson - - # if (storage.full_relativity): - # chi_electron *= packet.doppler_factor(storage) - - # if (storage.cont_status == CONTINUUM_ON): - # if (packet.compute_chi_bf): - # calculate_chi_bf(packet, storage) - # calculate_chi_ff(packet, storage) - # else: - # packet.compute_chi_bf = True - # chi_continuum = packet.chi_boundfree + packet.chi_freefree + chi_electron - # d_continuum = packet.tau_event / chi_continuum - - # else: - # chi_continuum = chi_electron - # d_continuum = storage.inverse_electron_densities[packet.shell_id] * \ - # storage.inverse_sigma_thomson * packet.tau_event - - # if (packet.virtual_packet > 0): - # # set all continuum distances to MISS_DISTANCE in case of a virtual_packet - # d_continuum = MISS_DISTANCE - # packet.compute_chi_bf = False - # else: - # packet.chi_electron = chi_electron - - packet.d_continuum = storage.inverse_electron_densities[packet.shell_id] * \ + packet.d_electron = storage.inverse_electron_densities[packet.current_shell_id] * \ storage.inverse_sigma_thomson * packet.tau_event -# void -# compute_distance2continuum (rpacket_t * packet, storage_model_t * storage) -# { -# double chi_continuum, d_continuum; -# double chi_electron = storage->electron_densities[rpacket_get_current_shell_id(packet)] * -# storage->sigma_thomson; -# if (storage->full_relativity) -# { -# chi_electron *= rpacket_doppler_factor (packet, storage); -# } - -# if (storage->cont_status == CONTINUUM_ON) -# { -# if (packet->compute_chi_bf) -# { -# calculate_chi_bf (packet, storage); -# calculate_chi_ff (packet, storage); -# } -# else -# { -# packet->compute_chi_bf=true; -# } -# chi_continuum = rpacket_get_chi_boundfree (packet) + rpacket_get_chi_freefree (packet) + chi_electron; -# d_continuum = rpacket_get_tau_event (packet) / chi_continuum; -# } -# else -# { -# chi_continuum = chi_electron; -# d_continuum = storage->inverse_electron_densities[rpacket_get_current_shell_id (packet)] * -# storage->inverse_sigma_thomson * rpacket_get_tau_event (packet); -# } - -# if (rpacket_get_virtual_packet(packet) > 0) -# { -# //Set all continuum distances to MISS_DISTANCE in case of an virtual_packet -# d_continuum = MISS_DISTANCE; -# packet->compute_chi_bf = false; -# } -# else -# { - -# // fprintf(stderr, "--------\n"); -# // fprintf(stderr, "nu = %e \n", rpacket_get_nu(packet)); -# // fprintf(stderr, "chi_electron = %e\n", chi_electron); -# // fprintf(stderr, "chi_boundfree = %e\n", calculate_chi_bf(packet, storage)); -# // fprintf(stderr, "chi_line = %e \n", rpacket_get_tau_event(packet) / rpacket_get_d_line(packet)); -# // fprintf(stderr, "--------\n"); - -# //rpacket_set_chi_freefree(packet, chi_freefree); -# rpacket_set_chi_electron (packet, chi_electron); -# } -# rpacket_set_chi_continuum (packet, chi_continuum); -# rpacket_set_d_continuum (packet, d_continuum); -# } \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/packet_loop.py b/tardis/montecarlo/montecarlo_numba/packet_loop.py index c9cff9d5e04..35336b1d7e1 100644 --- a/tardis/montecarlo/montecarlo_numba/packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/packet_loop.py @@ -1,105 +1,51 @@ from numba import njit import numpy as np from enum import Enum - -class PacketStatus(Enum): - IN_PROCESS = 0 - EMITTED = 1 - REABSORBED = 2 +from tardis.montecarlo.montecarlo_numba.rpacket import ( + ESCATTERING, BOUNDARY, LINE, IN_PROCESS, REABSORBED) @njit -def one_packet_loop(storage, packet, virtual_packet, mt_state): - packet.tau_event = 0.0 - packet.nu_line = 0.0 - packet.virtual_packet = virtual_packet - packet.status = PacketStatus.IN_PROCESS +def one_packet_loop(storage_model, r_packet): + r_packet.tau_event = 0.0 + r_packet.nu_line = 0.0 + #packet.virtual_packet = virtual_packet + r_packet.status = IN_PROCESS # initializing tau_event if it's a real packet - if virtual_packet == 0: - packet.reset_tau_event(mt_state) # for a virtual packet tau_event is the sum of all the tau's that the packet passes - while packet.status == PacketStatus.IN_PROCESS: + while r_packet.status == IN_PROCESS: + rpacket_interactions(r_packet, storage_model) # Check if we are at the end of line list. - if not packet.last_line: - packet.nu_line = storeage.line_list_nu[packet.next_line_id] + #if not packet.last_line: + # packet.nu_line = storeage.line_list_nu[packet.next_line_id] # FIXME: get_event_handler(packet, storage, &distance, mt_state) (packet, storage, distance, mt_state) - if virtual_packet > 0 and packet.tau_event > storage.tau_russian: - event_random = rk_double(mt_state) + # if virtual_packet > 0 and packet.tau_event > storage.tau_russian: + # event_random = rk_double(mt_state) - if event_random > storage.survival_probability: - packet.energy = 0.0 - packet.status = PacketStatus.EMITTED - else: - packet.energy = packet.energy / storage.survival_probability * \ - np.exp(-1.0 * packet.tau_event) + # if event_random > storage.survival_probability: + # packet.energy = 0.0 + # packet.status = PacketStatus.EMITTED + # else: + # packet.energy = packet.energy / storage.survival_probability * \ + # np.exp(-1.0 * packet.tau_event) - if virtual_packet > 0: - packet.energy = packet.energy * np.exp(-1.0 * packet.tau_event) + #if virtual_packet > 0: + # packet.energy = packet.energy * np.exp(-1.0 * packet.tau_event) - if packet.status == PacketStatus.REABSORBED: + if r_packet.status == REABSORBED: return 1 else: return 0 +@njit +def rpacket_interactions(r_packet, storage_model): + r_packet.move_packet_across_shell_boundary(storage_model) + #if packet.next_interaction == InteractionType.BOUNDARY: + # pass + #else: + # pass -def rpacket_interactions(rpacket): - if -int64_t -# Void -# montecarlo_one_packet_loop (storage_model_t * storage, rpacket_t * packet, -# int64_t virtual_packet, rk_state *mt_state) -# { -# rpacket_set_tau_event (packet, 0.0); -# rpacket_set_nu_line (packet, 0.0); -# rpacket_set_virtual_packet (packet, virtual_packet); -# rpacket_set_status (packet, TARDIS_PACKET_STATUS_IN_PROCESS); -# // Initializing tau_event if it's a real packet. -# if (virtual_packet == 0) -# { -# rpacket_reset_tau_event (packet,mt_state); -# } -# // For a virtual packet tau_event is the sum of all the tau's that the packet passes. -# while (rpacket_get_status (packet) == TARDIS_PACKET_STATUS_IN_PROCESS) -# { -# // Check if we are at the end of line list. -# if (!rpacket_get_last_line (packet)) -# { -# rpacket_set_nu_line (packet, -# storage-> -# line_list_nu[rpacket_get_next_line_id -# (packet)]); -# } -# double distance; -# get_event_handler (packet, storage, &distance, mt_state) (packet, storage, -# distance, mt_state); -# if (virtual_packet > 0 && rpacket_get_tau_event (packet) > storage->tau_russian) -# { -# double event_random = rk_double (mt_state); -# if (event_random > storage->survival_probability) -# { -# rpacket_set_energy(packet, 0.0); -# rpacket_set_status (packet, TARDIS_PACKET_STATUS_EMITTED); -# } -# else -# { -# rpacket_set_energy(packet, -# rpacket_get_energy (packet) / storage->survival_probability * -# exp (-1.0 * rpacket_get_tau_event (packet))); -# rpacket_set_tau_event (packet, 0.0); -# } -# } -# } -# if (virtual_packet > 0) -# { -# rpacket_set_energy (packet, -# rpacket_get_energy (packet) * exp (-1.0 * -# rpacket_get_tau_event -# (packet))); -# } -# return rpacket_get_status (packet) == -# TARDIS_PACKET_STATUS_REABSORBED ? 1 : 0; -# } diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index 38d527c5623..05ae3cce1cd 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -3,160 +3,99 @@ from numba import int64, float64 from numba import jitclass, njit from tardis.montecarlo.montecarlo_numba.compute_distance import (compute_distance2boundary, - compute_distance2continuum) from astropy import constants as const - - C_SPEED_OF_LIGHT = const.c.to('cm/s').value -class PacketStatus(Enum): - IN_PROCESS = 0 - EMITTED = 1 - REABSORBED = 2 -class InteractionType(Enum): - ESCATTERING = 0 - BOUNDARY = 1 - LINE = 2 +#class PacketStatus(Enum): +IN_PROCESS = 0 +EMITTED = 1 +REABSORBED = 2 +#class InteractionType(Enum): +ESCATTERING = 0 +BOUNDARY = 1 +LINE = 2 rpacket_spec = [ ('r', float64), ('mu', float64), ('nu', float64), - ('energy', float64) + ('energy', float64), ('tau_event', float64), - # ('nu_line', float64) + ('nu_line', float64), # ('d_line', float64) # Distance to electron event. ('d_electron', float64), #/**< Distance to line event. */ ('d_boundary', float64), # distance to boundary ('current_shell_id', int64), - ('next_shell_id', int64), - ('next_interaction', enum) + ('delta_shell_id', int64), + ('next_interaction', int64), + ('status', int64), + ('distance', float64) ] +@njit +def get_tau_event(): + return np.random.exponential() + @jitclass(rpacket_spec) class RPacket(object): - def __init__(self, r, mu, nu): + def __init__(self, r, mu, nu, energy): self.r = r self.mu = mu self.nu = nu self.energy = energy - self.tau_event = self.get_tau_event() + self.tau_event = get_tau_event() #self.nu_line = line_search() # TODO: Implement this self.current_shell_id = 0 - self.compute_distances() + self.delta_shell_id = 0 + self.d_boundary = -1.0 + self.d_electron = -1.0 + self.distance = 0.0 #self.nu_line = nu_line - - @staticmethod - def get_tau_event(): - return np.random.exponential() def compute_distances(self, storage): compute_distance2continuum(self, storage) compute_distance2boundary(self, storage) - if packet.d_boundary < packet.d_electron: - next_interaction = InteractionType.BOUNDARY + if self.d_boundary < self.d_electron: + next_interaction = BOUNDARY + self.distance = self.d_boundary else: - next_interaction = InteractionType.ESCATTERING - packet.next_interaction = next_interaction + next_interaction = ESCATTERING + # TODO: Fixme + self.distance = self.d_boundary + + self.next_interaction = next_interaction -# double -# rpacket_doppler_factor (const rpacket_t *packet, const storage_model_t *storage) -# { -# double beta = rpacket_get_r (packet) * storage->inverse_time_explosion * INVERSE_C; -# if (!storage->full_relativity) -# { -# return 1.0 - rpacket_get_mu (packet) * beta; -# } -# else -# { -# return (1.0 - rpacket_get_mu (packet) * beta) / sqrt (1 - beta * beta); -# } -# } def get_doppler_factor(self, storage): beta = self.r * storage.inverse_time_explosion / C_SPEED_OF_LIGHT - if not storage.full_relativity: - return 1.0 - self.mu * beta - else: - return (1.0 - self.mu * beta) / np.sqrt(1 - beta*beta) + return 1.0 - self.mu * beta + #else: + # return (1.0 - self.mu * beta) / np.sqrt(1 - beta*beta) def move_packet(self, storage, distance): doppler_factor = self.get_doppler_factor(storage) - r = packet.r + r = self.r if (distance > 0.0): - new_r = np.sqrt (r * r + distance * distance + - 2.0 * r * distance * packet.mu) - packet.mu = (packet.mu * r + distance) / new_r - packet.r = new_r - - - def move_packet_across_shell_boundary(self, storage, distance, mt_state): - self.move_packet(storage, distance) - - if self.virtual_packet > 0: - delta_tau_event = self.chi_continuum * distance - self.tau_event = self.tau_event + delta_tau_event - self.compute_chi_bf = True + new_r = np.sqrt(r * r + distance * distance + + 2.0 * r * distance * self.mu) + self.mu = (self.mu * r + distance) / new_r + self.r = new_r + + def move_packet_across_shell_boundary(self, storage): + self.move_packet(storage, self.distance) + + get_tau_event() + if ((self.current_shell_id < storage.no_of_shells - 1 and self.delta_shell_id == 1) + or (self.current_shell_id > 0 and self.delta_shell_id == -1)): + self.current_shell_id += self.delta_shell_id + elif self.delta_shell_id == 1: + self.status = EMITTED else: - self.reset_tau_event(mt_state) - - if ((self.current_shell_id < storage.no_of_shells - 1) and packet.next_shell_id == 1) or () - - void -move_packet_across_shell_boundary (rpacket_t * packet, - storage_model_t * storage, double distance, rk_state *mt_state) -{ - move_packet (packet, storage, distance); - if (rpacket_get_virtual_packet (packet) > 0) - { - double delta_tau_event = rpacket_get_chi_continuum(packet) * distance; - rpacket_set_tau_event (packet, - rpacket_get_tau_event (packet) + - delta_tau_event); - packet->compute_chi_bf = true; - } - else - { - rpacket_reset_tau_event (packet, mt_state); - } - if ((rpacket_get_current_shell_id (packet) < storage->no_of_shells - 1 - && rpacket_get_next_shell_id (packet) == 1) - || (rpacket_get_current_shell_id (packet) > 0 - && rpacket_get_next_shell_id (packet) == -1)) - { - rpacket_set_current_shell_id (packet, - rpacket_get_current_shell_id (packet) + - rpacket_get_next_shell_id (packet)); - } - else if (rpacket_get_next_shell_id (packet) == 1) - { - rpacket_set_status (packet, TARDIS_PACKET_STATUS_EMITTED); - } - else if ((storage->reflective_inner_boundary == 0) || - (rk_double (mt_state) > storage->inner_boundary_albedo)) - { - rpacket_set_status (packet, TARDIS_PACKET_STATUS_REABSORBED); - } - else - { - double doppler_factor = rpacket_doppler_factor (packet, storage); - double comov_nu = rpacket_get_nu (packet) * doppler_factor; - double comov_energy = rpacket_get_energy (packet) * doppler_factor; - // TODO: correct - rpacket_set_mu (packet, rk_double (mt_state)); - double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); - rpacket_set_nu (packet, comov_nu * inverse_doppler_factor); - rpacket_set_energy (packet, comov_energy * inverse_doppler_factor); - if (rpacket_get_virtual_packet_flag (packet) > 0) - { - montecarlo_one_packet (storage, packet, -2, mt_state); - } - } -} \ No newline at end of file + self.status = REABSORBED diff --git a/tardis/montecarlo/montecarlo_numba/storage_model.py b/tardis/montecarlo/montecarlo_numba/storage_model.py index edbe5a7b924..e1f7c5d8731 100644 --- a/tardis/montecarlo/montecarlo_numba/storage_model.py +++ b/tardis/montecarlo/montecarlo_numba/storage_model.py @@ -1,4 +1,4 @@ -from numba import int64, float64 +from numba import int64, float64, jitclass from astropy import constants as const storage_model_spec = [ ('packet_nus', float64[:]), @@ -24,21 +24,23 @@ ('sigma_thomson', float64), ('inverse_sigma_thomson', float64), ] - +@jitclass(storage_model_spec) class StorageModel(object): def __init__(self, packet_nus, packet_mus, packet_energies, output_nus, output_energies, no_of_packets, no_of_shells, - r_inner, r_outer, v_inner, time_explosion, electron_densities, line_list_nu, line_lists_tau_sobolevs, - no_of_lines, no_of_edges, line_interaction_id, - inverse_sigma_thomson): + r_inner, r_outer, v_inner, time_explosion, electron_densities, + line_list_nu, line_lists_tau_sobolevs, no_of_lines, line_interaction_id, sigma_thomson): self.packet_nus = packet_nus self.packet_mus = packet_mus self.packet_energies = packet_energies + self.no_of_packets = len(self.packet_nus) + self.output_nus = output_nus self.output_energies = output_energies self.r_inner = r_inner self.r_outer = r_outer self.v_inner = v_inner + self.no_of_shells = len(self.v_inner) self.time_explosion = time_explosion self.inverse_time_explosion = 1 / time_explosion @@ -47,15 +49,16 @@ def __init__(self, packet_nus, packet_mus, packet_energies, self.inverse_electron_densities = 1 / electron_densities - self.sigma_thomson = const.sigma_T.to('cm^2').value + self.sigma_thomson = sigma_thomson + self.inverse_sigma_thomson = 1 / self.sigma_thomson def initialize_storage_model(model, plasma, runner): storage_model_kwargs = {'packet_nus': runner.input_nu, 'packet_mus': runner.input_mu, 'packet_energies': runner.input_energy, - 'output_nus': _output_nu, - 'output_energies': _output_energy, + 'output_nus': runner._output_nu, + 'output_energies': runner._output_energy, 'no_of_packets': runner.input_nu.size, 'no_of_shells': model.no_of_shells, 'r_inner': runner.r_inner_cgs, @@ -64,10 +67,10 @@ def initialize_storage_model(model, plasma, runner): 'time_explosion': model.time_explosion.to('s').value, 'electron_densities': plasma.electron_densities.values, 'line_list_nu': plasma.atomic_data.lines.nu.values, - 'line_lists_tau_sobolevs': runner.line_lists_tau_sobolevs, + 'line_lists_tau_sobolevs': plasma.tau_sobolevs.values.flatten(order='F'), 'no_of_lines': plasma.atomic_data.lines.nu.values.size, 'line_interaction_id': runner.get_line_interaction_id( runner.line_interaction_type), - 'inverse_sigma_thomson': 1.0 / storage.sigma_thomson} + 'sigma_thomson': runner.sigma_thomson.cgs.value} - return StorageModel(**storage_model_kwargs)) \ No newline at end of file + return StorageModel(**storage_model_kwargs) \ No newline at end of file From d22a1c812a6273dec1e1c34db2f7636f3b1b12ab Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 1 May 2019 19:11:11 -0400 Subject: [PATCH 156/467] all sorts of nonsense Co-authored-by: Christian Vogl Co-authored-by: Alice Harpole Co-authored-by: Yssavo Camacho-Neves --- .../montecarlo/montecarlo_numba/__init__.py | 4 +- tardis/montecarlo/montecarlo_numba/base.py | 21 +++-- .../montecarlo_numba/compute_distance.py | 78 +++++++--------- .../montecarlo_numba/packet_loop.py | 12 +-- tardis/montecarlo/montecarlo_numba/rpacket.py | 93 +++++++++++++++++-- .../montecarlo_numba/storage_model.py | 3 +- 6 files changed, 141 insertions(+), 70 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/__init__.py b/tardis/montecarlo/montecarlo_numba/__init__.py index 3190e8d8620..dd918494b6a 100644 --- a/tardis/montecarlo/montecarlo_numba/__init__.py +++ b/tardis/montecarlo/montecarlo_numba/__init__.py @@ -1,6 +1,6 @@ from llvmlite import binding binding.set_option("tmp", "-non-global-value-max-name-size=2048") +njit_dict = {'fastmath': True} from tardis.montecarlo.montecarlo_numba.rpacket import RPacket -from tardis.montecarlo.montecarlo_numba.base import montecarlo_radial1d - +from tardis.montecarlo.montecarlo_numba.base import montecarlo_radial1d \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index b734b2a6172..a3cf39f1dd4 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -1,17 +1,21 @@ -from numba import prange, njit +from numba import prange, njit, config +import numpy as np from tardis.montecarlo.montecarlo_numba.rpacket import RPacket, REABSORBED, EMITTED from tardis.montecarlo.montecarlo_numba.storage_model import StorageModel, initialize_storage_model from tardis.montecarlo.montecarlo_numba.packet_loop import one_packet_loop +from tardis.montecarlo.montecarlo_numba import njit_dict - +#config.THREADING_LAYER = 'threadsafe' +#config.DEBUG_ARRAY_OPT=1 def montecarlo_radial1d(model, plasma, runner): storage_model = initialize_storage_model(model, plasma, runner) montecarlo_main_loop(storage_model) -@njit +@njit(**njit_dict)#, parallel=True, nogil=True) def montecarlo_main_loop(storage_model): - + output_nus = np.empty_like(storage_model.output_nus) + output_energies = np.empty_like(storage_model.output_energies) for i in prange(storage_model.no_of_packets): r_packet = RPacket(storage_model.r_inner[0], storage_model.packet_mus[i], @@ -19,10 +23,13 @@ def montecarlo_main_loop(storage_model): storage_model.packet_energies[i]) r_packet.compute_distances(storage_model) one_packet_loop(storage_model, r_packet) - storage_model.output_nus[i] = r_packet.nu + output_nus[i] = r_packet.nu #print('!!!! THIS IS THE FINAL STATE !!!!!!!', r_packet_final_state) #return if r_packet.status == REABSORBED: - storage_model.output_energies[i] = -r_packet.energy + output_energies[i] = -r_packet.energy elif r_packet.status == EMITTED: - storage_model.output_energies[i] = r_packet.energy + output_energies[i] = r_packet.energy + storage_model.output_energies[:] = output_energies[:] + storage_model.output_nus[:] = output_nus[:] + diff --git a/tardis/montecarlo/montecarlo_numba/compute_distance.py b/tardis/montecarlo/montecarlo_numba/compute_distance.py index 4588ef0a4c8..d4465460769 100644 --- a/tardis/montecarlo/montecarlo_numba/compute_distance.py +++ b/tardis/montecarlo/montecarlo_numba/compute_distance.py @@ -1,10 +1,12 @@ from numba import jitclass, njit import numpy as np from astropy import constants as const +from tardis.montecarlo.montecarlo_numba import njit_dict C_SPEED_OF_LIGHT = const.c.to('cm/s').value +MISS_DISTANCE = 1e99 -@njit +@njit(**njit_dict) def compute_distance2boundary(packet, storage): r = packet.r mu = packet.mu @@ -31,61 +33,53 @@ def compute_distance2boundary(packet, storage): packet.d_boundary = distance -""" + @njit -def compute_distance2line(packet, storage, c=C_SPEED_OF_LIGHT): +def compute_distance2line(packet, storage_model): if not packet.last_line: r = packet.r mu = packet.mu nu = packet.nu nu_line = packet.nu_line - - distance = 0.0 - nu_diff = 0.0 - ct = storage.time_explosion * c - doppler_factor = rpacket_doppler_factor(packet, storage) + ct = storage_model.time_explosion * C_SPEED_OF_LIGHT + doppler_factor = packet.get_doppler_factor(storage_model) comov_nu = nu * doppler_factor nu_diff = comov_nu - nu_line if nu_diff >= 0: - if not storage.full_relativity: - distance = (nu_diff/nu) * ct - else: - nu_r = nu_line / nu - distance = - mu * r + (ct - nu_r * nu_r * - np.sqrt(ct * ct - (1 + r * r * (1 - mu * mu) * (1 + pow(nu_r, -2))))) / (1 + nu_r * nu_r) - rpacket_set_d_line (packet, distance) - return TARDIS_ERROR_OK + distance = (nu_diff/nu) * ct + #else: + # nu_r = nu_line / nu + # distance = - mu * r + (ct - nu_r * nu_r * + # np.sqrt(ct * ct - (1 + r * r * (1 - mu * mu) * (1 + pow(nu_r, -2))))) / (1 + nu_r * nu_r) + packet.d_line = distance else: - if rpacket_get_next_line_id(packet) == storage.no_of_lines - 1: - print("last_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) - 1])) - print("Last line in line list reached!") - elif rpacket_get_next_line_id(packet) == 0: - print("First line in line list!") - print("next_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) + 1])) - else: - print("last_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) - 1])) - print("next_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) + 1])) - print("ERROR: Comoving nu less than nu_line!") - print("comov_nu = {}".format(comov_nu)) - print("nu_line = {}".format(nu_line)) - print("(comov_nu - nu_line) / nu_line = {}".format(comov_nu-nu_line/nu_line)) - print("r = {}".format(r)) - print("mu = {}".format(mu)) - print("nu = {}".format(nu)) - print("doppler_factor = {}".format(doppler_factor)) - print("cur_zone_id = {}".format(rpacket_get_current_shell_id(packet)) - return TARDIS_ERROR_COMOV_NU_LESS_THAN_NU_LINE + raise Exception + # if rpacket_get_next_line_id(packet) == storage.no_of_lines - 1: + # print("last_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) - 1])) + # print("Last line in line list reached!") + # elif rpacket_get_next_line_id(packet) == 0: + # print("First line in line list!") + # print("next_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) + 1])) + # else: + # print("last_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) - 1])) + # print("next_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) + 1])) + # print("ERROR: Comoving nu less than nu_line!") + # print("comov_nu = {}".format(comov_nu)) + # print("nu_line = {}".format(nu_line)) + # print("(comov_nu - nu_line) / nu_line = {}".format(comov_nu-nu_line/nu_line)) + # print("r = {}".format(r)) + # print("mu = {}".format(mu)) + # print("nu = {}".format(nu)) + # print("doppler_factor = {}".format(doppler_factor)) + # print("cur_zone_id = {}".format(rpacket_get_current_shell_id(packet)) + # #return TARDIS_ERROR_COMOV_NU_LESS_THAN_NU_LINE else: - rpacket_set_d_line(packet, MISS_DISTANCE) - return TARDIS_ERROR_OK - - - """ + packet.d_line = MISS_DISTANCE + #return TARDIS_ERROR_OK - -@njit +@njit(**njit_dict) def compute_distance2continuum(packet, storage): packet.d_electron = storage.inverse_electron_densities[packet.current_shell_id] * \ storage.inverse_sigma_thomson * packet.tau_event diff --git a/tardis/montecarlo/montecarlo_numba/packet_loop.py b/tardis/montecarlo/montecarlo_numba/packet_loop.py index 35336b1d7e1..e60ecce96eb 100644 --- a/tardis/montecarlo/montecarlo_numba/packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/packet_loop.py @@ -3,8 +3,10 @@ from enum import Enum from tardis.montecarlo.montecarlo_numba.rpacket import ( ESCATTERING, BOUNDARY, LINE, IN_PROCESS, REABSORBED) +from tardis.montecarlo.montecarlo_numba import njit_dict -@njit + +@njit(**njit_dict) def one_packet_loop(storage_model, r_packet): r_packet.tau_event = 0.0 r_packet.nu_line = 0.0 @@ -34,13 +36,7 @@ def one_packet_loop(storage_model, r_packet): #if virtual_packet > 0: # packet.energy = packet.energy * np.exp(-1.0 * packet.tau_event) - if r_packet.status == REABSORBED: - return 1 - else: - return 0 - - -@njit +@njit(**njit_dict) def rpacket_interactions(r_packet, storage_model): r_packet.move_packet_across_shell_boundary(storage_model) #if packet.next_interaction == InteractionType.BOUNDARY: diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index 05ae3cce1cd..95efe756085 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -1,10 +1,11 @@ import numpy as np from enum import Enum -from numba import int64, float64 +from numba import int64, float64, boolean from numba import jitclass, njit from tardis.montecarlo.montecarlo_numba.compute_distance import (compute_distance2boundary, - compute_distance2continuum) - + compute_distance2continuum, + compute_distance2line) +from tardis.montecarlo.montecarlo_numba import njit_dict from astropy import constants as const C_SPEED_OF_LIGHT = const.c.to('cm/s').value @@ -27,7 +28,9 @@ ('energy', float64), ('tau_event', float64), ('nu_line', float64), - # ('d_line', float64) # Distance to electron event. + ('last_line', boolean), + ('next_line_id', int64), + ('d_line', float64), # Distance to line event. ('d_electron', float64), #/**< Distance to line event. */ ('d_boundary', float64), # distance to boundary ('current_shell_id', int64), @@ -37,11 +40,16 @@ ('distance', float64) ] -@njit +@njit(**njit_dict) def get_tau_event(): return np.random.exponential() +@njit(**njit_dict) +def get_random_mu(): + return 2.0 * np.random.random() - 1.0 + + @jitclass(rpacket_spec) class RPacket(object): def __init__(self, r, mu, nu, energy): @@ -55,19 +63,19 @@ def __init__(self, r, mu, nu, energy): self.delta_shell_id = 0 self.d_boundary = -1.0 self.d_electron = -1.0 + self.d_line = -1.0 self.distance = 0.0 #self.nu_line = nu_line def compute_distances(self, storage): - compute_distance2continuum(self, storage) + compute_distance2line(self, storage) compute_distance2boundary(self, storage) - if self.d_boundary < self.d_electron: + if self.d_boundary < self.d_line: next_interaction = BOUNDARY self.distance = self.d_boundary else: - next_interaction = ESCATTERING - # TODO: Fixme - self.distance = self.d_boundary + next_interaction = LINE + self.distance = self.d_line self.next_interaction = next_interaction @@ -99,3 +107,68 @@ def move_packet_across_shell_boundary(self, storage): self.status = EMITTED else: self.status = REABSORBED + + def set_line(self, storage): + packet.line_id = np.searchsorted(storage.line_list_nu, nu) + if packet.line_id > len(storage.line_list_nu): + packet.last_line = True + else: + packet.nu_line = storage.line_list_nu[packet.line_id] + packet.last_line = False + + # if (rpacket_get_virtual_packet (packet) > 0) + # { +# rpacket_set_tau_event (packet, +# rpacket_get_tau_event (packet) + tau_line); +# rpacket_set_next_line_id (packet, next_line_id + 1); +# test_for_close_line (packet, storage); +# } + def transform_energy(self, storage_model): + """ + Transform from the LabFrame to the ComovingFrame. Then change the angle + and transform back conserving energy in the ComovingFrame. + """ + old_doppler_factor = self.get_doppler_factor(storage_model) + self.mu = get_random_mu() + inverse_doppler_factor = 1. / self.get_doppler_factor(storage_model) + comov_energy = self.energy * old_doppler_factor + self.energy = comov_energy * inverse_doppler_factor + + def line_scatter(self, storage_model): + next_line_id = self.next_line_id + tau_line = storage_model.line_lists_tau_sobolevs[next_line_id, self.current_shell_id] + # TODO: Fixme + tau_continuum = 0.0 + tau_combined = tau_line + tau_continuum + + if (next_line_id + 1 == storage.no_of_lines): + self.last_line = True + if (rpacket_get_tau_event (packet) < tau_combined): # Line absorption occurs + self.move_packet(storage_model, self.distance) + self.transform_energy(storage_model) +\ #TODO: Fixme + self.line_emission(storage) + else: + self.tau_event -= tau_line + self.next_line_id = next_line_id + 1 + # ??? + self.nu_line = storage_model.line_list_nu[self.next_line_id] + #test_for_close_line (packet, storage); + + def line_emission(self, storage_model): + emission_line_id = packet.next_line_id + inverse_doppler_factor = self.get_doppler_factor(storage) + self.nu = storage_model.line_list_nu[emission_line_id] * inverse_doppler_factor + #packet.nu_line = storage->line_list_nu[emission_line_id]); + self.next_line_id = emission_line_id + 1 + self.tau_event = get_tau_event() +#void test_for_close_line (rpacket_t * packet, const storage_model_t * storage) +#{ +# if (!rpacket_get_last_line (packet) && +# fabs (storage->line_list_nu[rpacket_get_next_line_id (packet)] - +# rpacket_get_nu_line (packet)) < (rpacket_get_nu_line (packet)* +# 1e-7)) +# { +# rpacket_set_close_line (packet, true); +# } +#} diff --git a/tardis/montecarlo/montecarlo_numba/storage_model.py b/tardis/montecarlo/montecarlo_numba/storage_model.py index e1f7c5d8731..0ee9a6b3d67 100644 --- a/tardis/montecarlo/montecarlo_numba/storage_model.py +++ b/tardis/montecarlo/montecarlo_numba/storage_model.py @@ -1,4 +1,5 @@ from numba import int64, float64, jitclass + from astropy import constants as const storage_model_spec = [ ('packet_nus', float64[:]), @@ -41,7 +42,7 @@ def __init__(self, packet_nus, packet_mus, packet_energies, self.r_outer = r_outer self.v_inner = v_inner self.no_of_shells = len(self.v_inner) - + self.time_explosion = time_explosion self.inverse_time_explosion = 1 / time_explosion From 394167fcf343d98ec151d91886f3bbca8092402c Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 1 May 2019 20:42:47 -0400 Subject: [PATCH 157/467] commit stuff Co-authored-by: Christian Vogl Co-authored-by: Alice Harpole Co-authored-by: Yssavo Camacho-Neves --- tardis/montecarlo/montecarlo_numba/base.py | 1 + .../montecarlo_numba/compute_distance.py | 1 + .../montecarlo_numba/packet_loop.py | 22 ++++------ tardis/montecarlo/montecarlo_numba/rpacket.py | 42 ++++++++++++------- .../montecarlo_numba/storage_model.py | 13 +++--- 5 files changed, 45 insertions(+), 34 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index a3cf39f1dd4..adb33f36cdc 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -21,6 +21,7 @@ def montecarlo_main_loop(storage_model): storage_model.packet_mus[i], storage_model.packet_nus[i], storage_model.packet_energies[i]) + r_packet.set_line(storage_model) r_packet.compute_distances(storage_model) one_packet_loop(storage_model, r_packet) output_nus[i] = r_packet.nu diff --git a/tardis/montecarlo/montecarlo_numba/compute_distance.py b/tardis/montecarlo/montecarlo_numba/compute_distance.py index d4465460769..b45e5686bfe 100644 --- a/tardis/montecarlo/montecarlo_numba/compute_distance.py +++ b/tardis/montecarlo/montecarlo_numba/compute_distance.py @@ -47,6 +47,7 @@ def compute_distance2line(packet, storage_model): comov_nu = nu * doppler_factor nu_diff = comov_nu - nu_line + print('comov_nu', comov_nu, 'nu_line', nu_line, 'ct', ct) if nu_diff >= 0: distance = (nu_diff/nu) * ct #else: diff --git a/tardis/montecarlo/montecarlo_numba/packet_loop.py b/tardis/montecarlo/montecarlo_numba/packet_loop.py index e60ecce96eb..233471c118e 100644 --- a/tardis/montecarlo/montecarlo_numba/packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/packet_loop.py @@ -3,13 +3,10 @@ from enum import Enum from tardis.montecarlo.montecarlo_numba.rpacket import ( ESCATTERING, BOUNDARY, LINE, IN_PROCESS, REABSORBED) -from tardis.montecarlo.montecarlo_numba import njit_dict - - -@njit(**njit_dict) +@njit def one_packet_loop(storage_model, r_packet): r_packet.tau_event = 0.0 - r_packet.nu_line = 0.0 + #r_packet.nu_line = 0.0 #packet.virtual_packet = virtual_packet r_packet.status = IN_PROCESS # initializing tau_event if it's a real packet @@ -25,23 +22,20 @@ def one_packet_loop(storage_model, r_packet): # if virtual_packet > 0 and packet.tau_event > storage.tau_russian: # event_random = rk_double(mt_state) - # if event_random > storage.survival_probability: # packet.energy = 0.0 # packet.status = PacketStatus.EMITTED # else: # packet.energy = packet.energy / storage.survival_probability * \ # np.exp(-1.0 * packet.tau_event) - #if virtual_packet > 0: # packet.energy = packet.energy * np.exp(-1.0 * packet.tau_event) - -@njit(**njit_dict) +@njit def rpacket_interactions(r_packet, storage_model): - r_packet.move_packet_across_shell_boundary(storage_model) - #if packet.next_interaction == InteractionType.BOUNDARY: + if r_packet.next_interaction == BOUNDARY: + r_packet.move_packet_across_shell_boundary(storage_model) + else: + r_packet.line_scatter(storage_model) # pass #else: - # pass - - + # pass \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index 95efe756085..6b5c348b311 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -63,13 +63,14 @@ def __init__(self, r, mu, nu, energy): self.delta_shell_id = 0 self.d_boundary = -1.0 self.d_electron = -1.0 - self.d_line = -1.0 + self.d_line = 1.e99 self.distance = 0.0 - #self.nu_line = nu_line + self.nu_line = -1e99 def compute_distances(self, storage): compute_distance2line(self, storage) compute_distance2boundary(self, storage) + print('d_boundary', self.d_boundary, 'd_line', self.d_line) if self.d_boundary < self.d_line: next_interaction = BOUNDARY self.distance = self.d_boundary @@ -108,13 +109,22 @@ def move_packet_across_shell_boundary(self, storage): else: self.status = REABSORBED - def set_line(self, storage): - packet.line_id = np.searchsorted(storage.line_list_nu, nu) - if packet.line_id > len(storage.line_list_nu): - packet.last_line = True + def set_line(self, storage_model): + inverse_line_list_nu = storage_model.line_list_nu[::-1] + doppler_factor = self.get_doppler_factor(storage_model) + comov_nu = self.nu * doppler_factor + return + next_line_id = np.searchsorted(inverse_line_list_nu, comov_nu) + next_line_id = len(storage_model.line_list_nu) - next_line_id + #print('packet nu', self.nu, 'next_line_nu', storage_model.line_list_nu[next_line_id-1:next_line_id+2]) + print('packet nu', self.nu, 'next_line_id', next_line_id, 'next_line_nu', storage_model.line_list_nu[next_line_id-1:next_line_id+2]) + self.next_line_id = next_line_id + + if self.next_line_id > len(storage_model.line_list_nu): + self.last_line = True else: - packet.nu_line = storage.line_list_nu[packet.line_id] - packet.last_line = False + self.nu_line = storage_model.line_list_nu[self.next_line_id] + self.last_line = False # if (rpacket_get_virtual_packet (packet) > 0) # { @@ -135,19 +145,21 @@ def transform_energy(self, storage_model): self.energy = comov_energy * inverse_doppler_factor def line_scatter(self, storage_model): + print('Line Scattering') next_line_id = self.next_line_id tau_line = storage_model.line_lists_tau_sobolevs[next_line_id, self.current_shell_id] + #tau_line = 3.0 # TODO: Fixme tau_continuum = 0.0 tau_combined = tau_line + tau_continuum - if (next_line_id + 1 == storage.no_of_lines): + if (next_line_id + 1 == storage_model.no_of_lines): self.last_line = True - if (rpacket_get_tau_event (packet) < tau_combined): # Line absorption occurs + if (self.tau_event < tau_combined): # Line absorption occurs self.move_packet(storage_model, self.distance) self.transform_energy(storage_model) -\ #TODO: Fixme - self.line_emission(storage) + self.line_emission(storage_model) + print('rpacket scattered at', self.nu) else: self.tau_event -= tau_line self.next_line_id = next_line_id + 1 @@ -156,10 +168,10 @@ def line_scatter(self, storage_model): #test_for_close_line (packet, storage); def line_emission(self, storage_model): - emission_line_id = packet.next_line_id - inverse_doppler_factor = self.get_doppler_factor(storage) + emission_line_id = self.next_line_id + inverse_doppler_factor = 1 / self.get_doppler_factor(storage_model) self.nu = storage_model.line_list_nu[emission_line_id] * inverse_doppler_factor - #packet.nu_line = storage->line_list_nu[emission_line_id]); + #self.nu_line = storage->line_list_nu[emission_line_id]); self.next_line_id = emission_line_id + 1 self.tau_event = get_tau_event() #void test_for_close_line (rpacket_t * packet, const storage_model_t * storage) diff --git a/tardis/montecarlo/montecarlo_numba/storage_model.py b/tardis/montecarlo/montecarlo_numba/storage_model.py index 0ee9a6b3d67..1469f35e1cb 100644 --- a/tardis/montecarlo/montecarlo_numba/storage_model.py +++ b/tardis/montecarlo/montecarlo_numba/storage_model.py @@ -1,6 +1,7 @@ from numba import int64, float64, jitclass - +import numpy as np from astropy import constants as const + storage_model_spec = [ ('packet_nus', float64[:]), ('packet_mus', float64[:]), @@ -17,7 +18,7 @@ ('electron_densities', float64[:]), ('inverse_electron_densities', float64[:]), # Maybe remove the inverse things ('line_list_nu', float64[:]), - ('line_lists_tau_sobolevs', float64[:]), + ('line_lists_tau_sobolevs', float64[:, :]), ('no_of_lines', int64), ('line_interaction_id', int64), # ('*js', float64), @@ -54,6 +55,8 @@ def __init__(self, packet_nus, packet_mus, packet_energies, self.inverse_sigma_thomson = 1 / self.sigma_thomson + self.line_list_nu = line_list_nu + def initialize_storage_model(model, plasma, runner): storage_model_kwargs = {'packet_nus': runner.input_nu, 'packet_mus': runner.input_mu, @@ -67,11 +70,11 @@ def initialize_storage_model(model, plasma, runner): 'v_inner': runner.v_inner_cgs, 'time_explosion': model.time_explosion.to('s').value, 'electron_densities': plasma.electron_densities.values, - 'line_list_nu': plasma.atomic_data.lines.nu.values, - 'line_lists_tau_sobolevs': plasma.tau_sobolevs.values.flatten(order='F'), + 'line_list_nu': plasma.atomic_data.lines.nu.values, 'no_of_lines': plasma.atomic_data.lines.nu.values.size, 'line_interaction_id': runner.get_line_interaction_id( runner.line_interaction_type), 'sigma_thomson': runner.sigma_thomson.cgs.value} - + storage_model_kwargs['line_lists_tau_sobolevs']= np.ascontiguousarray( + plasma.tau_sobolevs.values.copy(), dtype=np.float64) return StorageModel(**storage_model_kwargs) \ No newline at end of file From f6b0be3ee0b5cc9a92e967669323c89fb715fa23 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 1 May 2019 23:24:02 -0400 Subject: [PATCH 158/467] several edits later Co-authored-by: Christian Vogl Co-authored-by: Alice Harpole Co-authored-by: Yssavo Camacho-Neves --- .../montecarlo_numba/compute_distance.py | 22 ++---------------- .../montecarlo_numba/packet_loop.py | 5 +++- tardis/montecarlo/montecarlo_numba/rpacket.py | 23 +++++++++---------- .../montecarlo_numba/storage_model.py | 4 ++-- 4 files changed, 19 insertions(+), 35 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/compute_distance.py b/tardis/montecarlo/montecarlo_numba/compute_distance.py index b45e5686bfe..64d8c835162 100644 --- a/tardis/montecarlo/montecarlo_numba/compute_distance.py +++ b/tardis/montecarlo/montecarlo_numba/compute_distance.py @@ -47,7 +47,7 @@ def compute_distance2line(packet, storage_model): comov_nu = nu * doppler_factor nu_diff = comov_nu - nu_line - print('comov_nu', comov_nu, 'nu_line', nu_line, 'ct', ct) + print('in compute distance comov_nu', comov_nu, 'nu_line', nu_line, 'ct', ct) if nu_diff >= 0: distance = (nu_diff/nu) * ct #else: @@ -57,26 +57,8 @@ def compute_distance2line(packet, storage_model): packet.d_line = distance else: raise Exception - # if rpacket_get_next_line_id(packet) == storage.no_of_lines - 1: - # print("last_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) - 1])) - # print("Last line in line list reached!") - # elif rpacket_get_next_line_id(packet) == 0: - # print("First line in line list!") - # print("next_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) + 1])) - # else: - # print("last_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) - 1])) - # print("next_line = {}".format(storage.line_list_nu[rpacket_get_next_line_id(packet) + 1])) - # print("ERROR: Comoving nu less than nu_line!") - # print("comov_nu = {}".format(comov_nu)) - # print("nu_line = {}".format(nu_line)) - # print("(comov_nu - nu_line) / nu_line = {}".format(comov_nu-nu_line/nu_line)) - # print("r = {}".format(r)) - # print("mu = {}".format(mu)) - # print("nu = {}".format(nu)) - # print("doppler_factor = {}".format(doppler_factor)) - # print("cur_zone_id = {}".format(rpacket_get_current_shell_id(packet)) - # #return TARDIS_ERROR_COMOV_NU_LESS_THAN_NU_LINE else: + print('last line is set - should be miss_distance') packet.d_line = MISS_DISTANCE #return TARDIS_ERROR_OK diff --git a/tardis/montecarlo/montecarlo_numba/packet_loop.py b/tardis/montecarlo/montecarlo_numba/packet_loop.py index 233471c118e..ade62493d6e 100644 --- a/tardis/montecarlo/montecarlo_numba/packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/packet_loop.py @@ -32,10 +32,13 @@ def one_packet_loop(storage_model, r_packet): # packet.energy = packet.energy * np.exp(-1.0 * packet.tau_event) @njit def rpacket_interactions(r_packet, storage_model): + print(r_packet.next_line_id) + r_packet.compute_distances(storage_model) if r_packet.next_interaction == BOUNDARY: r_packet.move_packet_across_shell_boundary(storage_model) else: - r_packet.line_scatter(storage_model) + r_packet.line_scatter(storage_model) + # pass #else: # pass \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index 6b5c348b311..fb5bf40b3db 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -113,14 +113,13 @@ def set_line(self, storage_model): inverse_line_list_nu = storage_model.line_list_nu[::-1] doppler_factor = self.get_doppler_factor(storage_model) comov_nu = self.nu * doppler_factor - return - next_line_id = np.searchsorted(inverse_line_list_nu, comov_nu) - next_line_id = len(storage_model.line_list_nu) - next_line_id - #print('packet nu', self.nu, 'next_line_nu', storage_model.line_list_nu[next_line_id-1:next_line_id+2]) - print('packet nu', self.nu, 'next_line_id', next_line_id, 'next_line_nu', storage_model.line_list_nu[next_line_id-1:next_line_id+2]) + next_line_id = storage_model.no_of_lines - np.searchsorted(inverse_line_list_nu, comov_nu) + print('in set line comov nu', comov_nu, 'next_line_nu', storage_model.line_list_nu[next_line_id-1:next_line_id+2]) + #print('packet nu', self.nu, 'next_line_id', next_line_id, 'next_line_nu', storage_model.line_list_nu[next_line_id-1:next_line_id+2]) + #self.next_line_id = 3000 self.next_line_id = next_line_id - - if self.next_line_id > len(storage_model.line_list_nu): + print('in set_line nextid and len', self.next_line_id, len(storage_model.line_list_nu)) + if self.next_line_id > (storage_model.no_of_lines - 1): self.last_line = True else: self.nu_line = storage_model.line_list_nu[self.next_line_id] @@ -145,21 +144,21 @@ def transform_energy(self, storage_model): self.energy = comov_energy * inverse_doppler_factor def line_scatter(self, storage_model): - print('Line Scattering') + #print('Line Scattering') next_line_id = self.next_line_id - tau_line = storage_model.line_lists_tau_sobolevs[next_line_id, self.current_shell_id] - #tau_line = 3.0 + #tau_line = storage_model.line_lists_tau_sobolevs[next_line_id, self.current_shell_id] + tau_line = 3.0 # TODO: Fixme tau_continuum = 0.0 tau_combined = tau_line + tau_continuum - if (next_line_id + 1 == storage_model.no_of_lines): + if (next_line_id + 1) == storage_model.no_of_lines: self.last_line = True if (self.tau_event < tau_combined): # Line absorption occurs self.move_packet(storage_model, self.distance) self.transform_energy(storage_model) self.line_emission(storage_model) - print('rpacket scattered at', self.nu) + #print('rpacket scattered at', self.nu) else: self.tau_event -= tau_line self.next_line_id = next_line_id + 1 diff --git a/tardis/montecarlo/montecarlo_numba/storage_model.py b/tardis/montecarlo/montecarlo_numba/storage_model.py index 1469f35e1cb..9c1dd4e2899 100644 --- a/tardis/montecarlo/montecarlo_numba/storage_model.py +++ b/tardis/montecarlo/montecarlo_numba/storage_model.py @@ -54,7 +54,7 @@ def __init__(self, packet_nus, packet_mus, packet_energies, self.sigma_thomson = sigma_thomson self.inverse_sigma_thomson = 1 / self.sigma_thomson - + self.no_of_lines = no_of_lines self.line_list_nu = line_list_nu def initialize_storage_model(model, plasma, runner): @@ -71,7 +71,7 @@ def initialize_storage_model(model, plasma, runner): 'time_explosion': model.time_explosion.to('s').value, 'electron_densities': plasma.electron_densities.values, 'line_list_nu': plasma.atomic_data.lines.nu.values, - 'no_of_lines': plasma.atomic_data.lines.nu.values.size, + 'no_of_lines': len(plasma.atomic_data.lines.nu.values), 'line_interaction_id': runner.get_line_interaction_id( runner.line_interaction_type), 'sigma_thomson': runner.sigma_thomson.cgs.value} From 044938766803ac9b3d6cfa59c67d75e65d7eacfe Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 2 May 2019 11:42:35 -0400 Subject: [PATCH 159/467] still working on fixing numba_test Co-authored-by: Christian Vogl --- tardis/montecarlo/montecarlo_numba/base.py | 13 +++- .../montecarlo_numba/compute_distance.py | 3 +- .../montecarlo_numba/packet_loop.py | 2 - tardis/montecarlo/montecarlo_numba/rpacket.py | 71 ++++++++++++------- .../montecarlo_numba/storage_model.py | 1 + 5 files changed, 58 insertions(+), 32 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index adb33f36cdc..44022fa3730 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -14,9 +14,20 @@ def montecarlo_radial1d(model, plasma, runner): @njit(**njit_dict)#, parallel=True, nogil=True) def montecarlo_main_loop(storage_model): + """ + This is the main loop of the MonteCarlo routine that generates packets + and sends them through the ejecta. + + Parameters + ---------- + storage_model : [type] + [description] + """ output_nus = np.empty_like(storage_model.output_nus) output_energies = np.empty_like(storage_model.output_energies) for i in prange(storage_model.no_of_packets): + if i%1000 == 0: + print(i, end='') r_packet = RPacket(storage_model.r_inner[0], storage_model.packet_mus[i], storage_model.packet_nus[i], @@ -25,8 +36,6 @@ def montecarlo_main_loop(storage_model): r_packet.compute_distances(storage_model) one_packet_loop(storage_model, r_packet) output_nus[i] = r_packet.nu - #print('!!!! THIS IS THE FINAL STATE !!!!!!!', r_packet_final_state) - #return if r_packet.status == REABSORBED: output_energies[i] = -r_packet.energy elif r_packet.status == EMITTED: diff --git a/tardis/montecarlo/montecarlo_numba/compute_distance.py b/tardis/montecarlo/montecarlo_numba/compute_distance.py index 64d8c835162..e09adb1d12d 100644 --- a/tardis/montecarlo/montecarlo_numba/compute_distance.py +++ b/tardis/montecarlo/montecarlo_numba/compute_distance.py @@ -47,7 +47,7 @@ def compute_distance2line(packet, storage_model): comov_nu = nu * doppler_factor nu_diff = comov_nu - nu_line - print('in compute distance comov_nu', comov_nu, 'nu_line', nu_line, 'ct', ct) + if nu_diff >= 0: distance = (nu_diff/nu) * ct #else: @@ -58,7 +58,6 @@ def compute_distance2line(packet, storage_model): else: raise Exception else: - print('last line is set - should be miss_distance') packet.d_line = MISS_DISTANCE #return TARDIS_ERROR_OK diff --git a/tardis/montecarlo/montecarlo_numba/packet_loop.py b/tardis/montecarlo/montecarlo_numba/packet_loop.py index ade62493d6e..e014e2d2700 100644 --- a/tardis/montecarlo/montecarlo_numba/packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/packet_loop.py @@ -5,7 +5,6 @@ ESCATTERING, BOUNDARY, LINE, IN_PROCESS, REABSORBED) @njit def one_packet_loop(storage_model, r_packet): - r_packet.tau_event = 0.0 #r_packet.nu_line = 0.0 #packet.virtual_packet = virtual_packet r_packet.status = IN_PROCESS @@ -32,7 +31,6 @@ def one_packet_loop(storage_model, r_packet): # packet.energy = packet.energy * np.exp(-1.0 * packet.tau_event) @njit def rpacket_interactions(r_packet, storage_model): - print(r_packet.next_line_id) r_packet.compute_distances(storage_model) if r_packet.next_interaction == BOUNDARY: r_packet.move_packet_across_shell_boundary(storage_model) diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index fb5bf40b3db..6c6624dd828 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -29,6 +29,7 @@ ('tau_event', float64), ('nu_line', float64), ('last_line', boolean), + ('close_line', boolean), ('next_line_id', int64), ('d_line', float64), # Distance to line event. ('d_electron', float64), #/**< Distance to line event. */ @@ -58,7 +59,6 @@ def __init__(self, r, mu, nu, energy): self.nu = nu self.energy = energy self.tau_event = get_tau_event() - #self.nu_line = line_search() # TODO: Implement this self.current_shell_id = 0 self.delta_shell_id = 0 self.d_boundary = -1.0 @@ -66,11 +66,24 @@ def __init__(self, r, mu, nu, energy): self.d_line = 1.e99 self.distance = 0.0 self.nu_line = -1e99 + self.close_line = False + self.last_line = False def compute_distances(self, storage): - compute_distance2line(self, storage) + """ + Compute all distances (d_line, d_boundary, ???), compare, + and set interaction + + Parameters + ---------- + storage : [type] + [description] + """ + if not self.close_line: + compute_distance2line(self, storage) + else: + self.d_line = 0.0 compute_distance2boundary(self, storage) - print('d_boundary', self.d_boundary, 'd_line', self.d_line) if self.d_boundary < self.d_line: next_interaction = BOUNDARY self.distance = self.d_boundary @@ -85,8 +98,6 @@ def get_doppler_factor(self, storage): beta = self.r * storage.inverse_time_explosion / C_SPEED_OF_LIGHT return 1.0 - self.mu * beta - #else: - # return (1.0 - self.mu * beta) / np.sqrt(1 - beta*beta) def move_packet(self, storage, distance): doppler_factor = self.get_doppler_factor(storage) @@ -114,24 +125,16 @@ def set_line(self, storage_model): doppler_factor = self.get_doppler_factor(storage_model) comov_nu = self.nu * doppler_factor next_line_id = storage_model.no_of_lines - np.searchsorted(inverse_line_list_nu, comov_nu) - print('in set line comov nu', comov_nu, 'next_line_nu', storage_model.line_list_nu[next_line_id-1:next_line_id+2]) - #print('packet nu', self.nu, 'next_line_id', next_line_id, 'next_line_nu', storage_model.line_list_nu[next_line_id-1:next_line_id+2]) - #self.next_line_id = 3000 self.next_line_id = next_line_id - print('in set_line nextid and len', self.next_line_id, len(storage_model.line_list_nu)) if self.next_line_id > (storage_model.no_of_lines - 1): self.last_line = True else: self.nu_line = storage_model.line_list_nu[self.next_line_id] self.last_line = False + + ##### FIXME Add close line initializer in a sensible - think about this!1 + self.set_close_line(storage_model) - # if (rpacket_get_virtual_packet (packet) > 0) - # { -# rpacket_set_tau_event (packet, -# rpacket_get_tau_event (packet) + tau_line); -# rpacket_set_next_line_id (packet, next_line_id + 1); -# test_for_close_line (packet, storage); -# } def transform_energy(self, storage_model): """ Transform from the LabFrame to the ComovingFrame. Then change the angle @@ -144,11 +147,9 @@ def transform_energy(self, storage_model): self.energy = comov_energy * inverse_doppler_factor def line_scatter(self, storage_model): - #print('Line Scattering') next_line_id = self.next_line_id - #tau_line = storage_model.line_lists_tau_sobolevs[next_line_id, self.current_shell_id] - tau_line = 3.0 - # TODO: Fixme + tau_line = storage_model.line_lists_tau_sobolevs[ + self.current_shell_id, next_line_id] tau_continuum = 0.0 tau_combined = tau_line + tau_continuum @@ -158,22 +159,40 @@ def line_scatter(self, storage_model): self.move_packet(storage_model, self.distance) self.transform_energy(storage_model) self.line_emission(storage_model) - #print('rpacket scattered at', self.nu) else: self.tau_event -= tau_line self.next_line_id = next_line_id + 1 - # ??? - self.nu_line = storage_model.line_list_nu[self.next_line_id] - #test_for_close_line (packet, storage); + self.nu_line = storage_model.line_list_nu[self.next_line_id] def line_emission(self, storage_model): emission_line_id = self.next_line_id inverse_doppler_factor = 1 / self.get_doppler_factor(storage_model) self.nu = storage_model.line_list_nu[emission_line_id] * inverse_doppler_factor - #self.nu_line = storage->line_list_nu[emission_line_id]); + self.next_line_id = emission_line_id + 1 + self.nu_line = storage_model.line_list_nu[self.next_line_id] self.tau_event = get_tau_event() -#void test_for_close_line (rpacket_t * packet, const storage_model_t * storage) + self.set_close_line(storage_model) + + + def set_close_line(self, storage_model, line_diff_threshold=1e-7): + """ + The Packet currently sits on next_line_id - 1 and we are checking if the + next line is closer than 1e-7 to set the close_line attribute + + Parameters + ---------- + storage_model : StorageModel + """ + + frac_nu_diff = ((storage_model.line_list_nu[self.next_line_id] - + storage_model.line_list_nu[self.next_line_id - 1]) / + storage_model.line_list_nu[self.next_line_id]) + + if not self.last_line and frac_nu_diff < line_diff_threshold: + self.close_line = True + else: + self.close_line = False #{ # if (!rpacket_get_last_line (packet) && # fabs (storage->line_list_nu[rpacket_get_next_line_id (packet)] - diff --git a/tardis/montecarlo/montecarlo_numba/storage_model.py b/tardis/montecarlo/montecarlo_numba/storage_model.py index 9c1dd4e2899..3814344a9ad 100644 --- a/tardis/montecarlo/montecarlo_numba/storage_model.py +++ b/tardis/montecarlo/montecarlo_numba/storage_model.py @@ -56,6 +56,7 @@ def __init__(self, packet_nus, packet_mus, packet_energies, self.inverse_sigma_thomson = 1 / self.sigma_thomson self.no_of_lines = no_of_lines self.line_list_nu = line_list_nu + self.line_lists_tau_sobolevs = line_lists_tau_sobolevs def initialize_storage_model(model, plasma, runner): storage_model_kwargs = {'packet_nus': runner.input_nu, From c53425f9fb7c49972421a84c633a22d970eb299f Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 2 May 2019 14:56:08 -0400 Subject: [PATCH 160/467] add numba stuff --- tardis/montecarlo/montecarlo_numba/base.py | 2 -- .../montecarlo_numba/compute_distance.py | 6 ++++-- .../montecarlo_numba/packet_loop.py | 1 + tardis/montecarlo/montecarlo_numba/rpacket.py | 21 +++++++++++++++---- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index 44022fa3730..6c30449bc50 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -26,8 +26,6 @@ def montecarlo_main_loop(storage_model): output_nus = np.empty_like(storage_model.output_nus) output_energies = np.empty_like(storage_model.output_energies) for i in prange(storage_model.no_of_packets): - if i%1000 == 0: - print(i, end='') r_packet = RPacket(storage_model.r_inner[0], storage_model.packet_mus[i], storage_model.packet_nus[i], diff --git a/tardis/montecarlo/montecarlo_numba/compute_distance.py b/tardis/montecarlo/montecarlo_numba/compute_distance.py index e09adb1d12d..bcd7a1a4cad 100644 --- a/tardis/montecarlo/montecarlo_numba/compute_distance.py +++ b/tardis/montecarlo/montecarlo_numba/compute_distance.py @@ -29,14 +29,16 @@ def compute_distance2boundary(packet, storage): # miss inner boundary packet.delta_shell_id = + 1 distance = np.sqrt(r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu) - + if distance < 0.0: + print('hello') + pass packet.d_boundary = distance @njit def compute_distance2line(packet, storage_model): - if not packet.last_line: + if not packet.last_line and not packet.close_line: r = packet.r mu = packet.mu nu = packet.nu diff --git a/tardis/montecarlo/montecarlo_numba/packet_loop.py b/tardis/montecarlo/montecarlo_numba/packet_loop.py index e014e2d2700..60109409638 100644 --- a/tardis/montecarlo/montecarlo_numba/packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/packet_loop.py @@ -12,6 +12,7 @@ def one_packet_loop(storage_model, r_packet): # for a virtual packet tau_event is the sum of all the tau's that the packet passes while r_packet.status == IN_PROCESS: + rpacket_interactions(r_packet, storage_model) # Check if we are at the end of line list. #if not packet.last_line: diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index 6c6624dd828..a3a53bbcd46 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -79,10 +79,12 @@ def compute_distances(self, storage): storage : [type] [description] """ + if not self.close_line: compute_distance2line(self, storage) else: self.d_line = 0.0 + self.close_line = False compute_distance2boundary(self, storage) if self.d_boundary < self.d_line: next_interaction = BOUNDARY @@ -102,6 +104,10 @@ def get_doppler_factor(self, storage): def move_packet(self, storage, distance): doppler_factor = self.get_doppler_factor(storage) r = self.r + if self.close_line: + if distance != 0.0: + print('hello') + pass if (distance > 0.0): new_r = np.sqrt(r * r + distance * distance + 2.0 * r * distance * self.mu) @@ -148,8 +154,9 @@ def transform_energy(self, storage_model): def line_scatter(self, storage_model): next_line_id = self.next_line_id - tau_line = storage_model.line_lists_tau_sobolevs[ - self.current_shell_id, next_line_id] + storage_model.line_lists_tau_sobolevs + tau_line = storage_model.line_lists_tau_sobolevs[next_line_id, + self.current_shell_id] tau_continuum = 0.0 tau_combined = tau_line + tau_continuum @@ -162,7 +169,10 @@ def line_scatter(self, storage_model): else: self.tau_event -= tau_line self.next_line_id = next_line_id + 1 - self.nu_line = storage_model.line_list_nu[self.next_line_id] + if not self.last_line: + self.nu_line = storage_model.line_list_nu[self.next_line_id] + self.set_close_line(storage_model) + def line_emission(self, storage_model): emission_line_id = self.next_line_id @@ -172,7 +182,7 @@ def line_emission(self, storage_model): self.next_line_id = emission_line_id + 1 self.nu_line = storage_model.line_list_nu[self.next_line_id] self.tau_event = get_tau_event() - self.set_close_line(storage_model) + def set_close_line(self, storage_model, line_diff_threshold=1e-7): @@ -184,6 +194,9 @@ def set_close_line(self, storage_model, line_diff_threshold=1e-7): ---------- storage_model : StorageModel """ + if self.last_line: + self.close_line = False + return frac_nu_diff = ((storage_model.line_list_nu[self.next_line_id] - storage_model.line_list_nu[self.next_line_id - 1]) / From b26410b160a422f196bbd953f24552d62ac35fed Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 2 May 2019 19:50:27 -0400 Subject: [PATCH 161/467] branch point to diverge from c --- tardis/montecarlo/montecarlo_numba/base.py | 1 + .../montecarlo_numba/compute_distance.py | 7 ++-- tardis/montecarlo/montecarlo_numba/rpacket.py | 39 ++++++++++++------- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index 6c30449bc50..9b422d242a3 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -32,6 +32,7 @@ def montecarlo_main_loop(storage_model): storage_model.packet_energies[i]) r_packet.set_line(storage_model) r_packet.compute_distances(storage_model) + r_packet.i = i one_packet_loop(storage_model, r_packet) output_nus[i] = r_packet.nu if r_packet.status == REABSORBED: diff --git a/tardis/montecarlo/montecarlo_numba/compute_distance.py b/tardis/montecarlo/montecarlo_numba/compute_distance.py index bcd7a1a4cad..054f5abeda2 100644 --- a/tardis/montecarlo/montecarlo_numba/compute_distance.py +++ b/tardis/montecarlo/montecarlo_numba/compute_distance.py @@ -29,9 +29,6 @@ def compute_distance2boundary(packet, storage): # miss inner boundary packet.delta_shell_id = + 1 distance = np.sqrt(r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu) - if distance < 0.0: - print('hello') - pass packet.d_boundary = distance @@ -51,6 +48,8 @@ def compute_distance2line(packet, storage_model): nu_diff = comov_nu - nu_line if nu_diff >= 0: + if nu_diff / comov_nu < 1e-7: + nu_diff = 0.0 distance = (nu_diff/nu) * ct #else: # nu_r = nu_line / nu @@ -59,6 +58,8 @@ def compute_distance2line(packet, storage_model): packet.d_line = distance else: raise Exception + elif packet.close_line: + packet.d_line = 0.0 else: packet.d_line = MISS_DISTANCE #return TARDIS_ERROR_OK diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index a3a53bbcd46..df181d4538c 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -68,7 +68,15 @@ def __init__(self, r, mu, nu, energy): self.nu_line = -1e99 self.close_line = False self.last_line = False - + + self.comov_nu_history = [] + self.radius_history = [] + self.move_dist_history = [] + self.next_interaction_history = [] + self.mu_history = [] + self.shell_id_history = [] + self.next_line_id_history = [] + def compute_distances(self, storage): """ Compute all distances (d_line, d_boundary, ???), compare, @@ -80,11 +88,8 @@ def compute_distances(self, storage): [description] """ - if not self.close_line: - compute_distance2line(self, storage) - else: - self.d_line = 0.0 - self.close_line = False + + compute_distance2line(self, storage) compute_distance2boundary(self, storage) if self.d_boundary < self.d_line: next_interaction = BOUNDARY @@ -104,15 +109,20 @@ def get_doppler_factor(self, storage): def move_packet(self, storage, distance): doppler_factor = self.get_doppler_factor(storage) r = self.r - if self.close_line: - if distance != 0.0: - print('hello') - pass if (distance > 0.0): new_r = np.sqrt(r * r + distance * distance + 2.0 * r * distance * self.mu) self.mu = (self.mu * r + distance) / new_r self.r = new_r + + self.comov_nu_history.append(self.nu * doppler_factor) + self.radius_history.append(self.r) + self.move_dist_history.append(distance) + self.next_interaction_history.append(self.next_interaction) + self.mu_history.append(self.mu) + self.shell_id_history.append(self.current_shell_id) + self.next_line_id_history.append(self.next_line_id) + def move_packet_across_shell_boundary(self, storage): self.move_packet(storage, self.distance) @@ -139,7 +149,7 @@ def set_line(self, storage_model): self.last_line = False ##### FIXME Add close line initializer in a sensible - think about this!1 - self.set_close_line(storage_model) + #self.set_close_line(storage_model) def transform_energy(self, storage_model): """ @@ -153,6 +163,8 @@ def transform_energy(self, storage_model): self.energy = comov_energy * inverse_doppler_factor def line_scatter(self, storage_model): + if self.distance == 0.0: + self.set_close_line(storage_model) next_line_id = self.next_line_id storage_model.line_lists_tau_sobolevs tau_line = storage_model.line_lists_tau_sobolevs[next_line_id, @@ -171,7 +183,7 @@ def line_scatter(self, storage_model): self.next_line_id = next_line_id + 1 if not self.last_line: self.nu_line = storage_model.line_list_nu[self.next_line_id] - self.set_close_line(storage_model) + def line_emission(self, storage_model): @@ -182,7 +194,7 @@ def line_emission(self, storage_model): self.next_line_id = emission_line_id + 1 self.nu_line = storage_model.line_list_nu[self.next_line_id] self.tau_event = get_tau_event() - + self.set_close_line(storage_model) def set_close_line(self, storage_model, line_diff_threshold=1e-7): @@ -194,6 +206,7 @@ def set_close_line(self, storage_model, line_diff_threshold=1e-7): ---------- storage_model : StorageModel """ + return if self.last_line: self.close_line = False return From 38aae416eea9bd69f8e366eda956e6b5457fec55 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 2 May 2019 20:00:13 -0400 Subject: [PATCH 162/467] working numba implementation --- tardis/montecarlo/montecarlo_numba/base.py | 2 +- tardis/montecarlo/montecarlo_numba/compute_distance.py | 6 +++--- tardis/montecarlo/montecarlo_numba/packet_loop.py | 1 + tardis/montecarlo/montecarlo_numba/rpacket.py | 8 ++++---- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index 9b422d242a3..1eb636a69ec 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -32,7 +32,7 @@ def montecarlo_main_loop(storage_model): storage_model.packet_energies[i]) r_packet.set_line(storage_model) r_packet.compute_distances(storage_model) - r_packet.i = i + #r_packet.i = i one_packet_loop(storage_model, r_packet) output_nus[i] = r_packet.nu if r_packet.status == REABSORBED: diff --git a/tardis/montecarlo/montecarlo_numba/compute_distance.py b/tardis/montecarlo/montecarlo_numba/compute_distance.py index 054f5abeda2..c50aff672cc 100644 --- a/tardis/montecarlo/montecarlo_numba/compute_distance.py +++ b/tardis/montecarlo/montecarlo_numba/compute_distance.py @@ -46,10 +46,10 @@ def compute_distance2line(packet, storage_model): comov_nu = nu * doppler_factor nu_diff = comov_nu - nu_line - - if nu_diff >= 0: - if nu_diff / comov_nu < 1e-7: + if np.abs(nu_diff / comov_nu) < 1e-7: nu_diff = 0.0 + if nu_diff >= 0: + distance = (nu_diff/nu) * ct #else: # nu_r = nu_line / nu diff --git a/tardis/montecarlo/montecarlo_numba/packet_loop.py b/tardis/montecarlo/montecarlo_numba/packet_loop.py index 60109409638..44a5e28b2a7 100644 --- a/tardis/montecarlo/montecarlo_numba/packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/packet_loop.py @@ -12,6 +12,7 @@ def one_packet_loop(storage_model, r_packet): # for a virtual packet tau_event is the sum of all the tau's that the packet passes while r_packet.status == IN_PROCESS: + rpacket_interactions(r_packet, storage_model) # Check if we are at the end of line list. diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index df181d4538c..e9133e7bf2a 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -68,7 +68,7 @@ def __init__(self, r, mu, nu, energy): self.nu_line = -1e99 self.close_line = False self.last_line = False - + """ self.comov_nu_history = [] self.radius_history = [] self.move_dist_history = [] @@ -76,7 +76,7 @@ def __init__(self, r, mu, nu, energy): self.mu_history = [] self.shell_id_history = [] self.next_line_id_history = [] - + """ def compute_distances(self, storage): """ Compute all distances (d_line, d_boundary, ???), compare, @@ -114,7 +114,7 @@ def move_packet(self, storage, distance): 2.0 * r * distance * self.mu) self.mu = (self.mu * r + distance) / new_r self.r = new_r - + """ self.comov_nu_history.append(self.nu * doppler_factor) self.radius_history.append(self.r) self.move_dist_history.append(distance) @@ -122,7 +122,7 @@ def move_packet(self, storage, distance): self.mu_history.append(self.mu) self.shell_id_history.append(self.current_shell_id) self.next_line_id_history.append(self.next_line_id) - + """ def move_packet_across_shell_boundary(self, storage): self.move_packet(storage, self.distance) From 7ce0bf0f4bc0b837da1f03ad731d252f09154dfd Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 3 May 2019 13:12:00 -0400 Subject: [PATCH 163/467] numba rewrite Co-authored-by: Christian Vogl --- tardis/montecarlo/montecarlo_numba/base.py | 2 +- .../montecarlo_numba/packet_loop.py | 21 +++-- tardis/montecarlo/montecarlo_numba/rpacket.py | 94 +++++++++++++++++-- .../montecarlo_numba/storage_model.py | 5 + 4 files changed, 108 insertions(+), 14 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index 1eb636a69ec..a9cc808292c 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -12,7 +12,7 @@ def montecarlo_radial1d(model, plasma, runner): storage_model = initialize_storage_model(model, plasma, runner) montecarlo_main_loop(storage_model) -@njit(**njit_dict)#, parallel=True, nogil=True) +@njit(**njit_dict, nogil=True) def montecarlo_main_loop(storage_model): """ This is the main loop of the MonteCarlo routine that generates packets diff --git a/tardis/montecarlo/montecarlo_numba/packet_loop.py b/tardis/montecarlo/montecarlo_numba/packet_loop.py index 44a5e28b2a7..23cef0726e0 100644 --- a/tardis/montecarlo/montecarlo_numba/packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/packet_loop.py @@ -3,18 +3,26 @@ from enum import Enum from tardis.montecarlo.montecarlo_numba.rpacket import ( ESCATTERING, BOUNDARY, LINE, IN_PROCESS, REABSORBED) + @njit def one_packet_loop(storage_model, r_packet): - #r_packet.nu_line = 0.0 - #packet.virtual_packet = virtual_packet r_packet.status = IN_PROCESS # initializing tau_event if it's a real packet - - # for a virtual packet tau_event is the sum of all the tau's that the packet passes while r_packet.status == IN_PROCESS: - - rpacket_interactions(r_packet, storage_model) + distance, interaction_type, delta_ shell_id = r_packet.trace_packet(storage_model) + if interaction_type == BOUNDARY: + pass + #new_shell_id = r_packet.shell_id + delta_shell_id + #if delta_shell_id == 1: # Moving outwards + # r_new = storage_model.r_inner[new_shell_id] + #else: # Moving inwards + # r_new = storage_model.r_outer[new_shell_id] + #r_packet.move_packet_across_shell_boundary(new_shell_id, r_new) + + #r_packet.move_packet(storage_model) + #r_packet.interact() + # Check if we are at the end of line list. #if not packet.last_line: # packet.nu_line = storeage.line_list_nu[packet.next_line_id] @@ -31,6 +39,7 @@ def one_packet_loop(storage_model, r_packet): # np.exp(-1.0 * packet.tau_event) #if virtual_packet > 0: # packet.energy = packet.energy * np.exp(-1.0 * packet.tau_event) + @njit def rpacket_interactions(r_packet, storage_model): r_packet.compute_distances(storage_model) diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index e9133e7bf2a..b429928580b 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -9,6 +9,7 @@ from astropy import constants as const C_SPEED_OF_LIGHT = const.c.to('cm/s').value +MISS_DISTANCE = 1e99 #class PacketStatus(Enum): @@ -41,9 +42,6 @@ ('distance', float64) ] -@njit(**njit_dict) -def get_tau_event(): - return np.random.exponential() @njit(**njit_dict) @@ -58,7 +56,7 @@ def __init__(self, r, mu, nu, energy): self.mu = mu self.nu = nu self.energy = energy - self.tau_event = get_tau_event() + self.tau_event = np.random.exponential() self.current_shell_id = 0 self.delta_shell_id = 0 self.d_boundary = -1.0 @@ -77,6 +75,90 @@ def __init__(self, r, mu, nu, energy): self.shell_id_history = [] self.next_line_id_history = [] """ + + def calculate_distance_boundary(self, r_inner, r_outer): + delta_shell = 0 + if (self.mu > 0.0): + # direction outward + distance = np.sqrt(r_outer * r_outer + ((self.mu**2 - 1.0) * self.r**2)) - (self.r * self.mu) + delta_shell = 1 + else: + # going inward + check = r_inner**2 + (self.r**2 * (self.mu**2 - 1.0)) + + if (check >= 0.0): + # hit inner boundary + distance = -self.r * self.mu - np.sqrt(check) + delta_shell = -1 + else: + # miss inner boundary + distance = np.sqrt(r_outer**2 + ((self.mu**2 - 1.0) * self.r**2)) - (self.r * self.mu) + delta_shell = 1 + + return distance, delta_shell + + def calculate_distance_line(self, comov_nu, nu_line, ct): + if not self.last_line: + nu_diff = comov_nu - nu_line + + if np.abs(nu_diff / comov_nu) < 1e-7: + nu_diff = 0.0 + if nu_diff >= 0: + return (nu_diff/self.nu) * ct + else: + #return np.abs((nu_diff/self.nu) * ct) + raise Exception + else: + return MISS_DISTANCE + + def trace_packet(self, storage_model): + r_inner = storage_model.r_inner[self.current_shell_id] + r_outer = storage_model.r_outer[self.current_shell_id] + + distance_boundary, delta_shell = self.calculate_distance_boundary(r_inner, r_outer) + + #defining start for stuff + cur_line_id = self.next_line_id + nu_line = 0.0 + #defining taus + tau_event = np.random.exponential() + tau_trace_line = 0.0 + tau_trace_line_combined = 0.0 + doppler_factor = self.get_doppler_factor(storage_model) + comov_nu = self.nu * doppler_factor + distance_trace = 0.0 + + #d_continuum = f(tau_event) + d_continuum = MISS_DISTANCE + + while True: + if cur_line_id < storage_model.no_of_lines: + nu_line = storage_model.line_list_nu[cur_line_id] + tau_trace_line += storage_model.line_lists_tau_sobolevs[cur_line_id, + self.current_shell_id] + else: + nu_line = 0.0 + tau_trace_line = 0.0 + + tau_trace_line_combined += tau_trace_line + distance_trace = self.calculate_distance_line(comov_nu, nu_line, storage_model.ct) + tau_trace_combined = tau_trace_line_combined + 0 #tau_trace_electron electron scattering + + if distance_trace > distance_boundary: + interaction_type = BOUNDARY # BOUNDARY + break + + if distance_trace > d_continuum: + interaction_type = 10 #continuum + break + if tau_trace_combined > tau_event: + interaction_type = LINE #Line + break + + cur_line_id += 1 + + return distance_trace, interaction_type, delta_shell + def compute_distances(self, storage): """ Compute all distances (d_line, d_boundary, ???), compare, @@ -126,8 +208,6 @@ def move_packet(self, storage, distance): def move_packet_across_shell_boundary(self, storage): self.move_packet(storage, self.distance) - - get_tau_event() if ((self.current_shell_id < storage.no_of_shells - 1 and self.delta_shell_id == 1) or (self.current_shell_id > 0 and self.delta_shell_id == -1)): self.current_shell_id += self.delta_shell_id @@ -193,7 +273,7 @@ def line_emission(self, storage_model): self.next_line_id = emission_line_id + 1 self.nu_line = storage_model.line_list_nu[self.next_line_id] - self.tau_event = get_tau_event() + self.tau_event = np.random.exponential() self.set_close_line(storage_model) diff --git a/tardis/montecarlo/montecarlo_numba/storage_model.py b/tardis/montecarlo/montecarlo_numba/storage_model.py index 3814344a9ad..2f141ae5f5c 100644 --- a/tardis/montecarlo/montecarlo_numba/storage_model.py +++ b/tardis/montecarlo/montecarlo_numba/storage_model.py @@ -2,6 +2,8 @@ import numpy as np from astropy import constants as const +C_SPEED_OF_LIGHT = const.c.to('cm/s').value + storage_model_spec = [ ('packet_nus', float64[:]), ('packet_mus', float64[:]), @@ -25,7 +27,9 @@ # ('*nubars', float64), ('sigma_thomson', float64), ('inverse_sigma_thomson', float64), + ('ct', float64), ] + @jitclass(storage_model_spec) class StorageModel(object): def __init__(self, packet_nus, packet_mus, packet_energies, @@ -57,6 +61,7 @@ def __init__(self, packet_nus, packet_mus, packet_energies, self.no_of_lines = no_of_lines self.line_list_nu = line_list_nu self.line_lists_tau_sobolevs = line_lists_tau_sobolevs + self.ct = self.time_explosion * C_SPEED_OF_LIGHT def initialize_storage_model(model, plasma, runner): storage_model_kwargs = {'packet_nus': runner.input_nu, From c10a239dd605c423b68b5d3815453ac557d34784 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 3 May 2019 14:15:31 -0400 Subject: [PATCH 164/467] finished simple implementation Co-authored-by: Christian Vogl --- .../montecarlo_numba/packet_loop.py | 22 ++++--- tardis/montecarlo/montecarlo_numba/rpacket.py | 62 +++++++++++++------ 2 files changed, 57 insertions(+), 27 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/packet_loop.py b/tardis/montecarlo/montecarlo_numba/packet_loop.py index 23cef0726e0..778c4918a3d 100644 --- a/tardis/montecarlo/montecarlo_numba/packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/packet_loop.py @@ -9,16 +9,20 @@ def one_packet_loop(storage_model, r_packet): r_packet.status = IN_PROCESS # initializing tau_event if it's a real packet while r_packet.status == IN_PROCESS: - rpacket_interactions(r_packet, storage_model) - distance, interaction_type, delta_ shell_id = r_packet.trace_packet(storage_model) + #rpacket_interactions(r_packet, storage_model) + distance, interaction_type, delta_shell = r_packet.trace_packet(storage_model) if interaction_type == BOUNDARY: - pass - #new_shell_id = r_packet.shell_id + delta_shell_id - #if delta_shell_id == 1: # Moving outwards - # r_new = storage_model.r_inner[new_shell_id] - #else: # Moving inwards - # r_new = storage_model.r_outer[new_shell_id] - #r_packet.move_packet_across_shell_boundary(new_shell_id, r_new) + r_packet.move_packet_across_shell_boundary(distance, delta_shell, storage_model.no_of_shells) + elif interaction_type == LINE: + r_packet.move_packet(distance) + r_packet.transform_energy(storage_model) + r_packet.line_emission(storage_model) + #new_shell_id = r_packet.shell_id + delta_shell_id + #if delta_shell_id == 1: # Moving outwards + # r_new = storage_model.r_inner[new_shell_id] + #else: # Moving inwards + # r_new = storage_model.r_outer[new_shell_id] + #r_packet.move_packet_across_shell_boundary(new_shell_id, r_new) #r_packet.move_packet(storage_model) #r_packet.interact() diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index b429928580b..4bea4775615 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -111,6 +111,10 @@ def calculate_distance_line(self, comov_nu, nu_line, ct): else: return MISS_DISTANCE + def calculate_distance_continuum(self, storage): + packet.d_electron = storage.inverse_electron_densities[packet.current_shell_id] * \ + storage.inverse_sigma_thomson * packet.tau_event + def trace_packet(self, storage_model): r_inner = storage_model.r_inner[self.current_shell_id] r_outer = storage_model.r_outer[self.current_shell_id] @@ -130,7 +134,7 @@ def trace_packet(self, storage_model): #d_continuum = f(tau_event) d_continuum = MISS_DISTANCE - + #loop_checker = 0 while True: if cur_line_id < storage_model.no_of_lines: nu_line = storage_model.line_list_nu[cur_line_id] @@ -139,6 +143,8 @@ def trace_packet(self, storage_model): else: nu_line = 0.0 tau_trace_line = 0.0 + interaction_type = BOUNDARY # FIXME: does not work for e-scattering + break tau_trace_line_combined += tau_trace_line distance_trace = self.calculate_distance_line(comov_nu, nu_line, storage_model.ct) @@ -146,16 +152,21 @@ def trace_packet(self, storage_model): if distance_trace > distance_boundary: interaction_type = BOUNDARY # BOUNDARY + self.next_line_id = cur_line_id break if distance_trace > d_continuum: interaction_type = 10 #continuum - break + #break if tau_trace_combined > tau_event: interaction_type = LINE #Line break cur_line_id += 1 + + #loop_checker +=1 + #if loop_checker > 10000: + # raise Exception return distance_trace, interaction_type, delta_shell @@ -188,30 +199,45 @@ def get_doppler_factor(self, storage): return 1.0 - self.mu * beta - def move_packet(self, storage, distance): - doppler_factor = self.get_doppler_factor(storage) + def move_packet(self, distance): + """Move packet a distance and recalculate the new angle mu + + Parameters + ---------- + distance : float + distance in cm + """ + r = self.r if (distance > 0.0): - new_r = np.sqrt(r * r + distance * distance + + new_r = np.sqrt(r**2 + distance**2 + 2.0 * r * distance * self.mu) self.mu = (self.mu * r + distance) / new_r self.r = new_r + + def move_packet_across_shell_boundary(self, distance, delta_shell, no_of_shells): """ - self.comov_nu_history.append(self.nu * doppler_factor) - self.radius_history.append(self.r) - self.move_dist_history.append(distance) - self.next_interaction_history.append(self.next_interaction) - self.mu_history.append(self.mu) - self.shell_id_history.append(self.current_shell_id) - self.next_line_id_history.append(self.next_line_id) + Move packet across shell boundary - realizing if we are still in the simulation or have + moved out through the inner boundary or outer boundary and updating packet + status. + + Parameters + ---------- + distance : float + distance to move to shell boundary + + delta_shell: int + is +1 if moving outward or -1 if moving inward + + no_of_shells: int + number of shells in TARDIS simulation """ - def move_packet_across_shell_boundary(self, storage): - self.move_packet(storage, self.distance) - if ((self.current_shell_id < storage.no_of_shells - 1 and self.delta_shell_id == 1) - or (self.current_shell_id > 0 and self.delta_shell_id == -1)): - self.current_shell_id += self.delta_shell_id - elif self.delta_shell_id == 1: + self.move_packet(distance) + if ((self.current_shell_id < no_of_shells - 1 and delta_shell == 1) + or (self.current_shell_id > 0 and delta_shell == -1)): + self.current_shell_id += delta_shell + elif delta_shell == 1: self.status = EMITTED else: self.status = REABSORBED From 97028343e3e8f830f42b07596a82a9af4050da5f Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 3 May 2019 14:34:27 -0400 Subject: [PATCH 165/467] cleaned up version Co-authored-by: Christian Vogl --- tardis/montecarlo/montecarlo_numba/base.py | 9 +- .../montecarlo_numba/packet_loop.py | 57 ------- tardis/montecarlo/montecarlo_numba/rpacket.py | 145 ++---------------- .../montecarlo_numba/single_packet_loop.py | 18 +++ 4 files changed, 33 insertions(+), 196 deletions(-) delete mode 100644 tardis/montecarlo/montecarlo_numba/packet_loop.py create mode 100644 tardis/montecarlo/montecarlo_numba/single_packet_loop.py diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index a9cc808292c..0822b67a349 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -2,7 +2,7 @@ import numpy as np from tardis.montecarlo.montecarlo_numba.rpacket import RPacket, REABSORBED, EMITTED from tardis.montecarlo.montecarlo_numba.storage_model import StorageModel, initialize_storage_model -from tardis.montecarlo.montecarlo_numba.packet_loop import one_packet_loop +from tardis.montecarlo.montecarlo_numba.single_packet_loop import single_packet_loop from tardis.montecarlo.montecarlo_numba import njit_dict #config.THREADING_LAYER = 'threadsafe' @@ -12,7 +12,7 @@ def montecarlo_radial1d(model, plasma, runner): storage_model = initialize_storage_model(model, plasma, runner) montecarlo_main_loop(storage_model) -@njit(**njit_dict, nogil=True) +@njit(**njit_dict, nogil=True, parallel=True) def montecarlo_main_loop(storage_model): """ This is the main loop of the MonteCarlo routine that generates packets @@ -30,10 +30,7 @@ def montecarlo_main_loop(storage_model): storage_model.packet_mus[i], storage_model.packet_nus[i], storage_model.packet_energies[i]) - r_packet.set_line(storage_model) - r_packet.compute_distances(storage_model) - #r_packet.i = i - one_packet_loop(storage_model, r_packet) + single_packet_loop(storage_model, r_packet) output_nus[i] = r_packet.nu if r_packet.status == REABSORBED: output_energies[i] = -r_packet.energy diff --git a/tardis/montecarlo/montecarlo_numba/packet_loop.py b/tardis/montecarlo/montecarlo_numba/packet_loop.py deleted file mode 100644 index 778c4918a3d..00000000000 --- a/tardis/montecarlo/montecarlo_numba/packet_loop.py +++ /dev/null @@ -1,57 +0,0 @@ -from numba import njit -import numpy as np -from enum import Enum -from tardis.montecarlo.montecarlo_numba.rpacket import ( - ESCATTERING, BOUNDARY, LINE, IN_PROCESS, REABSORBED) - -@njit -def one_packet_loop(storage_model, r_packet): - r_packet.status = IN_PROCESS - # initializing tau_event if it's a real packet - while r_packet.status == IN_PROCESS: - #rpacket_interactions(r_packet, storage_model) - distance, interaction_type, delta_shell = r_packet.trace_packet(storage_model) - if interaction_type == BOUNDARY: - r_packet.move_packet_across_shell_boundary(distance, delta_shell, storage_model.no_of_shells) - elif interaction_type == LINE: - r_packet.move_packet(distance) - r_packet.transform_energy(storage_model) - r_packet.line_emission(storage_model) - #new_shell_id = r_packet.shell_id + delta_shell_id - #if delta_shell_id == 1: # Moving outwards - # r_new = storage_model.r_inner[new_shell_id] - #else: # Moving inwards - # r_new = storage_model.r_outer[new_shell_id] - #r_packet.move_packet_across_shell_boundary(new_shell_id, r_new) - - #r_packet.move_packet(storage_model) - #r_packet.interact() - - # Check if we are at the end of line list. - #if not packet.last_line: - # packet.nu_line = storeage.line_list_nu[packet.next_line_id] - - # FIXME: get_event_handler(packet, storage, &distance, mt_state) (packet, storage, distance, mt_state) - - # if virtual_packet > 0 and packet.tau_event > storage.tau_russian: - # event_random = rk_double(mt_state) - # if event_random > storage.survival_probability: - # packet.energy = 0.0 - # packet.status = PacketStatus.EMITTED - # else: - # packet.energy = packet.energy / storage.survival_probability * \ - # np.exp(-1.0 * packet.tau_event) - #if virtual_packet > 0: - # packet.energy = packet.energy * np.exp(-1.0 * packet.tau_event) - -@njit -def rpacket_interactions(r_packet, storage_model): - r_packet.compute_distances(storage_model) - if r_packet.next_interaction == BOUNDARY: - r_packet.move_packet_across_shell_boundary(storage_model) - else: - r_packet.line_scatter(storage_model) - - # pass - #else: - # pass \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index 4bea4775615..63e641438df 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -27,19 +27,9 @@ ('mu', float64), ('nu', float64), ('energy', float64), - ('tau_event', float64), - ('nu_line', float64), - ('last_line', boolean), - ('close_line', boolean), ('next_line_id', int64), - ('d_line', float64), # Distance to line event. - ('d_electron', float64), #/**< Distance to line event. */ - ('d_boundary', float64), # distance to boundary ('current_shell_id', int64), - ('delta_shell_id', int64), - ('next_interaction', int64), ('status', int64), - ('distance', float64) ] @@ -56,25 +46,9 @@ def __init__(self, r, mu, nu, energy): self.mu = mu self.nu = nu self.energy = energy - self.tau_event = np.random.exponential() self.current_shell_id = 0 - self.delta_shell_id = 0 - self.d_boundary = -1.0 - self.d_electron = -1.0 - self.d_line = 1.e99 - self.distance = 0.0 - self.nu_line = -1e99 - self.close_line = False - self.last_line = False - """ - self.comov_nu_history = [] - self.radius_history = [] - self.move_dist_history = [] - self.next_interaction_history = [] - self.mu_history = [] - self.shell_id_history = [] - self.next_line_id_history = [] - """ + self.status = IN_PROCESS + self.next_line_id = -1 def calculate_distance_boundary(self, r_inner, r_outer): delta_shell = 0 @@ -98,19 +72,16 @@ def calculate_distance_boundary(self, r_inner, r_outer): return distance, delta_shell def calculate_distance_line(self, comov_nu, nu_line, ct): - if not self.last_line: - nu_diff = comov_nu - nu_line + nu_diff = comov_nu - nu_line - if np.abs(nu_diff / comov_nu) < 1e-7: - nu_diff = 0.0 - if nu_diff >= 0: - return (nu_diff/self.nu) * ct - else: - #return np.abs((nu_diff/self.nu) * ct) - raise Exception + if np.abs(nu_diff / comov_nu) < 1e-7: + nu_diff = 0.0 + if nu_diff >= 0: + return (nu_diff/self.nu) * ct else: - return MISS_DISTANCE - + #return np.abs((nu_diff/self.nu) * ct) + raise Exception + def calculate_distance_continuum(self, storage): packet.d_electron = storage.inverse_electron_densities[packet.current_shell_id] * \ storage.inverse_sigma_thomson * packet.tau_event @@ -169,30 +140,6 @@ def trace_packet(self, storage_model): # raise Exception return distance_trace, interaction_type, delta_shell - - def compute_distances(self, storage): - """ - Compute all distances (d_line, d_boundary, ???), compare, - and set interaction - - Parameters - ---------- - storage : [type] - [description] - """ - - - compute_distance2line(self, storage) - compute_distance2boundary(self, storage) - if self.d_boundary < self.d_line: - next_interaction = BOUNDARY - self.distance = self.d_boundary - else: - next_interaction = LINE - self.distance = self.d_line - - self.next_interaction = next_interaction - def get_doppler_factor(self, storage): beta = self.r * storage.inverse_time_explosion / C_SPEED_OF_LIGHT @@ -242,20 +189,12 @@ def move_packet_across_shell_boundary(self, distance, delta_shell, no_of_shells) else: self.status = REABSORBED - def set_line(self, storage_model): + def initialize_line_id(self, storage_model): inverse_line_list_nu = storage_model.line_list_nu[::-1] doppler_factor = self.get_doppler_factor(storage_model) comov_nu = self.nu * doppler_factor next_line_id = storage_model.no_of_lines - np.searchsorted(inverse_line_list_nu, comov_nu) self.next_line_id = next_line_id - if self.next_line_id > (storage_model.no_of_lines - 1): - self.last_line = True - else: - self.nu_line = storage_model.line_list_nu[self.next_line_id] - self.last_line = False - - ##### FIXME Add close line initializer in a sensible - think about this!1 - #self.set_close_line(storage_model) def transform_energy(self, storage_model): """ @@ -268,69 +207,9 @@ def transform_energy(self, storage_model): comov_energy = self.energy * old_doppler_factor self.energy = comov_energy * inverse_doppler_factor - def line_scatter(self, storage_model): - if self.distance == 0.0: - self.set_close_line(storage_model) - next_line_id = self.next_line_id - storage_model.line_lists_tau_sobolevs - tau_line = storage_model.line_lists_tau_sobolevs[next_line_id, - self.current_shell_id] - tau_continuum = 0.0 - tau_combined = tau_line + tau_continuum - - if (next_line_id + 1) == storage_model.no_of_lines: - self.last_line = True - if (self.tau_event < tau_combined): # Line absorption occurs - self.move_packet(storage_model, self.distance) - self.transform_energy(storage_model) - self.line_emission(storage_model) - else: - self.tau_event -= tau_line - self.next_line_id = next_line_id + 1 - if not self.last_line: - self.nu_line = storage_model.line_list_nu[self.next_line_id] - - - def line_emission(self, storage_model): emission_line_id = self.next_line_id inverse_doppler_factor = 1 / self.get_doppler_factor(storage_model) self.nu = storage_model.line_list_nu[emission_line_id] * inverse_doppler_factor - self.next_line_id = emission_line_id + 1 - self.nu_line = storage_model.line_list_nu[self.next_line_id] - self.tau_event = np.random.exponential() - self.set_close_line(storage_model) - - - def set_close_line(self, storage_model, line_diff_threshold=1e-7): - """ - The Packet currently sits on next_line_id - 1 and we are checking if the - next line is closer than 1e-7 to set the close_line attribute - - Parameters - ---------- - storage_model : StorageModel - """ - return - if self.last_line: - self.close_line = False - return - - frac_nu_diff = ((storage_model.line_list_nu[self.next_line_id] - - storage_model.line_list_nu[self.next_line_id - 1]) / - storage_model.line_list_nu[self.next_line_id]) - - if not self.last_line and frac_nu_diff < line_diff_threshold: - self.close_line = True - else: - self.close_line = False -#{ -# if (!rpacket_get_last_line (packet) && -# fabs (storage->line_list_nu[rpacket_get_next_line_id (packet)] - -# rpacket_get_nu_line (packet)) < (rpacket_get_nu_line (packet)* -# 1e-7)) -# { -# rpacket_set_close_line (packet, true); -# } -#} + self.next_line_id = emission_line_id + 1 \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py new file mode 100644 index 00000000000..4fc8125a04a --- /dev/null +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -0,0 +1,18 @@ +from numba import njit +import numpy as np +from enum import Enum +from tardis.montecarlo.montecarlo_numba.rpacket import ( + ESCATTERING, BOUNDARY, LINE, IN_PROCESS, REABSORBED) + +@njit +def single_packet_loop(storage_model, r_packet): + while r_packet.status == IN_PROCESS: + #rpacket_interactions(r_packet, storage_model) + r_packet.initialize_line_id(storage_model) + distance, interaction_type, delta_shell = r_packet.trace_packet(storage_model) + if interaction_type == BOUNDARY: + r_packet.move_packet_across_shell_boundary(distance, delta_shell, storage_model.no_of_shells) + elif interaction_type == LINE: + r_packet.move_packet(distance) + r_packet.transform_energy(storage_model) + r_packet.line_emission(storage_model) From bfd571dbd439cbca42fe2466368b5939dc89a9df Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 3 May 2019 14:59:49 -0400 Subject: [PATCH 166/467] rewrite problem --- .../montecarlo/montecarlo_numba/__init__.py | 2 +- tardis/montecarlo/montecarlo_numba/base.py | 2 +- tardis/montecarlo/montecarlo_numba/rpacket.py | 68 +++++++++---------- 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/__init__.py b/tardis/montecarlo/montecarlo_numba/__init__.py index dd918494b6a..c68b278dab2 100644 --- a/tardis/montecarlo/montecarlo_numba/__init__.py +++ b/tardis/montecarlo/montecarlo_numba/__init__.py @@ -1,6 +1,6 @@ from llvmlite import binding binding.set_option("tmp", "-non-global-value-max-name-size=2048") -njit_dict = {'fastmath': True} +njit_dict = {'fastmath': False} from tardis.montecarlo.montecarlo_numba.rpacket import RPacket from tardis.montecarlo.montecarlo_numba.base import montecarlo_radial1d \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index 0822b67a349..840cfd422fb 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -12,7 +12,7 @@ def montecarlo_radial1d(model, plasma, runner): storage_model = initialize_storage_model(model, plasma, runner) montecarlo_main_loop(storage_model) -@njit(**njit_dict, nogil=True, parallel=True) +@njit(**njit_dict, nogil=True) def montecarlo_main_loop(storage_model): """ This is the main loop of the MonteCarlo routine that generates packets diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index 63e641438df..0c6402d3a82 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -32,7 +32,39 @@ ('status', int64), ] +@njit(**njit_dict) +def calculate_distance_boundary(r, mu, r_inner, r_outer): + delta_shell = 0 + if (mu > 0.0): + # direction outward + distance = np.sqrt(r_outer * r_outer + ((mu**2 - 1.0) * r**2)) - (r * mu) + delta_shell = 1 + else: + # going inward + check = r_inner**2 + (r**2 * (mu**2 - 1.0)) + + if (check >= 0.0): + # hit inner boundary + distance = -r * mu - np.sqrt(check) + delta_shell = -1 + else: + # miss inner boundary + distance = np.sqrt(r_outer**2 + ((mu**2 - 1.0) * r**2)) - (r * mu) + delta_shell = 1 + + return distance, delta_shell +@njit(**njit_dict) +def calculate_distance_line(nu, comov_nu, nu_line, ct): + nu_diff = comov_nu - nu_line + + if np.abs(nu_diff / comov_nu) < 1e-7: + nu_diff = 0.0 + if nu_diff >= 0: + return (nu_diff / nu) * ct + else: + #return np.abs((nu_diff/self.nu) * ct) + raise Exception @njit(**njit_dict) def get_random_mu(): @@ -49,38 +81,6 @@ def __init__(self, r, mu, nu, energy): self.current_shell_id = 0 self.status = IN_PROCESS self.next_line_id = -1 - - def calculate_distance_boundary(self, r_inner, r_outer): - delta_shell = 0 - if (self.mu > 0.0): - # direction outward - distance = np.sqrt(r_outer * r_outer + ((self.mu**2 - 1.0) * self.r**2)) - (self.r * self.mu) - delta_shell = 1 - else: - # going inward - check = r_inner**2 + (self.r**2 * (self.mu**2 - 1.0)) - - if (check >= 0.0): - # hit inner boundary - distance = -self.r * self.mu - np.sqrt(check) - delta_shell = -1 - else: - # miss inner boundary - distance = np.sqrt(r_outer**2 + ((self.mu**2 - 1.0) * self.r**2)) - (self.r * self.mu) - delta_shell = 1 - - return distance, delta_shell - - def calculate_distance_line(self, comov_nu, nu_line, ct): - nu_diff = comov_nu - nu_line - - if np.abs(nu_diff / comov_nu) < 1e-7: - nu_diff = 0.0 - if nu_diff >= 0: - return (nu_diff/self.nu) * ct - else: - #return np.abs((nu_diff/self.nu) * ct) - raise Exception def calculate_distance_continuum(self, storage): packet.d_electron = storage.inverse_electron_densities[packet.current_shell_id] * \ @@ -90,7 +90,7 @@ def trace_packet(self, storage_model): r_inner = storage_model.r_inner[self.current_shell_id] r_outer = storage_model.r_outer[self.current_shell_id] - distance_boundary, delta_shell = self.calculate_distance_boundary(r_inner, r_outer) + distance_boundary, delta_shell = calculate_distance_boundary(self.r, self.mu, r_inner, r_outer) #defining start for stuff cur_line_id = self.next_line_id @@ -118,7 +118,7 @@ def trace_packet(self, storage_model): break tau_trace_line_combined += tau_trace_line - distance_trace = self.calculate_distance_line(comov_nu, nu_line, storage_model.ct) + distance_trace = calculate_distance_line(self.nu, comov_nu, nu_line, storage_model.ct) tau_trace_combined = tau_trace_line_combined + 0 #tau_trace_electron electron scattering if distance_trace > distance_boundary: From a16f23da40a3b56774e1eecfc3c78d1965ee60fd Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 3 May 2019 15:49:41 -0400 Subject: [PATCH 167/467] further simplified r_packet --- tardis/montecarlo/montecarlo_numba/rpacket.py | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index 0c6402d3a82..d90a06e9750 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -66,6 +66,13 @@ def calculate_distance_line(nu, comov_nu, nu_line, ct): #return np.abs((nu_diff/self.nu) * ct) raise Exception +@njit(**njit_dict) +def get_doppler_factor(r, mu, inverse_time_explosion): + beta = (r * inverse_time_explosion) / C_SPEED_OF_LIGHT + + return 1.0 - mu * beta + + @njit(**njit_dict) def get_random_mu(): return 2.0 * np.random.random() - 1.0 @@ -99,7 +106,7 @@ def trace_packet(self, storage_model): tau_event = np.random.exponential() tau_trace_line = 0.0 tau_trace_line_combined = 0.0 - doppler_factor = self.get_doppler_factor(storage_model) + doppler_factor = get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) comov_nu = self.nu * doppler_factor distance_trace = 0.0 @@ -131,6 +138,7 @@ def trace_packet(self, storage_model): #break if tau_trace_combined > tau_event: interaction_type = LINE #Line + self.next_line_id = cur_line_id break cur_line_id += 1 @@ -140,11 +148,6 @@ def trace_packet(self, storage_model): # raise Exception return distance_trace, interaction_type, delta_shell - - def get_doppler_factor(self, storage): - beta = self.r * storage.inverse_time_explosion / C_SPEED_OF_LIGHT - - return 1.0 - self.mu * beta def move_packet(self, distance): """Move packet a distance and recalculate the new angle mu @@ -191,7 +194,7 @@ def move_packet_across_shell_boundary(self, distance, delta_shell, no_of_shells) def initialize_line_id(self, storage_model): inverse_line_list_nu = storage_model.line_list_nu[::-1] - doppler_factor = self.get_doppler_factor(storage_model) + doppler_factor = get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) comov_nu = self.nu * doppler_factor next_line_id = storage_model.no_of_lines - np.searchsorted(inverse_line_list_nu, comov_nu) self.next_line_id = next_line_id @@ -201,15 +204,15 @@ def transform_energy(self, storage_model): Transform from the LabFrame to the ComovingFrame. Then change the angle and transform back conserving energy in the ComovingFrame. """ - old_doppler_factor = self.get_doppler_factor(storage_model) + old_doppler_factor = get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) self.mu = get_random_mu() - inverse_doppler_factor = 1. / self.get_doppler_factor(storage_model) + inverse_doppler_factor = 1. / get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) comov_energy = self.energy * old_doppler_factor self.energy = comov_energy * inverse_doppler_factor def line_emission(self, storage_model): emission_line_id = self.next_line_id - inverse_doppler_factor = 1 / self.get_doppler_factor(storage_model) + inverse_doppler_factor = 1 / get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) self.nu = storage_model.line_list_nu[emission_line_id] * inverse_doppler_factor self.next_line_id = emission_line_id + 1 \ No newline at end of file From 17007c81e1a827bd13bd1383ba30cbcec45cf2fe Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 3 May 2019 17:00:05 -0400 Subject: [PATCH 168/467] fixing simple implementation Co-authored-by: Christian Vogl --- .../montecarlo/montecarlo_numba/__init__.py | 2 +- tardis/montecarlo/montecarlo_numba/rpacket.py | 26 ++++++++++--------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/__init__.py b/tardis/montecarlo/montecarlo_numba/__init__.py index c68b278dab2..dd918494b6a 100644 --- a/tardis/montecarlo/montecarlo_numba/__init__.py +++ b/tardis/montecarlo/montecarlo_numba/__init__.py @@ -1,6 +1,6 @@ from llvmlite import binding binding.set_option("tmp", "-non-global-value-max-name-size=2048") -njit_dict = {'fastmath': False} +njit_dict = {'fastmath': True} from tardis.montecarlo.montecarlo_numba.rpacket import RPacket from tardis.montecarlo.montecarlo_numba.base import montecarlo_radial1d \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index d90a06e9750..2a72363e0e1 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -11,7 +11,6 @@ C_SPEED_OF_LIGHT = const.c.to('cm/s').value MISS_DISTANCE = 1e99 - #class PacketStatus(Enum): IN_PROCESS = 0 EMITTED = 1 @@ -37,7 +36,7 @@ def calculate_distance_boundary(r, mu, r_inner, r_outer): delta_shell = 0 if (mu > 0.0): # direction outward - distance = np.sqrt(r_outer * r_outer + ((mu**2 - 1.0) * r**2)) - (r * mu) + distance = np.sqrt(r_outer**2 + ((mu**2 - 1.0) * r**2)) - (r * mu) delta_shell = 1 else: # going inward @@ -56,8 +55,9 @@ def calculate_distance_boundary(r, mu, r_inner, r_outer): @njit(**njit_dict) def calculate_distance_line(nu, comov_nu, nu_line, ct): + if nu_line == 0.0: + return MISS_DISTANCE nu_diff = comov_nu - nu_line - if np.abs(nu_diff / comov_nu) < 1e-7: nu_diff = 0.0 if nu_diff >= 0: @@ -69,7 +69,6 @@ def calculate_distance_line(nu, comov_nu, nu_line, ct): @njit(**njit_dict) def get_doppler_factor(r, mu, inverse_time_explosion): beta = (r * inverse_time_explosion) / C_SPEED_OF_LIGHT - return 1.0 - mu * beta @@ -97,6 +96,8 @@ def trace_packet(self, storage_model): r_inner = storage_model.r_inner[self.current_shell_id] r_outer = storage_model.r_outer[self.current_shell_id] + distance = 0.0 + distance_boundary, delta_shell = calculate_distance_boundary(self.r, self.mu, r_inner, r_outer) #defining start for stuff @@ -106,15 +107,14 @@ def trace_packet(self, storage_model): tau_event = np.random.exponential() tau_trace_line = 0.0 tau_trace_line_combined = 0.0 + #Calculating doppler factor doppler_factor = get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) comov_nu = self.nu * doppler_factor distance_trace = 0.0 - - #d_continuum = f(tau_event) d_continuum = MISS_DISTANCE - #loop_checker = 0 + while True: - if cur_line_id < storage_model.no_of_lines: + if cur_line_id < storage_model.no_of_lines: # last_line nu_line = storage_model.line_list_nu[cur_line_id] tau_trace_line += storage_model.line_lists_tau_sobolevs[cur_line_id, self.current_shell_id] @@ -122,6 +122,7 @@ def trace_packet(self, storage_model): nu_line = 0.0 tau_trace_line = 0.0 interaction_type = BOUNDARY # FIXME: does not work for e-scattering + distance = distance_boundary break tau_trace_line_combined += tau_trace_line @@ -131,6 +132,7 @@ def trace_packet(self, storage_model): if distance_trace > distance_boundary: interaction_type = BOUNDARY # BOUNDARY self.next_line_id = cur_line_id + distance = distance_boundary break if distance_trace > d_continuum: @@ -139,6 +141,7 @@ def trace_packet(self, storage_model): if tau_trace_combined > tau_event: interaction_type = LINE #Line self.next_line_id = cur_line_id + distance = distance_trace break cur_line_id += 1 @@ -147,7 +150,7 @@ def trace_packet(self, storage_model): #if loop_checker > 10000: # raise Exception - return distance_trace, interaction_type, delta_shell + return distance, interaction_type, delta_shell def move_packet(self, distance): """Move packet a distance and recalculate the new angle mu @@ -206,13 +209,12 @@ def transform_energy(self, storage_model): """ old_doppler_factor = get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) self.mu = get_random_mu() - inverse_doppler_factor = 1. / get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) + inverse_new_doppler_factor = 1. / get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) comov_energy = self.energy * old_doppler_factor - self.energy = comov_energy * inverse_doppler_factor + self.energy = comov_energy * inverse_new_doppler_factor def line_emission(self, storage_model): emission_line_id = self.next_line_id inverse_doppler_factor = 1 / get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) self.nu = storage_model.line_list_nu[emission_line_id] * inverse_doppler_factor - self.next_line_id = emission_line_id + 1 \ No newline at end of file From 11e76db05c88320be31f54cd4a62376c90789103 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 3 May 2019 18:56:52 -0400 Subject: [PATCH 169/467] more fixes Co-authored-by: Christian Vogl --- .../montecarlo/montecarlo_numba/__init__.py | 2 +- tardis/montecarlo/montecarlo_numba/base.py | 1 + tardis/montecarlo/montecarlo_numba/rpacket.py | 26 +++++++++---------- .../montecarlo_numba/single_packet_loop.py | 4 +-- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/__init__.py b/tardis/montecarlo/montecarlo_numba/__init__.py index dd918494b6a..c68b278dab2 100644 --- a/tardis/montecarlo/montecarlo_numba/__init__.py +++ b/tardis/montecarlo/montecarlo_numba/__init__.py @@ -1,6 +1,6 @@ from llvmlite import binding binding.set_option("tmp", "-non-global-value-max-name-size=2048") -njit_dict = {'fastmath': True} +njit_dict = {'fastmath': False} from tardis.montecarlo.montecarlo_numba.rpacket import RPacket from tardis.montecarlo.montecarlo_numba.base import montecarlo_radial1d \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index 840cfd422fb..4819c3e85fb 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -32,6 +32,7 @@ def montecarlo_main_loop(storage_model): storage_model.packet_energies[i]) single_packet_loop(storage_model, r_packet) output_nus[i] = r_packet.nu + if r_packet.status == REABSORBED: output_energies[i] = -r_packet.energy elif r_packet.status == EMITTED: diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index 2a72363e0e1..00c0317f574 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -1,7 +1,7 @@ import numpy as np from enum import Enum from numba import int64, float64, boolean -from numba import jitclass, njit +from numba import jitclass, njit, gdb from tardis.montecarlo.montecarlo_numba.compute_distance import (compute_distance2boundary, compute_distance2continuum, compute_distance2line) @@ -54,7 +54,7 @@ def calculate_distance_boundary(r, mu, r_inner, r_outer): return distance, delta_shell @njit(**njit_dict) -def calculate_distance_line(nu, comov_nu, nu_line, ct): +def calculate_distance_line(nu, comov_nu, nu_line, ct, i): if nu_line == 0.0: return MISS_DISTANCE nu_diff = comov_nu - nu_line @@ -63,7 +63,7 @@ def calculate_distance_line(nu, comov_nu, nu_line, ct): if nu_diff >= 0: return (nu_diff / nu) * ct else: - #return np.abs((nu_diff/self.nu) * ct) + print('nu', nu, nu_diff, comov_nu, nu_line, ct, np.abs((nu_diff / nu) * ct), i) raise Exception @njit(**njit_dict) @@ -107,14 +107,15 @@ def trace_packet(self, storage_model): tau_event = np.random.exponential() tau_trace_line = 0.0 tau_trace_line_combined = 0.0 + #Calculating doppler factor doppler_factor = get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) comov_nu = self.nu * doppler_factor distance_trace = 0.0 d_continuum = MISS_DISTANCE - + while True: - if cur_line_id < storage_model.no_of_lines: # last_line + if cur_line_id < storage_model.no_of_lines: # not last_line nu_line = storage_model.line_list_nu[cur_line_id] tau_trace_line += storage_model.line_lists_tau_sobolevs[cur_line_id, self.current_shell_id] @@ -123,10 +124,11 @@ def trace_packet(self, storage_model): tau_trace_line = 0.0 interaction_type = BOUNDARY # FIXME: does not work for e-scattering distance = distance_boundary + self.next_line_id = cur_line_id break tau_trace_line_combined += tau_trace_line - distance_trace = calculate_distance_line(self.nu, comov_nu, nu_line, storage_model.ct) + distance_trace = calculate_distance_line(self.nu, comov_nu, nu_line, storage_model.ct, i) tau_trace_combined = tau_trace_line_combined + 0 #tau_trace_electron electron scattering if distance_trace > distance_boundary: @@ -135,9 +137,9 @@ def trace_packet(self, storage_model): distance = distance_boundary break - if distance_trace > d_continuum: - interaction_type = 10 #continuum - #break + #if distance_trace > d_continuum: + # interaction_type = 10 #continuum + # #break if tau_trace_combined > tau_event: interaction_type = LINE #Line self.next_line_id = cur_line_id @@ -145,11 +147,7 @@ def trace_packet(self, storage_model): break cur_line_id += 1 - - #loop_checker +=1 - #if loop_checker > 10000: - # raise Exception - + return distance, interaction_type, delta_shell def move_packet(self, distance): diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index 4fc8125a04a..4ef4365c1d1 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -6,9 +6,9 @@ @njit def single_packet_loop(storage_model, r_packet): + r_packet.initialize_line_id(storage_model) + while r_packet.status == IN_PROCESS: - #rpacket_interactions(r_packet, storage_model) - r_packet.initialize_line_id(storage_model) distance, interaction_type, delta_shell = r_packet.trace_packet(storage_model) if interaction_type == BOUNDARY: r_packet.move_packet_across_shell_boundary(distance, delta_shell, storage_model.no_of_shells) From 44e2fe3336de73f23692e8b5a2c484fdf64e9322 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 3 May 2019 19:10:59 -0400 Subject: [PATCH 170/467] several fixes Co-authored-by: Christian Vogl --- tardis/montecarlo/montecarlo_numba/rpacket.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index 00c0317f574..ce178fb191d 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -54,7 +54,7 @@ def calculate_distance_boundary(r, mu, r_inner, r_outer): return distance, delta_shell @njit(**njit_dict) -def calculate_distance_line(nu, comov_nu, nu_line, ct, i): +def calculate_distance_line(nu, comov_nu, nu_line, ct): if nu_line == 0.0: return MISS_DISTANCE nu_diff = comov_nu - nu_line @@ -63,7 +63,6 @@ def calculate_distance_line(nu, comov_nu, nu_line, ct, i): if nu_diff >= 0: return (nu_diff / nu) * ct else: - print('nu', nu, nu_diff, comov_nu, nu_line, ct, np.abs((nu_diff / nu) * ct), i) raise Exception @njit(**njit_dict) @@ -128,7 +127,7 @@ def trace_packet(self, storage_model): break tau_trace_line_combined += tau_trace_line - distance_trace = calculate_distance_line(self.nu, comov_nu, nu_line, storage_model.ct, i) + distance_trace = calculate_distance_line(self.nu, comov_nu, nu_line, storage_model.ct) tau_trace_combined = tau_trace_line_combined + 0 #tau_trace_electron electron scattering if distance_trace > distance_boundary: From 735ed5ec80a39d61e3f2bdb2cc37c60aa1abe1b1 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 3 May 2019 19:14:15 -0400 Subject: [PATCH 171/467] final simple version Co-authored-by: Christian Vogl --- tardis/montecarlo/montecarlo_numba/rpacket.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index ce178fb191d..bf584c045ee 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -116,7 +116,7 @@ def trace_packet(self, storage_model): while True: if cur_line_id < storage_model.no_of_lines: # not last_line nu_line = storage_model.line_list_nu[cur_line_id] - tau_trace_line += storage_model.line_lists_tau_sobolevs[cur_line_id, + tau_trace_line = storage_model.line_lists_tau_sobolevs[cur_line_id, self.current_shell_id] else: nu_line = 0.0 From af2c440ba60f240db2ebb77e726d0c41fc27c8b4 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 4 May 2019 09:13:10 -0400 Subject: [PATCH 172/467] adding electron scattering --- .../montecarlo/montecarlo_numba/__init__.py | 2 +- tardis/montecarlo/montecarlo_numba/rpacket.py | 42 +++++++++++-------- .../montecarlo_numba/single_packet_loop.py | 8 ++-- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/__init__.py b/tardis/montecarlo/montecarlo_numba/__init__.py index c68b278dab2..dd918494b6a 100644 --- a/tardis/montecarlo/montecarlo_numba/__init__.py +++ b/tardis/montecarlo/montecarlo_numba/__init__.py @@ -1,6 +1,6 @@ from llvmlite import binding binding.set_option("tmp", "-non-global-value-max-name-size=2048") -njit_dict = {'fastmath': False} +njit_dict = {'fastmath': True} from tardis.montecarlo.montecarlo_numba.rpacket import RPacket from tardis.montecarlo.montecarlo_numba.base import montecarlo_radial1d \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index bf584c045ee..1c8b0ff0113 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -2,24 +2,25 @@ from enum import Enum from numba import int64, float64, boolean from numba import jitclass, njit, gdb -from tardis.montecarlo.montecarlo_numba.compute_distance import (compute_distance2boundary, - compute_distance2continuum, - compute_distance2line) +from tardis.montecarlo.montecarlo_numba.compute_distance import ( + compute_distance2boundary, + compute_distance2continuum, + compute_distance2line) from tardis.montecarlo.montecarlo_numba import njit_dict from astropy import constants as const C_SPEED_OF_LIGHT = const.c.to('cm/s').value MISS_DISTANCE = 1e99 - +INVERSE_SIGMA_THOMSON = 1 / const.sigma_T.to('cm^2').value #class PacketStatus(Enum): IN_PROCESS = 0 EMITTED = 1 REABSORBED = 2 -#class InteractionType(Enum): -ESCATTERING = 0 -BOUNDARY = 1 -LINE = 2 +class InteractionType(Enum): + ESCATTERING = 0 + BOUNDARY = 1 + LINE = 2 rpacket_spec = [ ('r', float64), @@ -65,12 +66,17 @@ def calculate_distance_line(nu, comov_nu, nu_line, ct): else: raise Exception +@njit(**njit_dict) +def calculate_distance_electron(shell_id, inverse_electron_densities, tau_event): + return (inverse_electron_densities[shell_id] * + INVERSE_SIGMA_THOMSON * tau_event) + + @njit(**njit_dict) def get_doppler_factor(r, mu, inverse_time_explosion): beta = (r * inverse_time_explosion) / C_SPEED_OF_LIGHT return 1.0 - mu * beta - @njit(**njit_dict) def get_random_mu(): return 2.0 * np.random.random() - 1.0 @@ -87,9 +93,6 @@ def __init__(self, r, mu, nu, energy): self.status = IN_PROCESS self.next_line_id = -1 - def calculate_distance_continuum(self, storage): - packet.d_electron = storage.inverse_electron_densities[packet.current_shell_id] * \ - storage.inverse_sigma_thomson * packet.tau_event def trace_packet(self, storage_model): r_inner = storage_model.r_inner[self.current_shell_id] @@ -97,7 +100,8 @@ def trace_packet(self, storage_model): distance = 0.0 - distance_boundary, delta_shell = calculate_distance_boundary(self.r, self.mu, r_inner, r_outer) + distance_boundary, delta_shell = calculate_distance_boundary( + self.r, self.mu, r_inner, r_outer) #defining start for stuff cur_line_id = self.next_line_id @@ -108,10 +112,12 @@ def trace_packet(self, storage_model): tau_trace_line_combined = 0.0 #Calculating doppler factor - doppler_factor = get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) + doppler_factor = get_doppler_factor(self.r, self.mu, + storage_model.inverse_time_explosion) comov_nu = self.nu * doppler_factor distance_trace = 0.0 - d_continuum = MISS_DISTANCE + d_electron = calculate_distance_electron(self.current_shell_id, + storage_model.inverse_electron_densities, tau_event) while True: if cur_line_id < storage_model.no_of_lines: # not last_line @@ -121,7 +127,7 @@ def trace_packet(self, storage_model): else: nu_line = 0.0 tau_trace_line = 0.0 - interaction_type = BOUNDARY # FIXME: does not work for e-scattering + interaction_type = InteractionType.BOUNDARY # FIXME: does not work for e-scattering distance = distance_boundary self.next_line_id = cur_line_id break @@ -131,7 +137,7 @@ def trace_packet(self, storage_model): tau_trace_combined = tau_trace_line_combined + 0 #tau_trace_electron electron scattering if distance_trace > distance_boundary: - interaction_type = BOUNDARY # BOUNDARY + interaction_type = InteractionType.BOUNDARY # BOUNDARY self.next_line_id = cur_line_id distance = distance_boundary break @@ -140,7 +146,7 @@ def trace_packet(self, storage_model): # interaction_type = 10 #continuum # #break if tau_trace_combined > tau_event: - interaction_type = LINE #Line + interaction_type = InteractionType.LINE #Line self.next_line_id = cur_line_id distance = distance_trace break diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index 4ef4365c1d1..db3602a987d 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -1,8 +1,8 @@ from numba import njit import numpy as np from enum import Enum -from tardis.montecarlo.montecarlo_numba.rpacket import ( - ESCATTERING, BOUNDARY, LINE, IN_PROCESS, REABSORBED) +from tardis.montecarlo.montecarlo_numba.rpacket import (IN_PROCESS, REABSORBED) +from tardis.montecarlo.montecarlo_numba.rpacket import InteractionType @njit def single_packet_loop(storage_model, r_packet): @@ -10,9 +10,9 @@ def single_packet_loop(storage_model, r_packet): while r_packet.status == IN_PROCESS: distance, interaction_type, delta_shell = r_packet.trace_packet(storage_model) - if interaction_type == BOUNDARY: + if interaction_type == InteractionType.BOUNDARY: r_packet.move_packet_across_shell_boundary(distance, delta_shell, storage_model.no_of_shells) - elif interaction_type == LINE: + elif interaction_type == InteractionType.LINE: r_packet.move_packet(distance) r_packet.transform_energy(storage_model) r_packet.line_emission(storage_model) From a27a9dae710a7268882f1dde6a42d64d0c23365f Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 4 May 2019 09:29:42 -0400 Subject: [PATCH 173/467] add tau_electron --- tardis/montecarlo/montecarlo_numba/rpacket.py | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index 1c8b0ff0113..5493ac5bca8 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -11,7 +11,8 @@ C_SPEED_OF_LIGHT = const.c.to('cm/s').value MISS_DISTANCE = 1e99 -INVERSE_SIGMA_THOMSON = 1 / const.sigma_T.to('cm^2').value +SIGMA_THOMSON = const.sigma_T.to('cm^2') +INVERSE_SIGMA_THOMSON = 1 / SIGMA_THOMSON #class PacketStatus(Enum): IN_PROCESS = 0 EMITTED = 1 @@ -67,10 +68,12 @@ def calculate_distance_line(nu, comov_nu, nu_line, ct): raise Exception @njit(**njit_dict) -def calculate_distance_electron(shell_id, inverse_electron_densities, tau_event): - return (inverse_electron_densities[shell_id] * - INVERSE_SIGMA_THOMSON * tau_event) +def calculate_distance_electron(inverse_electron_density, tau_event): + return inverse_electron_density * INVERSE_SIGMA_THOMSON * tau_event +@njit(**njit_dict) +def calculate_tau_electron(electron_density, distance): + return electron_density * SIGMA_THOMSON @njit(**njit_dict) def get_doppler_factor(r, mu, inverse_time_explosion): @@ -103,21 +106,28 @@ def trace_packet(self, storage_model): distance_boundary, delta_shell = calculate_distance_boundary( self.r, self.mu, r_inner, r_outer) - #defining start for stuff + #defining start for line interaction cur_line_id = self.next_line_id nu_line = 0.0 + #defining taus tau_event = np.random.exponential() tau_trace_line = 0.0 tau_trace_line_combined = 0.0 + #e scattering initialization + + cur_electron_density = storage_model.electron_densities[shell_id] + cur_inverse_electron_density = 1 / cur_electron_density + d_electron = calculate_distance_electron( + inverse_electron_densities, tau_event) + + #Calculating doppler factor doppler_factor = get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) comov_nu = self.nu * doppler_factor distance_trace = 0.0 - d_electron = calculate_distance_electron(self.current_shell_id, - storage_model.inverse_electron_densities, tau_event) while True: if cur_line_id < storage_model.no_of_lines: # not last_line @@ -133,8 +143,10 @@ def trace_packet(self, storage_model): break tau_trace_line_combined += tau_trace_line - distance_trace = calculate_distance_line(self.nu, comov_nu, nu_line, storage_model.ct) - tau_trace_combined = tau_trace_line_combined + 0 #tau_trace_electron electron scattering + distance_trace = calculate_distance_line(self.nu, comov_nu, nu_line, + storage_model.ct) + tau_electron = calculate_tau_electron(electron_density, distance_trace) + tau_trace_combined = tau_trace_line_combined + tau_trace_electron #tau_trace_electron electron scattering if distance_trace > distance_boundary: interaction_type = InteractionType.BOUNDARY # BOUNDARY From 77c014ddd48a9c300c0bb4a83f270a9987cf535b Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 4 May 2019 12:25:25 -0400 Subject: [PATCH 174/467] add e scattering --- tardis/montecarlo/montecarlo_numba/rpacket.py | 58 ++++++++++++++----- .../montecarlo_numba/single_packet_loop.py | 7 ++- 2 files changed, 49 insertions(+), 16 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index 5493ac5bca8..dc061889c14 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -11,7 +11,7 @@ C_SPEED_OF_LIGHT = const.c.to('cm/s').value MISS_DISTANCE = 1e99 -SIGMA_THOMSON = const.sigma_T.to('cm^2') +SIGMA_THOMSON = const.sigma_T.to('cm^2').value INVERSE_SIGMA_THOMSON = 1 / SIGMA_THOMSON #class PacketStatus(Enum): IN_PROCESS = 0 @@ -19,9 +19,9 @@ REABSORBED = 2 class InteractionType(Enum): - ESCATTERING = 0 BOUNDARY = 1 LINE = 2 + ESCATTERING = 3 rpacket_spec = [ ('r', float64), @@ -73,7 +73,7 @@ def calculate_distance_electron(inverse_electron_density, tau_event): @njit(**njit_dict) def calculate_tau_electron(electron_density, distance): - return electron_density * SIGMA_THOMSON + return electron_density * SIGMA_THOMSON * distance @njit(**njit_dict) def get_doppler_factor(r, mu, inverse_time_explosion): @@ -117,10 +117,11 @@ def trace_packet(self, storage_model): #e scattering initialization - cur_electron_density = storage_model.electron_densities[shell_id] + cur_electron_density = storage_model.electron_densities[ + self.current_shell_id] cur_inverse_electron_density = 1 / cur_electron_density - d_electron = calculate_distance_electron( - inverse_electron_densities, tau_event) + distance_electron = calculate_distance_electron( + cur_inverse_electron_density, tau_event) #Calculating doppler factor @@ -128,6 +129,7 @@ def trace_packet(self, storage_model): storage_model.inverse_time_explosion) comov_nu = self.nu * doppler_factor distance_trace = 0.0 + last_line = False while True: if cur_line_id < storage_model.no_of_lines: # not last_line @@ -135,18 +137,17 @@ def trace_packet(self, storage_model): tau_trace_line = storage_model.line_lists_tau_sobolevs[cur_line_id, self.current_shell_id] else: - nu_line = 0.0 - tau_trace_line = 0.0 - interaction_type = InteractionType.BOUNDARY # FIXME: does not work for e-scattering - distance = distance_boundary + last_line = True self.next_line_id = cur_line_id break tau_trace_line_combined += tau_trace_line distance_trace = calculate_distance_line(self.nu, comov_nu, nu_line, storage_model.ct) - tau_electron = calculate_tau_electron(electron_density, distance_trace) - tau_trace_combined = tau_trace_line_combined + tau_trace_electron #tau_trace_electron electron scattering + tau_trace_electron = calculate_tau_electron(cur_electron_density, + distance_trace) + + tau_trace_combined = tau_trace_line_combined + tau_trace_electron if distance_trace > distance_boundary: interaction_type = InteractionType.BOUNDARY # BOUNDARY @@ -164,8 +165,15 @@ def trace_packet(self, storage_model): break cur_line_id += 1 - - return distance, interaction_type, delta_shell + if not last_line: + return distance, interaction_type, delta_shell + else: + if distance_electron < distance_boundary: + #return distance_boundary, InteractionType.BOUNDARY, delta_shell + return distance_electron, InteractionType.ESCATTERING, delta_shell + else: + return distance_boundary, InteractionType.BOUNDARY, delta_shell + def move_packet(self, distance): """Move packet a distance and recalculate the new angle mu @@ -228,6 +236,28 @@ def transform_energy(self, storage_model): comov_energy = self.energy * old_doppler_factor self.energy = comov_energy * inverse_new_doppler_factor + def scatter(self, storage_model): + """ + General scattering for lines as well as thomson. 1) Move packet + 2) get the doppler factor at that position with the old angle + 3) convert the current energy and nu into the comoving frame with the old + mu + 4) Scatter and draw new mu + 5) Transform the comoving energy and nu back + + Parameters + ---------- + distance : [type] + [description] + """ + doppler_factor = get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) + comov_energy = self.energy * doppler_factor + comov_nu = self.nu * doppler_factor + self.mu = get_random_mu() + inverse_new_doppler_factor = 1. / get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) + self.energy = comov_energy * inverse_new_doppler_factor + self.nu = comov_nu * inverse_new_doppler_factor + def line_emission(self, storage_model): emission_line_id = self.next_line_id inverse_doppler_factor = 1 / get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index db3602a987d..71a3b98283e 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -14,5 +14,8 @@ def single_packet_loop(storage_model, r_packet): r_packet.move_packet_across_shell_boundary(distance, delta_shell, storage_model.no_of_shells) elif interaction_type == InteractionType.LINE: r_packet.move_packet(distance) - r_packet.transform_energy(storage_model) - r_packet.line_emission(storage_model) + r_packet.scatter(storage_model) + r_packet.next_line_id += 1 + elif interaction_type == InteractionType.ESCATTERING: + r_packet.move_packet(distance) + r_packet.scatter(storage_model) From c440853827efe5d8757ea3b8d5472e265ace4781 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 4 May 2019 13:22:07 -0400 Subject: [PATCH 175/467] add electron scattering --- tardis/montecarlo/montecarlo_numba/rpacket.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index dc061889c14..f4cc0d884cb 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -148,16 +148,19 @@ def trace_packet(self, storage_model): distance_trace) tau_trace_combined = tau_trace_line_combined + tau_trace_electron - - if distance_trace > distance_boundary: + + if (distance_boundary <= distance_trace) and (distance_boundary <= distance_electron): interaction_type = InteractionType.BOUNDARY # BOUNDARY self.next_line_id = cur_line_id distance = distance_boundary break - #if distance_trace > d_continuum: - # interaction_type = 10 #continuum - # #break + if (distance_electron < distance_trace) and (distance_electron < distance_boundary): + interaction_type = InteractionType.ESCATTERING + distance = distance_electron + self.next_line_id = cur_line_id + break + if tau_trace_combined > tau_event: interaction_type = InteractionType.LINE #Line self.next_line_id = cur_line_id @@ -169,7 +172,6 @@ def trace_packet(self, storage_model): return distance, interaction_type, delta_shell else: if distance_electron < distance_boundary: - #return distance_boundary, InteractionType.BOUNDARY, delta_shell return distance_electron, InteractionType.ESCATTERING, delta_shell else: return distance_boundary, InteractionType.BOUNDARY, delta_shell From ee7f007c46b40091c4f325a7491365b59b06eaee Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 4 May 2019 14:24:46 -0400 Subject: [PATCH 176/467] add first vpacket stuff --- tardis/montecarlo/montecarlo_numba/base.py | 6 +- tardis/montecarlo/montecarlo_numba/rpacket.py | 32 ++---- .../montecarlo_numba/single_packet_loop.py | 8 +- tardis/montecarlo/montecarlo_numba/vpacket.py | 97 +++++++++++++++++++ 4 files changed, 113 insertions(+), 30 deletions(-) create mode 100644 tardis/montecarlo/montecarlo_numba/vpacket.py diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index 4819c3e85fb..f41c9d9a3ca 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -1,6 +1,6 @@ from numba import prange, njit, config import numpy as np -from tardis.montecarlo.montecarlo_numba.rpacket import RPacket, REABSORBED, EMITTED +from tardis.montecarlo.montecarlo_numba.rpacket import RPacket, PacketStatus from tardis.montecarlo.montecarlo_numba.storage_model import StorageModel, initialize_storage_model from tardis.montecarlo.montecarlo_numba.single_packet_loop import single_packet_loop from tardis.montecarlo.montecarlo_numba import njit_dict @@ -33,9 +33,9 @@ def montecarlo_main_loop(storage_model): single_packet_loop(storage_model, r_packet) output_nus[i] = r_packet.nu - if r_packet.status == REABSORBED: + if r_packet.status == PacketStatus.REABSORBED: output_energies[i] = -r_packet.energy - elif r_packet.status == EMITTED: + elif r_packet.status == PacketStatus.EMITTED: output_energies[i] = r_packet.energy storage_model.output_energies[:] = output_energies[:] storage_model.output_nus[:] = output_nus[:] diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index f4cc0d884cb..95cae5fc313 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -13,10 +13,11 @@ MISS_DISTANCE = 1e99 SIGMA_THOMSON = const.sigma_T.to('cm^2').value INVERSE_SIGMA_THOMSON = 1 / SIGMA_THOMSON -#class PacketStatus(Enum): -IN_PROCESS = 0 -EMITTED = 1 -REABSORBED = 2 + +class PacketStatus(Enum): + IN_PROCESS = 0 + EMITTED = 1 + REABSORBED = 2 class InteractionType(Enum): BOUNDARY = 1 @@ -93,11 +94,12 @@ def __init__(self, r, mu, nu, energy): self.nu = nu self.energy = energy self.current_shell_id = 0 - self.status = IN_PROCESS + self.status = PacketStatus.IN_PROCESS self.next_line_id = -1 def trace_packet(self, storage_model): + r_inner = storage_model.r_inner[self.current_shell_id] r_outer = storage_model.r_outer[self.current_shell_id] @@ -216,9 +218,9 @@ def move_packet_across_shell_boundary(self, distance, delta_shell, no_of_shells) or (self.current_shell_id > 0 and delta_shell == -1)): self.current_shell_id += delta_shell elif delta_shell == 1: - self.status = EMITTED + self.status = PacketStatus.EMITTED else: - self.status = REABSORBED + self.status = PacketStatus.REABSORBED def initialize_line_id(self, storage_model): inverse_line_list_nu = storage_model.line_list_nu[::-1] @@ -227,16 +229,6 @@ def initialize_line_id(self, storage_model): next_line_id = storage_model.no_of_lines - np.searchsorted(inverse_line_list_nu, comov_nu) self.next_line_id = next_line_id - def transform_energy(self, storage_model): - """ - Transform from the LabFrame to the ComovingFrame. Then change the angle - and transform back conserving energy in the ComovingFrame. - """ - old_doppler_factor = get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) - self.mu = get_random_mu() - inverse_new_doppler_factor = 1. / get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) - comov_energy = self.energy * old_doppler_factor - self.energy = comov_energy * inverse_new_doppler_factor def scatter(self, storage_model): """ @@ -259,9 +251,3 @@ def scatter(self, storage_model): inverse_new_doppler_factor = 1. / get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) self.energy = comov_energy * inverse_new_doppler_factor self.nu = comov_nu * inverse_new_doppler_factor - - def line_emission(self, storage_model): - emission_line_id = self.next_line_id - inverse_doppler_factor = 1 / get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) - self.nu = storage_model.line_list_nu[emission_line_id] * inverse_doppler_factor - self.next_line_id = emission_line_id + 1 \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index 71a3b98283e..687135f3169 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -1,14 +1,14 @@ from numba import njit import numpy as np -from enum import Enum -from tardis.montecarlo.montecarlo_numba.rpacket import (IN_PROCESS, REABSORBED) -from tardis.montecarlo.montecarlo_numba.rpacket import InteractionType + +from tardis.montecarlo.montecarlo_numba.rpacket import ( + InteractionType, PacketStatus) @njit def single_packet_loop(storage_model, r_packet): r_packet.initialize_line_id(storage_model) - while r_packet.status == IN_PROCESS: + while r_packet.status == PacketStatus.IN_PROCESS: distance, interaction_type, delta_shell = r_packet.trace_packet(storage_model) if interaction_type == InteractionType.BOUNDARY: r_packet.move_packet_across_shell_boundary(distance, delta_shell, storage_model.no_of_shells) diff --git a/tardis/montecarlo/montecarlo_numba/vpacket.py b/tardis/montecarlo/montecarlo_numba/vpacket.py new file mode 100644 index 00000000000..f88cedf0dd9 --- /dev/null +++ b/tardis/montecarlo/montecarlo_numba/vpacket.py @@ -0,0 +1,97 @@ +vpacket_spec = [ + ('r', float64), + ('mu', float64), + ('nu', float64), + ('energy', float64), + ('next_line_id', int64), + ('current_shell_id', int64), + ('status', int64), +] + +@jitclass(vpacket_spec) +class VPacket(object): + def __init__(self, r, mu, nu, energy): + self.r = r + self.mu = mu + self.nu = nu + self.energy = energy + self.current_shell_id = 0 + self.status = IN_PROCESS + self.next_line_id = -1 + + def trace_packet(self, storage_model): + + r_inner = storage_model.r_inner[self.current_shell_id] + r_outer = storage_model.r_outer[self.current_shell_id] + + distance = 0.0 + + distance_boundary, delta_shell = calculate_distance_boundary( + self.r, self.mu, r_inner, r_outer) + + #defining start for line interaction + cur_line_id = self.next_line_id + nu_line = 0.0 + + #defining taus + tau_event = np.random.exponential() + tau_trace_line = 0.0 + tau_trace_line_combined = 0.0 + + #e scattering initialization + + cur_electron_density = storage_model.electron_densities[ + self.current_shell_id] + cur_inverse_electron_density = 1 / cur_electron_density + distance_electron = calculate_distance_electron( + cur_inverse_electron_density, tau_event) + + + #Calculating doppler factor + doppler_factor = get_doppler_factor(self.r, self.mu, + storage_model.inverse_time_explosion) + comov_nu = self.nu * doppler_factor + distance_trace = 0.0 + last_line = False + + while True: + if cur_line_id < storage_model.no_of_lines: # not last_line + nu_line = storage_model.line_list_nu[cur_line_id] + tau_trace_line = storage_model.line_lists_tau_sobolevs[cur_line_id, + self.current_shell_id] + else: + last_line = True + self.next_line_id = cur_line_id + break + + tau_trace_line_combined += tau_trace_line + distance_trace = calculate_distance_line(self.nu, comov_nu, nu_line, + storage_model.ct) + tau_trace_electron = calculate_tau_electron(cur_electron_density, + distance_trace) + + tau_trace_combined = tau_trace_line_combined + tau_trace_electron + + if (distance_boundary <= distance_trace): + ## current_shell_id +=1 + ## distance_boundary + #unless shell + interaction_type = InteractionType.BOUNDARY # BOUNDARY + self.next_line_id = cur_line_id + distance = distance_boundary + break + + if (distance_electron < distance_trace) and (distance_electron < distance_boundary): + interaction_type = InteractionType.ESCATTERING + distance = distance_electron + self.next_line_id = cur_line_id + break + + cur_line_id += 1 + if not last_line: + return distance, interaction_type, delta_shell + else: + if distance_electron < distance_boundary: + return distance_electron, InteractionType.ESCATTERING, delta_shell + else: + return distance_boundary, InteractionType.BOUNDARY, delta_shell From 54f3151f829865c704ab66bf5838f1525b2d38b9 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sat, 4 May 2019 22:18:35 -0400 Subject: [PATCH 177/467] further restructure of the numba montecarlo --- .../montecarlo_numba/compute_distance.py | 71 ------------------- .../montecarlo_numba/numba_model.py | 36 ++++++++++ tardis/montecarlo/montecarlo_numba/rpacket.py | 20 +++--- 3 files changed, 46 insertions(+), 81 deletions(-) delete mode 100644 tardis/montecarlo/montecarlo_numba/compute_distance.py create mode 100644 tardis/montecarlo/montecarlo_numba/numba_model.py diff --git a/tardis/montecarlo/montecarlo_numba/compute_distance.py b/tardis/montecarlo/montecarlo_numba/compute_distance.py deleted file mode 100644 index c50aff672cc..00000000000 --- a/tardis/montecarlo/montecarlo_numba/compute_distance.py +++ /dev/null @@ -1,71 +0,0 @@ -from numba import jitclass, njit -import numpy as np -from astropy import constants as const -from tardis.montecarlo.montecarlo_numba import njit_dict - -C_SPEED_OF_LIGHT = const.c.to('cm/s').value -MISS_DISTANCE = 1e99 - -@njit(**njit_dict) -def compute_distance2boundary(packet, storage): - r = packet.r - mu = packet.mu - r_outer = storage.r_outer[packet.current_shell_id] - r_inner = storage.r_inner[packet.current_shell_id] - - if (mu > 0.0): - # direction outward - packet.delta_shell_id = +1 - distance = np.sqrt(r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu) - else: - # going inward - check = r_inner * r_inner + (r * r * (mu * mu - 1.0)) - - if (check >= 0.0): - # hit inner boundary - packet.delta_shell_id = -1 - distance = -r * mu - np.sqrt(check) - else: - # miss inner boundary - packet.delta_shell_id = + 1 - distance = np.sqrt(r_outer * r_outer + ((mu * mu - 1.0) * r * r)) - (r * mu) - packet.d_boundary = distance - - - -@njit -def compute_distance2line(packet, storage_model): - if not packet.last_line and not packet.close_line: - r = packet.r - mu = packet.mu - nu = packet.nu - nu_line = packet.nu_line - - ct = storage_model.time_explosion * C_SPEED_OF_LIGHT - doppler_factor = packet.get_doppler_factor(storage_model) - comov_nu = nu * doppler_factor - - nu_diff = comov_nu - nu_line - if np.abs(nu_diff / comov_nu) < 1e-7: - nu_diff = 0.0 - if nu_diff >= 0: - - distance = (nu_diff/nu) * ct - #else: - # nu_r = nu_line / nu - # distance = - mu * r + (ct - nu_r * nu_r * - # np.sqrt(ct * ct - (1 + r * r * (1 - mu * mu) * (1 + pow(nu_r, -2))))) / (1 + nu_r * nu_r) - packet.d_line = distance - else: - raise Exception - elif packet.close_line: - packet.d_line = 0.0 - else: - packet.d_line = MISS_DISTANCE - #return TARDIS_ERROR_OK - -@njit(**njit_dict) -def compute_distance2continuum(packet, storage): - packet.d_electron = storage.inverse_electron_densities[packet.current_shell_id] * \ - storage.inverse_sigma_thomson * packet.tau_event - diff --git a/tardis/montecarlo/montecarlo_numba/numba_model.py b/tardis/montecarlo/montecarlo_numba/numba_model.py new file mode 100644 index 00000000000..761e01b1421 --- /dev/null +++ b/tardis/montecarlo/montecarlo_numba/numba_model.py @@ -0,0 +1,36 @@ +from numba import float64, jitclass +from tardis import constants as const + + +C_SPEED_OF_LIGHT = const.c.to('cm/s').value + +numba_model_spec = [ + ('r_inner', float64[:]), + ('r_outer', float64[:]), + ('time_explosion', float64), + ('electron_density', float64[:]), + ('ct', float64), +] + + +@jitclass(numba_model_spec) +class NumbaModel(object): + + def __init__(self, r_inner, r_outer, time_explosion, electron_density): + """ + Model for the Numba mode + + Parameters + ---------- + r_inner: numpy.ndarray + r_outer: numpy.ndarray + time_explosion: float + electron_density: numpy.ndarray + """ + self.r_inner = r_inner + self.r_outer = r_outer + self.time_explosion = time_explosion + self.electron_density = electron_density + self.inverse_electron_density = 1 / electron_density + + diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index 95cae5fc313..4ddc0db6a55 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -2,12 +2,9 @@ from enum import Enum from numba import int64, float64, boolean from numba import jitclass, njit, gdb -from tardis.montecarlo.montecarlo_numba.compute_distance import ( - compute_distance2boundary, - compute_distance2continuum, - compute_distance2line) + from tardis.montecarlo.montecarlo_numba import njit_dict -from astropy import constants as const +from tardis import constants as const C_SPEED_OF_LIGHT = const.c.to('cm/s').value MISS_DISTANCE = 1e99 @@ -136,8 +133,8 @@ def trace_packet(self, storage_model): while True: if cur_line_id < storage_model.no_of_lines: # not last_line nu_line = storage_model.line_list_nu[cur_line_id] - tau_trace_line = storage_model.line_lists_tau_sobolevs[cur_line_id, - self.current_shell_id] + tau_trace_line = storage_model.line_lists_tau_sobolevs[ + cur_line_id, self.current_shell_id] else: last_line = True self.next_line_id = cur_line_id @@ -151,13 +148,15 @@ def trace_packet(self, storage_model): tau_trace_combined = tau_trace_line_combined + tau_trace_electron - if (distance_boundary <= distance_trace) and (distance_boundary <= distance_electron): + if ((distance_boundary <= distance_trace) and + (distance_boundary <= distance_electron)): interaction_type = InteractionType.BOUNDARY # BOUNDARY self.next_line_id = cur_line_id distance = distance_boundary break - if (distance_electron < distance_trace) and (distance_electron < distance_boundary): + if ((distance_electron < distance_trace) and + (distance_electron < distance_boundary)): interaction_type = InteractionType.ESCATTERING distance = distance_electron self.next_line_id = cur_line_id @@ -174,7 +173,8 @@ def trace_packet(self, storage_model): return distance, interaction_type, delta_shell else: if distance_electron < distance_boundary: - return distance_electron, InteractionType.ESCATTERING, delta_shell + return (distance_electron, InteractionType.ESCATTERING, + delta_shell) else: return distance_boundary, InteractionType.BOUNDARY, delta_shell From 24bc8b285e9014691bf4080d28d41df92c3e2a4b Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 5 May 2019 00:33:04 -0400 Subject: [PATCH 178/467] adding a packet collection --- tardis/montecarlo/montecarlo_numba/base.py | 31 ++++++++++++------- .../{numba_model.py => numba_interface.py} | 25 ++++++++++++++- 2 files changed, 43 insertions(+), 13 deletions(-) rename tardis/montecarlo/montecarlo_numba/{numba_model.py => numba_interface.py} (53%) diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index f41c9d9a3ca..6b827267200 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -1,19 +1,24 @@ from numba import prange, njit, config import numpy as np from tardis.montecarlo.montecarlo_numba.rpacket import RPacket, PacketStatus -from tardis.montecarlo.montecarlo_numba.storage_model import StorageModel, initialize_storage_model +from tardis.montecarlo.montecarlo_numba.numba_interface import ( + PacketCollection) +from tardis.montecarlo.montecarlo_numba.storage_model import initialize_storage_model from tardis.montecarlo.montecarlo_numba.single_packet_loop import single_packet_loop from tardis.montecarlo.montecarlo_numba import njit_dict -#config.THREADING_LAYER = 'threadsafe' -#config.DEBUG_ARRAY_OPT=1 def montecarlo_radial1d(model, plasma, runner): + packet_collection = PacketCollection( + runner.input_nu, runner.input_mu, runner.input_energy, + runner._output_nu, runner._output_energy + ) storage_model = initialize_storage_model(model, plasma, runner) - montecarlo_main_loop(storage_model) + montecarlo_main_loop(packet_collection) + @njit(**njit_dict, nogil=True) -def montecarlo_main_loop(storage_model): +def montecarlo_main_loop(packet_collection): """ This is the main loop of the MonteCarlo routine that generates packets and sends them through the ejecta. @@ -23,13 +28,15 @@ def montecarlo_main_loop(storage_model): storage_model : [type] [description] """ - output_nus = np.empty_like(storage_model.output_nus) - output_energies = np.empty_like(storage_model.output_energies) - for i in prange(storage_model.no_of_packets): - r_packet = RPacket(storage_model.r_inner[0], - storage_model.packet_mus[i], - storage_model.packet_nus[i], - storage_model.packet_energies[i]) + output_nus = np.empty_like(packet_collection.packets_output_nu) + output_energies = np.empty_like(packet_collection.packets_output_nu) + + for i in prange(len(output_nus)): + r_packet = RPacket(packet_collection.r_inner[0], + packet_collection.packet_mus[i], + packet_collection.packet_nus[i], + packet_collection.packet_energies[i]) + single_packet_loop(storage_model, r_packet) output_nus[i] = r_packet.nu diff --git a/tardis/montecarlo/montecarlo_numba/numba_model.py b/tardis/montecarlo/montecarlo_numba/numba_interface.py similarity index 53% rename from tardis/montecarlo/montecarlo_numba/numba_model.py rename to tardis/montecarlo/montecarlo_numba/numba_interface.py index 761e01b1421..0940091a5dc 100644 --- a/tardis/montecarlo/montecarlo_numba/numba_model.py +++ b/tardis/montecarlo/montecarlo_numba/numba_interface.py @@ -31,6 +31,29 @@ def __init__(self, r_inner, r_outer, time_explosion, electron_density): self.r_outer = r_outer self.time_explosion = time_explosion self.electron_density = electron_density - self.inverse_electron_density = 1 / electron_density +packet_collection_spec = [ + ('packets_nu', float64[:]), + ('packets_mu', float64[:]), + ('packets_energy', float64[:]), + ('packets_output_nu', float64[:]), + ('packets_output_energy', float64[:]), +] + +@jitclass(packet_collection_spec) +class PacketCollection(object): + def __init__(self, packets_input_nu, packets_input_mu, packets_energy, + packets_output_nu, packets_output_energy): + self.packets_input_nu = packets_input_nu + self.packets_input_mu = packets_input_mu + self.packets_energy = packets_energy + self.packets_output_nu = packets_output_nu + self.packets_output_energy = packets_output_energy + + + + +class Estimators(object): + pass + From d59c8f7d83c65ad4b8524b327dcb99a21dbc5bfa Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 5 May 2019 01:13:34 -0400 Subject: [PATCH 179/467] update and clean up the numba interface --- tardis/montecarlo/montecarlo_numba/base.py | 37 +++++--- .../montecarlo_numba/numba_interface.py | 31 ++++--- tardis/montecarlo/montecarlo_numba/rpacket.py | 75 +++++++++------- .../montecarlo_numba/single_packet_loop.py | 26 ++++-- .../montecarlo_numba/storage_model.py | 86 ------------------- 5 files changed, 109 insertions(+), 146 deletions(-) delete mode 100644 tardis/montecarlo/montecarlo_numba/storage_model.py diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index 6b827267200..9ad1766691b 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -2,9 +2,10 @@ import numpy as np from tardis.montecarlo.montecarlo_numba.rpacket import RPacket, PacketStatus from tardis.montecarlo.montecarlo_numba.numba_interface import ( - PacketCollection) -from tardis.montecarlo.montecarlo_numba.storage_model import initialize_storage_model -from tardis.montecarlo.montecarlo_numba.single_packet_loop import single_packet_loop + PacketCollection, NumbaModel, NumbaPlasma) + +from tardis.montecarlo.montecarlo_numba.single_packet_loop import ( + single_packet_loop) from tardis.montecarlo.montecarlo_numba import njit_dict @@ -13,12 +14,21 @@ def montecarlo_radial1d(model, plasma, runner): runner.input_nu, runner.input_mu, runner.input_energy, runner._output_nu, runner._output_energy ) - storage_model = initialize_storage_model(model, plasma, runner) - montecarlo_main_loop(packet_collection) + numba_model = NumbaModel(runner.r_inner_cgs, runner.r_outer_cgs, + model.time_explosion.to('s').value) + numba_plasma = NumbaPlasma(plasma.electron_densities.values, + plasma.atomic_data.lines.nu.values, + np.ascontiguousarray( + plasma.tau_sobolevs.values.copy(), + dtype=np.float64) + ) + + #storage_model = initialize_storage_model(model, plasma, runner) + montecarlo_main_loop(packet_collection, numba_model, numba_plasma) @njit(**njit_dict, nogil=True) -def montecarlo_main_loop(packet_collection): +def montecarlo_main_loop(packet_collection, numba_model, numba_plasma): """ This is the main loop of the MonteCarlo routine that generates packets and sends them through the ejecta. @@ -32,18 +42,19 @@ def montecarlo_main_loop(packet_collection): output_energies = np.empty_like(packet_collection.packets_output_nu) for i in prange(len(output_nus)): - r_packet = RPacket(packet_collection.r_inner[0], - packet_collection.packet_mus[i], - packet_collection.packet_nus[i], - packet_collection.packet_energies[i]) + r_packet = RPacket(numba_model.r_inner[0], + packet_collection.packets_input_mu[i], + packet_collection.packets_input_nu[i], + packet_collection.packets_input_energy[i]) - single_packet_loop(storage_model, r_packet) + single_packet_loop(r_packet, numba_model, numba_plasma) output_nus[i] = r_packet.nu if r_packet.status == PacketStatus.REABSORBED: output_energies[i] = -r_packet.energy elif r_packet.status == PacketStatus.EMITTED: output_energies[i] = r_packet.energy - storage_model.output_energies[:] = output_energies[:] - storage_model.output_nus[:] = output_nus[:] + + packet_collection.packets_output_energy[:] = output_energies[:] + packet_collection.packets_output_nu[:] = output_nus[:] diff --git a/tardis/montecarlo/montecarlo_numba/numba_interface.py b/tardis/montecarlo/montecarlo_numba/numba_interface.py index 0940091a5dc..d9037bd6257 100644 --- a/tardis/montecarlo/montecarlo_numba/numba_interface.py +++ b/tardis/montecarlo/montecarlo_numba/numba_interface.py @@ -1,4 +1,4 @@ -from numba import float64, jitclass +from numba import float64, int64, jitclass from tardis import constants as const @@ -7,16 +7,14 @@ numba_model_spec = [ ('r_inner', float64[:]), ('r_outer', float64[:]), - ('time_explosion', float64), - ('electron_density', float64[:]), - ('ct', float64), + ('time_explosion', float64) ] @jitclass(numba_model_spec) class NumbaModel(object): - def __init__(self, r_inner, r_outer, time_explosion, electron_density): + def __init__(self, r_inner, r_outer, time_explosion): """ Model for the Numba mode @@ -25,29 +23,40 @@ def __init__(self, r_inner, r_outer, time_explosion, electron_density): r_inner: numpy.ndarray r_outer: numpy.ndarray time_explosion: float - electron_density: numpy.ndarray """ self.r_inner = r_inner self.r_outer = r_outer self.time_explosion = time_explosion + +numba_plasma_spec = [ + ('electron_density', float64[:]), + ('line_list_nu', float64[:]), + ('tau_sobolev', float64[:, :]), +] + +@jitclass(numba_plasma_spec) +class NumbaPlasma(object): + def __init__(self, electron_density, line_list_nu, tau_sobolev): self.electron_density = electron_density + self.line_list_nu = line_list_nu + self.tau_sobolev = tau_sobolev packet_collection_spec = [ - ('packets_nu', float64[:]), - ('packets_mu', float64[:]), - ('packets_energy', float64[:]), + ('packets_input_nu', float64[:]), + ('packets_input_mu', float64[:]), + ('packets_input_energy', float64[:]), ('packets_output_nu', float64[:]), ('packets_output_energy', float64[:]), ] @jitclass(packet_collection_spec) class PacketCollection(object): - def __init__(self, packets_input_nu, packets_input_mu, packets_energy, + def __init__(self, packets_input_nu, packets_input_mu, packets_input_energy, packets_output_nu, packets_output_energy): self.packets_input_nu = packets_input_nu self.packets_input_mu = packets_input_mu - self.packets_energy = packets_energy + self.packets_input_energy = packets_input_energy self.packets_output_nu = packets_output_nu self.packets_output_energy = packets_output_energy diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index 4ddc0db6a55..e4c1098ef15 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -1,5 +1,5 @@ import numpy as np -from enum import Enum +from enum import IntEnum from numba import int64, float64, boolean from numba import jitclass, njit, gdb @@ -11,12 +11,12 @@ SIGMA_THOMSON = const.sigma_T.to('cm^2').value INVERSE_SIGMA_THOMSON = 1 / SIGMA_THOMSON -class PacketStatus(Enum): +class PacketStatus(IntEnum): IN_PROCESS = 0 EMITTED = 1 REABSORBED = 2 -class InteractionType(Enum): +class InteractionType(IntEnum): BOUNDARY = 1 LINE = 2 ESCATTERING = 3 @@ -54,14 +54,14 @@ def calculate_distance_boundary(r, mu, r_inner, r_outer): return distance, delta_shell @njit(**njit_dict) -def calculate_distance_line(nu, comov_nu, nu_line, ct): +def calculate_distance_line(nu, comov_nu, nu_line, time_explosion): if nu_line == 0.0: return MISS_DISTANCE nu_diff = comov_nu - nu_line if np.abs(nu_diff / comov_nu) < 1e-7: nu_diff = 0.0 if nu_diff >= 0: - return (nu_diff / nu) * ct + return (nu_diff / nu) * C_SPEED_OF_LIGHT * time_explosion else: raise Exception @@ -74,8 +74,8 @@ def calculate_tau_electron(electron_density, distance): return electron_density * SIGMA_THOMSON * distance @njit(**njit_dict) -def get_doppler_factor(r, mu, inverse_time_explosion): - beta = (r * inverse_time_explosion) / C_SPEED_OF_LIGHT +def get_doppler_factor(r, mu, time_explosion): + beta = (r / time_explosion) / C_SPEED_OF_LIGHT return 1.0 - mu * beta @njit(**njit_dict) @@ -95,10 +95,21 @@ def __init__(self, r, mu, nu, energy): self.next_line_id = -1 - def trace_packet(self, storage_model): + def trace_packet(self, numba_model, numba_plasma): + """ + + Parameters + ---------- + numba_model: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaModel + numba_plasma: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaPlasma + + Returns + ------- + + """ - r_inner = storage_model.r_inner[self.current_shell_id] - r_outer = storage_model.r_outer[self.current_shell_id] + r_inner = numba_model.r_inner[self.current_shell_id] + r_outer = numba_model.r_outer[self.current_shell_id] distance = 0.0 @@ -116,7 +127,7 @@ def trace_packet(self, storage_model): #e scattering initialization - cur_electron_density = storage_model.electron_densities[ + cur_electron_density = numba_plasma.electron_density[ self.current_shell_id] cur_inverse_electron_density = 1 / cur_electron_density distance_electron = calculate_distance_electron( @@ -125,15 +136,15 @@ def trace_packet(self, storage_model): #Calculating doppler factor doppler_factor = get_doppler_factor(self.r, self.mu, - storage_model.inverse_time_explosion) + numba_model.time_explosion) comov_nu = self.nu * doppler_factor distance_trace = 0.0 last_line = False while True: - if cur_line_id < storage_model.no_of_lines: # not last_line - nu_line = storage_model.line_list_nu[cur_line_id] - tau_trace_line = storage_model.line_lists_tau_sobolevs[ + if cur_line_id < len(numba_plasma.line_list_nu): # not last_line + nu_line = numba_plasma.line_list_nu[cur_line_id] + tau_trace_line = numba_plasma.tau_sobolev[ cur_line_id, self.current_shell_id] else: last_line = True @@ -141,8 +152,8 @@ def trace_packet(self, storage_model): break tau_trace_line_combined += tau_trace_line - distance_trace = calculate_distance_line(self.nu, comov_nu, nu_line, - storage_model.ct) + distance_trace = calculate_distance_line( + self.nu, comov_nu, nu_line, numba_model.time_explosion) tau_trace_electron = calculate_tau_electron(cur_electron_density, distance_trace) @@ -195,7 +206,8 @@ def move_packet(self, distance): self.mu = (self.mu * r + distance) / new_r self.r = new_r - def move_packet_across_shell_boundary(self, distance, delta_shell, no_of_shells): + def move_packet_across_shell_boundary(self, distance, delta_shell, + no_of_shells): """ Move packet across shell boundary - realizing if we are still in the simulation or have moved out through the inner boundary or outer boundary and updating packet @@ -222,32 +234,35 @@ def move_packet_across_shell_boundary(self, distance, delta_shell, no_of_shells) else: self.status = PacketStatus.REABSORBED - def initialize_line_id(self, storage_model): - inverse_line_list_nu = storage_model.line_list_nu[::-1] - doppler_factor = get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) + def initialize_line_id(self, numba_plasma, numba_model): + inverse_line_list_nu = numba_plasma.line_list_nu[::-1] + doppler_factor = get_doppler_factor(self.r, self.mu, + numba_model.time_explosion) comov_nu = self.nu * doppler_factor - next_line_id = storage_model.no_of_lines - np.searchsorted(inverse_line_list_nu, comov_nu) + next_line_id = (len(numba_plasma.line_list_nu) - + np.searchsorted(inverse_line_list_nu, comov_nu)) self.next_line_id = next_line_id - def scatter(self, storage_model): + def scatter(self, time_explosion): """ - General scattering for lines as well as thomson. 1) Move packet + General scattering for lines as well as thomson. 2) get the doppler factor at that position with the old angle - 3) convert the current energy and nu into the comoving frame with the old - mu - 4) Scatter and draw new mu - 5) Transform the comoving energy and nu back + 3) convert the current energy and nu into the comoving + frame with the old mu + 4) Scatter and draw new mu - update mu + 5) Transform the comoving energy and nu back using the new mu Parameters ---------- distance : [type] [description] """ - doppler_factor = get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) + doppler_factor = get_doppler_factor(self.r, self.mu, time_explosion) comov_energy = self.energy * doppler_factor comov_nu = self.nu * doppler_factor self.mu = get_random_mu() - inverse_new_doppler_factor = 1. / get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) + inverse_new_doppler_factor = 1. / get_doppler_factor( + self.r, self.mu, time_explosion) self.energy = comov_energy * inverse_new_doppler_factor self.nu = comov_nu * inverse_new_doppler_factor diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index 687135f3169..a47625363ab 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -5,17 +5,31 @@ InteractionType, PacketStatus) @njit -def single_packet_loop(storage_model, r_packet): - r_packet.initialize_line_id(storage_model) +def single_packet_loop(r_packet, numba_model, numba_plasma): + """ + + Parameters + ---------- + r_packet: tardis.montecarlo.montecarlo_numba.rpacket.RPacket + numba_model: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaModel + numba_plasma: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaPlasma + + Returns + ------- + + """ + r_packet.initialize_line_id(numba_plasma, numba_model) while r_packet.status == PacketStatus.IN_PROCESS: - distance, interaction_type, delta_shell = r_packet.trace_packet(storage_model) + distance, interaction_type, delta_shell = r_packet.trace_packet( + numba_model, numba_plasma) if interaction_type == InteractionType.BOUNDARY: - r_packet.move_packet_across_shell_boundary(distance, delta_shell, storage_model.no_of_shells) + r_packet.move_packet_across_shell_boundary(distance, delta_shell, + len(numba_model.r_inner)) elif interaction_type == InteractionType.LINE: r_packet.move_packet(distance) - r_packet.scatter(storage_model) + r_packet.scatter(numba_model.time_explosion) r_packet.next_line_id += 1 elif interaction_type == InteractionType.ESCATTERING: r_packet.move_packet(distance) - r_packet.scatter(storage_model) + r_packet.scatter(numba_model.time_explosion) diff --git a/tardis/montecarlo/montecarlo_numba/storage_model.py b/tardis/montecarlo/montecarlo_numba/storage_model.py deleted file mode 100644 index 2f141ae5f5c..00000000000 --- a/tardis/montecarlo/montecarlo_numba/storage_model.py +++ /dev/null @@ -1,86 +0,0 @@ -from numba import int64, float64, jitclass -import numpy as np -from astropy import constants as const - -C_SPEED_OF_LIGHT = const.c.to('cm/s').value - -storage_model_spec = [ - ('packet_nus', float64[:]), - ('packet_mus', float64[:]), - ('packet_energies', float64[:]), - ('output_nus', float64[:]), - ('output_energies', float64[:]), - ('no_of_packets', int64), - ('no_of_shells', int64), - ('r_inner', float64[:]), - ('r_outer', float64[:]), - ('v_inner', float64[:]), - ('time_explosion', float64), - ('inverse_time_explosion', float64), - ('electron_densities', float64[:]), - ('inverse_electron_densities', float64[:]), # Maybe remove the inverse things - ('line_list_nu', float64[:]), - ('line_lists_tau_sobolevs', float64[:, :]), - ('no_of_lines', int64), - ('line_interaction_id', int64), -# ('*js', float64), -# ('*nubars', float64), - ('sigma_thomson', float64), - ('inverse_sigma_thomson', float64), - ('ct', float64), -] - -@jitclass(storage_model_spec) -class StorageModel(object): - def __init__(self, packet_nus, packet_mus, packet_energies, - output_nus, output_energies, no_of_packets, no_of_shells, - r_inner, r_outer, v_inner, time_explosion, electron_densities, - line_list_nu, line_lists_tau_sobolevs, no_of_lines, line_interaction_id, sigma_thomson): - self.packet_nus = packet_nus - self.packet_mus = packet_mus - self.packet_energies = packet_energies - self.no_of_packets = len(self.packet_nus) - - self.output_nus = output_nus - self.output_energies = output_energies - self.r_inner = r_inner - self.r_outer = r_outer - self.v_inner = v_inner - self.no_of_shells = len(self.v_inner) - - self.time_explosion = time_explosion - self.inverse_time_explosion = 1 / time_explosion - - self.electron_densities = electron_densities - - self.inverse_electron_densities = 1 / electron_densities - - self.sigma_thomson = sigma_thomson - - self.inverse_sigma_thomson = 1 / self.sigma_thomson - self.no_of_lines = no_of_lines - self.line_list_nu = line_list_nu - self.line_lists_tau_sobolevs = line_lists_tau_sobolevs - self.ct = self.time_explosion * C_SPEED_OF_LIGHT - -def initialize_storage_model(model, plasma, runner): - storage_model_kwargs = {'packet_nus': runner.input_nu, - 'packet_mus': runner.input_mu, - 'packet_energies': runner.input_energy, - 'output_nus': runner._output_nu, - 'output_energies': runner._output_energy, - 'no_of_packets': runner.input_nu.size, - 'no_of_shells': model.no_of_shells, - 'r_inner': runner.r_inner_cgs, - 'r_outer': runner.r_outer_cgs, - 'v_inner': runner.v_inner_cgs, - 'time_explosion': model.time_explosion.to('s').value, - 'electron_densities': plasma.electron_densities.values, - 'line_list_nu': plasma.atomic_data.lines.nu.values, - 'no_of_lines': len(plasma.atomic_data.lines.nu.values), - 'line_interaction_id': runner.get_line_interaction_id( - runner.line_interaction_type), - 'sigma_thomson': runner.sigma_thomson.cgs.value} - storage_model_kwargs['line_lists_tau_sobolevs']= np.ascontiguousarray( - plasma.tau_sobolevs.values.copy(), dtype=np.float64) - return StorageModel(**storage_model_kwargs) \ No newline at end of file From a0f30b0bfdaa6035f2d57815c12c5fb9bbd1cd41 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 5 May 2019 01:43:44 -0400 Subject: [PATCH 180/467] add estimators --- tardis/montecarlo/montecarlo_numba/base.py | 12 +++++++----- .../montecarlo/montecarlo_numba/numba_interface.py | 11 +++++++++-- tardis/montecarlo/montecarlo_numba/rpacket.py | 14 ++++++++++++-- .../montecarlo_numba/single_packet_loop.py | 11 ++++++++--- 4 files changed, 36 insertions(+), 12 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index 9ad1766691b..a7100d2785a 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -2,7 +2,7 @@ import numpy as np from tardis.montecarlo.montecarlo_numba.rpacket import RPacket, PacketStatus from tardis.montecarlo.montecarlo_numba.numba_interface import ( - PacketCollection, NumbaModel, NumbaPlasma) + PacketCollection, NumbaModel, NumbaPlasma, Estimators) from tardis.montecarlo.montecarlo_numba.single_packet_loop import ( single_packet_loop) @@ -22,13 +22,15 @@ def montecarlo_radial1d(model, plasma, runner): plasma.tau_sobolevs.values.copy(), dtype=np.float64) ) + estimators = Estimators(runner.j_estimator, runner.nu_bar_estimator) - #storage_model = initialize_storage_model(model, plasma, runner) - montecarlo_main_loop(packet_collection, numba_model, numba_plasma) + montecarlo_main_loop(packet_collection, numba_model, numba_plasma, + estimators) @njit(**njit_dict, nogil=True) -def montecarlo_main_loop(packet_collection, numba_model, numba_plasma): +def montecarlo_main_loop(packet_collection, numba_model, numba_plasma, + estimators): """ This is the main loop of the MonteCarlo routine that generates packets and sends them through the ejecta. @@ -47,7 +49,7 @@ def montecarlo_main_loop(packet_collection, numba_model, numba_plasma): packet_collection.packets_input_nu[i], packet_collection.packets_input_energy[i]) - single_packet_loop(r_packet, numba_model, numba_plasma) + single_packet_loop(r_packet, numba_model, numba_plasma, estimators) output_nus[i] = r_packet.nu if r_packet.status == PacketStatus.REABSORBED: diff --git a/tardis/montecarlo/montecarlo_numba/numba_interface.py b/tardis/montecarlo/montecarlo_numba/numba_interface.py index d9037bd6257..599c30ef959 100644 --- a/tardis/montecarlo/montecarlo_numba/numba_interface.py +++ b/tardis/montecarlo/montecarlo_numba/numba_interface.py @@ -61,8 +61,15 @@ def __init__(self, packets_input_nu, packets_input_mu, packets_input_energy, self.packets_output_energy = packets_output_energy +estimators_spec = [ + ('j_estimator', float64[:]), + ('nu_bar_estimator', float64[:]), +] - +@jitclass(estimators_spec) class Estimators(object): - pass + def __init__(self, j_estimator, nu_bar_estimator): + self.j_estimator = j_estimator + self.nu_bar_estimator = nu_bar_estimator + diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index e4c1098ef15..c6b4b57e0a7 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -190,7 +190,7 @@ def trace_packet(self, numba_model, numba_plasma): return distance_boundary, InteractionType.BOUNDARY, delta_shell - def move_packet(self, distance): + def move_packet(self, distance, time_explosion, numba_estimator): """Move packet a distance and recalculate the new angle mu Parameters @@ -199,6 +199,15 @@ def move_packet(self, distance): distance in cm """ + + doppler_factor = get_doppler_factor(self.r, self.mu, time_explosion) + comov_nu = self.nu * doppler_factor + comov_energy = self.energy * doppler_factor + numba_estimator.j_estimator[self.current_shell_id] += ( + comov_energy * distance) + numba_estimator.nu_bar_estimator[self.current_shell_id] += ( + comov_energy * distance * comov_nu) + r = self.r if (distance > 0.0): new_r = np.sqrt(r**2 + distance**2 + @@ -206,6 +215,8 @@ def move_packet(self, distance): self.mu = (self.mu * r + distance) / new_r self.r = new_r + + def move_packet_across_shell_boundary(self, distance, delta_shell, no_of_shells): """ @@ -225,7 +236,6 @@ def move_packet_across_shell_boundary(self, distance, delta_shell, number of shells in TARDIS simulation """ - self.move_packet(distance) if ((self.current_shell_id < no_of_shells - 1 and delta_shell == 1) or (self.current_shell_id > 0 and delta_shell == -1)): self.current_shell_id += delta_shell diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index a47625363ab..b2cb005fc41 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -5,7 +5,7 @@ InteractionType, PacketStatus) @njit -def single_packet_loop(r_packet, numba_model, numba_plasma): +def single_packet_loop(r_packet, numba_model, numba_plasma, estimators): """ Parameters @@ -13,6 +13,7 @@ def single_packet_loop(r_packet, numba_model, numba_plasma): r_packet: tardis.montecarlo.montecarlo_numba.rpacket.RPacket numba_model: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaModel numba_plasma: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaPlasma + estimators: tardis.montecarlo.montecarlo_numba.numba_interface.Estimators Returns ------- @@ -24,12 +25,16 @@ def single_packet_loop(r_packet, numba_model, numba_plasma): distance, interaction_type, delta_shell = r_packet.trace_packet( numba_model, numba_plasma) if interaction_type == InteractionType.BOUNDARY: + r_packet.move_packet(distance, numba_model.time_explosion, + estimators) r_packet.move_packet_across_shell_boundary(distance, delta_shell, len(numba_model.r_inner)) elif interaction_type == InteractionType.LINE: - r_packet.move_packet(distance) + r_packet.move_packet(distance, numba_model.time_explosion, + estimators) r_packet.scatter(numba_model.time_explosion) r_packet.next_line_id += 1 elif interaction_type == InteractionType.ESCATTERING: - r_packet.move_packet(distance) + r_packet.move_packet(distance, numba_model.time_explosion, + estimators) r_packet.scatter(numba_model.time_explosion) From 29708002a33db20d50517eb31ac669472afdde0c Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 6 May 2019 09:31:22 -0400 Subject: [PATCH 181/467] fix packet init --- .../montecarlo_numba/numba_interface.py | 7 ++ tardis/montecarlo/montecarlo_numba/rpacket.py | 4 +- .../montecarlo_numba/single_packet_loop.py | 8 +- tardis/montecarlo/montecarlo_numba/vpacket.py | 83 ++++++++++++++++--- 4 files changed, 87 insertions(+), 15 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/numba_interface.py b/tardis/montecarlo/montecarlo_numba/numba_interface.py index 599c30ef959..0876e870c16 100644 --- a/tardis/montecarlo/montecarlo_numba/numba_interface.py +++ b/tardis/montecarlo/montecarlo_numba/numba_interface.py @@ -72,4 +72,11 @@ def __init__(self, j_estimator, nu_bar_estimator): self.j_estimator = j_estimator self.nu_bar_estimator = nu_bar_estimator +monte_carlo_configuration_spec = [ + ('number_of_vpackets', int64) +] +@jitclass(monte_carlo_configuration_spec) +class MonteCarloConfiguration(object): + def __init__(self, number_of_vpackets): + self.number_of_vpackets = number_of_vpackets diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index c6b4b57e0a7..c150d410906 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -92,7 +92,7 @@ def __init__(self, r, mu, nu, energy): self.energy = energy self.current_shell_id = 0 self.status = PacketStatus.IN_PROCESS - self.next_line_id = -1 + def trace_packet(self, numba_model, numba_plasma): @@ -243,7 +243,7 @@ def move_packet_across_shell_boundary(self, distance, delta_shell, self.status = PacketStatus.EMITTED else: self.status = PacketStatus.REABSORBED - + def initialize_line_id(self, numba_plasma, numba_model): inverse_line_list_nu = numba_plasma.line_list_nu[::-1] doppler_factor = get_doppler_factor(self.r, self.mu, diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index b2cb005fc41..e192c914ff6 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -1,8 +1,7 @@ from numba import njit -import numpy as np from tardis.montecarlo.montecarlo_numba.rpacket import ( - InteractionType, PacketStatus) + InteractionType, PacketStatus, get_doppler_factor) @njit def single_packet_loop(r_packet, numba_model, numba_plasma, estimators): @@ -19,6 +18,11 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators): ------- """ + + doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, + numba_model.time_explosion) + r_packet.nu /= doppler_factor + r_packet.energy /= doppler_factor r_packet.initialize_line_id(numba_plasma, numba_model) while r_packet.status == PacketStatus.IN_PROCESS: diff --git a/tardis/montecarlo/montecarlo_numba/vpacket.py b/tardis/montecarlo/montecarlo_numba/vpacket.py index f88cedf0dd9..c096779c08e 100644 --- a/tardis/montecarlo/montecarlo_numba/vpacket.py +++ b/tardis/montecarlo/montecarlo_numba/vpacket.py @@ -1,3 +1,10 @@ +from numba import float64, int64 +import numpy as np + +from tardis.montecarlo.montecarlo_numba.rpacket import ( + calculate_distance_boundary, calculate_distance_electron, + get_doppler_factor, calculate_distance_line, calculate_tau_electron) + vpacket_spec = [ ('r', float64), ('mu', float64), @@ -5,7 +12,6 @@ ('energy', float64), ('next_line_id', int64), ('current_shell_id', int64), - ('status', int64), ] @jitclass(vpacket_spec) @@ -15,11 +21,10 @@ def __init__(self, r, mu, nu, energy): self.mu = mu self.nu = nu self.energy = energy - self.current_shell_id = 0 - self.status = IN_PROCESS + self.current_shell_id = -1 self.next_line_id = -1 - def trace_packet(self, storage_model): + def trace_vpacket(self, storage_model): r_inner = storage_model.r_inner[self.current_shell_id] r_outer = storage_model.r_outer[self.current_shell_id] @@ -54,26 +59,31 @@ def trace_packet(self, storage_model): distance_trace = 0.0 last_line = False + tau_trace_electron = calculate_tau_electron(cur_electron_density, + distance_trace) + + tau_trace_combined = tau_trace_electron + while True: - if cur_line_id < storage_model.no_of_lines: # not last_line + if cur_line_id < storage_model.no_of_lines: # not last_line nu_line = storage_model.line_list_nu[cur_line_id] - tau_trace_line = storage_model.line_lists_tau_sobolevs[cur_line_id, - self.current_shell_id] + tau_trace_line = storage_model.line_lists_tau_sobolevs[ + cur_line_id, self.current_shell_id] else: last_line = True self.next_line_id = cur_line_id break - tau_trace_line_combined += tau_trace_line + tau_trace_combined += tau_trace_line distance_trace = calculate_distance_line(self.nu, comov_nu, nu_line, storage_model.ct) - tau_trace_electron = calculate_tau_electron(cur_electron_density, - distance_trace) tau_trace_combined = tau_trace_line_combined + tau_trace_electron if (distance_boundary <= distance_trace): - ## current_shell_id +=1 + distance_boundary, delta_shell = calculate_distance_boundary( + self.r, self.mu, r_inner, r_outer) + current_shell_id +=1 ## distance_boundary #unless shell interaction_type = InteractionType.BOUNDARY # BOUNDARY @@ -95,3 +105,54 @@ def trace_packet(self, storage_model): return distance_electron, InteractionType.ESCATTERING, delta_shell else: return distance_boundary, InteractionType.BOUNDARY, delta_shell + + def move_packet(self, distance, time_explosion, numba_estimator): + """Move packet a distance and recalculate the new angle mu + + Parameters + ---------- + distance : float + distance in cm + """ + + doppler_factor = get_doppler_factor(self.r, self.mu, time_explosion) + comov_nu = self.nu * doppler_factor + comov_energy = self.energy * doppler_factor + numba_estimator.j_estimator[self.current_shell_id] += ( + comov_energy * distance) + numba_estimator.nu_bar_estimator[self.current_shell_id] += ( + comov_energy * distance * comov_nu) + + r = self.r + if (distance > 0.0): + new_r = np.sqrt(r ** 2 + distance ** 2 + + 2.0 * r * distance * self.mu) + self.mu = (self.mu * r + distance) / new_r + self.r = new_r + + def move_packet_across_shell_boundary(self, distance, delta_shell, + no_of_shells): + """ + Move packet across shell boundary - realizing if we are still in the simulation or have + moved out through the inner boundary or outer boundary and updating packet + status. + + Parameters + ---------- + distance : float + distance to move to shell boundary + + delta_shell: int + is +1 if moving outward or -1 if moving inward + + no_of_shells: int + number of shells in TARDIS simulation + """ + + if ((self.current_shell_id < no_of_shells - 1 and delta_shell == 1) + or (self.current_shell_id > 0 and delta_shell == -1)): + self.current_shell_id += delta_shell + elif delta_shell == 1: + self.status = PacketStatus.EMITTED + else: + self.status = PacketStatus.REABSORBED From 1ef454f2bd97f14cba42c27fbdb1947300dd94c3 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 6 May 2019 11:16:44 -0400 Subject: [PATCH 182/467] some optimizations --- tardis/montecarlo/montecarlo_numba/rpacket.py | 347 +++++++++--------- .../montecarlo_numba/single_packet_loop.py | 21 +- tardis/montecarlo/montecarlo_numba/vpacket.py | 19 +- 3 files changed, 191 insertions(+), 196 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index c150d410906..d63ad81a908 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -66,8 +66,8 @@ def calculate_distance_line(nu, comov_nu, nu_line, time_explosion): raise Exception @njit(**njit_dict) -def calculate_distance_electron(inverse_electron_density, tau_event): - return inverse_electron_density * INVERSE_SIGMA_THOMSON * tau_event +def calculate_distance_electron(electron_density, tau_event): + return tau_event / (electron_density * SIGMA_THOMSON) @njit(**njit_dict) def calculate_tau_electron(electron_density, distance): @@ -83,6 +83,8 @@ def get_random_mu(): return 2.0 * np.random.random() - 1.0 + + @jitclass(rpacket_spec) class RPacket(object): def __init__(self, r, mu, nu, energy): @@ -93,186 +95,183 @@ def __init__(self, r, mu, nu, energy): self.current_shell_id = 0 self.status = PacketStatus.IN_PROCESS - - - def trace_packet(self, numba_model, numba_plasma): - """ +@njit(**njit_dict) +def trace_packet(r_packet, numba_model, numba_plasma): + """ - Parameters - ---------- - numba_model: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaModel - numba_plasma: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaPlasma + Parameters + ---------- + numba_model: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaModel + numba_plasma: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaPlasma - Returns - ------- + Returns + ------- - """ - - r_inner = numba_model.r_inner[self.current_shell_id] - r_outer = numba_model.r_outer[self.current_shell_id] - - distance = 0.0 + """ - distance_boundary, delta_shell = calculate_distance_boundary( - self.r, self.mu, r_inner, r_outer) - - #defining start for line interaction - cur_line_id = self.next_line_id - nu_line = 0.0 - - #defining taus - tau_event = np.random.exponential() - tau_trace_line = 0.0 - tau_trace_line_combined = 0.0 - - #e scattering initialization + r_inner = numba_model.r_inner[r_packet.current_shell_id] + r_outer = numba_model.r_outer[r_packet.current_shell_id] + + distance = 0.0 + + distance_boundary, delta_shell = calculate_distance_boundary( + r_packet.r, r_packet.mu, r_inner, r_outer) + + # defining start for line interaction + cur_line_id = r_packet.next_line_id + nu_line = 0.0 - cur_electron_density = numba_plasma.electron_density[ - self.current_shell_id] - cur_inverse_electron_density = 1 / cur_electron_density - distance_electron = calculate_distance_electron( - cur_inverse_electron_density, tau_event) + # defining taus + tau_event = np.random.exponential() + tau_trace_line_combined = 0.0 + # e scattering initialization - #Calculating doppler factor - doppler_factor = get_doppler_factor(self.r, self.mu, + cur_electron_density = numba_plasma.electron_density[ + r_packet.current_shell_id] + distance_electron = calculate_distance_electron( + cur_electron_density, tau_event) + + # Calculating doppler factor + doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, numba_model.time_explosion) - comov_nu = self.nu * doppler_factor - distance_trace = 0.0 - last_line = False - - while True: - if cur_line_id < len(numba_plasma.line_list_nu): # not last_line - nu_line = numba_plasma.line_list_nu[cur_line_id] - tau_trace_line = numba_plasma.tau_sobolev[ - cur_line_id, self.current_shell_id] - else: - last_line = True - self.next_line_id = cur_line_id - break - - tau_trace_line_combined += tau_trace_line - distance_trace = calculate_distance_line( - self.nu, comov_nu, nu_line, numba_model.time_explosion) - tau_trace_electron = calculate_tau_electron(cur_electron_density, - distance_trace) - - tau_trace_combined = tau_trace_line_combined + tau_trace_electron - - if ((distance_boundary <= distance_trace) and - (distance_boundary <= distance_electron)): - interaction_type = InteractionType.BOUNDARY # BOUNDARY - self.next_line_id = cur_line_id - distance = distance_boundary - break - - if ((distance_electron < distance_trace) and - (distance_electron < distance_boundary)): - interaction_type = InteractionType.ESCATTERING - distance = distance_electron - self.next_line_id = cur_line_id - break - - if tau_trace_combined > tau_event: - interaction_type = InteractionType.LINE #Line - self.next_line_id = cur_line_id - distance = distance_trace - break - - cur_line_id += 1 - if not last_line: - return distance, interaction_type, delta_shell + comov_nu = r_packet.nu * doppler_factor + last_line = False + + while True: + if cur_line_id < len(numba_plasma.line_list_nu): # not last_line + nu_line = numba_plasma.line_list_nu[cur_line_id] + tau_trace_line = numba_plasma.tau_sobolev[ + cur_line_id, r_packet.current_shell_id] else: - if distance_electron < distance_boundary: - return (distance_electron, InteractionType.ESCATTERING, - delta_shell) - else: - return distance_boundary, InteractionType.BOUNDARY, delta_shell - - - def move_packet(self, distance, time_explosion, numba_estimator): - """Move packet a distance and recalculate the new angle mu - - Parameters - ---------- - distance : float - distance in cm - """ - - - doppler_factor = get_doppler_factor(self.r, self.mu, time_explosion) - comov_nu = self.nu * doppler_factor - comov_energy = self.energy * doppler_factor - numba_estimator.j_estimator[self.current_shell_id] += ( - comov_energy * distance) - numba_estimator.nu_bar_estimator[self.current_shell_id] += ( - comov_energy * distance * comov_nu) - - r = self.r - if (distance > 0.0): - new_r = np.sqrt(r**2 + distance**2 + - 2.0 * r * distance * self.mu) - self.mu = (self.mu * r + distance) / new_r - self.r = new_r - - - - def move_packet_across_shell_boundary(self, distance, delta_shell, - no_of_shells): - """ - Move packet across shell boundary - realizing if we are still in the simulation or have - moved out through the inner boundary or outer boundary and updating packet - status. - - Parameters - ---------- - distance : float - distance to move to shell boundary - - delta_shell: int - is +1 if moving outward or -1 if moving inward - - no_of_shells: int - number of shells in TARDIS simulation - """ - - if ((self.current_shell_id < no_of_shells - 1 and delta_shell == 1) - or (self.current_shell_id > 0 and delta_shell == -1)): - self.current_shell_id += delta_shell - elif delta_shell == 1: - self.status = PacketStatus.EMITTED + last_line = True + r_packet.next_line_id = cur_line_id + break + + tau_trace_line_combined += tau_trace_line + distance_trace = calculate_distance_line( + r_packet.nu, comov_nu, nu_line, numba_model.time_explosion) + tau_trace_electron = calculate_tau_electron(cur_electron_density, + distance_trace) + + tau_trace_combined = tau_trace_line_combined + tau_trace_electron + + if ((distance_boundary <= distance_trace) and + (distance_boundary <= distance_electron)): + interaction_type = InteractionType.BOUNDARY # BOUNDARY + r_packet.next_line_id = cur_line_id + distance = distance_boundary + break + + if ((distance_electron < distance_trace) and + (distance_electron < distance_boundary)): + interaction_type = InteractionType.ESCATTERING + distance = distance_electron + r_packet.next_line_id = cur_line_id + break + + if tau_trace_combined > tau_event: + interaction_type = InteractionType.LINE # Line + r_packet.next_line_id = cur_line_id + distance = distance_trace + break + + cur_line_id += 1 + + if not last_line: + return distance, interaction_type, delta_shell + else: + if distance_electron < distance_boundary: + return (distance_electron, InteractionType.ESCATTERING, + delta_shell) else: - self.status = PacketStatus.REABSORBED - - def initialize_line_id(self, numba_plasma, numba_model): - inverse_line_list_nu = numba_plasma.line_list_nu[::-1] - doppler_factor = get_doppler_factor(self.r, self.mu, - numba_model.time_explosion) - comov_nu = self.nu * doppler_factor - next_line_id = (len(numba_plasma.line_list_nu) - - np.searchsorted(inverse_line_list_nu, comov_nu)) - self.next_line_id = next_line_id - - - def scatter(self, time_explosion): - """ - General scattering for lines as well as thomson. - 2) get the doppler factor at that position with the old angle - 3) convert the current energy and nu into the comoving - frame with the old mu - 4) Scatter and draw new mu - update mu - 5) Transform the comoving energy and nu back using the new mu + return distance_boundary, InteractionType.BOUNDARY, delta_shell + + +@njit(**njit_dict) +def move_packet(r_packet, distance, time_explosion, numba_estimator): + """Move packet a distance and recalculate the new angle mu + + Parameters + ---------- + distance : float + distance in cm + """ + + + doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, time_explosion) + comov_nu = r_packet.nu * doppler_factor + comov_energy = r_packet.energy * doppler_factor + numba_estimator.j_estimator[r_packet.current_shell_id] += ( + comov_energy * distance) + numba_estimator.nu_bar_estimator[r_packet.current_shell_id] += ( + comov_energy * distance * comov_nu) + + r = r_packet.r + if (distance > 0.0): + new_r = np.sqrt(r**2 + distance**2 + + 2.0 * r * distance * r_packet.mu) + r_packet.mu = (r_packet.mu * r + distance) / new_r + r_packet.r = new_r + +@njit(**njit_dict) +def move_packet_across_shell_boundary(r_packet, distance, delta_shell, + no_of_shells): + """ + Move packet across shell boundary - realizing if we are still in the simulation or have + moved out through the inner boundary or outer boundary and updating packet + status. + + Parameters + ---------- + distance : float + distance to move to shell boundary - Parameters - ---------- - distance : [type] - [description] - """ - doppler_factor = get_doppler_factor(self.r, self.mu, time_explosion) - comov_energy = self.energy * doppler_factor - comov_nu = self.nu * doppler_factor - self.mu = get_random_mu() - inverse_new_doppler_factor = 1. / get_doppler_factor( - self.r, self.mu, time_explosion) - self.energy = comov_energy * inverse_new_doppler_factor - self.nu = comov_nu * inverse_new_doppler_factor + delta_shell: int + is +1 if moving outward or -1 if moving inward + + no_of_shells: int + number of shells in TARDIS simulation + """ + + if ((r_packet.current_shell_id < no_of_shells - 1 and delta_shell == 1) + or (r_packet.current_shell_id > 0 and delta_shell == -1)): + r_packet.current_shell_id += delta_shell + elif delta_shell == 1: + r_packet.status = PacketStatus.EMITTED + else: + r_packet.status = PacketStatus.REABSORBED + +@njit(**njit_dict) +def initialize_line_id(r_packet, numba_plasma, numba_model): + inverse_line_list_nu = numba_plasma.line_list_nu[::-1] + doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, + numba_model.time_explosion) + comov_nu = r_packet.nu * doppler_factor + next_line_id = (len(numba_plasma.line_list_nu) - + np.searchsorted(inverse_line_list_nu, comov_nu)) + r_packet.next_line_id = next_line_id + +@njit(**njit_dict) +def scatter(r_packet, time_explosion): + """ + General scattering for lines as well as thomson. + 2) get the doppler factor at that position with the old angle + 3) convert the current energy and nu into the comoving + frame with the old mu + 4) Scatter and draw new mu - update mu + 5) Transform the comoving energy and nu back using the new mu + + Parameters + ---------- + distance : [type] + [description] + """ + doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, time_explosion) + comov_energy = r_packet.energy * doppler_factor + comov_nu = r_packet.nu * doppler_factor + r_packet.mu = get_random_mu() + inverse_new_doppler_factor = 1. / get_doppler_factor( + r_packet.r, r_packet.mu, time_explosion) + r_packet.energy = comov_energy * inverse_new_doppler_factor + r_packet.nu = comov_nu * inverse_new_doppler_factor diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index e192c914ff6..c6740816ae5 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -1,7 +1,8 @@ from numba import njit from tardis.montecarlo.montecarlo_numba.rpacket import ( - InteractionType, PacketStatus, get_doppler_factor) + InteractionType, PacketStatus, get_doppler_factor, trace_packet, + move_packet_across_shell_boundary, move_packet, scatter, initialize_line_id) @njit def single_packet_loop(r_packet, numba_model, numba_plasma, estimators): @@ -23,22 +24,22 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators): numba_model.time_explosion) r_packet.nu /= doppler_factor r_packet.energy /= doppler_factor - r_packet.initialize_line_id(numba_plasma, numba_model) + initialize_line_id(r_packet, numba_plasma, numba_model) while r_packet.status == PacketStatus.IN_PROCESS: - distance, interaction_type, delta_shell = r_packet.trace_packet( - numba_model, numba_plasma) + distance, interaction_type, delta_shell = trace_packet( + r_packet, numba_model, numba_plasma) if interaction_type == InteractionType.BOUNDARY: - r_packet.move_packet(distance, numba_model.time_explosion, + move_packet(r_packet, distance, numba_model.time_explosion, estimators) - r_packet.move_packet_across_shell_boundary(distance, delta_shell, + move_packet_across_shell_boundary(r_packet, distance, delta_shell, len(numba_model.r_inner)) elif interaction_type == InteractionType.LINE: - r_packet.move_packet(distance, numba_model.time_explosion, + move_packet(r_packet, distance, numba_model.time_explosion, estimators) - r_packet.scatter(numba_model.time_explosion) + scatter(r_packet, numba_model.time_explosion) r_packet.next_line_id += 1 elif interaction_type == InteractionType.ESCATTERING: - r_packet.move_packet(distance, numba_model.time_explosion, + move_packet(r_packet, distance, numba_model.time_explosion, estimators) - r_packet.scatter(numba_model.time_explosion) + scatter(r_packet, numba_model.time_explosion) diff --git a/tardis/montecarlo/montecarlo_numba/vpacket.py b/tardis/montecarlo/montecarlo_numba/vpacket.py index c096779c08e..e0001d8e61f 100644 --- a/tardis/montecarlo/montecarlo_numba/vpacket.py +++ b/tardis/montecarlo/montecarlo_numba/vpacket.py @@ -1,6 +1,7 @@ from numba import float64, int64 import numpy as np +from from tardis.montecarlo.montecarlo_numba.rpacket import ( calculate_distance_boundary, calculate_distance_electron, get_doppler_factor, calculate_distance_line, calculate_tau_electron) @@ -64,7 +65,7 @@ def trace_vpacket(self, storage_model): tau_trace_combined = tau_trace_electron - while True: + while self.status == INPROCESS: if cur_line_id < storage_model.no_of_lines: # not last_line nu_line = storage_model.line_list_nu[cur_line_id] tau_trace_line = storage_model.line_lists_tau_sobolevs[ @@ -81,9 +82,12 @@ def trace_vpacket(self, storage_model): tau_trace_combined = tau_trace_line_combined + tau_trace_electron if (distance_boundary <= distance_trace): + current_shell_id += delta + self.move_packet_across_shell_boundary(distance_boundary) + distance_trace = distance_boundary, delta_shell = calculate_distance_boundary( self.r, self.mu, r_inner, r_outer) - current_shell_id +=1 + ## distance_boundary #unless shell interaction_type = InteractionType.BOUNDARY # BOUNDARY @@ -106,7 +110,7 @@ def trace_vpacket(self, storage_model): else: return distance_boundary, InteractionType.BOUNDARY, delta_shell - def move_packet(self, distance, time_explosion, numba_estimator): + def move_vpacket(self, distance): """Move packet a distance and recalculate the new angle mu Parameters @@ -114,15 +118,6 @@ def move_packet(self, distance, time_explosion, numba_estimator): distance : float distance in cm """ - - doppler_factor = get_doppler_factor(self.r, self.mu, time_explosion) - comov_nu = self.nu * doppler_factor - comov_energy = self.energy * doppler_factor - numba_estimator.j_estimator[self.current_shell_id] += ( - comov_energy * distance) - numba_estimator.nu_bar_estimator[self.current_shell_id] += ( - comov_energy * distance * comov_nu) - r = self.r if (distance > 0.0): new_r = np.sqrt(r ** 2 + distance ** 2 + From c4179a2bb675a08162b18f74b3d8cc02177dcec1 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 6 May 2019 13:11:27 -0400 Subject: [PATCH 183/467] add vpacket stuff --- tardis/montecarlo/montecarlo_numba/vpacket.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/vpacket.py b/tardis/montecarlo/montecarlo_numba/vpacket.py index e0001d8e61f..3f93722b5d5 100644 --- a/tardis/montecarlo/montecarlo_numba/vpacket.py +++ b/tardis/montecarlo/montecarlo_numba/vpacket.py @@ -1,10 +1,11 @@ -from numba import float64, int64 +from numba import float64, int64, jitclass import numpy as np from from tardis.montecarlo.montecarlo_numba.rpacket import ( calculate_distance_boundary, calculate_distance_electron, - get_doppler_factor, calculate_distance_line, calculate_tau_electron) + get_doppler_factor, calculate_distance_line, calculate_tau_electron, + PacketStatus) vpacket_spec = [ ('r', float64), @@ -13,6 +14,7 @@ ('energy', float64), ('next_line_id', int64), ('current_shell_id', int64), + ('status', int64) ] @jitclass(vpacket_spec) @@ -24,6 +26,7 @@ def __init__(self, r, mu, nu, energy): self.energy = energy self.current_shell_id = -1 self.next_line_id = -1 + self.status = -1 def trace_vpacket(self, storage_model): From 7878bbd87863b9bfd04a85d366e04158f95d884c Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 16 May 2019 22:54:34 -0400 Subject: [PATCH 184/467] several changes to vpacket --- tardis/montecarlo/montecarlo_numba/vpacket.py | 186 +++++++++++++----- 1 file changed, 141 insertions(+), 45 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/vpacket.py b/tardis/montecarlo/montecarlo_numba/vpacket.py index 3f93722b5d5..e53c919ae1e 100644 --- a/tardis/montecarlo/montecarlo_numba/vpacket.py +++ b/tardis/montecarlo/montecarlo_numba/vpacket.py @@ -3,9 +3,8 @@ from from tardis.montecarlo.montecarlo_numba.rpacket import ( - calculate_distance_boundary, calculate_distance_electron, - get_doppler_factor, calculate_distance_line, calculate_tau_electron, - PacketStatus) + calculate_distance_boundary, get_doppler_factor, calculate_distance_line, + calculate_tau_electron, PacketStatus) vpacket_spec = [ ('r', float64), @@ -51,67 +50,45 @@ def trace_vpacket(self, storage_model): cur_electron_density = storage_model.electron_densities[ self.current_shell_id] - cur_inverse_electron_density = 1 / cur_electron_density - distance_electron = calculate_distance_electron( - cur_inverse_electron_density, tau_event) - #Calculating doppler factor doppler_factor = get_doppler_factor(self.r, self.mu, storage_model.inverse_time_explosion) - comov_nu = self.nu * doppler_factor - distance_trace = 0.0 last_line = False tau_trace_electron = calculate_tau_electron(cur_electron_density, - distance_trace) + distance_boundary) tau_trace_combined = tau_trace_electron - while self.status == INPROCESS: + while True: if cur_line_id < storage_model.no_of_lines: # not last_line nu_line = storage_model.line_list_nu[cur_line_id] tau_trace_line = storage_model.line_lists_tau_sobolevs[ cur_line_id, self.current_shell_id] + tau_trace_combined += tau_trace_line + distance_trace = calculate_distance_line(self.nu, comov_nu, + nu_line, + storage_model.ct) + cur_line_id += 1 else: - last_line = True - self.next_line_id = cur_line_id - break + distance_trace = distance_boundary + 1.0 - tau_trace_combined += tau_trace_line - distance_trace = calculate_distance_line(self.nu, comov_nu, nu_line, - storage_model.ct) - tau_trace_combined = tau_trace_line_combined + tau_trace_electron - if (distance_boundary <= distance_trace): - current_shell_id += delta + + if distance_boundary <= distance_trace: + self.current_shell_id += delta_shell self.move_packet_across_shell_boundary(distance_boundary) - distance_trace = - distance_boundary, delta_shell = calculate_distance_boundary( - self.r, self.mu, r_inner, r_outer) - - ## distance_boundary - #unless shell - interaction_type = InteractionType.BOUNDARY # BOUNDARY - self.next_line_id = cur_line_id - distance = distance_boundary - break - - if (distance_electron < distance_trace) and (distance_electron < distance_boundary): - interaction_type = InteractionType.ESCATTERING - distance = distance_electron - self.next_line_id = cur_line_id - break - - cur_line_id += 1 - if not last_line: - return distance, interaction_type, delta_shell - else: - if distance_electron < distance_boundary: - return distance_electron, InteractionType.ESCATTERING, delta_shell - else: - return distance_boundary, InteractionType.BOUNDARY, delta_shell + if not self.status == PacketStatus.IN_PROCESS: + break + + comov_nu = self.nu * doppler_factor + tau_electron = calculate_tau_electron(cur_electron_density, + distance_boundary) + tau_trace_combined += tau_electron + + return tau_trace_combined def move_vpacket(self, distance): """Move packet a distance and recalculate the new angle mu @@ -154,3 +131,122 @@ def move_packet_across_shell_boundary(self, distance, delta_shell, self.status = PacketStatus.EMITTED else: self.status = PacketStatus.REABSORBED + + +def create_single_vpacket(): + +def create_volley_vpacket(): + + if cur_r_packet.r > r_innerst: + mu_min = -np.sqrt(1 - r_innerst / cur_r_packet.r) ** 2 + else: + mu_min = 0.0 + + double + mu_bin = (1.0 - mu_min) / rpacket_get_virtual_packet_flag(packet); + rpacket_set_mu( & virt_packet, mu_min + (i + rk_double(mt_state)) * mu_bin); + { + if ((rpacket_get_nu (packet) > storage->spectrum_virt_start_nu) && (rpacket_get_nu(packet) < storage->spectrum_virt_end_nu)) + { + for (int64_t i = 0; i < rpacket_get_virtual_packet_flag (packet); i++) + { + double weight; + rpacket_t virt_packet = *packet; + double mu_min; + if (rpacket_get_r(&virt_packet) > storage->r_inner[0]) + { + mu_min = + -1.0 * sqrt (1.0 - + (storage->r_inner[0] / rpacket_get_r(&virt_packet)) * + (storage->r_inner[0] / rpacket_get_r(&virt_packet))); + + if (storage->full_relativity) + { + // Need to transform the angular size of the photosphere into the CMF + mu_min = angle_aberration_LF_to_CMF (&virt_packet, storage, mu_min); + } + } + else + { + mu_min = 0.0; + } + double mu_bin = (1.0 - mu_min) / rpacket_get_virtual_packet_flag (packet); + rpacket_set_mu(&virt_packet,mu_min + (i + rk_double (mt_state)) * mu_bin); + switch (virtual_mode) + { + case -2: + weight = 1.0 / rpacket_get_virtual_packet_flag (packet); + break; + case -1: + weight = + 2.0 * rpacket_get_mu(&virt_packet) / + rpacket_get_virtual_packet_flag (packet); + break; + case 1: + weight = + (1.0 - + mu_min) / 2.0 / rpacket_get_virtual_packet_flag (packet); + break; + default: + fprintf (stderr, "Something has gone horribly wrong!\n"); + // FIXME MR: we need to somehow signal an error here + // I'm adding an exit() here to inform the compiler about the impossible path + exit(1); + } + angle_aberration_CMF_to_LF (&virt_packet, storage); + double doppler_factor_ratio = + rpacket_doppler_factor (packet, storage) / + rpacket_doppler_factor (&virt_packet, storage); + rpacket_set_energy(&virt_packet, + rpacket_get_energy (packet) * doppler_factor_ratio); + rpacket_set_nu(&virt_packet,rpacket_get_nu (packet) * doppler_factor_ratio); + reabsorbed = montecarlo_one_packet_loop (storage, &virt_packet, 1, mt_state); +#ifdef WITH_VPACKET_LOGGING +#ifdef WITHOPENMP +#pragma omp critical + { +#endif // WITHOPENMP + if (storage->virt_packet_count >= storage->virt_array_size) + { + storage->virt_array_size *= 2; + storage->virt_packet_nus = safe_realloc(storage->virt_packet_nus, sizeof(double) * storage->virt_array_size); + storage->virt_packet_energies = safe_realloc(storage->virt_packet_energies, sizeof(double) * storage->virt_array_size); + storage->virt_packet_last_interaction_in_nu = safe_realloc(storage->virt_packet_last_interaction_in_nu, sizeof(double) * storage->virt_array_size); + storage->virt_packet_last_interaction_type = safe_realloc(storage->virt_packet_last_interaction_type, sizeof(int64_t) * storage->virt_array_size); + storage->virt_packet_last_line_interaction_in_id = safe_realloc(storage->virt_packet_last_line_interaction_in_id, sizeof(int64_t) * storage->virt_array_size); + storage->virt_packet_last_line_interaction_out_id = safe_realloc(storage->virt_packet_last_line_interaction_out_id, sizeof(int64_t) * storage->virt_array_size); + } + storage->virt_packet_nus[storage->virt_packet_count] = rpacket_get_nu(&virt_packet); + storage->virt_packet_energies[storage->virt_packet_count] = rpacket_get_energy(&virt_packet) * weight; + storage->virt_packet_last_interaction_in_nu[storage->virt_packet_count] = storage->last_interaction_in_nu[rpacket_get_id (packet)]; + storage->virt_packet_last_interaction_type[storage->virt_packet_count] = storage->last_interaction_type[rpacket_get_id (packet)]; + storage->virt_packet_last_line_interaction_in_id[storage->virt_packet_count] = storage->last_line_interaction_in_id[rpacket_get_id (packet)]; + storage->virt_packet_last_line_interaction_out_id[storage->virt_packet_count] = storage->last_line_interaction_out_id[rpacket_get_id (packet)]; + storage->virt_packet_count += 1; +#ifdef WITHOPENMP + } +#endif // WITHOPENMP +#endif // WITH_VPACKET_LOGGING + if ((rpacket_get_nu(&virt_packet) < storage->spectrum_end_nu) && + (rpacket_get_nu(&virt_packet) > storage->spectrum_start_nu)) + { +#ifdef WITHOPENMP +#pragma omp critical + { +#endif // WITHOPENMP + int64_t virt_id_nu = + floor ((rpacket_get_nu(&virt_packet) - + storage->spectrum_start_nu) / + storage->spectrum_delta_nu); + storage->spectrum_virt_nu[virt_id_nu] += + rpacket_get_energy(&virt_packet) * weight; +#ifdef WITHOPENMP + } +#endif // WITHOPENMP + } + } + } + else + { + return 1; + } \ No newline at end of file From 3d711a317fb1965a4c7fc5455c33ec52bf636f75 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 4 Jun 2019 18:05:49 +0200 Subject: [PATCH 185/467] Clean up rpacket fix vpacket Co-authored-by: Christian Vogl --- tardis/montecarlo/montecarlo_numba/rpacket.py | 81 +++++----- .../montecarlo_numba/single_packet_loop.py | 10 +- tardis/montecarlo/montecarlo_numba/vpacket.py | 153 +++++++++--------- 3 files changed, 114 insertions(+), 130 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index d63ad81a908..93917e2dfde 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -6,6 +6,9 @@ from tardis.montecarlo.montecarlo_numba import njit_dict from tardis import constants as const +class MonteCarloException(ValueError): + pass + C_SPEED_OF_LIGHT = const.c.to('cm/s').value MISS_DISTANCE = 1e99 SIGMA_THOMSON = const.sigma_T.to('cm^2').value @@ -63,7 +66,7 @@ def calculate_distance_line(nu, comov_nu, nu_line, time_explosion): if nu_diff >= 0: return (nu_diff / nu) * C_SPEED_OF_LIGHT * time_explosion else: - raise Exception + raise MonteCarloException('nu difference is less than 0.0') @njit(**njit_dict) def calculate_distance_electron(electron_density, tau_event): @@ -95,6 +98,17 @@ def __init__(self, r, mu, nu, energy): self.current_shell_id = 0 self.status = PacketStatus.IN_PROCESS + def initialize_line_id(self, numba_plasma, numba_model): + inverse_line_list_nu = numba_plasma.line_list_nu[::-1] + doppler_factor = get_doppler_factor(self.r, self.mu, + numba_model.time_explosion) + comov_nu = self.nu * doppler_factor + next_line_id = (len(numba_plasma.line_list_nu) - + np.searchsorted(inverse_line_list_nu, comov_nu)) + self.next_line_id = next_line_id + + + @njit(**njit_dict) def trace_packet(r_packet, numba_model, numba_plasma): """ @@ -112,14 +126,11 @@ def trace_packet(r_packet, numba_model, numba_plasma): r_inner = numba_model.r_inner[r_packet.current_shell_id] r_outer = numba_model.r_outer[r_packet.current_shell_id] - distance = 0.0 - distance_boundary, delta_shell = calculate_distance_boundary( r_packet.r, r_packet.mu, r_inner, r_outer) # defining start for line interaction - cur_line_id = r_packet.next_line_id - nu_line = 0.0 + start_line_id = r_packet.next_line_id # defining taus tau_event = np.random.exponential() @@ -137,23 +148,17 @@ def trace_packet(r_packet, numba_model, numba_plasma): numba_model.time_explosion) comov_nu = r_packet.nu * doppler_factor last_line = False - - while True: - if cur_line_id < len(numba_plasma.line_list_nu): # not last_line - nu_line = numba_plasma.line_list_nu[cur_line_id] - tau_trace_line = numba_plasma.tau_sobolev[ - cur_line_id, r_packet.current_shell_id] - else: - last_line = True - r_packet.next_line_id = cur_line_id - break - + cur_line_id = start_line_id + for cur_line_id in range(start_line_id, len(numba_plasma.line_list_nu)): + nu_line = numba_plasma.line_list_nu[cur_line_id] + tau_trace_line = numba_plasma.tau_sobolev[ + cur_line_id, r_packet.current_shell_id] + tau_trace_line_combined += tau_trace_line distance_trace = calculate_distance_line( r_packet.nu, comov_nu, nu_line, numba_model.time_explosion) tau_trace_electron = calculate_tau_electron(cur_electron_density, distance_trace) - tau_trace_combined = tau_trace_line_combined + tau_trace_electron if ((distance_boundary <= distance_trace) and @@ -175,21 +180,19 @@ def trace_packet(r_packet, numba_model, numba_plasma): r_packet.next_line_id = cur_line_id distance = distance_trace break - - cur_line_id += 1 - - if not last_line: - return distance, interaction_type, delta_shell - else: + else: # Executed when no break occurs in the for loop if distance_electron < distance_boundary: - return (distance_electron, InteractionType.ESCATTERING, - delta_shell) + interaction_type = InteractionType.ESCATTERING else: - return distance_boundary, InteractionType.BOUNDARY, delta_shell + interaction_type = InteractionType.BOUNDARY + + r_packet.next_line_id = cur_line_id + + return distance, interaction_type, delta_shell @njit(**njit_dict) -def move_packet(r_packet, distance, time_explosion, numba_estimator): +def move_rpacket(r_packet, distance, time_explosion, numba_estimator): """Move packet a distance and recalculate the new angle mu Parameters @@ -215,7 +218,7 @@ def move_packet(r_packet, distance, time_explosion, numba_estimator): r_packet.r = new_r @njit(**njit_dict) -def move_packet_across_shell_boundary(r_packet, distance, delta_shell, +def move_packet_across_shell_boundary(packet, distance, delta_shell, no_of_shells): """ Move packet across shell boundary - realizing if we are still in the simulation or have @@ -233,24 +236,14 @@ def move_packet_across_shell_boundary(r_packet, distance, delta_shell, no_of_shells: int number of shells in TARDIS simulation """ + next_shell_id = packet.current_shell_id + delta_shell - if ((r_packet.current_shell_id < no_of_shells - 1 and delta_shell == 1) - or (r_packet.current_shell_id > 0 and delta_shell == -1)): - r_packet.current_shell_id += delta_shell - elif delta_shell == 1: - r_packet.status = PacketStatus.EMITTED + if next_shell_id >= no_of_shells: + packet.status = PacketStatus.EMITTED + elif next_shell_id < 0: + packet.status = PacketStatus.REABSORBED else: - r_packet.status = PacketStatus.REABSORBED - -@njit(**njit_dict) -def initialize_line_id(r_packet, numba_plasma, numba_model): - inverse_line_list_nu = numba_plasma.line_list_nu[::-1] - doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, - numba_model.time_explosion) - comov_nu = r_packet.nu * doppler_factor - next_line_id = (len(numba_plasma.line_list_nu) - - np.searchsorted(inverse_line_list_nu, comov_nu)) - r_packet.next_line_id = next_line_id + packet.current_shell_id = next_shell_id @njit(**njit_dict) def scatter(r_packet, time_explosion): diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index c6740816ae5..96ea6b1a9b1 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -2,7 +2,7 @@ from tardis.montecarlo.montecarlo_numba.rpacket import ( InteractionType, PacketStatus, get_doppler_factor, trace_packet, - move_packet_across_shell_boundary, move_packet, scatter, initialize_line_id) + move_packet_across_shell_boundary, move_rpacket, scatter) @njit def single_packet_loop(r_packet, numba_model, numba_plasma, estimators): @@ -24,22 +24,22 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators): numba_model.time_explosion) r_packet.nu /= doppler_factor r_packet.energy /= doppler_factor - initialize_line_id(r_packet, numba_plasma, numba_model) + r_packet.initialize_line_id(numba_plasma, numba_model) while r_packet.status == PacketStatus.IN_PROCESS: distance, interaction_type, delta_shell = trace_packet( r_packet, numba_model, numba_plasma) if interaction_type == InteractionType.BOUNDARY: - move_packet(r_packet, distance, numba_model.time_explosion, + move_rpacket(r_packet, distance, numba_model.time_explosion, estimators) move_packet_across_shell_boundary(r_packet, distance, delta_shell, len(numba_model.r_inner)) elif interaction_type == InteractionType.LINE: - move_packet(r_packet, distance, numba_model.time_explosion, + move_rpacket(r_packet, distance, numba_model.time_explosion, estimators) scatter(r_packet, numba_model.time_explosion) r_packet.next_line_id += 1 elif interaction_type == InteractionType.ESCATTERING: - move_packet(r_packet, distance, numba_model.time_explosion, + move_rpacket(r_packet, distance, numba_model.time_explosion, estimators) scatter(r_packet, numba_model.time_explosion) diff --git a/tardis/montecarlo/montecarlo_numba/vpacket.py b/tardis/montecarlo/montecarlo_numba/vpacket.py index e53c919ae1e..d9c1ed5760a 100644 --- a/tardis/montecarlo/montecarlo_numba/vpacket.py +++ b/tardis/montecarlo/montecarlo_numba/vpacket.py @@ -1,10 +1,9 @@ from numba import float64, int64, jitclass import numpy as np -from from tardis.montecarlo.montecarlo_numba.rpacket import ( calculate_distance_boundary, get_doppler_factor, calculate_distance_line, - calculate_tau_electron, PacketStatus) + calculate_tau_electron, PacketStatus, move_packet_across_shell_boundary) vpacket_spec = [ ('r', float64), @@ -27,69 +26,6 @@ def __init__(self, r, mu, nu, energy): self.next_line_id = -1 self.status = -1 - def trace_vpacket(self, storage_model): - - r_inner = storage_model.r_inner[self.current_shell_id] - r_outer = storage_model.r_outer[self.current_shell_id] - - distance = 0.0 - - distance_boundary, delta_shell = calculate_distance_boundary( - self.r, self.mu, r_inner, r_outer) - - #defining start for line interaction - cur_line_id = self.next_line_id - nu_line = 0.0 - - #defining taus - tau_event = np.random.exponential() - tau_trace_line = 0.0 - tau_trace_line_combined = 0.0 - - #e scattering initialization - - cur_electron_density = storage_model.electron_densities[ - self.current_shell_id] - - #Calculating doppler factor - doppler_factor = get_doppler_factor(self.r, self.mu, - storage_model.inverse_time_explosion) - last_line = False - - tau_trace_electron = calculate_tau_electron(cur_electron_density, - distance_boundary) - - tau_trace_combined = tau_trace_electron - - while True: - if cur_line_id < storage_model.no_of_lines: # not last_line - nu_line = storage_model.line_list_nu[cur_line_id] - tau_trace_line = storage_model.line_lists_tau_sobolevs[ - cur_line_id, self.current_shell_id] - tau_trace_combined += tau_trace_line - distance_trace = calculate_distance_line(self.nu, comov_nu, - nu_line, - storage_model.ct) - cur_line_id += 1 - else: - distance_trace = distance_boundary + 1.0 - - - - - if distance_boundary <= distance_trace: - self.current_shell_id += delta_shell - self.move_packet_across_shell_boundary(distance_boundary) - if not self.status == PacketStatus.IN_PROCESS: - break - - comov_nu = self.nu * doppler_factor - tau_electron = calculate_tau_electron(cur_electron_density, - distance_boundary) - tau_trace_combined += tau_electron - - return tau_trace_combined - def move_vpacket(self, distance): """Move packet a distance and recalculate the new angle mu @@ -124,23 +60,78 @@ def move_packet_across_shell_boundary(self, distance, delta_shell, number of shells in TARDIS simulation """ - if ((self.current_shell_id < no_of_shells - 1 and delta_shell == 1) - or (self.current_shell_id > 0 and delta_shell == -1)): - self.current_shell_id += delta_shell - elif delta_shell == 1: - self.status = PacketStatus.EMITTED - else: - self.status = PacketStatus.REABSORBED - + next_shell_id = r_packet.current_shell_id + delta_shell -def create_single_vpacket(): - -def create_volley_vpacket(): - - if cur_r_packet.r > r_innerst: - mu_min = -np.sqrt(1 - r_innerst / cur_r_packet.r) ** 2 - else: - mu_min = 0.0 + if next_shell_id >= no_of_shells: + r_packet.status = PacketStatus.EMITTED + elif next_shell_id < 0: + r_packet.status = PacketStatus.REABSORBED + else: + rpacket.current_shell_id = next_shell_id + + +@njit(**njit_dict) +def trace_vpacket_within_shell(v_packet, numba_model, numba_plasma): + + r_inner = numba_model.r_inner[v_packet.current_shell_id] + r_outer = numba_model.r_outer[v_packet.current_shell_id] + + distance_boundary, delta_shell = calculate_distance_boundary( + v_packet.r, v_packet.mu, r_inner, r_outer) + + # defining start for line interaction + start_line_id = v_packet.next_line_id + + # defining taus + + + # e scattering initialization + cur_electron_density = numba_plasma.electron_density[ + v_packet.current_shell_id] + tau_electron = calculate_tau_electron(cur_electron_density, + distance_boundary) + tau_trace_combined = tau_electron + + # Calculating doppler factor + doppler_factor = get_doppler_factor(v_packet.r, v_packet.mu, + numba_model.time_explosion) + comov_nu = v_packet.nu * doppler_factor + cur_line_id = start_line_id + + for cur_line_id in range(start_line_id, len(numba_plasma.line_list_nu)): + nu_line = numba_plasma.line_list_nu[cur_line_id] + tau_trace_line = numba_plasma.tau_sobolev[ + cur_line_id, v_packet.current_shell_id] + + tau_trace_combined += tau_trace_line + distance_trace_line = calculate_distance_line( + v_packet.nu, comov_nu, nu_line, numba_model.time_explosion) + + if (distance_boundary <= distance_trace_line): + v_packet.next_line_id = cur_line_id + break + + v_packet.next_line_id = cur_line_id + return tau_trace_combined, distance_boundary, delta_shell + + +def trace_vpacket(v_packet, numba_model, numba_plasma): + tau_trace_combined = 0.0 + while True: + tau_trace_combined_shell, distance_boundary, delta_shell = trace_vpacket_within_shell( + v_packet, numba_model, numba_plasma + ) + tau_trace_combined += tau_trace_combined_shell + move_packet_across_shell_boundary(v_packet, delta_shell, + no_of_shells) + if v_packet.status == PacketStatus.EMITTED: + break + + # Moving the v_packet + new_r = np.sqrt(v_packet.r**2 + distance_boundary**2 + + 2.0 * v_packet.r * distance_boundary * v_packet.mu) + v_packet.mu = (v_packet.mu * v_packet.r + distance_boundary) / new_r + v_packet.r = new_r double mu_bin = (1.0 - mu_min) / rpacket_get_virtual_packet_flag(packet); From 77a8a3fb31501e083264d5fb6d7c4b4df562fe60 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 7 Jun 2019 00:30:34 +0200 Subject: [PATCH 186/467] Add vpacket development Co-authored-by: Christian Vogl --- tardis/montecarlo/base.py | 3 +- tardis/montecarlo/montecarlo_numba/base.py | 30 ++- .../montecarlo_numba/numba_interface.py | 19 ++ tardis/montecarlo/montecarlo_numba/rpacket.py | 13 +- .../montecarlo_numba/single_packet_loop.py | 15 +- tardis/montecarlo/montecarlo_numba/vpacket.py | 209 +++++++----------- 6 files changed, 141 insertions(+), 148 deletions(-) diff --git a/tardis/montecarlo/base.py b/tardis/montecarlo/base.py index fe50b53257b..1b5c96f317a 100644 --- a/tardis/montecarlo/base.py +++ b/tardis/montecarlo/base.py @@ -221,7 +221,8 @@ def run(self, model, plasma, no_of_packets, self._initialize_packets(model.t_inner.value, no_of_packets) - montecarlo_radial1d(model, plasma, self) + + montecarlo_radial1d(model, plasma, self, no_of_virtual_packets) #montecarlo.montecarlo_radial1d( # model, plasma, self, # virtual_packet_flag=no_of_virtual_packets, diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index a7100d2785a..9ad233105f2 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -1,19 +1,20 @@ -from numba import prange, njit, config +from numba import prange, njit, config, int64 import numpy as np from tardis.montecarlo.montecarlo_numba.rpacket import RPacket, PacketStatus from tardis.montecarlo.montecarlo_numba.numba_interface import ( - PacketCollection, NumbaModel, NumbaPlasma, Estimators) + PacketCollection, VPacketCollection, NumbaModel, NumbaPlasma, Estimators, MonteCarloConfiguration) from tardis.montecarlo.montecarlo_numba.single_packet_loop import ( single_packet_loop) from tardis.montecarlo.montecarlo_numba import njit_dict -def montecarlo_radial1d(model, plasma, runner): +def montecarlo_radial1d(model, plasma, runner, no_of_virtual_packets): packet_collection = PacketCollection( runner.input_nu, runner.input_mu, runner.input_energy, runner._output_nu, runner._output_energy ) + montecarlo_configuration = MonteCarloConfiguration(no_of_virtual_packets) numba_model = NumbaModel(runner.r_inner_cgs, runner.r_outer_cgs, model.time_explosion.to('s').value) numba_plasma = NumbaPlasma(plasma.electron_densities.values, @@ -24,13 +25,14 @@ def montecarlo_radial1d(model, plasma, runner): ) estimators = Estimators(runner.j_estimator, runner.nu_bar_estimator) - montecarlo_main_loop(packet_collection, numba_model, numba_plasma, - estimators) + v_packets_energy_hist = montecarlo_main_loop(packet_collection, numba_model, numba_plasma, estimators, runner.spectrum_frequency.value, montecarlo_configuration) + + runner._montecarlo_virtual_luminosity.value[:] = v_packets_energy_hist @njit(**njit_dict, nogil=True) def montecarlo_main_loop(packet_collection, numba_model, numba_plasma, - estimators): + estimators, spectrum_frequency, montecarlo_configuration): """ This is the main loop of the MonteCarlo routine that generates packets and sends them through the ejecta. @@ -43,20 +45,34 @@ def montecarlo_main_loop(packet_collection, numba_model, numba_plasma, output_nus = np.empty_like(packet_collection.packets_output_nu) output_energies = np.empty_like(packet_collection.packets_output_nu) + v_packets_energy_hist = np.zeros_like(spectrum_frequency) + delta_nu = spectrum_frequency[1] - spectrum_frequency[0] + for i in prange(len(output_nus)): r_packet = RPacket(numba_model.r_inner[0], packet_collection.packets_input_mu[i], packet_collection.packets_input_nu[i], packet_collection.packets_input_energy[i]) + + vpacket_collection = VPacketCollection(spectrum_frequency, montecarlo_configuration.number_of_vpackets, 20000) + single_packet_loop(r_packet, numba_model, numba_plasma, estimators, vpacket_collection) - single_packet_loop(r_packet, numba_model, numba_plasma, estimators) output_nus[i] = r_packet.nu if r_packet.status == PacketStatus.REABSORBED: output_energies[i] = -r_packet.energy elif r_packet.status == PacketStatus.EMITTED: output_energies[i] = r_packet.energy + + vpackets_nu = vpacket_collection.nus[:vpacket_collection.idx] + vpackets_energy = vpacket_collection.energies[:vpacket_collection.idx] + + v_packets_idx = np.floor((vpackets_nu - spectrum_frequency[0]) / delta_nu).astype(np.int64) + for i, idx in enumerate(v_packets_idx): + v_packets_energy_hist[idx] += vpackets_energy[i] packet_collection.packets_output_energy[:] = output_energies[:] packet_collection.packets_output_nu[:] = output_nus[:] + + return v_packets_energy_hist diff --git a/tardis/montecarlo/montecarlo_numba/numba_interface.py b/tardis/montecarlo/montecarlo_numba/numba_interface.py index 0876e870c16..fce65992126 100644 --- a/tardis/montecarlo/montecarlo_numba/numba_interface.py +++ b/tardis/montecarlo/montecarlo_numba/numba_interface.py @@ -1,4 +1,6 @@ from numba import float64, int64, jitclass +import numpy as np + from tardis import constants as const @@ -60,7 +62,24 @@ def __init__(self, packets_input_nu, packets_input_mu, packets_input_energy, self.packets_output_nu = packets_output_nu self.packets_output_energy = packets_output_energy +vpacket_collection_spec = [ + ('spectrum_frequency', float64[:]), + ('nus', float64[:]), + ('energies', float64[:]), + ('idx', int64), + ('number_of_vpackets', int64) +] +@jitclass(vpacket_collection_spec) +class VPacketCollection(object): + def __init__(self, spectrum_frequency, number_of_vpackets, initial_vpacket_bins): + self.spectrum_frequency = spectrum_frequency + self.nus = np.empty(initial_vpacket_bins, dtype=np.float64) + self.energies = np.empty(initial_vpacket_bins, dtype=np.float64) + self.number_of_vpackets = number_of_vpackets + self.idx = 0 + + estimators_spec = [ ('j_estimator', float64[:]), ('nu_bar_estimator', float64[:]), diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index 93917e2dfde..ec24d9a5e8b 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -9,6 +9,7 @@ class MonteCarloException(ValueError): pass +CLOSE_LINE_THRESHOLD = 1e-7 C_SPEED_OF_LIGHT = const.c.to('cm/s').value MISS_DISTANCE = 1e99 SIGMA_THOMSON = const.sigma_T.to('cm^2').value @@ -61,11 +62,12 @@ def calculate_distance_line(nu, comov_nu, nu_line, time_explosion): if nu_line == 0.0: return MISS_DISTANCE nu_diff = comov_nu - nu_line - if np.abs(nu_diff / comov_nu) < 1e-7: + if np.abs(nu_diff / comov_nu) < CLOSE_LINE_THRESHOLD: nu_diff = 0.0 if nu_diff >= 0: return (nu_diff / nu) * C_SPEED_OF_LIGHT * time_explosion else: + print('nu difference is less than 0.0', nu_diff, comov_nu, nu, nu_line, time_explosion) raise MonteCarloException('nu difference is less than 0.0') @njit(**njit_dict) @@ -153,7 +155,7 @@ def trace_packet(r_packet, numba_model, numba_plasma): nu_line = numba_plasma.line_list_nu[cur_line_id] tau_trace_line = numba_plasma.tau_sobolev[ cur_line_id, r_packet.current_shell_id] - + tau_trace_line_combined += tau_trace_line distance_trace = calculate_distance_line( r_packet.nu, comov_nu, nu_line, numba_model.time_explosion) @@ -181,9 +183,14 @@ def trace_packet(r_packet, numba_model, numba_plasma): distance = distance_trace break else: # Executed when no break occurs in the for loop + if cur_line_id == (len(numba_plasma.line_list_nu) - 1): + # Treatment for last line + cur_line_id += 1 if distance_electron < distance_boundary: + distance = distance_electron interaction_type = InteractionType.ESCATTERING else: + distance = distance_boundary interaction_type = InteractionType.BOUNDARY r_packet.next_line_id = cur_line_id @@ -218,7 +225,7 @@ def move_rpacket(r_packet, distance, time_explosion, numba_estimator): r_packet.r = new_r @njit(**njit_dict) -def move_packet_across_shell_boundary(packet, distance, delta_shell, +def move_packet_across_shell_boundary(packet, delta_shell, no_of_shells): """ Move packet across shell boundary - realizing if we are still in the simulation or have diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index 96ea6b1a9b1..ff4aec1095a 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -1,11 +1,14 @@ from numba import njit +import numpy as np from tardis.montecarlo.montecarlo_numba.rpacket import ( InteractionType, PacketStatus, get_doppler_factor, trace_packet, move_packet_across_shell_boundary, move_rpacket, scatter) +from tardis.montecarlo.montecarlo_numba.vpacket import trace_vpacket_volley +from tardis.montecarlo.montecarlo_numba.numba_interface import VPacketCollection @njit -def single_packet_loop(r_packet, numba_model, numba_plasma, estimators): +def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, vpacket_collection): """ Parameters @@ -26,20 +29,28 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators): r_packet.energy /= doppler_factor r_packet.initialize_line_id(numba_plasma, numba_model) + trace_vpacket_volley(r_packet, vpacket_collection, numba_model, numba_plasma) + while r_packet.status == PacketStatus.IN_PROCESS: distance, interaction_type, delta_shell = trace_packet( r_packet, numba_model, numba_plasma) if interaction_type == InteractionType.BOUNDARY: move_rpacket(r_packet, distance, numba_model.time_explosion, estimators) - move_packet_across_shell_boundary(r_packet, distance, delta_shell, + move_packet_across_shell_boundary(r_packet, delta_shell, len(numba_model.r_inner)) elif interaction_type == InteractionType.LINE: move_rpacket(r_packet, distance, numba_model.time_explosion, estimators) scatter(r_packet, numba_model.time_explosion) r_packet.next_line_id += 1 + + trace_vpacket_volley(r_packet, vpacket_collection, numba_model, numba_plasma) + elif interaction_type == InteractionType.ESCATTERING: move_rpacket(r_packet, distance, numba_model.time_explosion, estimators) scatter(r_packet, numba_model.time_explosion) + + trace_vpacket_volley(r_packet, vpacket_collection, numba_model, numba_plasma) + diff --git a/tardis/montecarlo/montecarlo_numba/vpacket.py b/tardis/montecarlo/montecarlo_numba/vpacket.py index d9c1ed5760a..77013174ad1 100644 --- a/tardis/montecarlo/montecarlo_numba/vpacket.py +++ b/tardis/montecarlo/montecarlo_numba/vpacket.py @@ -1,4 +1,8 @@ -from numba import float64, int64, jitclass +from numba import float64, int64 +from numba import jitclass, njit, gdb + +from tardis.montecarlo.montecarlo_numba import njit_dict + import numpy as np from tardis.montecarlo.montecarlo_numba.rpacket import ( @@ -17,29 +21,14 @@ @jitclass(vpacket_spec) class VPacket(object): - def __init__(self, r, mu, nu, energy): + def __init__(self, r, mu, nu, energy, current_shell_id, next_line_id): self.r = r self.mu = mu self.nu = nu self.energy = energy - self.current_shell_id = -1 - self.next_line_id = -1 - self.status = -1 - - def move_vpacket(self, distance): - """Move packet a distance and recalculate the new angle mu - - Parameters - ---------- - distance : float - distance in cm - """ - r = self.r - if (distance > 0.0): - new_r = np.sqrt(r ** 2 + distance ** 2 + - 2.0 * r * distance * self.mu) - self.mu = (self.mu * r + distance) / new_r - self.r = new_r + self.current_shell_id = current_shell_id + self.next_line_id = next_line_id + self.status = PacketStatus.IN_PROCESS def move_packet_across_shell_boundary(self, distance, delta_shell, no_of_shells): @@ -78,7 +67,6 @@ def trace_vpacket_within_shell(v_packet, numba_model, numba_plasma): distance_boundary, delta_shell = calculate_distance_boundary( v_packet.r, v_packet.mu, r_inner, r_outer) - # defining start for line interaction start_line_id = v_packet.next_line_id @@ -99,22 +87,31 @@ def trace_vpacket_within_shell(v_packet, numba_model, numba_plasma): cur_line_id = start_line_id for cur_line_id in range(start_line_id, len(numba_plasma.line_list_nu)): + if tau_trace_combined > 10: ### FIXME ????? + break + nu_line = numba_plasma.line_list_nu[cur_line_id] tau_trace_line = numba_plasma.tau_sobolev[ cur_line_id, v_packet.current_shell_id] - tau_trace_combined += tau_trace_line distance_trace_line = calculate_distance_line( v_packet.nu, comov_nu, nu_line, numba_model.time_explosion) if (distance_boundary <= distance_trace_line): - v_packet.next_line_id = cur_line_id break + + tau_trace_combined += tau_trace_line + + + else: + if cur_line_id == (len(numba_plasma.line_list_nu) - 1): + cur_line_id += 1 v_packet.next_line_id = cur_line_id + return tau_trace_combined, distance_boundary, delta_shell - +@njit(**njit_dict) def trace_vpacket(v_packet, numba_model, numba_plasma): tau_trace_combined = 0.0 while True: @@ -122,122 +119,64 @@ def trace_vpacket(v_packet, numba_model, numba_plasma): v_packet, numba_model, numba_plasma ) tau_trace_combined += tau_trace_combined_shell - move_packet_across_shell_boundary(v_packet, delta_shell, - no_of_shells) + if tau_trace_combined > 10: + break + move_packet_across_shell_boundary(v_packet, delta_shell, + len(numba_model.r_inner)) if v_packet.status == PacketStatus.EMITTED: break - + # Moving the v_packet new_r = np.sqrt(v_packet.r**2 + distance_boundary**2 + 2.0 * v_packet.r * distance_boundary * v_packet.mu) v_packet.mu = (v_packet.mu * v_packet.r + distance_boundary) / new_r v_packet.r = new_r + return tau_trace_combined - double - mu_bin = (1.0 - mu_min) / rpacket_get_virtual_packet_flag(packet); - rpacket_set_mu( & virt_packet, mu_min + (i + rk_double(mt_state)) * mu_bin); - { - if ((rpacket_get_nu (packet) > storage->spectrum_virt_start_nu) && (rpacket_get_nu(packet) < storage->spectrum_virt_end_nu)) - { - for (int64_t i = 0; i < rpacket_get_virtual_packet_flag (packet); i++) - { - double weight; - rpacket_t virt_packet = *packet; - double mu_min; - if (rpacket_get_r(&virt_packet) > storage->r_inner[0]) - { - mu_min = - -1.0 * sqrt (1.0 - - (storage->r_inner[0] / rpacket_get_r(&virt_packet)) * - (storage->r_inner[0] / rpacket_get_r(&virt_packet))); - - if (storage->full_relativity) - { - // Need to transform the angular size of the photosphere into the CMF - mu_min = angle_aberration_LF_to_CMF (&virt_packet, storage, mu_min); - } - } - else - { - mu_min = 0.0; - } - double mu_bin = (1.0 - mu_min) / rpacket_get_virtual_packet_flag (packet); - rpacket_set_mu(&virt_packet,mu_min + (i + rk_double (mt_state)) * mu_bin); - switch (virtual_mode) - { - case -2: - weight = 1.0 / rpacket_get_virtual_packet_flag (packet); - break; - case -1: - weight = - 2.0 * rpacket_get_mu(&virt_packet) / - rpacket_get_virtual_packet_flag (packet); - break; - case 1: - weight = - (1.0 - - mu_min) / 2.0 / rpacket_get_virtual_packet_flag (packet); - break; - default: - fprintf (stderr, "Something has gone horribly wrong!\n"); - // FIXME MR: we need to somehow signal an error here - // I'm adding an exit() here to inform the compiler about the impossible path - exit(1); - } - angle_aberration_CMF_to_LF (&virt_packet, storage); - double doppler_factor_ratio = - rpacket_doppler_factor (packet, storage) / - rpacket_doppler_factor (&virt_packet, storage); - rpacket_set_energy(&virt_packet, - rpacket_get_energy (packet) * doppler_factor_ratio); - rpacket_set_nu(&virt_packet,rpacket_get_nu (packet) * doppler_factor_ratio); - reabsorbed = montecarlo_one_packet_loop (storage, &virt_packet, 1, mt_state); -#ifdef WITH_VPACKET_LOGGING -#ifdef WITHOPENMP -#pragma omp critical - { -#endif // WITHOPENMP - if (storage->virt_packet_count >= storage->virt_array_size) - { - storage->virt_array_size *= 2; - storage->virt_packet_nus = safe_realloc(storage->virt_packet_nus, sizeof(double) * storage->virt_array_size); - storage->virt_packet_energies = safe_realloc(storage->virt_packet_energies, sizeof(double) * storage->virt_array_size); - storage->virt_packet_last_interaction_in_nu = safe_realloc(storage->virt_packet_last_interaction_in_nu, sizeof(double) * storage->virt_array_size); - storage->virt_packet_last_interaction_type = safe_realloc(storage->virt_packet_last_interaction_type, sizeof(int64_t) * storage->virt_array_size); - storage->virt_packet_last_line_interaction_in_id = safe_realloc(storage->virt_packet_last_line_interaction_in_id, sizeof(int64_t) * storage->virt_array_size); - storage->virt_packet_last_line_interaction_out_id = safe_realloc(storage->virt_packet_last_line_interaction_out_id, sizeof(int64_t) * storage->virt_array_size); - } - storage->virt_packet_nus[storage->virt_packet_count] = rpacket_get_nu(&virt_packet); - storage->virt_packet_energies[storage->virt_packet_count] = rpacket_get_energy(&virt_packet) * weight; - storage->virt_packet_last_interaction_in_nu[storage->virt_packet_count] = storage->last_interaction_in_nu[rpacket_get_id (packet)]; - storage->virt_packet_last_interaction_type[storage->virt_packet_count] = storage->last_interaction_type[rpacket_get_id (packet)]; - storage->virt_packet_last_line_interaction_in_id[storage->virt_packet_count] = storage->last_line_interaction_in_id[rpacket_get_id (packet)]; - storage->virt_packet_last_line_interaction_out_id[storage->virt_packet_count] = storage->last_line_interaction_out_id[rpacket_get_id (packet)]; - storage->virt_packet_count += 1; -#ifdef WITHOPENMP - } -#endif // WITHOPENMP -#endif // WITH_VPACKET_LOGGING - if ((rpacket_get_nu(&virt_packet) < storage->spectrum_end_nu) && - (rpacket_get_nu(&virt_packet) > storage->spectrum_start_nu)) - { -#ifdef WITHOPENMP -#pragma omp critical - { -#endif // WITHOPENMP - int64_t virt_id_nu = - floor ((rpacket_get_nu(&virt_packet) - - storage->spectrum_start_nu) / - storage->spectrum_delta_nu); - storage->spectrum_virt_nu[virt_id_nu] += - rpacket_get_energy(&virt_packet) * weight; -#ifdef WITHOPENMP - } -#endif // WITHOPENMP - } - } - } - else - { - return 1; - } \ No newline at end of file +@njit(**njit_dict) +def trace_vpacket_volley(r_packet, vpacket_collection, numba_model, numba_plasma): + if ((r_packet.nu < vpacket_collection.spectrum_frequency[0]) or + (r_packet.nu > vpacket_collection.spectrum_frequency[-1])): + + return + + no_of_vpackets = vpacket_collection.number_of_vpackets + + v_packets_nu = np.empty(vpacket_collection.number_of_vpackets) + v_packets_energy = np.empty(vpacket_collection.number_of_vpackets) + + ### TODO theoretical check for r_packet nu within vpackets bins + if r_packet.r > numba_model.r_inner[0]: # not on inner_boundary + mu_min = -np.sqrt(1 - (numba_model.r_inner[0] / r_packet.r) ** 2) + v_packet_on_inner_boundary = False + else: + v_packet_on_inner_boundary = True + mu_min = 0.0 + + mu_bin = (1.0 - mu_min) / no_of_vpackets + r_packet_doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, + numba_model.time_explosion) + for i in range(no_of_vpackets): + v_packet_mu = mu_min + i * mu_bin + np.random.random() * mu_bin + if v_packet_on_inner_boundary: + weight = 2 * v_packet_mu / no_of_vpackets + else: + weight = (1 - mu_min) / (2 * no_of_vpackets) + v_packet_doppler_factor = get_doppler_factor( + r_packet.r, v_packet_mu, numba_model.time_explosion) + # transform between r_packet mu and v_packet_mu + doppler_factor_ratio = ( + r_packet_doppler_factor / v_packet_doppler_factor) + v_packet_nu = r_packet.nu * doppler_factor_ratio + v_packet_energy = r_packet.energy * weight * doppler_factor_ratio + v_packet = VPacket(r_packet.r, v_packet_mu, v_packet_nu, + v_packet_energy, r_packet.current_shell_id, + r_packet.next_line_id) + + tau_vpacket = trace_vpacket(v_packet, numba_model, numba_plasma) + v_packet.energy *= np.exp(-tau_vpacket) + + vpacket_collection.nus[vpacket_collection.idx] = v_packet.nu + vpacket_collection.energies[vpacket_collection.idx] = v_packet.energy + vpacket_collection.idx += 1 + \ No newline at end of file From d2df2d7ac0e5a56b3d3128714e3ece0cd6b28679 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 13 Jun 2019 16:37:56 +0200 Subject: [PATCH 187/467] Final V-Packet addition Co-authored-by: Christian Vogl --- tardis/montecarlo/montecarlo_numba/vpacket.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tardis/montecarlo/montecarlo_numba/vpacket.py b/tardis/montecarlo/montecarlo_numba/vpacket.py index 77013174ad1..e9617f57e7c 100644 --- a/tardis/montecarlo/montecarlo_numba/vpacket.py +++ b/tardis/montecarlo/montecarlo_numba/vpacket.py @@ -135,6 +135,22 @@ def trace_vpacket(v_packet, numba_model, numba_plasma): @njit(**njit_dict) def trace_vpacket_volley(r_packet, vpacket_collection, numba_model, numba_plasma): + """ + Shoot a volley of vpackets (the vpacket collection specifies how many) + from the current position of the rpacket. + + Parameters + ---------- + r_packet : [type] + [description] + vpacket_collection : [type] + [description] + numba_model : [type] + [description] + numba_plasma : [type] + [description] + """ + if ((r_packet.nu < vpacket_collection.spectrum_frequency[0]) or (r_packet.nu > vpacket_collection.spectrum_frequency[-1])): From a520234b95692b2de71dc425d18b3e42b106665c Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 14 Jun 2019 10:48:26 -0400 Subject: [PATCH 188/467] adding initial macroatom setup --- tardis/montecarlo/montecarlo_numba/base.py | 9 +- .../montecarlo_numba/interaction.py | 164 ++++++++++++++++++ .../montecarlo/montecarlo_numba/macro_atom.py | 106 +++++++++++ .../montecarlo_numba/numba_interface.py | 51 +++++- tardis/montecarlo/montecarlo_numba/rpacket.py | 90 +++++++--- .../montecarlo_numba/single_packet_loop.py | 31 +++- tardis/montecarlo/montecarlo_numba/vpacket.py | 60 +++---- 7 files changed, 440 insertions(+), 71 deletions(-) create mode 100644 tardis/montecarlo/montecarlo_numba/interaction.py create mode 100644 tardis/montecarlo/montecarlo_numba/macro_atom.py diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index 9ad233105f2..91c57297840 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -2,7 +2,7 @@ import numpy as np from tardis.montecarlo.montecarlo_numba.rpacket import RPacket, PacketStatus from tardis.montecarlo.montecarlo_numba.numba_interface import ( - PacketCollection, VPacketCollection, NumbaModel, NumbaPlasma, Estimators, MonteCarloConfiguration) + PacketCollection, VPacketCollection, NumbaModel, numba_plasma_initialize, Estimators, MonteCarloConfiguration) from tardis.montecarlo.montecarlo_numba.single_packet_loop import ( single_packet_loop) @@ -17,12 +17,7 @@ def montecarlo_radial1d(model, plasma, runner, no_of_virtual_packets): montecarlo_configuration = MonteCarloConfiguration(no_of_virtual_packets) numba_model = NumbaModel(runner.r_inner_cgs, runner.r_outer_cgs, model.time_explosion.to('s').value) - numba_plasma = NumbaPlasma(plasma.electron_densities.values, - plasma.atomic_data.lines.nu.values, - np.ascontiguousarray( - plasma.tau_sobolevs.values.copy(), - dtype=np.float64) - ) + numba_plasma = numba_plasma_initialize(plasma) estimators = Estimators(runner.j_estimator, runner.nu_bar_estimator) v_packets_energy_hist = montecarlo_main_loop(packet_collection, numba_model, numba_plasma, estimators, runner.spectrum_frequency.value, montecarlo_configuration) diff --git a/tardis/montecarlo/montecarlo_numba/interaction.py b/tardis/montecarlo/montecarlo_numba/interaction.py new file mode 100644 index 00000000000..93483e4ca48 --- /dev/null +++ b/tardis/montecarlo/montecarlo_numba/interaction.py @@ -0,0 +1,164 @@ +from enum import IntEnum + +from numba import njit + +from tardis.montecarlo.montecarlo_numba import njit_dict +from tardis.montecarlo.montecarlo_numba.rpacket import get_doppler_factor, \ + get_random_mu + +class LineInteractionType(IntEnum): + SCATTER = 0 + DOWNBRANCH = 1 + MACROATOM = 2 + +@njit(**njit_dict) +def general_scatter(r_packet, time_explosion): + """ + Thomson as well as line scattering + 2) get the doppler factor at that position with the old angle + 3) convert the current energy and nu into the comoving + frame with the old mu + 4) Scatter and draw new mu - update mu + 5) Transform the comoving energy and nu back using the new mu + + Parameters + ---------- + distance : [type] + [description] + """ + old_doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, time_explosion) + comov_energy = r_packet.energy * old_doppler_factor + comov_nu = r_packet.nu * old_doppler_factor + r_packet.mu = get_random_mu() + inverse_new_doppler_factor = 1. / get_doppler_factor( + r_packet.r, r_packet.mu, time_explosion) + r_packet.energy = comov_energy * inverse_new_doppler_factor + r_packet.nu = comov_nu * inverse_new_doppler_factor + +""" +void +montecarlo_thomson_scatter (rpacket_t * packet, storage_model_t * storage, + double distance, rk_state *mt_state) +{ + move_packet (packet, storage, distance); + double doppler_factor = rpacket_doppler_factor (packet, storage); + double comov_nu = rpacket_get_nu (packet) * doppler_factor; + double comov_energy = rpacket_get_energy (packet) * doppler_factor; + rpacket_set_mu (packet, 2.0 * rk_double (mt_state) - 1.0); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); + rpacket_set_nu (packet, comov_nu * inverse_doppler_factor); + rpacket_set_energy (packet, comov_energy * inverse_doppler_factor); + rpacket_reset_tau_event (packet, mt_state); + storage->last_interaction_type[rpacket_get_id (packet)] = 1; + + angle_aberration_CMF_to_LF (packet, storage); + + if (rpacket_get_virtual_packet_flag (packet) > 0) + { + create_vpacket (storage, packet, mt_state); + } +} + +""" + +def line_scatter(r_packet, time_explosion, line_interaction_type, numba_plasma): + #increment_j_blue_estimator(packet, storage, distance, line2d_idx); + #increment_Edotlu_estimator(packet, storage, distance, line2d_idx); + + general_scatter(r_packet, time_explosion) + # update last_interaction + + if line_interaction_type == LineInteractionType.SCATTER: + line_emission(r_packet, r_packet.next_line_id, time_explosion, numba_plasma) + else: + pass +""" + line_emission() + + if (storage->line_interaction_id == 0) + { + line_emission(packet, storage, next_line_id, mt_state); + } + else if (storage->line_interaction_id >= 1) + { + rpacket_set_macro_atom_activation_level(packet, + storage-> + rpacket_set_macro_atom_activation_level(packet, + storage->line2macro_level_upper[ + next_line_id]); + macro_atom(packet, storage, mt_state); +""" + +def line_emission(r_packet, emission_line_id, time_explosion, + numba_plasma): + doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, + time_explosion) + r_packet.nu = numba_plasma.line_list_nu[ + emission_line_id] / doppler_factor + r_packet.next_line_id = emission_line_id + 1 + +""" +void +montecarlo_line_scatter (rpacket_t * packet, storage_model_t * storage, + double distance, rk_state *mt_state) +{ + uint64_t next_line_id = rpacket_get_next_line_id (packet); + uint64_t line2d_idx = next_line_id + + storage->no_of_lines * rpacket_get_current_shell_id (packet); + if (rpacket_get_virtual_packet (packet) == 0) + { + } + double tau_line = + storage->line_lists_tau_sobolevs[line2d_idx]; + double tau_continuum = rpacket_get_chi_continuum(packet) * distance; + double tau_combined = tau_line + tau_continuum; + //rpacket_set_next_line_id (packet, rpacket_get_next_line_id (packet) + 1); + + if (next_line_id + 1 == storage->no_of_lines) + { + rpacket_set_last_line (packet, true); + } + if (rpacket_get_virtual_packet (packet) > 0) + { + rpacket_set_tau_event (packet, + rpacket_get_tau_event (packet) + tau_line); + rpacket_set_next_line_id (packet, next_line_id + 1); + test_for_close_line (packet, storage); + } + else if (rpacket_get_tau_event (packet) < tau_combined) + { // Line absorption occurs + move_packet (packet, storage, distance); + double old_doppler_factor = rpacket_doppler_factor (packet, storage); + rpacket_set_mu (packet, 2.0 * rk_double (mt_state) - 1.0); + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); + double comov_energy = rpacket_get_energy (packet) * old_doppler_factor; + rpacket_set_energy (packet, comov_energy * inverse_doppler_factor); + storage->last_interaction_in_nu[rpacket_get_id (packet)] = + rpacket_get_nu (packet); + storage->last_line_interaction_in_id[rpacket_get_id (packet)] = + next_line_id; + storage->last_line_interaction_shell_id[rpacket_get_id (packet)] = + rpacket_get_current_shell_id (packet); + storage->last_interaction_type[rpacket_get_id (packet)] = 2; + if (storage->line_interaction_id == 0) + { + line_emission (packet, storage, next_line_id, mt_state); + } + else if (storage->line_interaction_id >= 1) + { + rpacket_set_macro_atom_activation_level (packet, + storage->line2macro_level_upper[next_line_id]); + macro_atom (packet, storage, mt_state); + } + } + else + { // Packet passes line without interacting + rpacket_set_tau_event (packet, + rpacket_get_tau_event (packet) - tau_line); + rpacket_set_next_line_id (packet, next_line_id + 1); + packet->compute_chi_bf = false; + test_for_close_line (packet, storage); + } +} +""" + diff --git a/tardis/montecarlo/montecarlo_numba/macro_atom.py b/tardis/montecarlo/montecarlo_numba/macro_atom.py new file mode 100644 index 00000000000..474a70e761b --- /dev/null +++ b/tardis/montecarlo/montecarlo_numba/macro_atom.py @@ -0,0 +1,106 @@ +import numpy as np +from enum import IntEnum + +class MacroAtomError(ValueError): + pass + +class MacroAtomTransitionType(IntEnum): + INTERNAL_UP = 1 + INTERNAL_DOWN = 0 + BB_EMISSION = -1 + BF_EMISSION = -2 + FF_EMISSION = -3 + ADIABATIC_COOLING = -4 + + + +def macro_atom(r_packet, activation_level, numba_plasma): + """ + + Parameters + ---------- + r_packet: tardis.montecarlo.montecarlo_numba.rpacket.RPacket + activation_level + numba_plasma + + Returns + ------- + + """ + + current_transition_type = 0 + + while current_transition_type >= 0: + probability = 0.0 + probability_event = np.random.random() + + block_start, block_end = numba_plasma.macro_atom_block_references[ + [activation_level, activate_level + 1]] + + current_transition_probabilities = ( + numba_plasma.transition_probabilities[ + block_start:block_end, r_packet.current_shell_id]) + + for transition_probability in current_transition_probabilities: + probability += transition_probability + if probability > probability_event: + current_transition_type = transition_type[i] + activate_level = destination_level_id[i] + break + else: + raise MacroAtomError( + 'MacroAtom ran out of the block. This should not happen as the sum ' + 'of probabilities is normalized to 1 and the probability_event ' + 'should be less than 1') + + if + +#void +#macro_atom (rpacket_t * packet, const storage_model_t * storage, rk_state *mt_state) +#{ + int emit = 0, i = 0, offset = -1; + uint64_t activate_level = rpacket_get_macro_atom_activation_level (packet); + while (emit >= 0) + { + double event_random = rk_double (mt_state); + i = storage->macro_block_references[activate_level] - 1; + double p = 0.0; + offset = storage->transition_probabilities_nd * + rpacket_get_current_shell_id (packet); + do + { + ++i; + p += storage->transition_probabilities[offset + i]; + } + while (p <= event_random); + emit = storage->transition_type[i]; + activate_level = storage->destination_level_id[i]; + } + switch (emit) + { + case BB_EMISSION: + line_emission (packet, storage, storage->transition_line_id[i], mt_state); + break; + + case BF_EMISSION: + rpacket_set_current_continuum_id (packet, storage->transition_line_id[i]); + storage->last_line_interaction_out_id[rpacket_get_id (packet)] = + rpacket_get_current_continuum_id (packet); + + continuum_emission (packet, storage, mt_state, sample_nu_free_bound, 3); + break; + + case FF_EMISSION: + continuum_emission (packet, storage, mt_state, sample_nu_free_free, 4); + break; + + case ADIABATIC_COOLING: + storage->last_interaction_type[rpacket_get_id (packet)] = 5; + rpacket_set_status (packet, TARDIS_PACKET_STATUS_REABSORBED); + break; + + default: + fprintf (stderr, "This process for macro-atom deactivation should not exist! (emit = %d)\n", emit); + exit(1); + } +} \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/numba_interface.py b/tardis/montecarlo/montecarlo_numba/numba_interface.py index fce65992126..de52b771265 100644 --- a/tardis/montecarlo/montecarlo_numba/numba_interface.py +++ b/tardis/montecarlo/montecarlo_numba/numba_interface.py @@ -34,15 +34,64 @@ def __init__(self, r_inner, r_outer, time_explosion): ('electron_density', float64[:]), ('line_list_nu', float64[:]), ('tau_sobolev', float64[:, :]), + ('transition_probabilities', float64[:, :]), + ('line2macro_level_upper', int64[:]), + ('macro_block_references', int64[:]), + ('transition_type', int64[:]), + ('destination_level_id', int64[:]), + ('transition_line_id', int64[:]), + ] @jitclass(numba_plasma_spec) class NumbaPlasma(object): - def __init__(self, electron_density, line_list_nu, tau_sobolev): + def __init__(self, electron_density, line_list_nu, tau_sobolev, + transition_probabilities, line2macro_level_upper, + macro_block_references, transition_type, destination_level_id, + transition_line_id): + self.electron_density = electron_density self.line_list_nu = line_list_nu self.tau_sobolev = tau_sobolev + #### Macro Atom transition probabilities + self.transition_probabilities = transition_probabilities + self.line2macro_level_upper = line2macro_level_upper + + self.macro_block_references = macro_block_references + self.transition_type = transition_type + + # Destination level is not needed and/or generated for downbranch + self.destination_level_id = destination_level_id + self.transition_line_id = transition_line_id + + +def numba_plasma_initialize(plasma): + electron_densities = plasma.electron_densities.values + line_list_nu = plasma.atomic_data.lines.nu.values + tau_sobolev = np.ascontiguousarray(plasma.tau_sobolevs.values.copy(), + dtype=np.float64) + + transition_probabilities = np.ascontiguousarray( + plasma.transition_probabilities.values.copy(), dtype=np.float64) + line2macro_level_upper = plasma.atomic_data.lines_upper2macro_reference_idx + macro_block_references = plasma.atomic_data.macro_atom_references[ + 'block_references'].values + + transition_type = plasma.atomic_data.macro_atom_data[ + 'transition_type'].values + + # Destination level is not needed and/or generated for downbranch + destination_level_id = plasma.atomic_data.macro_atom_data[ + 'destination_level_idx'].values + transition_line_id = plasma.atomic_data.macro_atom_data[ + 'lines_idx'].values + + return NumbaPlasma(electron_densities, line_list_nu, tau_sobolev, + transition_probabilities, line2macro_level_upper, + macro_block_references, transition_type, + destination_level_id, transition_line_id) + packet_collection_spec = [ ('packets_input_nu', float64[:]), diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index ec24d9a5e8b..6223930c290 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -1,7 +1,7 @@ import numpy as np from enum import IntEnum -from numba import int64, float64, boolean -from numba import jitclass, njit, gdb +from numba import int64, float64 +from numba import jitclass, njit from tardis.montecarlo.montecarlo_numba import njit_dict from tardis import constants as const @@ -15,16 +15,19 @@ class MonteCarloException(ValueError): SIGMA_THOMSON = const.sigma_T.to('cm^2').value INVERSE_SIGMA_THOMSON = 1 / SIGMA_THOMSON + class PacketStatus(IntEnum): IN_PROCESS = 0 EMITTED = 1 REABSORBED = 2 + class InteractionType(IntEnum): BOUNDARY = 1 LINE = 2 ESCATTERING = 3 + rpacket_spec = [ ('r', float64), ('mu', float64), @@ -252,26 +255,73 @@ def move_packet_across_shell_boundary(packet, delta_shell, else: packet.current_shell_id = next_shell_id -@njit(**njit_dict) -def scatter(r_packet, time_explosion): + +def line_emission(r_packet, emission_line_id, numba_plasma, time_explosion): """ - General scattering for lines as well as thomson. - 2) get the doppler factor at that position with the old angle - 3) convert the current energy and nu into the comoving - frame with the old mu - 4) Scatter and draw new mu - update mu - 5) Transform the comoving energy and nu back using the new mu - + Parameters ---------- - distance : [type] - [description] + r_packet: tardis.montecarlo.montecarlo_numba.rpacket.RPacket + emission_line_id: int + numba_plasma + time_explosion + + Returns + ------- + """ doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, time_explosion) - comov_energy = r_packet.energy * doppler_factor - comov_nu = r_packet.nu * doppler_factor - r_packet.mu = get_random_mu() - inverse_new_doppler_factor = 1. / get_doppler_factor( - r_packet.r, r_packet.mu, time_explosion) - r_packet.energy = comov_energy * inverse_new_doppler_factor - r_packet.nu = comov_nu * inverse_new_doppler_factor + r_packet.nu = numba_plasma.line_list_nu[emission_line_id] / doppler_factor + r_packet.next_line_id = emission_line_id + 1 + + +""" +void +line_emission (rpacket_t * packet, storage_model_t * storage, int64_t emission_line_id, rk_state *mt_state) +{ + double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); + storage->last_line_interaction_out_id[rpacket_get_id (packet)] = emission_line_id; + if (storage->cont_status == CONTINUUM_ON) + { + storage->last_interaction_out_type[rpacket_get_id (packet)] = 2; + } + + rpacket_set_nu (packet, + storage->line_list_nu[emission_line_id] * inverse_doppler_factor); + rpacket_set_nu_line (packet, storage->line_list_nu[emission_line_id]); + rpacket_set_next_line_id (packet, emission_line_id + 1); + rpacket_reset_tau_event (packet, mt_state); + + angle_aberration_CMF_to_LF (packet, storage); + + if (rpacket_get_virtual_packet_flag (packet) > 0) + { + bool virtual_close_line = false; + if (!rpacket_get_last_line (packet) && + fabs (storage->line_list_nu[rpacket_get_next_line_id (packet)] - + rpacket_get_nu_line (packet)) < + (rpacket_get_nu_line (packet)* 1e-7)) + { + virtual_close_line = true; + } + // QUESTIONABLE!!! + bool old_close_line = rpacket_get_close_line (packet); + rpacket_set_close_line (packet, virtual_close_line); + create_vpacket (storage, packet, mt_state); + rpacket_set_close_line (packet, old_close_line); + virtual_close_line = false; + } + test_for_close_line (packet, storage); +} + +void test_for_close_line (rpacket_t * packet, const storage_model_t * storage) +{ + if (!rpacket_get_last_line (packet) && + fabs (storage->line_list_nu[rpacket_get_next_line_id (packet)] - + rpacket_get_nu_line (packet)) < (rpacket_get_nu_line (packet)* + 1e-7)) + { + rpacket_set_close_line (packet, true); + } +} +""" \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index ff4aec1095a..3a94a1874bd 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -1,12 +1,16 @@ from numba import njit -import numpy as np from tardis.montecarlo.montecarlo_numba.rpacket import ( InteractionType, PacketStatus, get_doppler_factor, trace_packet, - move_packet_across_shell_boundary, move_rpacket, scatter) + move_packet_across_shell_boundary, move_rpacket) +from tardis.montecarlo.montecarlo_numba.interaction import general_scatter, \ + LineInteractionType from tardis.montecarlo.montecarlo_numba.vpacket import trace_vpacket_volley -from tardis.montecarlo.montecarlo_numba.numba_interface import VPacketCollection + + + + @njit def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, vpacket_collection): """ @@ -17,12 +21,19 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, vpacket_ numba_model: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaModel numba_plasma: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaPlasma estimators: tardis.montecarlo.montecarlo_numba.numba_interface.Estimators + vpacket_collection: tardis.montecarlo.montecarlo_numba.numba_interface.VPacketCollection Returns ------- + : None + + This function does not return anything but changes the r_packet object + and if virtual packets are requested - also updates the vpacket_collection """ + line_interaction_type = LineInteractionType.SCATTER + doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, numba_model.time_explosion) r_packet.nu /= doppler_factor @@ -34,23 +45,31 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, vpacket_ while r_packet.status == PacketStatus.IN_PROCESS: distance, interaction_type, delta_shell = trace_packet( r_packet, numba_model, numba_plasma) + if interaction_type == InteractionType.BOUNDARY: move_rpacket(r_packet, distance, numba_model.time_explosion, estimators) move_packet_across_shell_boundary(r_packet, delta_shell, len(numba_model.r_inner)) + elif interaction_type == InteractionType.LINE: move_rpacket(r_packet, distance, numba_model.time_explosion, estimators) - scatter(r_packet, numba_model.time_explosion) - r_packet.next_line_id += 1 + + if line_interaction_type == LineInteractionType.SCATTER: + general_scatter(r_packet, numba_model.time_explosion) + r_packet.next_line_id += 1 + + else: + pass + trace_vpacket_volley(r_packet, vpacket_collection, numba_model, numba_plasma) elif interaction_type == InteractionType.ESCATTERING: move_rpacket(r_packet, distance, numba_model.time_explosion, estimators) - scatter(r_packet, numba_model.time_explosion) + general_scatter(r_packet, numba_model.time_explosion) trace_vpacket_volley(r_packet, vpacket_collection, numba_model, numba_plasma) diff --git a/tardis/montecarlo/montecarlo_numba/vpacket.py b/tardis/montecarlo/montecarlo_numba/vpacket.py index e9617f57e7c..39464aaa29a 100644 --- a/tardis/montecarlo/montecarlo_numba/vpacket.py +++ b/tardis/montecarlo/montecarlo_numba/vpacket.py @@ -30,33 +30,6 @@ def __init__(self, r, mu, nu, energy, current_shell_id, next_line_id): self.next_line_id = next_line_id self.status = PacketStatus.IN_PROCESS - def move_packet_across_shell_boundary(self, distance, delta_shell, - no_of_shells): - """ - Move packet across shell boundary - realizing if we are still in the simulation or have - moved out through the inner boundary or outer boundary and updating packet - status. - - Parameters - ---------- - distance : float - distance to move to shell boundary - - delta_shell: int - is +1 if moving outward or -1 if moving inward - - no_of_shells: int - number of shells in TARDIS simulation - """ - - next_shell_id = r_packet.current_shell_id + delta_shell - - if next_shell_id >= no_of_shells: - r_packet.status = PacketStatus.EMITTED - elif next_shell_id < 0: - r_packet.status = PacketStatus.REABSORBED - else: - rpacket.current_shell_id = next_shell_id @njit(**njit_dict) @@ -70,10 +43,8 @@ def trace_vpacket_within_shell(v_packet, numba_model, numba_plasma): # defining start for line interaction start_line_id = v_packet.next_line_id - # defining taus - - # e scattering initialization + cur_electron_density = numba_plasma.electron_density[ v_packet.current_shell_id] tau_electron = calculate_tau_electron(cur_electron_density, @@ -97,7 +68,7 @@ def trace_vpacket_within_shell(v_packet, numba_model, numba_plasma): distance_trace_line = calculate_distance_line( v_packet.nu, comov_nu, nu_line, numba_model.time_explosion) - if (distance_boundary <= distance_trace_line): + if distance_boundary <= distance_trace_line: break tau_trace_combined += tau_trace_line @@ -113,6 +84,19 @@ def trace_vpacket_within_shell(v_packet, numba_model, numba_plasma): @njit(**njit_dict) def trace_vpacket(v_packet, numba_model, numba_plasma): + """ + Trace single vpacket. + Parameters + ---------- + v_packet + numba_model + numba_plasma + + Returns + ------- + + """ + tau_trace_combined = 0.0 while True: tau_trace_combined_shell, distance_boundary, delta_shell = trace_vpacket_within_shell( @@ -158,10 +142,7 @@ def trace_vpacket_volley(r_packet, vpacket_collection, numba_model, numba_plasma no_of_vpackets = vpacket_collection.number_of_vpackets - v_packets_nu = np.empty(vpacket_collection.number_of_vpackets) - v_packets_energy = np.empty(vpacket_collection.number_of_vpackets) - - ### TODO theoretical check for r_packet nu within vpackets bins + ### TODO theoretical check for r_packet nu within vpackets bins - is done somewhere else I think if r_packet.r > numba_model.r_inner[0]: # not on inner_boundary mu_min = -np.sqrt(1 - (numba_model.r_inner[0] / r_packet.r) ** 2) v_packet_on_inner_boundary = False @@ -174,25 +155,30 @@ def trace_vpacket_volley(r_packet, vpacket_collection, numba_model, numba_plasma numba_model.time_explosion) for i in range(no_of_vpackets): v_packet_mu = mu_min + i * mu_bin + np.random.random() * mu_bin - if v_packet_on_inner_boundary: + + if v_packet_on_inner_boundary: # The weights are described in K&S 2014 weight = 2 * v_packet_mu / no_of_vpackets else: weight = (1 - mu_min) / (2 * no_of_vpackets) + v_packet_doppler_factor = get_doppler_factor( r_packet.r, v_packet_mu, numba_model.time_explosion) + # transform between r_packet mu and v_packet_mu doppler_factor_ratio = ( r_packet_doppler_factor / v_packet_doppler_factor) + v_packet_nu = r_packet.nu * doppler_factor_ratio v_packet_energy = r_packet.energy * weight * doppler_factor_ratio + v_packet = VPacket(r_packet.r, v_packet_mu, v_packet_nu, v_packet_energy, r_packet.current_shell_id, r_packet.next_line_id) tau_vpacket = trace_vpacket(v_packet, numba_model, numba_plasma) + v_packet.energy *= np.exp(-tau_vpacket) vpacket_collection.nus[vpacket_collection.idx] = v_packet.nu vpacket_collection.energies[vpacket_collection.idx] = v_packet.energy vpacket_collection.idx += 1 - \ No newline at end of file From 5e4d3471f16c6d7b9598d7c2ccd9e74a00e3a774 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Fri, 14 Jun 2019 12:34:07 -0400 Subject: [PATCH 189/467] further work on macro_atom --- .../montecarlo_numba/interaction.py | 16 +++++--- .../montecarlo/montecarlo_numba/macro_atom.py | 40 +++++++++++-------- .../montecarlo_numba/single_packet_loop.py | 25 +++++------- 3 files changed, 45 insertions(+), 36 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/interaction.py b/tardis/montecarlo/montecarlo_numba/interaction.py index 93483e4ca48..e9b8933d1d4 100644 --- a/tardis/montecarlo/montecarlo_numba/interaction.py +++ b/tardis/montecarlo/montecarlo_numba/interaction.py @@ -1,11 +1,11 @@ from enum import IntEnum from numba import njit - from tardis.montecarlo.montecarlo_numba import njit_dict -from tardis.montecarlo.montecarlo_numba.rpacket import get_doppler_factor, \ - get_random_mu +from tardis.montecarlo.montecarlo_numba.rpacket import ( + get_doppler_factor, get_random_mu) +from tardis.montecarlo.montecarlo_numba.macro_atom import macro_atom class LineInteractionType(IntEnum): SCATTER = 0 DOWNBRANCH = 1 @@ -61,6 +61,7 @@ def general_scatter(r_packet, time_explosion): """ +@njit(**njit_dict) def line_scatter(r_packet, time_explosion, line_interaction_type, numba_plasma): #increment_j_blue_estimator(packet, storage, distance, line2d_idx); #increment_Edotlu_estimator(packet, storage, distance, line2d_idx); @@ -70,8 +71,10 @@ def line_scatter(r_packet, time_explosion, line_interaction_type, numba_plasma): if line_interaction_type == LineInteractionType.SCATTER: line_emission(r_packet, r_packet.next_line_id, time_explosion, numba_plasma) - else: - pass + else: # includes both macro atom and downbranch - encoded in the transition probabilities + emission_line_id = macro_atom(r_packet, numba_plasma) + line_emission(r_packet, emission_line_id, time_explosion, + numba_plasma) """ line_emission() @@ -89,8 +92,11 @@ def line_scatter(r_packet, time_explosion, line_interaction_type, numba_plasma): macro_atom(packet, storage, mt_state); """ +@njit(**njit_dict) def line_emission(r_packet, emission_line_id, time_explosion, numba_plasma): + if emission_line_id != r_packet.next_line_id: + pass doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, time_explosion) r_packet.nu = numba_plasma.line_list_nu[ diff --git a/tardis/montecarlo/montecarlo_numba/macro_atom.py b/tardis/montecarlo/montecarlo_numba/macro_atom.py index 474a70e761b..584a20ab01d 100644 --- a/tardis/montecarlo/montecarlo_numba/macro_atom.py +++ b/tardis/montecarlo/montecarlo_numba/macro_atom.py @@ -1,6 +1,9 @@ import numpy as np from enum import IntEnum +from numba import njit +from tardis.montecarlo.montecarlo_numba import njit_dict + class MacroAtomError(ValueError): pass @@ -13,48 +16,52 @@ class MacroAtomTransitionType(IntEnum): ADIABATIC_COOLING = -4 - -def macro_atom(r_packet, activation_level, numba_plasma): +@njit(**njit_dict) +def macro_atom(r_packet, numba_plasma): """ Parameters ---------- r_packet: tardis.montecarlo.montecarlo_numba.rpacket.RPacket - activation_level - numba_plasma + numba_plasma: tardis.montecarlo.numba_interface.numba_plasma Returns ------- """ - + activation_level_id = numba_plasma.line2macro_level_upper[ + r_packet.next_line_id] current_transition_type = 0 while current_transition_type >= 0: probability = 0.0 probability_event = np.random.random() - block_start, block_end = numba_plasma.macro_atom_block_references[ - [activation_level, activate_level + 1]] + block_start = numba_plasma.macro_block_references[activation_level_id] + block_end = numba_plasma.macro_block_references[activation_level_id + 1] - current_transition_probabilities = ( - numba_plasma.transition_probabilities[ - block_start:block_end, r_packet.current_shell_id]) + for transition_id in range(block_start, block_end): + + transition_probability = numba_plasma.transition_probabilities[ + transition_id, r_packet.current_shell_id] - for transition_probability in current_transition_probabilities: probability += transition_probability if probability > probability_event: - current_transition_type = transition_type[i] - activate_level = destination_level_id[i] + current_transition_type = numba_plasma.transition_type[ + transition_id] break + else: raise MacroAtomError( 'MacroAtom ran out of the block. This should not happen as the sum ' 'of probabilities is normalized to 1 and the probability_event ' 'should be less than 1') - if - + if current_transition_type == MacroAtomTransitionType.BB_EMISSION: + return numba_plasma.transition_line_id[transition_id] + else: + raise MacroAtomError('MacroAtom currently only allows BB transitions') +""" #void #macro_atom (rpacket_t * packet, const storage_model_t * storage, rk_state *mt_state) #{ @@ -103,4 +110,5 @@ def macro_atom(r_packet, activation_level, numba_plasma): fprintf (stderr, "This process for macro-atom deactivation should not exist! (emit = %d)\n", emit); exit(1); } -} \ No newline at end of file +} +""" \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index 3a94a1874bd..f7315d95bd8 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -3,8 +3,8 @@ from tardis.montecarlo.montecarlo_numba.rpacket import ( InteractionType, PacketStatus, get_doppler_factor, trace_packet, move_packet_across_shell_boundary, move_rpacket) -from tardis.montecarlo.montecarlo_numba.interaction import general_scatter, \ - LineInteractionType +from tardis.montecarlo.montecarlo_numba.interaction import ( + general_scatter, LineInteractionType, line_scatter) from tardis.montecarlo.montecarlo_numba.vpacket import trace_vpacket_volley @@ -32,7 +32,7 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, vpacket_ """ - line_interaction_type = LineInteractionType.SCATTER + line_interaction_type = LineInteractionType.MACROATOM doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, numba_model.time_explosion) @@ -48,27 +48,22 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, vpacket_ if interaction_type == InteractionType.BOUNDARY: move_rpacket(r_packet, distance, numba_model.time_explosion, - estimators) + estimators) move_packet_across_shell_boundary(r_packet, delta_shell, len(numba_model.r_inner)) elif interaction_type == InteractionType.LINE: move_rpacket(r_packet, distance, numba_model.time_explosion, - estimators) + estimators) + line_scatter(r_packet, numba_model.time_explosion, + line_interaction_type, numba_plasma) - if line_interaction_type == LineInteractionType.SCATTER: - general_scatter(r_packet, numba_model.time_explosion) - r_packet.next_line_id += 1 - - else: - pass - - - trace_vpacket_volley(r_packet, vpacket_collection, numba_model, numba_plasma) + trace_vpacket_volley( + r_packet, vpacket_collection, numba_model, numba_plasma) elif interaction_type == InteractionType.ESCATTERING: move_rpacket(r_packet, distance, numba_model.time_explosion, - estimators) + estimators) general_scatter(r_packet, numba_model.time_explosion) trace_vpacket_volley(r_packet, vpacket_collection, numba_model, numba_plasma) From 7b8c86acdd916b29c4f0dcabf66c4cfd08ca2a55 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Thu, 27 Jun 2019 12:59:20 -0400 Subject: [PATCH 190/467] debugged macro_atom - very close now Co-authored-by: Christian Vogl --- .../montecarlo/montecarlo_numba/macro_atom.py | 62 +++---------------- 1 file changed, 7 insertions(+), 55 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/macro_atom.py b/tardis/montecarlo/montecarlo_numba/macro_atom.py index 584a20ab01d..8302223004e 100644 --- a/tardis/montecarlo/montecarlo_numba/macro_atom.py +++ b/tardis/montecarlo/montecarlo_numba/macro_atom.py @@ -46,10 +46,13 @@ def macro_atom(r_packet, numba_plasma): transition_id, r_packet.current_shell_id] probability += transition_probability + if probability > probability_event: - current_transition_type = numba_plasma.transition_type[ - transition_id] - break + activation_level_id = numba_plasma.destination_level_id[ + transition_id] + current_transition_type = numba_plasma.transition_type[ + transition_id] + break else: raise MacroAtomError( @@ -60,55 +63,4 @@ def macro_atom(r_packet, numba_plasma): if current_transition_type == MacroAtomTransitionType.BB_EMISSION: return numba_plasma.transition_line_id[transition_id] else: - raise MacroAtomError('MacroAtom currently only allows BB transitions') -""" -#void -#macro_atom (rpacket_t * packet, const storage_model_t * storage, rk_state *mt_state) -#{ - int emit = 0, i = 0, offset = -1; - uint64_t activate_level = rpacket_get_macro_atom_activation_level (packet); - while (emit >= 0) - { - double event_random = rk_double (mt_state); - i = storage->macro_block_references[activate_level] - 1; - double p = 0.0; - offset = storage->transition_probabilities_nd * - rpacket_get_current_shell_id (packet); - do - { - ++i; - p += storage->transition_probabilities[offset + i]; - } - while (p <= event_random); - emit = storage->transition_type[i]; - activate_level = storage->destination_level_id[i]; - } - switch (emit) - { - case BB_EMISSION: - line_emission (packet, storage, storage->transition_line_id[i], mt_state); - break; - - case BF_EMISSION: - rpacket_set_current_continuum_id (packet, storage->transition_line_id[i]); - storage->last_line_interaction_out_id[rpacket_get_id (packet)] = - rpacket_get_current_continuum_id (packet); - - continuum_emission (packet, storage, mt_state, sample_nu_free_bound, 3); - break; - - case FF_EMISSION: - continuum_emission (packet, storage, mt_state, sample_nu_free_free, 4); - break; - - case ADIABATIC_COOLING: - storage->last_interaction_type[rpacket_get_id (packet)] = 5; - rpacket_set_status (packet, TARDIS_PACKET_STATUS_REABSORBED); - break; - - default: - fprintf (stderr, "This process for macro-atom deactivation should not exist! (emit = %d)\n", emit); - exit(1); - } -} -""" \ No newline at end of file + raise MacroAtomError('MacroAtom currently only allows BB transitions') \ No newline at end of file From 2a9ec251720e886c049fe8335fd044cee149bf32 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 25 Nov 2019 22:15:35 -0500 Subject: [PATCH 191/467] add tracking to rpack4ets --- .../montecarlo/montecarlo_numba/__init__.py | 3 ++- tardis/montecarlo/montecarlo_numba/base.py | 19 +++++++++----- .../montecarlo_numba/numba_interface.py | 3 +++ tardis/montecarlo/montecarlo_numba/rpacket.py | 4 ++- .../montecarlo_numba/single_packet_loop.py | 25 +++++++++++++++++-- 5 files changed, 44 insertions(+), 10 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/__init__.py b/tardis/montecarlo/montecarlo_numba/__init__.py index dd918494b6a..41d82521260 100644 --- a/tardis/montecarlo/montecarlo_numba/__init__.py +++ b/tardis/montecarlo/montecarlo_numba/__init__.py @@ -3,4 +3,5 @@ njit_dict = {'fastmath': True} from tardis.montecarlo.montecarlo_numba.rpacket import RPacket -from tardis.montecarlo.montecarlo_numba.base import montecarlo_radial1d \ No newline at end of file +from tardis.montecarlo.montecarlo_numba.base import montecarlo_radial1d +from tardis.montecarlo.montecarlo_numba.numba_interface import PacketCollection \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index 91c57297840..165d9e2c718 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -1,4 +1,4 @@ -from numba import prange, njit, config, int64 +from numba import prange, njit import numpy as np from tardis.montecarlo.montecarlo_numba.rpacket import RPacket, PacketStatus from tardis.montecarlo.montecarlo_numba.numba_interface import ( @@ -27,7 +27,8 @@ def montecarlo_radial1d(model, plasma, runner, no_of_virtual_packets): @njit(**njit_dict, nogil=True) def montecarlo_main_loop(packet_collection, numba_model, numba_plasma, - estimators, spectrum_frequency, montecarlo_configuration): + estimators, spectrum_frequency, + montecarlo_configuration): """ This is the main loop of the MonteCarlo routine that generates packets and sends them through the ejecta. @@ -43,11 +44,13 @@ def montecarlo_main_loop(packet_collection, numba_model, numba_plasma, v_packets_energy_hist = np.zeros_like(spectrum_frequency) delta_nu = spectrum_frequency[1] - spectrum_frequency[0] + for i in prange(len(output_nus)): r_packet = RPacket(numba_model.r_inner[0], packet_collection.packets_input_mu[i], packet_collection.packets_input_nu[i], - packet_collection.packets_input_energy[i]) + packet_collection.packets_input_energy[i], + i) vpacket_collection = VPacketCollection(spectrum_frequency, montecarlo_configuration.number_of_vpackets, 20000) single_packet_loop(r_packet, numba_model, numba_plasma, estimators, vpacket_collection) @@ -62,9 +65,13 @@ def montecarlo_main_loop(packet_collection, numba_model, numba_plasma, vpackets_nu = vpacket_collection.nus[:vpacket_collection.idx] vpackets_energy = vpacket_collection.energies[:vpacket_collection.idx] - v_packets_idx = np.floor((vpackets_nu - spectrum_frequency[0]) / delta_nu).astype(np.int64) - for i, idx in enumerate(v_packets_idx): - v_packets_energy_hist[idx] += vpackets_energy[i] + v_packets_idx = np.floor((vpackets_nu - spectrum_frequency[0]) / + delta_nu).astype(np.int64) + for j, idx in enumerate(v_packets_idx): + if ((vpackets_nu[j] < spectrum_frequency[0]) or + (vpackets_nu[j] > spectrum_frequency[-1])): + continue + v_packets_energy_hist[idx] += vpackets_energy[j] packet_collection.packets_output_energy[:] = output_energies[:] packet_collection.packets_output_nu[:] = output_nus[:] diff --git a/tardis/montecarlo/montecarlo_numba/numba_interface.py b/tardis/montecarlo/montecarlo_numba/numba_interface.py index de52b771265..f7f68cba2ba 100644 --- a/tardis/montecarlo/montecarlo_numba/numba_interface.py +++ b/tardis/montecarlo/montecarlo_numba/numba_interface.py @@ -148,3 +148,6 @@ def __init__(self, j_estimator, nu_bar_estimator): class MonteCarloConfiguration(object): def __init__(self, number_of_vpackets): self.number_of_vpackets = number_of_vpackets + + +#class TrackRPacket(object): diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/rpacket.py index 6223930c290..7fad4a0e8cc 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/rpacket.py @@ -36,6 +36,7 @@ class InteractionType(IntEnum): ('next_line_id', int64), ('current_shell_id', int64), ('status', int64), + ('index', int64) ] @njit(**njit_dict) @@ -95,13 +96,14 @@ def get_random_mu(): @jitclass(rpacket_spec) class RPacket(object): - def __init__(self, r, mu, nu, energy): + def __init__(self, r, mu, nu, energy, index=0): self.r = r self.mu = mu self.nu = nu self.energy = energy self.current_shell_id = 0 self.status = PacketStatus.IN_PROCESS + self.index = index def initialize_line_id(self, numba_plasma, numba_model): inverse_line_list_nu = numba_plasma.line_list_nu[::-1] diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index f7315d95bd8..338b1b49c3e 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -1,4 +1,5 @@ from numba import njit +import numpy as np from tardis.montecarlo.montecarlo_numba.rpacket import ( InteractionType, PacketStatus, get_doppler_factor, trace_packet, @@ -12,7 +13,8 @@ @njit -def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, vpacket_collection): +def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, + vpacket_collection, track_rpackets=False): """ Parameters @@ -31,7 +33,7 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, vpacket_ and if virtual packets are requested - also updates the vpacket_collection """ - + np.random.seed(r_packet.index) line_interaction_type = LineInteractionType.MACROATOM doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, @@ -41,6 +43,13 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, vpacket_ r_packet.initialize_line_id(numba_plasma, numba_model) trace_vpacket_volley(r_packet, vpacket_collection, numba_model, numba_plasma) + if track_rpackets: + rpacket_track_nu = [r_packet.nu] + rpacket_track_mu = [r_packet.mu] + rpacket_track_r = [r_packet.r] + rpacket_track_interaction = [InteractionType.BOUNDARY] + rpacket_track_distance = [0.] + while r_packet.status == PacketStatus.IN_PROCESS: distance, interaction_type, delta_shell = trace_packet( @@ -68,3 +77,15 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, vpacket_ trace_vpacket_volley(r_packet, vpacket_collection, numba_model, numba_plasma) + if track_rpackets: + rpacket_track_nu.append(r_packet.nu) + rpacket_track_mu.append(r_packet.mu) + rpacket_track_r.append(r_packet.r) + rpacket_track_interaction.append(interaction_type) + rpacket_track_distance.append(distance) + + + if track_rpackets is True: + return (rpacket_track_nu, rpacket_track_mu, rpacket_track_r, + rpacket_track_interaction, rpacket_track_distance) + From c728696d055b0e8dbd1227cf12fe6870a096d43d Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 27 Nov 2019 12:38:28 -0500 Subject: [PATCH 192/467] make the numba branch compatible with the rest of tardis --- tardis/montecarlo/montecarlo_numba/base.py | 4 +++- tardis/montecarlo/montecarlo_numba/single_packet_loop.py | 7 +++++-- tardis/montecarlo/montecarlo_numba/vpacket.py | 4 ++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index 165d9e2c718..e8f32cede38 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -20,7 +20,9 @@ def montecarlo_radial1d(model, plasma, runner, no_of_virtual_packets): numba_plasma = numba_plasma_initialize(plasma) estimators = Estimators(runner.j_estimator, runner.nu_bar_estimator) - v_packets_energy_hist = montecarlo_main_loop(packet_collection, numba_model, numba_plasma, estimators, runner.spectrum_frequency.value, montecarlo_configuration) + v_packets_energy_hist = montecarlo_main_loop( + packet_collection, numba_model, numba_plasma, estimators, + runner.spectrum_frequency.value, montecarlo_configuration) runner._montecarlo_virtual_luminosity.value[:] = v_packets_energy_hist diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index 338b1b49c3e..cefb8e1b4bf 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -42,7 +42,9 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, r_packet.energy /= doppler_factor r_packet.initialize_line_id(numba_plasma, numba_model) - trace_vpacket_volley(r_packet, vpacket_collection, numba_model, numba_plasma) + trace_vpacket_volley(r_packet, vpacket_collection, numba_model, + numba_plasma) + if track_rpackets: rpacket_track_nu = [r_packet.nu] rpacket_track_mu = [r_packet.mu] @@ -75,7 +77,8 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, estimators) general_scatter(r_packet, numba_model.time_explosion) - trace_vpacket_volley(r_packet, vpacket_collection, numba_model, numba_plasma) + trace_vpacket_volley(r_packet, vpacket_collection, numba_model, + numba_plasma) if track_rpackets: rpacket_track_nu.append(r_packet.nu) diff --git a/tardis/montecarlo/montecarlo_numba/vpacket.py b/tardis/montecarlo/montecarlo_numba/vpacket.py index 39464aaa29a..469e3f2c23d 100644 --- a/tardis/montecarlo/montecarlo_numba/vpacket.py +++ b/tardis/montecarlo/montecarlo_numba/vpacket.py @@ -139,8 +139,12 @@ def trace_vpacket_volley(r_packet, vpacket_collection, numba_model, numba_plasma (r_packet.nu > vpacket_collection.spectrum_frequency[-1])): return + + no_of_vpackets = vpacket_collection.number_of_vpackets + if no_of_vpackets == 0: + return ### TODO theoretical check for r_packet nu within vpackets bins - is done somewhere else I think if r_packet.r > numba_model.r_inner[0]: # not on inner_boundary From 51aed35d1d6123f39b895ed0f788e542de838b44 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 1 Dec 2019 14:51:55 -0500 Subject: [PATCH 193/467] rewire montecarlo with new numba part --- tardis/montecarlo/base.py | 7 +++++- tardis/montecarlo/montecarlo_numba/base.py | 16 +++++++----- .../montecarlo_numba/interaction.py | 10 +++----- .../montecarlo/montecarlo_numba/macro_atom.py | 17 +++++++------ .../montecarlo_numba/numba_interface.py | 25 ++++++++++++++++++- .../montecarlo_numba/single_packet_loop.py | 10 +++++--- 6 files changed, 60 insertions(+), 25 deletions(-) diff --git a/tardis/montecarlo/base.py b/tardis/montecarlo/base.py index 1b5c96f317a..afafde98a50 100644 --- a/tardis/montecarlo/base.py +++ b/tardis/montecarlo/base.py @@ -17,6 +17,8 @@ from tardis.montecarlo.formal_integral import FormalIntegrator from tardis.montecarlo.montecarlo_numba import montecarlo_radial1d +from tardis.montecarlo.montecarlo_numba.numba_interface import ( + configuration_initialize) import numpy as np @@ -222,7 +224,10 @@ def run(self, model, plasma, no_of_packets, self._initialize_packets(model.t_inner.value, no_of_packets) - montecarlo_radial1d(model, plasma, self, no_of_virtual_packets) + montecarlo_configuration = configuration_initialize( + self, no_of_virtual_packets) + + montecarlo_radial1d(model, plasma, self, montecarlo_configuration) #montecarlo.montecarlo_radial1d( # model, plasma, self, # virtual_packet_flag=no_of_virtual_packets, diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index e8f32cede38..57d379f4868 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -2,19 +2,20 @@ import numpy as np from tardis.montecarlo.montecarlo_numba.rpacket import RPacket, PacketStatus from tardis.montecarlo.montecarlo_numba.numba_interface import ( - PacketCollection, VPacketCollection, NumbaModel, numba_plasma_initialize, Estimators, MonteCarloConfiguration) + PacketCollection, VPacketCollection, NumbaModel, numba_plasma_initialize, + Estimators, MonteCarloConfiguration, configuration_initialize) from tardis.montecarlo.montecarlo_numba.single_packet_loop import ( single_packet_loop) from tardis.montecarlo.montecarlo_numba import njit_dict -def montecarlo_radial1d(model, plasma, runner, no_of_virtual_packets): +def montecarlo_radial1d(model, plasma, runner, montecarlo_configuration): packet_collection = PacketCollection( runner.input_nu, runner.input_mu, runner.input_energy, runner._output_nu, runner._output_energy ) - montecarlo_configuration = MonteCarloConfiguration(no_of_virtual_packets) + numba_model = NumbaModel(runner.r_inner_cgs, runner.r_outer_cgs, model.time_explosion.to('s').value) numba_plasma = numba_plasma_initialize(plasma) @@ -40,13 +41,13 @@ def montecarlo_main_loop(packet_collection, numba_model, numba_plasma, storage_model : [type] [description] """ + output_nus = np.empty_like(packet_collection.packets_output_nu) output_energies = np.empty_like(packet_collection.packets_output_nu) v_packets_energy_hist = np.zeros_like(spectrum_frequency) delta_nu = spectrum_frequency[1] - spectrum_frequency[0] - for i in prange(len(output_nus)): r_packet = RPacket(numba_model.r_inner[0], packet_collection.packets_input_mu[i], @@ -54,8 +55,11 @@ def montecarlo_main_loop(packet_collection, numba_model, numba_plasma, packet_collection.packets_input_energy[i], i) - vpacket_collection = VPacketCollection(spectrum_frequency, montecarlo_configuration.number_of_vpackets, 20000) - single_packet_loop(r_packet, numba_model, numba_plasma, estimators, vpacket_collection) + vpacket_collection = VPacketCollection( + spectrum_frequency, montecarlo_configuration.number_of_vpackets, + 20000) + single_packet_loop(r_packet, numba_model, numba_plasma, estimators, + vpacket_collection, montecarlo_configuration) output_nus[i] = r_packet.nu diff --git a/tardis/montecarlo/montecarlo_numba/interaction.py b/tardis/montecarlo/montecarlo_numba/interaction.py index e9b8933d1d4..87867372c35 100644 --- a/tardis/montecarlo/montecarlo_numba/interaction.py +++ b/tardis/montecarlo/montecarlo_numba/interaction.py @@ -1,15 +1,13 @@ -from enum import IntEnum - from numba import njit from tardis.montecarlo.montecarlo_numba import njit_dict +from tardis.montecarlo.montecarlo_numba.numba_interface import ( + LineInteractionType) + from tardis.montecarlo.montecarlo_numba.rpacket import ( get_doppler_factor, get_random_mu) from tardis.montecarlo.montecarlo_numba.macro_atom import macro_atom -class LineInteractionType(IntEnum): - SCATTER = 0 - DOWNBRANCH = 1 - MACROATOM = 2 + @njit(**njit_dict) def general_scatter(r_packet, time_explosion): diff --git a/tardis/montecarlo/montecarlo_numba/macro_atom.py b/tardis/montecarlo/montecarlo_numba/macro_atom.py index 8302223004e..c9d26740088 100644 --- a/tardis/montecarlo/montecarlo_numba/macro_atom.py +++ b/tardis/montecarlo/montecarlo_numba/macro_atom.py @@ -40,6 +40,7 @@ def macro_atom(r_packet, numba_plasma): block_start = numba_plasma.macro_block_references[activation_level_id] block_end = numba_plasma.macro_block_references[activation_level_id + 1] + # looping through the transition probabilities for transition_id in range(block_start, block_end): transition_probability = numba_plasma.transition_probabilities[ @@ -48,17 +49,17 @@ def macro_atom(r_packet, numba_plasma): probability += transition_probability if probability > probability_event: - activation_level_id = numba_plasma.destination_level_id[ - transition_id] - current_transition_type = numba_plasma.transition_type[ - transition_id] - break + activation_level_id = numba_plasma.destination_level_id[ + transition_id] + current_transition_type = numba_plasma.transition_type[ + transition_id] + break else: raise MacroAtomError( - 'MacroAtom ran out of the block. This should not happen as the sum ' - 'of probabilities is normalized to 1 and the probability_event ' - 'should be less than 1') + 'MacroAtom ran out of the block. This should not happen as ' + 'the sum of probabilities is normalized to 1 and ' + 'the probability_event should be less than 1') if current_transition_type == MacroAtomTransitionType.BB_EMISSION: return numba_plasma.transition_line_id[transition_id] diff --git a/tardis/montecarlo/montecarlo_numba/numba_interface.py b/tardis/montecarlo/montecarlo_numba/numba_interface.py index f7f68cba2ba..ecb862dcbee 100644 --- a/tardis/montecarlo/montecarlo_numba/numba_interface.py +++ b/tardis/montecarlo/montecarlo_numba/numba_interface.py @@ -1,3 +1,5 @@ +from enum import IntEnum + from numba import float64, int64, jitclass import numpy as np @@ -141,13 +143,34 @@ def __init__(self, j_estimator, nu_bar_estimator): self.nu_bar_estimator = nu_bar_estimator monte_carlo_configuration_spec = [ + ('line_interaction_type', int64), ('number_of_vpackets', int64) ] @jitclass(monte_carlo_configuration_spec) class MonteCarloConfiguration(object): - def __init__(self, number_of_vpackets): + def __init__(self, number_of_vpackets, line_interaction_type): + self.line_interaction_type = line_interaction_type self.number_of_vpackets = number_of_vpackets +def configuration_initialize(runner, number_of_vpackets): + if runner.line_interaction_type == 'macroatom': + line_interaction_type = LineInteractionType.MACROATOM + elif runner.line_interaction_type == 'downbranch': + line_interaction_type = LineInteractionType.DOWNBRANCH + elif runner.line_interaction_type == 'scatter': + line_interaction_type = LineInteractionType.SCATTER + else: + raise ValueError(f'Line interaction type must be one of "macroatom",' + f'"downbranch", or "scatter" but is ' + f'{runner.line_interaction_type}') + + return MonteCarloConfiguration(number_of_vpackets, line_interaction_type) + + #class TrackRPacket(object): +class LineInteractionType(IntEnum): + SCATTER = 0 + DOWNBRANCH = 1 + MACROATOM = 2 \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index cefb8e1b4bf..1f868c59118 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -5,7 +5,9 @@ InteractionType, PacketStatus, get_doppler_factor, trace_packet, move_packet_across_shell_boundary, move_rpacket) from tardis.montecarlo.montecarlo_numba.interaction import ( - general_scatter, LineInteractionType, line_scatter) + general_scatter, line_scatter) +from tardis.montecarlo.montecarlo_numba.numba_interface import \ + LineInteractionType from tardis.montecarlo.montecarlo_numba.vpacket import trace_vpacket_volley @@ -14,7 +16,8 @@ @njit def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, - vpacket_collection, track_rpackets=False): + vpacket_collection, montecarlo_configuration, + track_rpackets=False): """ Parameters @@ -34,7 +37,8 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, """ np.random.seed(r_packet.index) - line_interaction_type = LineInteractionType.MACROATOM + + line_interaction_type = montecarlo_configuration.line_interaction_type doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, numba_model.time_explosion) From 7fe7d4fbc35c96ff961e42259f338fd8493d3ac7 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 1 Dec 2019 15:18:26 -0500 Subject: [PATCH 194/467] add temporary_v_packet_bins --- tardis/montecarlo/formal_integral.py | 1 + .../montecarlo/montecarlo_numba/__init__.py | 2 +- tardis/montecarlo/montecarlo_numba/base.py | 4 +-- .../montecarlo_numba/interaction.py | 2 +- .../montecarlo/montecarlo_numba/macro_atom.py | 2 +- .../montecarlo_numba/numba_interface.py | 22 +++++++++---- .../{rpacket.py => r_packet.py} | 2 +- .../montecarlo_numba/single_packet_loop.py | 33 +++++++++---------- tardis/montecarlo/montecarlo_numba/vpacket.py | 2 +- 9 files changed, 38 insertions(+), 32 deletions(-) rename tardis/montecarlo/montecarlo_numba/{rpacket.py => r_packet.py} (99%) diff --git a/tardis/montecarlo/formal_integral.py b/tardis/montecarlo/formal_integral.py index ad9463153e9..26049da2149 100644 --- a/tardis/montecarlo/formal_integral.py +++ b/tardis/montecarlo/formal_integral.py @@ -101,6 +101,7 @@ def make_source_function(self): ------- Numpy array containing ( 1 - exp(-tau_ul) ) S_ul ordered by wavelength of the transition u -> l """ + model = self.model plasma = self.plasma runner = self.runner diff --git a/tardis/montecarlo/montecarlo_numba/__init__.py b/tardis/montecarlo/montecarlo_numba/__init__.py index 41d82521260..d7944262a3d 100644 --- a/tardis/montecarlo/montecarlo_numba/__init__.py +++ b/tardis/montecarlo/montecarlo_numba/__init__.py @@ -2,6 +2,6 @@ binding.set_option("tmp", "-non-global-value-max-name-size=2048") njit_dict = {'fastmath': True} -from tardis.montecarlo.montecarlo_numba.rpacket import RPacket +from tardis.montecarlo.montecarlo_numba.r_packet import RPacket from tardis.montecarlo.montecarlo_numba.base import montecarlo_radial1d from tardis.montecarlo.montecarlo_numba.numba_interface import PacketCollection \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index 57d379f4868..a61876695d9 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -1,6 +1,6 @@ from numba import prange, njit import numpy as np -from tardis.montecarlo.montecarlo_numba.rpacket import RPacket, PacketStatus +from tardis.montecarlo.montecarlo_numba.r_packet import RPacket, PacketStatus from tardis.montecarlo.montecarlo_numba.numba_interface import ( PacketCollection, VPacketCollection, NumbaModel, numba_plasma_initialize, Estimators, MonteCarloConfiguration, configuration_initialize) @@ -57,7 +57,7 @@ def montecarlo_main_loop(packet_collection, numba_model, numba_plasma, vpacket_collection = VPacketCollection( spectrum_frequency, montecarlo_configuration.number_of_vpackets, - 20000) + montecarlo_configuration.temporary_v_packet_bins) single_packet_loop(r_packet, numba_model, numba_plasma, estimators, vpacket_collection, montecarlo_configuration) diff --git a/tardis/montecarlo/montecarlo_numba/interaction.py b/tardis/montecarlo/montecarlo_numba/interaction.py index 87867372c35..c62f5733a03 100644 --- a/tardis/montecarlo/montecarlo_numba/interaction.py +++ b/tardis/montecarlo/montecarlo_numba/interaction.py @@ -4,7 +4,7 @@ LineInteractionType) -from tardis.montecarlo.montecarlo_numba.rpacket import ( +from tardis.montecarlo.montecarlo_numba.r_packet import ( get_doppler_factor, get_random_mu) from tardis.montecarlo.montecarlo_numba.macro_atom import macro_atom diff --git a/tardis/montecarlo/montecarlo_numba/macro_atom.py b/tardis/montecarlo/montecarlo_numba/macro_atom.py index c9d26740088..45849952b62 100644 --- a/tardis/montecarlo/montecarlo_numba/macro_atom.py +++ b/tardis/montecarlo/montecarlo_numba/macro_atom.py @@ -22,7 +22,7 @@ def macro_atom(r_packet, numba_plasma): Parameters ---------- - r_packet: tardis.montecarlo.montecarlo_numba.rpacket.RPacket + r_packet: tardis.montecarlo.montecarlo_numba.r_packet.RPacket numba_plasma: tardis.montecarlo.numba_interface.numba_plasma Returns diff --git a/tardis/montecarlo/montecarlo_numba/numba_interface.py b/tardis/montecarlo/montecarlo_numba/numba_interface.py index ecb862dcbee..4aa4f5cfc62 100644 --- a/tardis/montecarlo/montecarlo_numba/numba_interface.py +++ b/tardis/montecarlo/montecarlo_numba/numba_interface.py @@ -121,12 +121,14 @@ def __init__(self, packets_input_nu, packets_input_mu, packets_input_energy, ('number_of_vpackets', int64) ] + @jitclass(vpacket_collection_spec) class VPacketCollection(object): - def __init__(self, spectrum_frequency, number_of_vpackets, initial_vpacket_bins): + def __init__(self, spectrum_frequency, number_of_vpackets, + temporary_v_packet_bins): self.spectrum_frequency = spectrum_frequency - self.nus = np.empty(initial_vpacket_bins, dtype=np.float64) - self.energies = np.empty(initial_vpacket_bins, dtype=np.float64) + self.nus = np.empty(temporary_v_packet_bins, dtype=np.float64) + self.energies = np.empty(temporary_v_packet_bins, dtype=np.float64) self.number_of_vpackets = number_of_vpackets self.idx = 0 @@ -144,17 +146,22 @@ def __init__(self, j_estimator, nu_bar_estimator): monte_carlo_configuration_spec = [ ('line_interaction_type', int64), - ('number_of_vpackets', int64) + ('number_of_vpackets', int64), + ('temporary_v_packet_bins', int64) ] + @jitclass(monte_carlo_configuration_spec) class MonteCarloConfiguration(object): - def __init__(self, number_of_vpackets, line_interaction_type): + def __init__(self, number_of_vpackets, line_interaction_type, + temporary_v_packet_bins): self.line_interaction_type = line_interaction_type self.number_of_vpackets = number_of_vpackets + self.temporary_v_packet_bins = temporary_v_packet_bins -def configuration_initialize(runner, number_of_vpackets): +def configuration_initialize(runner, number_of_vpackets, + temporary_v_packet_bins=20000): if runner.line_interaction_type == 'macroatom': line_interaction_type = LineInteractionType.MACROATOM elif runner.line_interaction_type == 'downbranch': @@ -166,7 +173,8 @@ def configuration_initialize(runner, number_of_vpackets): f'"downbranch", or "scatter" but is ' f'{runner.line_interaction_type}') - return MonteCarloConfiguration(number_of_vpackets, line_interaction_type) + return MonteCarloConfiguration(number_of_vpackets, line_interaction_type, + temporary_v_packet_bins) #class TrackRPacket(object): diff --git a/tardis/montecarlo/montecarlo_numba/rpacket.py b/tardis/montecarlo/montecarlo_numba/r_packet.py similarity index 99% rename from tardis/montecarlo/montecarlo_numba/rpacket.py rename to tardis/montecarlo/montecarlo_numba/r_packet.py index 7fad4a0e8cc..5a5630e662c 100644 --- a/tardis/montecarlo/montecarlo_numba/rpacket.py +++ b/tardis/montecarlo/montecarlo_numba/r_packet.py @@ -263,7 +263,7 @@ def line_emission(r_packet, emission_line_id, numba_plasma, time_explosion): Parameters ---------- - r_packet: tardis.montecarlo.montecarlo_numba.rpacket.RPacket + r_packet: tardis.montecarlo.montecarlo_numba.r_packet.RPacket emission_line_id: int numba_plasma time_explosion diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index 1f868c59118..15c0d4c18fa 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -1,7 +1,7 @@ from numba import njit import numpy as np -from tardis.montecarlo.montecarlo_numba.rpacket import ( +from tardis.montecarlo.montecarlo_numba.r_packet import ( InteractionType, PacketStatus, get_doppler_factor, trace_packet, move_packet_across_shell_boundary, move_rpacket) from tardis.montecarlo.montecarlo_numba.interaction import ( @@ -12,8 +12,6 @@ from tardis.montecarlo.montecarlo_numba.vpacket import trace_vpacket_volley - - @njit def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, vpacket_collection, montecarlo_configuration, @@ -22,7 +20,7 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, Parameters ---------- - r_packet: tardis.montecarlo.montecarlo_numba.rpacket.RPacket + r_packet: tardis.montecarlo.montecarlo_numba.r_packet.RPacket numba_model: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaModel numba_plasma: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaPlasma estimators: tardis.montecarlo.montecarlo_numba.numba_interface.Estimators @@ -34,8 +32,8 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, This function does not return anything but changes the r_packet object and if virtual packets are requested - also updates the vpacket_collection - """ + np.random.seed(r_packet.index) line_interaction_type = montecarlo_configuration.line_interaction_type @@ -50,12 +48,11 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, numba_plasma) if track_rpackets: - rpacket_track_nu = [r_packet.nu] - rpacket_track_mu = [r_packet.mu] - rpacket_track_r = [r_packet.r] - rpacket_track_interaction = [InteractionType.BOUNDARY] - rpacket_track_distance = [0.] - + r_packet_track_nu = [r_packet.nu] + r_packet_track_mu = [r_packet.mu] + r_packet_track_r = [r_packet.r] + r_packet_track_interaction = [InteractionType.BOUNDARY] + r_packet_track_distance = [0.] while r_packet.status == PacketStatus.IN_PROCESS: distance, interaction_type, delta_shell = trace_packet( @@ -85,14 +82,14 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, numba_plasma) if track_rpackets: - rpacket_track_nu.append(r_packet.nu) - rpacket_track_mu.append(r_packet.mu) - rpacket_track_r.append(r_packet.r) - rpacket_track_interaction.append(interaction_type) - rpacket_track_distance.append(distance) + r_packet_track_nu.append(r_packet.nu) + r_packet_track_mu.append(r_packet.mu) + r_packet_track_r.append(r_packet.r) + r_packet_track_interaction.append(interaction_type) + r_packet_track_distance.append(distance) if track_rpackets is True: - return (rpacket_track_nu, rpacket_track_mu, rpacket_track_r, - rpacket_track_interaction, rpacket_track_distance) + return (r_packet_track_nu, r_packet_track_mu, r_packet_track_r, + r_packet_track_interaction, r_packet_track_distance) diff --git a/tardis/montecarlo/montecarlo_numba/vpacket.py b/tardis/montecarlo/montecarlo_numba/vpacket.py index 469e3f2c23d..08f78a0ba68 100644 --- a/tardis/montecarlo/montecarlo_numba/vpacket.py +++ b/tardis/montecarlo/montecarlo_numba/vpacket.py @@ -5,7 +5,7 @@ import numpy as np -from tardis.montecarlo.montecarlo_numba.rpacket import ( +from tardis.montecarlo.montecarlo_numba.r_packet import ( calculate_distance_boundary, get_doppler_factor, calculate_distance_line, calculate_tau_electron, PacketStatus, move_packet_across_shell_boundary) From e8fcf4da84ef83553ea82cab772187299b718d90 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 1 Dec 2019 16:27:01 -0500 Subject: [PATCH 195/467] document montecarlo part --- tardis/montecarlo/montecarlo_numba/r_packet.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/r_packet.py b/tardis/montecarlo/montecarlo_numba/r_packet.py index 5a5630e662c..644ea3c8622 100644 --- a/tardis/montecarlo/montecarlo_numba/r_packet.py +++ b/tardis/montecarlo/montecarlo_numba/r_packet.py @@ -154,18 +154,30 @@ def trace_packet(r_packet, numba_model, numba_plasma): doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, numba_model.time_explosion) comov_nu = r_packet.nu * doppler_factor - last_line = False + cur_line_id = start_line_id + for cur_line_id in range(start_line_id, len(numba_plasma.line_list_nu)): + # Going through the lines nu_line = numba_plasma.line_list_nu[cur_line_id] + + # Getting the tau for the next line tau_trace_line = numba_plasma.tau_sobolev[ cur_line_id, r_packet.current_shell_id] - + + # Adding it to the tau_trace_line_combined tau_trace_line_combined += tau_trace_line + + # Calculating the distance until the current photons co-moving nu + # redshifts to the line frequency distance_trace = calculate_distance_line( r_packet.nu, comov_nu, nu_line, numba_model.time_explosion) + + # calculating the tau electron of how far the trace has progressed tau_trace_electron = calculate_tau_electron(cur_electron_density, distance_trace) + + # calculating the trace tau_trace_combined = tau_trace_line_combined + tau_trace_electron if ((distance_boundary <= distance_trace) and From fc79fe8483dd15ebef0e2163ac712bd5497cdd37 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 1 Dec 2019 17:09:17 -0500 Subject: [PATCH 196/467] recalcuate distance_electron --- tardis/montecarlo/montecarlo_numba/r_packet.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tardis/montecarlo/montecarlo_numba/r_packet.py b/tardis/montecarlo/montecarlo_numba/r_packet.py index 644ea3c8622..73b43bbdda3 100644 --- a/tardis/montecarlo/montecarlo_numba/r_packet.py +++ b/tardis/montecarlo/montecarlo_numba/r_packet.py @@ -180,6 +180,7 @@ def trace_packet(r_packet, numba_model, numba_plasma): # calculating the trace tau_trace_combined = tau_trace_line_combined + tau_trace_electron + if ((distance_boundary <= distance_trace) and (distance_boundary <= distance_electron)): interaction_type = InteractionType.BOUNDARY # BOUNDARY @@ -199,6 +200,12 @@ def trace_packet(r_packet, numba_model, numba_plasma): r_packet.next_line_id = cur_line_id distance = distance_trace break + + # Recalculating distance_electron using tau_event - + # tau_trace_line_combined + distance_electron = calculate_distance_electron( + cur_electron_density, tau_event - tau_trace_line_combined) + else: # Executed when no break occurs in the for loop if cur_line_id == (len(numba_plasma.line_list_nu) - 1): # Treatment for last line From 6a1d0655169c19a41d382324cf602757ff7b5070 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 1 Dec 2019 19:57:31 -0500 Subject: [PATCH 197/467] add estimators --- tardis/montecarlo/base.py | 31 ++++---- tardis/montecarlo/montecarlo_numba/base.py | 3 +- .../montecarlo_numba/interaction.py | 79 ------------------- .../montecarlo_numba/numba_interface.py | 6 +- .../montecarlo/montecarlo_numba/r_packet.py | 55 +------------ .../montecarlo_numba/single_packet_loop.py | 14 ++-- tardis/simulation/base.py | 2 +- tardis/tests/test_tardis_full.py | 2 +- .../tests/test_tardis_full_formal_integral.py | 2 +- 9 files changed, 36 insertions(+), 158 deletions(-) diff --git a/tardis/montecarlo/base.py b/tardis/montecarlo/base.py index afafde98a50..d6a0b04e94f 100644 --- a/tardis/montecarlo/base.py +++ b/tardis/montecarlo/base.py @@ -86,21 +86,22 @@ def __init__(self, seed, spectrum_frequency, virtual_spectrum_range, self.optional_hdf_properties.append('spectrum_integrated') - def _initialize_estimator_arrays(self, no_of_shells, tau_sobolev_shape): + def _initialize_estimator_arrays(self, tau_sobolev_shape): """ Initialize the output arrays of the montecarlo simulation. Parameters ---------- - model: ~Radial1DModel + tau_sobolev_shape: tuple + tuple for the tau_sobolev_shape """ # Estimators - self.j_estimator = np.zeros(no_of_shells, dtype=np.float64) - self.nu_bar_estimator = np.zeros(no_of_shells, dtype=np.float64) - self.j_blue_estimator = np.zeros(tau_sobolev_shape) - self.Edotlu_estimator = np.zeros(tau_sobolev_shape) + self.j_estimator = np.zeros(tau_sobolev_shape[1], dtype=np.float64) + self.nu_bar_estimator = np.zeros(tau_sobolev_shape[1], dtype=np.float64) + self.j_b_lu_estimator = np.zeros(tau_sobolev_shape) + self.edot_lu_estimator = np.zeros(tau_sobolev_shape) def _initialize_geometry_arrays(self, model): """ @@ -217,8 +218,10 @@ def run(self, model, plasma, no_of_packets, self) self.time_of_simulation = self.calculate_time_of_simulation(model) self.volume = model.volume - self._initialize_estimator_arrays(self.volume.shape[0], - plasma.tau_sobolevs.shape) + + # Initializing estimator array + self._initialize_estimator_arrays(plasma.tau_sobolevs.shape) + self._initialize_geometry_arrays(model) self._initialize_packets(model.t_inner.value, @@ -236,13 +239,13 @@ def run(self, model, plasma, no_of_packets, # Workaround so that j_blue_estimator is in the right ordering # They are written as an array of dimension (no_of_shells, no_of_lines) # but python expects (no_of_lines, no_of_shells) - self.j_blue_estimator = np.ascontiguousarray( - self.j_blue_estimator.flatten().reshape( - self.j_blue_estimator.shape, order='F') + self.j_b_lu_estimator = np.ascontiguousarray( + self.j_b_lu_estimator.flatten().reshape( + self.j_b_lu_estimator.shape, order='F') ) - self.Edotlu_estimator = np.ascontiguousarray( - self.Edotlu_estimator.flatten().reshape( - self.Edotlu_estimator.shape, order='F') + self.edot_lu_estimator = np.ascontiguousarray( + self.edot_lu_estimator.flatten().reshape( + self.edot_lu_estimator.shape, order='F') ) def legacy_return(self): diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index a61876695d9..dcf2d32a827 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -19,7 +19,8 @@ def montecarlo_radial1d(model, plasma, runner, montecarlo_configuration): numba_model = NumbaModel(runner.r_inner_cgs, runner.r_outer_cgs, model.time_explosion.to('s').value) numba_plasma = numba_plasma_initialize(plasma) - estimators = Estimators(runner.j_estimator, runner.nu_bar_estimator) + estimators = Estimators(runner.j_estimator, runner.nu_bar_estimator, + runner.j_b_lu_estimator, runner.edot_lu_estimator) v_packets_energy_hist = montecarlo_main_loop( packet_collection, numba_model, numba_plasma, estimators, diff --git a/tardis/montecarlo/montecarlo_numba/interaction.py b/tardis/montecarlo/montecarlo_numba/interaction.py index c62f5733a03..fda2c077135 100644 --- a/tardis/montecarlo/montecarlo_numba/interaction.py +++ b/tardis/montecarlo/montecarlo_numba/interaction.py @@ -73,22 +73,6 @@ def line_scatter(r_packet, time_explosion, line_interaction_type, numba_plasma): emission_line_id = macro_atom(r_packet, numba_plasma) line_emission(r_packet, emission_line_id, time_explosion, numba_plasma) -""" - line_emission() - - if (storage->line_interaction_id == 0) - { - line_emission(packet, storage, next_line_id, mt_state); - } - else if (storage->line_interaction_id >= 1) - { - rpacket_set_macro_atom_activation_level(packet, - storage-> - rpacket_set_macro_atom_activation_level(packet, - storage->line2macro_level_upper[ - next_line_id]); - macro_atom(packet, storage, mt_state); -""" @njit(**njit_dict) def line_emission(r_packet, emission_line_id, time_explosion, @@ -101,68 +85,5 @@ def line_emission(r_packet, emission_line_id, time_explosion, emission_line_id] / doppler_factor r_packet.next_line_id = emission_line_id + 1 -""" -void -montecarlo_line_scatter (rpacket_t * packet, storage_model_t * storage, - double distance, rk_state *mt_state) -{ - uint64_t next_line_id = rpacket_get_next_line_id (packet); - uint64_t line2d_idx = next_line_id + - storage->no_of_lines * rpacket_get_current_shell_id (packet); - if (rpacket_get_virtual_packet (packet) == 0) - { - } - double tau_line = - storage->line_lists_tau_sobolevs[line2d_idx]; - double tau_continuum = rpacket_get_chi_continuum(packet) * distance; - double tau_combined = tau_line + tau_continuum; - //rpacket_set_next_line_id (packet, rpacket_get_next_line_id (packet) + 1); - if (next_line_id + 1 == storage->no_of_lines) - { - rpacket_set_last_line (packet, true); - } - if (rpacket_get_virtual_packet (packet) > 0) - { - rpacket_set_tau_event (packet, - rpacket_get_tau_event (packet) + tau_line); - rpacket_set_next_line_id (packet, next_line_id + 1); - test_for_close_line (packet, storage); - } - else if (rpacket_get_tau_event (packet) < tau_combined) - { // Line absorption occurs - move_packet (packet, storage, distance); - double old_doppler_factor = rpacket_doppler_factor (packet, storage); - rpacket_set_mu (packet, 2.0 * rk_double (mt_state) - 1.0); - double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); - double comov_energy = rpacket_get_energy (packet) * old_doppler_factor; - rpacket_set_energy (packet, comov_energy * inverse_doppler_factor); - storage->last_interaction_in_nu[rpacket_get_id (packet)] = - rpacket_get_nu (packet); - storage->last_line_interaction_in_id[rpacket_get_id (packet)] = - next_line_id; - storage->last_line_interaction_shell_id[rpacket_get_id (packet)] = - rpacket_get_current_shell_id (packet); - storage->last_interaction_type[rpacket_get_id (packet)] = 2; - if (storage->line_interaction_id == 0) - { - line_emission (packet, storage, next_line_id, mt_state); - } - else if (storage->line_interaction_id >= 1) - { - rpacket_set_macro_atom_activation_level (packet, - storage->line2macro_level_upper[next_line_id]); - macro_atom (packet, storage, mt_state); - } - } - else - { // Packet passes line without interacting - rpacket_set_tau_event (packet, - rpacket_get_tau_event (packet) - tau_line); - rpacket_set_next_line_id (packet, next_line_id + 1); - packet->compute_chi_bf = false; - test_for_close_line (packet, storage); - } -} -""" diff --git a/tardis/montecarlo/montecarlo_numba/numba_interface.py b/tardis/montecarlo/montecarlo_numba/numba_interface.py index 4aa4f5cfc62..06cb6a275b1 100644 --- a/tardis/montecarlo/montecarlo_numba/numba_interface.py +++ b/tardis/montecarlo/montecarlo_numba/numba_interface.py @@ -136,13 +136,17 @@ def __init__(self, spectrum_frequency, number_of_vpackets, estimators_spec = [ ('j_estimator', float64[:]), ('nu_bar_estimator', float64[:]), + ('edot_lu_estimator', float64[:]), ] @jitclass(estimators_spec) class Estimators(object): - def __init__(self, j_estimator, nu_bar_estimator): + def __init__(self, j_estimator, nu_bar_estimator, j_b_lu_estimator, + edot_lu_estimator): self.j_estimator = j_estimator self.nu_bar_estimator = nu_bar_estimator + self.j_b_lu_estimator = j_b_lu_estimator + self.edot_lu_estimator = edot_lu_estimator monte_carlo_configuration_spec = [ ('line_interaction_type', int64), diff --git a/tardis/montecarlo/montecarlo_numba/r_packet.py b/tardis/montecarlo/montecarlo_numba/r_packet.py index 73b43bbdda3..9cc27d564fc 100644 --- a/tardis/montecarlo/montecarlo_numba/r_packet.py +++ b/tardis/montecarlo/montecarlo_numba/r_packet.py @@ -223,7 +223,7 @@ def trace_packet(r_packet, numba_model, numba_plasma): @njit(**njit_dict) -def move_rpacket(r_packet, distance, time_explosion, numba_estimator): +def move_r_packet(r_packet, distance, time_explosion, numba_estimator): """Move packet a distance and recalculate the new angle mu Parameters @@ -240,6 +240,7 @@ def move_rpacket(r_packet, distance, time_explosion, numba_estimator): comov_energy * distance) numba_estimator.nu_bar_estimator[r_packet.current_shell_id] += ( comov_energy * distance * comov_nu) + #numba_estimator.edot_lu_estimator[] += r = r_packet.r if (distance > 0.0): @@ -294,55 +295,3 @@ def line_emission(r_packet, emission_line_id, numba_plasma, time_explosion): doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, time_explosion) r_packet.nu = numba_plasma.line_list_nu[emission_line_id] / doppler_factor r_packet.next_line_id = emission_line_id + 1 - - -""" -void -line_emission (rpacket_t * packet, storage_model_t * storage, int64_t emission_line_id, rk_state *mt_state) -{ - double inverse_doppler_factor = rpacket_inverse_doppler_factor (packet, storage); - storage->last_line_interaction_out_id[rpacket_get_id (packet)] = emission_line_id; - if (storage->cont_status == CONTINUUM_ON) - { - storage->last_interaction_out_type[rpacket_get_id (packet)] = 2; - } - - rpacket_set_nu (packet, - storage->line_list_nu[emission_line_id] * inverse_doppler_factor); - rpacket_set_nu_line (packet, storage->line_list_nu[emission_line_id]); - rpacket_set_next_line_id (packet, emission_line_id + 1); - rpacket_reset_tau_event (packet, mt_state); - - angle_aberration_CMF_to_LF (packet, storage); - - if (rpacket_get_virtual_packet_flag (packet) > 0) - { - bool virtual_close_line = false; - if (!rpacket_get_last_line (packet) && - fabs (storage->line_list_nu[rpacket_get_next_line_id (packet)] - - rpacket_get_nu_line (packet)) < - (rpacket_get_nu_line (packet)* 1e-7)) - { - virtual_close_line = true; - } - // QUESTIONABLE!!! - bool old_close_line = rpacket_get_close_line (packet); - rpacket_set_close_line (packet, virtual_close_line); - create_vpacket (storage, packet, mt_state); - rpacket_set_close_line (packet, old_close_line); - virtual_close_line = false; - } - test_for_close_line (packet, storage); -} - -void test_for_close_line (rpacket_t * packet, const storage_model_t * storage) -{ - if (!rpacket_get_last_line (packet) && - fabs (storage->line_list_nu[rpacket_get_next_line_id (packet)] - - rpacket_get_nu_line (packet)) < (rpacket_get_nu_line (packet)* - 1e-7)) - { - rpacket_set_close_line (packet, true); - } -} -""" \ No newline at end of file diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index 15c0d4c18fa..3be235b752b 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -3,7 +3,7 @@ from tardis.montecarlo.montecarlo_numba.r_packet import ( InteractionType, PacketStatus, get_doppler_factor, trace_packet, - move_packet_across_shell_boundary, move_rpacket) + move_packet_across_shell_boundary, move_r_packet) from tardis.montecarlo.montecarlo_numba.interaction import ( general_scatter, line_scatter) from tardis.montecarlo.montecarlo_numba.numba_interface import \ @@ -59,14 +59,14 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, r_packet, numba_model, numba_plasma) if interaction_type == InteractionType.BOUNDARY: - move_rpacket(r_packet, distance, numba_model.time_explosion, - estimators) + move_r_packet(r_packet, distance, numba_model.time_explosion, + estimators) move_packet_across_shell_boundary(r_packet, delta_shell, len(numba_model.r_inner)) elif interaction_type == InteractionType.LINE: - move_rpacket(r_packet, distance, numba_model.time_explosion, - estimators) + move_r_packet(r_packet, distance, numba_model.time_explosion, + estimators) line_scatter(r_packet, numba_model.time_explosion, line_interaction_type, numba_plasma) @@ -74,8 +74,8 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, r_packet, vpacket_collection, numba_model, numba_plasma) elif interaction_type == InteractionType.ESCATTERING: - move_rpacket(r_packet, distance, numba_model.time_explosion, - estimators) + move_r_packet(r_packet, distance, numba_model.time_explosion, + estimators) general_scatter(r_packet, numba_model.time_explosion) trace_vpacket_volley(r_packet, vpacket_collection, numba_model, diff --git a/tardis/simulation/base.py b/tardis/simulation/base.py index 95cddd93527..8d9d0d30159 100644 --- a/tardis/simulation/base.py +++ b/tardis/simulation/base.py @@ -257,7 +257,7 @@ def advance_state(self): # case it needs some extra kwargs. if 'j_blue_estimator' in self.plasma.outputs_dict: update_properties.update(t_inner=next_t_inner, - j_blue_estimator=self.runner.j_blue_estimator) + j_blue_estimator=self.runner.j_b_lu_estimator) self.plasma.update(**update_properties) diff --git a/tardis/tests/test_tardis_full.py b/tardis/tests/test_tardis_full.py index 682e4645728..4e98249b685 100644 --- a/tardis/tests/test_tardis_full.py +++ b/tardis/tests/test_tardis_full.py @@ -52,7 +52,7 @@ def test_j_blue_estimators(self, runner, refdata): j_blue_estimator = refdata('j_blue_estimator').values npt.assert_allclose( - runner.j_blue_estimator, + runner.j_b_lu_estimator, j_blue_estimator) def test_spectrum(self, runner, refdata): diff --git a/tardis/tests/test_tardis_full_formal_integral.py b/tardis/tests/test_tardis_full_formal_integral.py index d3de68501c4..3be437b8113 100644 --- a/tardis/tests/test_tardis_full_formal_integral.py +++ b/tardis/tests/test_tardis_full_formal_integral.py @@ -79,7 +79,7 @@ def test_j_blue_estimators(self, runner, refdata): j_blue_estimator = refdata('j_blue_estimator').values npt.assert_allclose( - runner.j_blue_estimator, + runner.j_b_lu_estimator, j_blue_estimator) def test_spectrum(self, runner, refdata): From b02f53ca486bd2b0e714e604201268c84894f3fc Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Sun, 1 Dec 2019 20:33:15 -0500 Subject: [PATCH 198/467] finish estimators --- .../montecarlo_numba/numba_interface.py | 3 +- .../montecarlo/montecarlo_numba/r_packet.py | 28 +++++++++++++++---- .../montecarlo_numba/single_packet_loop.py | 2 +- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/numba_interface.py b/tardis/montecarlo/montecarlo_numba/numba_interface.py index 06cb6a275b1..56157b27196 100644 --- a/tardis/montecarlo/montecarlo_numba/numba_interface.py +++ b/tardis/montecarlo/montecarlo_numba/numba_interface.py @@ -136,7 +136,8 @@ def __init__(self, spectrum_frequency, number_of_vpackets, estimators_spec = [ ('j_estimator', float64[:]), ('nu_bar_estimator', float64[:]), - ('edot_lu_estimator', float64[:]), + ('j_b_lu_estimator', float64[:, :]), + ('edot_lu_estimator', float64[:, :]) ] @jitclass(estimators_spec) diff --git a/tardis/montecarlo/montecarlo_numba/r_packet.py b/tardis/montecarlo/montecarlo_numba/r_packet.py index 9cc27d564fc..adc60af0bd8 100644 --- a/tardis/montecarlo/montecarlo_numba/r_packet.py +++ b/tardis/montecarlo/montecarlo_numba/r_packet.py @@ -91,9 +91,6 @@ def get_doppler_factor(r, mu, time_explosion): def get_random_mu(): return 2.0 * np.random.random() - 1.0 - - - @jitclass(rpacket_spec) class RPacket(object): def __init__(self, r, mu, nu, energy, index=0): @@ -114,16 +111,33 @@ def initialize_line_id(self, numba_plasma, numba_model): np.searchsorted(inverse_line_list_nu, comov_nu)) self.next_line_id = next_line_id +@njit(**njit_dict) +def update_line_estimators(estimators, r_packet, cur_line_id, distance_trace, + time_explosion): + """ Actual calculation - simplified below + r_interaction = np.sqrt(r_packet.r**2 + distance_trace**2 + + 2 * r_packet.r * distance_trace * r_packet.mu) + mu_interaction = (r_packet.mu * r_packet.r + distance_trace) / r_interaction + doppler_factor = 1.0 - mu_interaction * r_interaction / time_explosion + """ + doppler_factor = 1.0 - ((distance_trace + r_packet.mu * r_packet.r) / + (time_explosion * C_SPEED_OF_LIGHT)) + energy = r_packet.energy * doppler_factor + estimators.j_b_lu_estimator[cur_line_id, r_packet.current_shell_id] += ( + energy / r_packet.nu) + estimators.edot_lu_estimator[cur_line_id, r_packet.current_shell_id] += ( + energy) @njit(**njit_dict) -def trace_packet(r_packet, numba_model, numba_plasma): +def trace_packet(r_packet, numba_model, numba_plasma, estimators): """ Parameters ---------- numba_model: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaModel numba_plasma: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaPlasma + estimators: tardis.motnecarlo.montecarlo_numba.numba_interface.Estimators Returns ------- @@ -158,6 +172,7 @@ def trace_packet(r_packet, numba_model, numba_plasma): cur_line_id = start_line_id for cur_line_id in range(start_line_id, len(numba_plasma.line_list_nu)): + # Going through the lines nu_line = numba_plasma.line_list_nu[cur_line_id] @@ -180,6 +195,10 @@ def trace_packet(r_packet, numba_model, numba_plasma): # calculating the trace tau_trace_combined = tau_trace_line_combined + tau_trace_electron + # Updating the J_b_lu and E_dot_lu + update_line_estimators( + estimators, r_packet, cur_line_id, distance_trace, + numba_model.time_explosion) if ((distance_boundary <= distance_trace) and (distance_boundary <= distance_electron)): @@ -240,7 +259,6 @@ def move_r_packet(r_packet, distance, time_explosion, numba_estimator): comov_energy * distance) numba_estimator.nu_bar_estimator[r_packet.current_shell_id] += ( comov_energy * distance * comov_nu) - #numba_estimator.edot_lu_estimator[] += r = r_packet.r if (distance > 0.0): diff --git a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py index 3be235b752b..4955f306c39 100644 --- a/tardis/montecarlo/montecarlo_numba/single_packet_loop.py +++ b/tardis/montecarlo/montecarlo_numba/single_packet_loop.py @@ -56,7 +56,7 @@ def single_packet_loop(r_packet, numba_model, numba_plasma, estimators, while r_packet.status == PacketStatus.IN_PROCESS: distance, interaction_type, delta_shell = trace_packet( - r_packet, numba_model, numba_plasma) + r_packet, numba_model, numba_plasma, estimators=estimators) if interaction_type == InteractionType.BOUNDARY: move_r_packet(r_packet, distance, numba_model.time_explosion, From 4d9dec8b22ec9a4ebbcccc58e26f0fdffcbf290d Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Mon, 2 Dec 2019 16:45:40 -0500 Subject: [PATCH 199/467] fix formal integral --- tardis/montecarlo/formal_integral.py | 4 ++-- tardis/montecarlo/montecarlo.pyx | 16 ++++++++++++---- tardis/montecarlo/montecarlo_numba/r_packet.py | 3 ++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/tardis/montecarlo/formal_integral.py b/tardis/montecarlo/formal_integral.py index 26049da2149..2d973c44603 100644 --- a/tardis/montecarlo/formal_integral.py +++ b/tardis/montecarlo/formal_integral.py @@ -122,7 +122,7 @@ def make_source_function(self): Edotlu_norm_factor = (1 / (runner.time_of_simulation * model.volume)) exptau = 1 - np.exp(- plasma.tau_sobolevs) - Edotlu = Edotlu_norm_factor * exptau * runner.Edotlu_estimator + Edotlu = Edotlu_norm_factor * exptau * runner.edot_lu_estimator # The following may be achieved by calling the appropriate plasma # functions @@ -131,7 +131,7 @@ def make_source_function(self): model.volume)).to("1/(cm^2 s)").value # Jbluelu should already by in the correct order, i.e. by wavelength of # the transition l->u - Jbluelu = runner.j_blue_estimator * Jbluelu_norm_factor + Jbluelu = runner.j_b_lu_estimator * Jbluelu_norm_factor upper_level_index = atomic_data.lines.index.droplevel('level_number_lower') e_dot_lu = pd.DataFrame(Edotlu, index=upper_level_index) diff --git a/tardis/montecarlo/montecarlo.pyx b/tardis/montecarlo/montecarlo.pyx index e3ac6e42f58..d2d2def18bb 100644 --- a/tardis/montecarlo/montecarlo.pyx +++ b/tardis/montecarlo/montecarlo.pyx @@ -140,10 +140,18 @@ cdef extern from "src/integrator.h": cdef initialize_storage_model(model, plasma, runner, storage_model_t *storage): """ - Initializing the storage struct. + + Parameters + ---------- + model + plasma + runner: tardis.montecarlo.base.MontecarloRunner + storage - """ + Returns + ------- + """ storage.no_of_packets = runner.input_nu.size storage.packet_nus = PyArray_DATA(runner.input_nu) storage.packet_mus = PyArray_DATA(runner.input_mu) @@ -195,10 +203,10 @@ cdef initialize_storage_model(model, plasma, runner, storage_model_t *storage): runner.line_lists_tau_sobolevs ) storage.line_lists_j_blues = PyArray_DATA( - runner.j_blue_estimator) + runner.j_b_lu_estimator) storage.line_lists_Edotlu = PyArray_DATA( - runner.Edotlu_estimator) + runner.edot_lu_estimator) storage.line_interaction_id = runner.get_line_interaction_id( runner.line_interaction_type) diff --git a/tardis/montecarlo/montecarlo_numba/r_packet.py b/tardis/montecarlo/montecarlo_numba/r_packet.py index adc60af0bd8..742a5e0995f 100644 --- a/tardis/montecarlo/montecarlo_numba/r_packet.py +++ b/tardis/montecarlo/montecarlo_numba/r_packet.py @@ -118,7 +118,8 @@ def update_line_estimators(estimators, r_packet, cur_line_id, distance_trace, r_interaction = np.sqrt(r_packet.r**2 + distance_trace**2 + 2 * r_packet.r * distance_trace * r_packet.mu) mu_interaction = (r_packet.mu * r_packet.r + distance_trace) / r_interaction - doppler_factor = 1.0 - mu_interaction * r_interaction / time_explosion + doppler_factor = 1.0 - mu_interaction * r_interaction / + ( time_explosion * C) """ doppler_factor = 1.0 - ((distance_trace + r_packet.mu * r_packet.r) / (time_explosion * C_SPEED_OF_LIGHT)) From 0e8b0874fc380ba405e680d03590cf6aa5d9eb07 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 4 Dec 2019 11:14:46 -0500 Subject: [PATCH 200/467] fix estimators Co-authored-by: Christian Vogl Co-authored-by: Marc Williamson --- tardis/montecarlo/base.py | 12 +----------- tardis/montecarlo/montecarlo_numba/r_packet.py | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/tardis/montecarlo/base.py b/tardis/montecarlo/base.py index d6a0b04e94f..5665778ae05 100644 --- a/tardis/montecarlo/base.py +++ b/tardis/montecarlo/base.py @@ -236,17 +236,7 @@ def run(self, model, plasma, no_of_packets, # virtual_packet_flag=no_of_virtual_packets, # nthreads=nthreads, # last_run=last_run) - # Workaround so that j_blue_estimator is in the right ordering - # They are written as an array of dimension (no_of_shells, no_of_lines) - # but python expects (no_of_lines, no_of_shells) - self.j_b_lu_estimator = np.ascontiguousarray( - self.j_b_lu_estimator.flatten().reshape( - self.j_b_lu_estimator.shape, order='F') - ) - self.edot_lu_estimator = np.ascontiguousarray( - self.edot_lu_estimator.flatten().reshape( - self.edot_lu_estimator.shape, order='F') - ) + def legacy_return(self): return (self.output_nu, self.output_energy, diff --git a/tardis/montecarlo/montecarlo_numba/r_packet.py b/tardis/montecarlo/montecarlo_numba/r_packet.py index 742a5e0995f..6e6f25f433e 100644 --- a/tardis/montecarlo/montecarlo_numba/r_packet.py +++ b/tardis/montecarlo/montecarlo_numba/r_packet.py @@ -170,7 +170,8 @@ def trace_packet(r_packet, numba_model, numba_plasma, estimators): numba_model.time_explosion) comov_nu = r_packet.nu * doppler_factor - cur_line_id = start_line_id + cur_line_id = start_line_id # initializing varibale for Numba + # - do not remove for cur_line_id in range(start_line_id, len(numba_plasma.line_list_nu)): @@ -196,11 +197,6 @@ def trace_packet(r_packet, numba_model, numba_plasma, estimators): # calculating the trace tau_trace_combined = tau_trace_line_combined + tau_trace_electron - # Updating the J_b_lu and E_dot_lu - update_line_estimators( - estimators, r_packet, cur_line_id, distance_trace, - numba_model.time_explosion) - if ((distance_boundary <= distance_trace) and (distance_boundary <= distance_electron)): interaction_type = InteractionType.BOUNDARY # BOUNDARY @@ -215,6 +211,14 @@ def trace_packet(r_packet, numba_model, numba_plasma, estimators): r_packet.next_line_id = cur_line_id break + # Updating the J_b_lu and E_dot_lu + # This means we are still looking for line interaction and have not + # been kicked out of the path by boundary or electron interaction + + update_line_estimators( + estimators, r_packet, cur_line_id, distance_trace, + numba_model.time_explosion) + if tau_trace_combined > tau_event: interaction_type = InteractionType.LINE # Line r_packet.next_line_id = cur_line_id @@ -227,6 +231,8 @@ def trace_packet(r_packet, numba_model, numba_plasma, estimators): cur_electron_density, tau_event - tau_trace_line_combined) else: # Executed when no break occurs in the for loop + # We are beyond the line list now and the only next thing is to see + # if we are interacting with the boundary or electron scattering if cur_line_id == (len(numba_plasma.line_list_nu) - 1): # Treatment for last line cur_line_id += 1 From 7375efe5711b856b261b21ed6388ef9b3606c35d Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 15 Jan 2020 10:25:43 -0800 Subject: [PATCH 201/467] work on full relativity --- .../montecarlo_numba/numba_interface.py | 8 +- .../montecarlo/montecarlo_numba/r_packet.py | 108 +++++++++++++++--- 2 files changed, 95 insertions(+), 21 deletions(-) diff --git a/tardis/montecarlo/montecarlo_numba/numba_interface.py b/tardis/montecarlo/montecarlo_numba/numba_interface.py index 56157b27196..82c7631c58e 100644 --- a/tardis/montecarlo/montecarlo_numba/numba_interface.py +++ b/tardis/montecarlo/montecarlo_numba/numba_interface.py @@ -1,6 +1,6 @@ from enum import IntEnum -from numba import float64, int64, jitclass +from numba import float64, int64, jitclass, boolean import numpy as np from tardis import constants as const @@ -152,17 +152,19 @@ def __init__(self, j_estimator, nu_bar_estimator, j_b_lu_estimator, monte_carlo_configuration_spec = [ ('line_interaction_type', int64), ('number_of_vpackets', int64), - ('temporary_v_packet_bins', int64) + ('temporary_v_packet_bins', int64), + ('full_relativity', boolean) ] @jitclass(monte_carlo_configuration_spec) class MonteCarloConfiguration(object): def __init__(self, number_of_vpackets, line_interaction_type, - temporary_v_packet_bins): + temporary_v_packet_bins, full_relativity=False): self.line_interaction_type = line_interaction_type self.number_of_vpackets = number_of_vpackets self.temporary_v_packet_bins = temporary_v_packet_bins + self.full_relativity = full_relativity def configuration_initialize(runner, number_of_vpackets, diff --git a/tardis/montecarlo/montecarlo_numba/r_packet.py b/tardis/montecarlo/montecarlo_numba/r_packet.py index 6e6f25f433e..d9fa949096a 100644 --- a/tardis/montecarlo/montecarlo_numba/r_packet.py +++ b/tardis/montecarlo/montecarlo_numba/r_packet.py @@ -3,6 +3,7 @@ from numba import int64, float64 from numba import jitclass, njit + from tardis.montecarlo.montecarlo_numba import njit_dict from tardis import constants as const @@ -62,18 +63,48 @@ def calculate_distance_boundary(r, mu, r_inner, r_outer): return distance, delta_shell @njit(**njit_dict) -def calculate_distance_line(nu, comov_nu, nu_line, time_explosion): +def calculate_distance_line(r_packet, comov_nu, nu_line, time_explosion, + montecarlo_configuration): + """ + + Parameters + ---------- + r_packet + comov_nu + nu_line + time_explosion + montecarlo_configuration + + Returns + ------- + + """ + + nu = r_packet.nu + if nu_line == 0.0: return MISS_DISTANCE + nu_diff = comov_nu - nu_line if np.abs(nu_diff / comov_nu) < CLOSE_LINE_THRESHOLD: - nu_diff = 0.0 - if nu_diff >= 0: - return (nu_diff / nu) * C_SPEED_OF_LIGHT * time_explosion - else: + nu_diff = 0.0 + if nu_diff <= 0: print('nu difference is less than 0.0', nu_diff, comov_nu, nu, nu_line, time_explosion) raise MonteCarloException('nu difference is less than 0.0') + if montecarlo_configuration.full_relativity: + nu_r = nu_line / nu + ct = C_SPEED_OF_LIGHT * time_explosion + distance = -r_packet.mu * r_packet.r + ( + ct - nu_r**2 * np.sqrt( + ct**2 - (1 + r_packet**2 * (1 - r_packet.mu**2) * + (1 + 1 / nu_r**2)))) / (1 + nu_r**3) + else: + distance = (nu_diff / nu) * C_SPEED_OF_LIGHT * time_explosion + + return distance + + @njit(**njit_dict) def calculate_distance_electron(electron_density, tau_event): return tau_event / (electron_density * SIGMA_THOMSON) @@ -113,7 +144,20 @@ def initialize_line_id(self, numba_plasma, numba_model): @njit(**njit_dict) def update_line_estimators(estimators, r_packet, cur_line_id, distance_trace, - time_explosion): + time_explosion, montecarlo_configuration): + """ + Function to update the line estimators + + Parameters + ---------- + estimators + r_packet + cur_line_id + distance_trace + time_explosion + + """ + """ Actual calculation - simplified below r_interaction = np.sqrt(r_packet.r**2 + distance_trace**2 + 2 * r_packet.r * distance_trace * r_packet.mu) @@ -121,9 +165,14 @@ def update_line_estimators(estimators, r_packet, cur_line_id, distance_trace, doppler_factor = 1.0 - mu_interaction * r_interaction / ( time_explosion * C) """ - doppler_factor = 1.0 - ((distance_trace + r_packet.mu * r_packet.r) / - (time_explosion * C_SPEED_OF_LIGHT)) - energy = r_packet.energy * doppler_factor + + if not montecarlo_configuration.full_relativity: + doppler_factor = 1.0 - ((distance_trace + r_packet.mu * r_packet.r) / + (time_explosion * C_SPEED_OF_LIGHT)) + energy = r_packet.energy * doppler_factor + else: + # accurate to 1 / gamma - according to C. Vogl + energy = r_packet.energy estimators.j_b_lu_estimator[cur_line_id, r_packet.current_shell_id] += ( energy / r_packet.nu) @@ -131,14 +180,16 @@ def update_line_estimators(estimators, r_packet, cur_line_id, distance_trace, energy) @njit(**njit_dict) -def trace_packet(r_packet, numba_model, numba_plasma, estimators): +def trace_packet(r_packet, numba_model, numba_plasma, estimators, + montecarlo_configuration): """ Parameters ---------- numba_model: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaModel numba_plasma: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaPlasma - estimators: tardis.motnecarlo.montecarlo_numba.numba_interface.Estimators + estimators: tardis.montecarlo.montecarlo_numba.numba_interface.Estimators + montecarlo_configuration: tardis.montecarlo.montecarlo_numba.numba_interface.MonteCarloConfiguration Returns ------- @@ -188,7 +239,8 @@ def trace_packet(r_packet, numba_model, numba_plasma, estimators): # Calculating the distance until the current photons co-moving nu # redshifts to the line frequency distance_trace = calculate_distance_line( - r_packet.nu, comov_nu, nu_line, numba_model.time_explosion) + r_packet, comov_nu, nu_line, numba_model.time_explosion, + montecarlo_configuration) # calculating the tau electron of how far the trace has progressed tau_trace_electron = calculate_tau_electron(cur_electron_density, @@ -217,7 +269,7 @@ def trace_packet(r_packet, numba_model, numba_plasma, estimators): update_line_estimators( estimators, r_packet, cur_line_id, distance_trace, - numba_model.time_explosion) + numba_model.time_explosion, montecarlo_configuration) if tau_trace_combined > tau_event: interaction_type = InteractionType.LINE # Line @@ -249,11 +301,19 @@ def trace_packet(r_packet, numba_model, numba_plasma, estimators): @njit(**njit_dict) -def move_r_packet(r_packet, distance, time_explosion, numba_estimator): +def move_r_packet(r_packet, distance, time_explosion, numba_estimator, + montecarlo_configuration): """Move packet a distance and recalculate the new angle mu Parameters ---------- + + r_packet: tardis.montecarlo.montecarlo_numba.r_packet.RPacket + r_packet objects + time_explosion: float + time since explosion in s + numba_estimator: tardis.montecarlo.montecarlo_numba.numba_interface.NumbaEstimator + Estimators object distance : float distance in cm """ @@ -262,10 +322,18 @@ def move_r_packet(r_packet, distance, time_explosion, numba_estimator): doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, time_explosion) comov_nu = r_packet.nu * doppler_factor comov_energy = r_packet.energy * doppler_factor - numba_estimator.j_estimator[r_packet.current_shell_id] += ( - comov_energy * distance) - numba_estimator.nu_bar_estimator[r_packet.current_shell_id] += ( - comov_energy * distance * comov_nu) + + if montecarlo_configuration.full_relativity: + numba_estimator.j_estimator[r_packet.current_shell_id] += ( + comov_energy * distance * doppler_factor) + numba_estimator.nu_bar_estimator[r_packet.current_shell_id] += ( + comov_energy * distance * comov_nu * doppler_factor) + + else: + numba_estimator.j_estimator[r_packet.current_shell_id] += ( + comov_energy * distance) + numba_estimator.nu_bar_estimator[r_packet.current_shell_id] += ( + comov_energy * distance * comov_nu) r = r_packet.r if (distance > 0.0): @@ -320,3 +388,7 @@ def line_emission(r_packet, emission_line_id, numba_plasma, time_explosion): doppler_factor = get_doppler_factor(r_packet.r, r_packet.mu, time_explosion) r_packet.nu = numba_plasma.line_list_nu[emission_line_id] / doppler_factor r_packet.next_line_id = emission_line_id + 1 + +def angle_aberration_CMF_to_LF(r_packet, time_explosion): + beta = r_packet.r / (time_explosion * C_SPEED_OF_LIGHT) + return (r_packet.mu + beta) / (1.0 + beta * r_packet.mu) From c931af04c96c754d6aaedbf7a4b077bd215bad33 Mon Sep 17 00:00:00 2001 From: jordi5 Date: Thu, 19 Mar 2020 16:15:52 -0300 Subject: [PATCH 202/467] add skip for QT_API not set --- tardis/gui/tests/test_gui.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/tardis/gui/tests/test_gui.py b/tardis/gui/tests/test_gui.py index 7aca7b0e8b2..ceb30b79064 100644 --- a/tardis/gui/tests/test_gui.py +++ b/tardis/gui/tests/test_gui.py @@ -3,9 +3,7 @@ from tardis.io.config_reader import Configuration from tardis.simulation import Simulation import astropy.units as u -from tardis.gui import interface -from tardis.gui.widgets import Tardis -from tardis.gui.datahandler import SimpleTableModel +import tardis.gui as gui from PyQt5 import QtWidgets @@ -39,11 +37,12 @@ def simulation_one_loop( simulation.run() return simulation - + +@pytest.mark.skipif('QT_API' not in os.environ, reason="enviroment variable QT_API is not set") def test_gui(simulation_one_loop): simulation = simulation_one_loop app = QtWidgets.QApplication([]) - tablemodel = SimpleTableModel - win = Tardis(tablemodel) + tablemodel =gui.datahandler.SimpleTableModel + win = gui.widgets.Tardis(tablemodel) win.show_model(simulation) app.quit() From 5e144212bf680c219c72ac9366d8dc95f372453a Mon Sep 17 00:00:00 2001 From: jordi5 Date: Thu, 19 Mar 2020 16:19:57 -0300 Subject: [PATCH 203/467] modify qt5 call in ipython for consistency --- tardis/gui/interface.py | 1 + tardis/gui/widgets.py | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/tardis/gui/interface.py b/tardis/gui/interface.py index a79d0cb555c..b4912ae1b2f 100644 --- a/tardis/gui/interface.py +++ b/tardis/gui/interface.py @@ -63,3 +63,4 @@ def show(model): atomfile = sys.argv[2] mdl = run_tardis(yamlfile, atomfile) show(mdl) + diff --git a/tardis/gui/widgets.py b/tardis/gui/widgets.py index bde5acb7110..a49386e08c3 100644 --- a/tardis/gui/widgets.py +++ b/tardis/gui/widgets.py @@ -14,8 +14,8 @@ import matplotlib from matplotlib.figure import * import matplotlib.gridspec as gridspec -from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas -from matplotlib.backends.backend_qt4 import NavigationToolbar2QT as NavigationToolbar +from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas +from matplotlib.backends.backend_qt5 import NavigationToolbar2QT as NavigationToolbar from matplotlib import colors from matplotlib.patches import Circle import matplotlib.pylab as plt @@ -1066,13 +1066,13 @@ def __init__(self, tablemodel, config=None, atom_data=None, parent=None): """ #assumes that qt has already been initialized by starting IPython - #with the flag "--pylab=qt" + #with the flag "--pylab=qt"gut # app = QtCore.QCoreApplication.instance() # if app is None: # app = QtGui.QApplication([]) # try: - # from IPython.lib.guisupport import start_event_loop_qt4 - # start_event_loop_qt4(app) + # from IPython.lib.guisupport import start_event_loop_qt5 + # start_event_loop_qt5(app) # except ImportError: # app.exec_() From bd902cbac5bddf1936b31b6ef690734a1b629435 Mon Sep 17 00:00:00 2001 From: jordi5 Date: Thu, 19 Mar 2020 16:24:20 -0300 Subject: [PATCH 204/467] modify qt5 call in ipython for consistency --- tardis/gui/interface.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tardis/gui/interface.py b/tardis/gui/interface.py index b4912ae1b2f..ee3de06bc8f 100644 --- a/tardis/gui/interface.py +++ b/tardis/gui/interface.py @@ -9,8 +9,8 @@ ' export QT_API=pyqt \n\n For more information refer to user guide.') import sys try: - from IPython.lib.guisupport import get_app_qt4, start_event_loop_qt4 - from IPython.lib.guisupport import is_event_loop_running_qt4 + from IPython.lib.guisupport import get_app_qt5, start_event_loop_qt5 + from IPython.lib.guisupport import is_event_loop_running_qt5 importFailed = False except ImportError: importFailed = True @@ -36,7 +36,7 @@ def show(model): if importFailed: app = QtWidgets.QApplication([]) else: - app = get_app_qt4() + app = get_app_qt5() tablemodel = SimpleTableModel win = Tardis(tablemodel) @@ -45,13 +45,13 @@ def show(model): if importFailed: app.exec_() else: - start_event_loop_qt4(app) + start_event_loop_qt5(app) #If the IPython console is being used, this will evaluate to true. #In that case the window created will be garbage collected unless a #reference to it is maintained after this function exits. So the win is #returned. - if is_event_loop_running_qt4(app): + if is_event_loop_running_qt5(app): return win if __name__=='__main__': From d884485711aa407d096fd5bc799fee9206db8119 Mon Sep 17 00:00:00 2001 From: Marc Williamson Date: Tue, 14 Apr 2020 17:13:39 -0400 Subject: [PATCH 205/467] Create CODE_OF_CONDUCT.md --- CODE_OF_CONDUCT.md | 60 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000000..5c29f5c1efd --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,60 @@ +# TARDIS Community Code of Conduct + +The community of participants in open source Astronomy +projects is made up of members from around the globe +with a diverse set of skills, personalities, and +experiences. It is through these differences that our +community experiences success and continued growth. +We expect everyone in our community to follow these +guidelines when interacting with others both inside +and outside of our community. Our goal is to keep ours +a positive, inclusive, successful, and growing community. + +As members of the community, + +* We pledge to treat all people with respect and provide +a harassment- and bullying-free environment, regardless +of sex, sexual orientation and/or gender identity, +disability, physical appearance, body size, race, +nationality, ethnicity, and religion. In particular, +sexual language and imagery, sexist, racist, or +otherwise exclusionary jokes are not appropriate. +* We pledge to respect the work of others by recognizing +acknowledgment/citation requests of original authors. As +authors, we pledge to be explicit about how we want our +own work to be cited or acknowledged. +* We pledge to welcome those interested in joining the +community, and realize that including people with a variety +of opinions and backgrounds will only serve to enrich our +community. In particular, discussions relating to pros/cons +of various technologies, programming languages, and so on are +welcome, but these should be done with respect, taking proactive +measure to ensure that all participants are heard and feel +confident that they can freely express their opinions. +* We pledge to welcome questions and answer them respectfully, +paying particular attention to those new to the community. We +pledge to provide respectful criticisms and feedback in forums, +especially in discussion threads resulting from code contributions. +* We pledge to be conscientious of the perceptions of the wider +community and to respond to criticism respectfully. We will strive +to model behaviors that encourage productive debate and disagreement, +both within our community and where we are criticized. We will treat +those outside our community with the same respect as people within +our community. +* We pledge to help the entire community follow the code of conduct, +and to not remain silent when we see violations of the code of conduct. +We will take action when members of our community violate this code +such as contacting lead developers of the TARDIS team. + + +This code of conduct applies to all community situations online and +offline, including mailing lists, forums, social media, conferences, +meetings, associated social events, and one-to-one interactions. + +Any related activity or project organized by members of the TARDIS +community, including affiliated packages, are welcome to have their +own codes of conduct, but agree to also abide by the present code of +conduct. + +This code of conduct has been adapted from the Astropy Code of Conduct, +which in turn uses parts of the PSF code of conduct. From 2e79b7387dde9f5241bf7b16f3239a75fa9c23af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Wed, 15 Apr 2020 14:38:04 -0300 Subject: [PATCH 206/467] Update mailmap --- .mailmap | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.mailmap b/.mailmap index 439eace1302..ac409fabb51 100644 --- a/.mailmap +++ b/.mailmap @@ -116,3 +116,7 @@ Andreas Flörs Andreas Flörs <33418619+afloers@us Alice Harpole Alice Harpole Alice Harpole +Sampark Sharma +Jordi Eguren <45364266+jordi5@users.noreply.github.com> +Atul Kumar + From 3defe64ccfb1831d0a4925cdb8202ac5003feaa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Wed, 15 Apr 2020 15:42:05 -0300 Subject: [PATCH 207/467] Running tests on MacOS-10.14 --- azure-pipelines/simple_test_framework.yml | 2 +- docs/development/continuous_integration.rst | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/azure-pipelines/simple_test_framework.yml b/azure-pipelines/simple_test_framework.yml index 815502f8111..8c827472a1e 100644 --- a/azure-pipelines/simple_test_framework.yml +++ b/azure-pipelines/simple_test_framework.yml @@ -28,7 +28,7 @@ jobs: vm_Image: 'Ubuntu-16.04' conda: '/usr/share/miniconda' mac: - vm_Image: 'macOS-10.13' + vm_Image: 'macOS-10.14' miniconda.url: 'http://repo.continuum.io/miniconda/Miniconda2-latest-mac-x86_64.sh' maxParallel: 4 diff --git a/docs/development/continuous_integration.rst b/docs/development/continuous_integration.rst index 6fdfa53dfad..cf99d13d9a1 100644 --- a/docs/development/continuous_integration.rst +++ b/docs/development/continuous_integration.rst @@ -203,7 +203,7 @@ After defining the variable, one could optionally encrypt it using this lock sym Variables are referenced as $(variable_name), as seen in the InstallSSHKey@0 task in the hostName and sshPublicKey inputs. Azure provides a list of agent hosts that can run the pipeline on a virtual machine. In our pipelines, we -use the vm_Images: Ubuntu 16.04 and macOs-10.13. +use the vm_Images: Ubuntu 16.04 and macOs-10.14. In a job, you can list a single vm as:: @@ -224,7 +224,7 @@ addition to specifying variables as key value pairs such as conda and miniconda. vmImage: "Ubuntu 16.04" conda: '/usr/share/miniconda' mac: - vm_Image: 'macOS-10.13' + vm_Image: 'macOS-10.14' miniconda.url: 'http://repo.continuum.io/miniconda/Miniconda2-latest-mac-x86_64.sh' maxParallel: 2 pool: From 46721251056a04426df67ee26c8ec7a6d0bdb5c2 Mon Sep 17 00:00:00 2001 From: Azure Pipelines Date: Thu, 23 Apr 2020 17:25:44 +0000 Subject: [PATCH 208/467] Update zenodo.json --- .zenodo.json | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/.zenodo.json b/.zenodo.json index 01ea13690e3..b98e2a2d3c7 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -90,10 +90,10 @@ "name": "Barna, Barnab\u00e1s" }, { - "name": "Barbosa, Talytha" + "name": "Gautam, Gaurav" }, { - "name": "Gautam, Gaurav" + "name": "Barbosa, Talytha" }, { "name": "Patel, Maryam" @@ -125,6 +125,9 @@ { "name": "Jain, Rinkle" }, + { + "name": "Singhal, Jaladh" + }, { "name": "Singh, Sourav" }, @@ -132,40 +135,52 @@ "name": "Talegaonkar, Chinmay" }, { - "name": "Kowalski, Nathan" + "name": "Selsing, Jonatan" }, { "name": "Sofiatti, Caroline" }, { - "name": "Selsing, Jonatan" + "name": "Kowalski, Nathan" }, { - "name": "Wahi, Ujjwal" + "name": "Dasgupta, Debajyoti" }, { - "name": "Sarafina, Nance" + "name": "Kumar, Atul" }, { - "name": "Gillanders, James" + "name": "Nayak, Ashwin" }, { - "name": "Dasgupta, Debajyoti" + "name": "Magee, Mark" }, { - "name": "Gupta, Suyash" + "name": "Gillanders, James" + }, + { + "name": "Eguren, Jordi" }, { "name": "Yap, Kevin" }, { - "name": "Magee, Mark" + "name": "Sarafina, Nance" + }, + { + "name": "Patra, Nilesh" }, { "name": "Patel, Pratik" }, { - "name": "Patra, Nilesh" + "name": "Sharma, Sampark" + }, + { + "name": "Gupta, Suyash" + }, + { + "name": "Wahi, Ujjwal" } ] } \ No newline at end of file From 0cd0f95665260e9a7e10384a8ad1ae66f04a3bb9 Mon Sep 17 00:00:00 2001 From: Jaladh Singhal Date: Wed, 29 Apr 2020 00:54:34 +0530 Subject: [PATCH 209/467] Added more file types to git ignore (#1139) --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 095333a7d3c..7cd63537f62 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ __pycache__ */cython_version.py htmlcov .coverage +.ipynb_checkpoints/ # IDE Specific files @@ -40,11 +41,13 @@ local.properties # Sphinx _build +docs/api # Packages/installer info *.egg *.egg-info +.eggs/ dist build eggs From 46989f462bbb99e3fad91db97e744ffc3a17a5e0 Mon Sep 17 00:00:00 2001 From: Arjun Savel <35353555+arjunsavel@users.noreply.github.com> Date: Tue, 28 Apr 2020 12:25:08 -0700 Subject: [PATCH 210/467] Increasing glob-like omission of coverage files (#1137) * changed all init files omitted in coveragearc to globlike *__init__* * changed all version files omitted in coveragearc to globlike *version* --- tardis/tests/coveragerc | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/tardis/tests/coveragerc b/tardis/tests/coveragerc index 2d801b1c2b9..6ac2432674a 100644 --- a/tardis/tests/coveragerc +++ b/tardis/tests/coveragerc @@ -42,22 +42,7 @@ omit = tardis/analysis.py # Omit all version and __init__.py files - tardis/version.py - tardis/cython_version.py - tardis/__init__.py - tardis/tests/__init__.py - tardis/tests/integration_tests/__init__.py - tardis/gui/__init__.py - tardis/io/__init__.py - tardis/io/tests/__init__.py - tardis/model/__init__.py - tardis/model/tests/__init__.py - tardis/montecarlo/__init__.py - tardis/montecarlo/tests/__init__.py - tardis/plasma/__init__.py - tardis/plasma/tests/__init__.py - tardis/simulation/__init__.py - tardis/simulation/tests/__init__.py - tardis/_astropy_init.py + *version* + *__init__* From 0e085f0fc924295a329d2ef456037c704c0aeb14 Mon Sep 17 00:00:00 2001 From: Sashank Mishra Date: Thu, 7 May 2020 20:33:01 +0530 Subject: [PATCH 211/467] fix warnings in quickstart (#1141) --- .gitignore | 3 +++ tardis/io/atom_data/base.py | 3 +++ tardis/io/util.py | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7cd63537f62..3d3c08200ad 100644 --- a/.gitignore +++ b/.gitignore @@ -67,3 +67,6 @@ distribute-*.tar.gz # Mac OSX .DS_Store + +# Jupyter checkpoints +.ipynb_checkpoints \ No newline at end of file diff --git a/tardis/io/atom_data/base.py b/tardis/io/atom_data/base.py index 8202ec8fcb4..86cf25d09f4 100644 --- a/tardis/io/atom_data/base.py +++ b/tardis/io/atom_data/base.py @@ -216,6 +216,9 @@ def __init__(self, atom_data, ionization_data, levels=None, lines=None, # Convert energy to CGS levels.loc[:, "energy"] = Quantity(levels["energy"].values, 'eV').cgs + # Sort the dataframe before indexing to improve performance + lines.sort_index(inplace=True) + # Create a new columns with wavelengths in the CGS units lines.loc[:, 'wavelength_cm'] = Quantity( lines['wavelength'], 'angstrom').cgs diff --git a/tardis/io/util.py b/tardis/io/util.py index 97e28613981..8644122db99 100644 --- a/tardis/io/util.py +++ b/tardis/io/util.py @@ -11,7 +11,7 @@ import requests import yaml -from tqdm.autonotebook import tqdm +from tqdm.auto import tqdm from tardis import constants from astropy import units as u From 52674dffa334d4cf2ac3671d41cfb8c9e96d580f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Thu, 7 May 2020 12:29:46 -0300 Subject: [PATCH 212/467] Solve pending issues of the release pipeline (#1133) * Initial commit * Use PAT to clone tardis_zenodo repo * Automatic push zenodo.json when changes * Automatic push zenodo.json when changes #2 * Automatic push zenodo.json when changes #3 * Deactivate PR trigger * Change `@misc` for `@software` in citations (zenodo) --- README.rst | 2 +- azure-pipelines/release-version.yml | 45 ++++++++++++++++++++++++----- docs/credits.rst | 2 +- 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/README.rst b/README.rst index 7d8afb81bb3..c8098e74541 100644 --- a/README.rst +++ b/README.rst @@ -84,7 +84,7 @@ The following bibtex entries are needed for the references. } - @misc{kerzendorf_wolfgang_2019_2590539, + @software{kerzendorf_wolfgang_2019_2590539, author = {Kerzendorf, Wolfgang and Nöbauer, Ulrich and Sim, Stuart and diff --git a/azure-pipelines/release-version.yml b/azure-pipelines/release-version.yml index e6e6ccb5eae..93a506ffac9 100644 --- a/azure-pipelines/release-version.yml +++ b/azure-pipelines/release-version.yml @@ -16,6 +16,7 @@ schedules: variables: system.debug: "true" tardis.zenodo.home: "$(Agent.BuildDirectory)/tardis_zenodo" + tardis.zenodo.access: $(epassaro_pat) tardis.build.dir: $(Build.Repository.LocalPath) pool: @@ -25,6 +26,17 @@ jobs: - job: zenodo_json displayName: Create Zenodo JSON file steps: + + - task: DownloadSecureFile@1 + inputs: + secureFile: 'id_azure_rsa' + + - task: InstallSSHKey@0 + inputs: + knownHostsEntry: $(gh_host) + sshPublicKey: $(public_key) + sshKeySecureFile: 'id_azure_rsa' + - task: DownloadSecureFile@1 name: zenodoSecretKey displayName: "Download Zenodo secret key" @@ -54,12 +66,10 @@ jobs: conda install jupyter nbconvert numpy pandas orcid -c conda-forge --yes displayName: "Create Zenodo env" - # Actually this is a workaround. We need to grab this from `tardis_zenodo` private repo. - bash: | - cd ..; mkdir tardis_zenodo - cd $(tardis.zenodo.home) - wget https://gist.githubusercontent.com/epassaro/12364cd3b33e4b2923ff1861d80ef6d8/raw/d71ca46ca1816f6f46c768314c2da59ed017861e/gather_data.ipynb - displayName: "Downloading notebook (workaround)" + cd .. + git clone https://$(tardis.zenodo.access)@github.com/tardis-sn/tardis_zenodo.git + displayName: "Clone tardis_zenodo repo" - bash: | cp $(zenodoSecretKey.secureFilePath) $(tardis.zenodo.home) @@ -80,9 +90,30 @@ jobs: displayName: "Running notebook (not allow errors)" # This step should fail if there are changes in .zenodo.json + #- bash: | + # diff $(tardis.zenodo.home)/.zenodo.json .zenodo.json + # displayName: "Look for changes in JSON" + - bash: | - diff $(tardis.zenodo.home)/.zenodo.json .zenodo.json - displayName: "Look for changes in JSON" + set -e + + cd .. + git clone git@github.com:tardis-sn/tardis.git out + cd out + + git config --local user.name "Azure Pipelines" + git config --local user.email "azuredevops@microsoft.com" + cp $(tardis.zenodo.home)/.zenodo.json .zenodo.json + git add .zenodo.json + + if git diff --staged --quiet; then + echo "Exiting with no changes" + exit 0 + else + git commit -m "Update zenodo.json" + git push origin master + fi + displayName: "Push zenodo.json to master branch" - task: PublishPipelineArtifact@1 inputs: diff --git a/docs/credits.rst b/docs/credits.rst index a1803c36aba..afb3b1d732b 100644 --- a/docs/credits.rst +++ b/docs/credits.rst @@ -78,7 +78,7 @@ The following bibtex entries are needed for the references. } - @misc{kerzendorf_wolfgang_2019_2590539, + @software{kerzendorf_wolfgang_2019_2590539, author = {Kerzendorf, Wolfgang and Nöbauer, Ulrich and Sim, Stuart and From d6d97508a2d8b01fa6f82b45453d03f02c546bcf Mon Sep 17 00:00:00 2001 From: Azure Pipelines Date: Thu, 7 May 2020 15:45:44 +0000 Subject: [PATCH 213/467] Update zenodo.json --- .zenodo.json | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/.zenodo.json b/.zenodo.json index b98e2a2d3c7..81d39d7be72 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -123,14 +123,20 @@ "name": "Reichenbach, John" }, { - "name": "Jain, Rinkle" + "name": "Singhal, Jaladh" }, { - "name": "Singhal, Jaladh" + "name": "Jain, Rinkle" }, { "name": "Singh, Sourav" }, + { + "name": "Kowalski, Nathan" + }, + { + "name": "Sofiatti, Caroline" + }, { "name": "Talegaonkar, Chinmay" }, @@ -138,49 +144,52 @@ "name": "Selsing, Jonatan" }, { - "name": "Sofiatti, Caroline" + "name": "Savel, Arjun" }, { - "name": "Kowalski, Nathan" + "name": "Nayak, Ashwin" }, { - "name": "Dasgupta, Debajyoti" + "name": "Wahi, Ujjwal" }, { "name": "Kumar, Atul" }, { - "name": "Nayak, Ashwin" + "name": "Pipelines, Azure" }, { - "name": "Magee, Mark" + "name": "Mishra, Sashank" + }, + { + "name": "Dasgupta, Debajyoti" }, { "name": "Gillanders, James" }, { - "name": "Eguren, Jordi" + "name": "Sharma, Sampark" }, { - "name": "Yap, Kevin" + "name": "Eguren, Jordi" }, { - "name": "Sarafina, Nance" + "name": "Gupta, Suyash" }, { - "name": "Patra, Nilesh" + "name": "Yap, Kevin" }, { - "name": "Patel, Pratik" + "name": "Magee, Mark" }, { - "name": "Sharma, Sampark" + "name": "Sarafina, Nance" }, { - "name": "Gupta, Suyash" + "name": "Patra, Nilesh" }, { - "name": "Wahi, Ujjwal" + "name": "Patel, Pratik" } ] } \ No newline at end of file From 24b4bb5615b460a7b4561648f873a98f41688791 Mon Sep 17 00:00:00 2001 From: Azure Pipelines Date: Thu, 7 May 2020 17:30:30 +0000 Subject: [PATCH 214/467] Update zenodo.json --- .zenodo.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.zenodo.json b/.zenodo.json index 81d39d7be72..2785f8b09d7 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -131,6 +131,9 @@ { "name": "Singh, Sourav" }, + { + "name": "Pipelines, Azure" + }, { "name": "Kowalski, Nathan" }, @@ -155,9 +158,6 @@ { "name": "Kumar, Atul" }, - { - "name": "Pipelines, Azure" - }, { "name": "Mishra, Sashank" }, From d7200e9a1b0cd14e1caecfc8110a7e4b25bc25e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Thu, 7 May 2020 15:14:33 -0300 Subject: [PATCH 215/467] Minor changes --- azure-pipelines/compare-refdata.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/azure-pipelines/compare-refdata.yml b/azure-pipelines/compare-refdata.yml index 520a18cbef3..749d2ce719b 100644 --- a/azure-pipelines/compare-refdata.yml +++ b/azure-pipelines/compare-refdata.yml @@ -3,6 +3,9 @@ # Add steps that build, run tests, deploy, and more: # https://aka.ms/yaml +trigger: none +pr: none + variables: system.debug: "true" ref.data.home: "$(Agent.BuildDirectory)/tardis-refdata" From 7e5685ce0631a00f47d1c630c602f4e8f7baeed7 Mon Sep 17 00:00:00 2001 From: Jordi Eguren Brown Date: Sun, 10 May 2020 02:27:12 -0300 Subject: [PATCH 216/467] fix format Co-authored-by: Sashank Mishra --- tardis/gui/tests/test_gui.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tardis/gui/tests/test_gui.py b/tardis/gui/tests/test_gui.py index ceb30b79064..45c80fcd570 100644 --- a/tardis/gui/tests/test_gui.py +++ b/tardis/gui/tests/test_gui.py @@ -42,7 +42,7 @@ def simulation_one_loop( def test_gui(simulation_one_loop): simulation = simulation_one_loop app = QtWidgets.QApplication([]) - tablemodel =gui.datahandler.SimpleTableModel - win = gui.widgets.Tardis(tablemodel) + tablemodel = SimpleTableModel + win = Tardis(tablemodel) win.show_model(simulation) app.quit() From dbf38779edb3c7e424f489a82a35daa52d0181f9 Mon Sep 17 00:00:00 2001 From: Jordi Eguren Brown Date: Sun, 10 May 2020 02:28:52 -0300 Subject: [PATCH 217/467] fix import Co-authored-by: Sashank Mishra --- tardis/gui/tests/test_gui.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tardis/gui/tests/test_gui.py b/tardis/gui/tests/test_gui.py index 45c80fcd570..16aa297c792 100644 --- a/tardis/gui/tests/test_gui.py +++ b/tardis/gui/tests/test_gui.py @@ -3,7 +3,8 @@ from tardis.io.config_reader import Configuration from tardis.simulation import Simulation import astropy.units as u -import tardis.gui as gui +from tardis.gui.widgets import Tardis +from tardis.gui.datahandler import SimpleTableModel from PyQt5 import QtWidgets From df884c40cc53aacb7bd038d56423a65785d48402 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Wed, 13 May 2020 09:49:08 -0400 Subject: [PATCH 218/467] several changes --- tardis/montecarlo/montecarlo_numba/base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tardis/montecarlo/montecarlo_numba/base.py b/tardis/montecarlo/montecarlo_numba/base.py index dcf2d32a827..a08d5eb735f 100644 --- a/tardis/montecarlo/montecarlo_numba/base.py +++ b/tardis/montecarlo/montecarlo_numba/base.py @@ -50,6 +50,7 @@ def montecarlo_main_loop(packet_collection, numba_model, numba_plasma, delta_nu = spectrum_frequency[1] - spectrum_frequency[0] for i in prange(len(output_nus)): + np.random.seed(r_packet.seed) r_packet = RPacket(numba_model.r_inner[0], packet_collection.packets_input_mu[i], packet_collection.packets_input_nu[i], From 5f68dbdd1c7dd10f29aeba6e3439d13e3b4b6e24 Mon Sep 17 00:00:00 2001 From: Sashank Mishra Date: Wed, 13 May 2020 19:45:06 +0530 Subject: [PATCH 219/467] add option to execute quickstart in build (#1144) --- docs/conf.py | 2 +- docs/quickstart/quickstart.ipynb | 1168 +++++------------------------- tardis/model/density.py | 4 +- 3 files changed, 173 insertions(+), 1001 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 56506d78e17..282e50e6663 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -130,7 +130,7 @@ # name of a builtin theme or the name of a custom theme in html_theme_path. #html_theme = None html_theme = 'sphinx_rtd_theme' -html_theme_path = sphinx_rtd_theme.get_html_theme_path() +html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] # Custom sidebar templates, maps document names to template names. #html_sidebars = {} diff --git a/docs/quickstart/quickstart.ipynb b/docs/quickstart/quickstart.ipynb index 0dfb7b7abc4..d395cce88b4 100644 --- a/docs/quickstart/quickstart.ipynb +++ b/docs/quickstart/quickstart.ipynb @@ -26,8 +26,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/tqdm/autonotebook/__init__.py:14: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)\n", - " \" (e.g. in jupyter console)\", TqdmExperimentalWarning)\n" + "/Users/wkerzend/miniconda/envs/tardis/lib/python3.6/importlib/_bootstrap.py:219: QAWarning: pyne.data is not yet QA compliant.\n", + " return f(*args, **kwds)\n" ] } ], @@ -52,7 +52,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[1mtardis.io.atom_data.atom_web_download\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Downloading atomic data from https://media.githubusercontent.com/media/tardis-sn/tardis-refdata/master/atom_data/kurucz_cd23_chianti_H_He.h5 to /Users/wkerzend/projects/tardis/tardis-data/kurucz_cd23_chianti_H_He.h5 (\u001b[1matom_web_download.py\u001b[0m:37)\n" + "[\u001b[1mtardis.io.atom_data.atom_web_download\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Downloading atomic data from https://media.githubusercontent.com/media/tardis-sn/tardis-refdata/master/atom_data/kurucz_cd23_chianti_H_He.h5 to /Users/wkerzend/projects/tardis/tardis-data/kurucz_cd23_chianti_H_He.h5 (\u001b[1matom_web_download.py\u001b[0m:47)\n" ] } ], @@ -77,290 +77,241 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/importlib/_bootstrap.py:219: QAWarning: pyne.data is not yet QA compliant.\n", - " return f(*args, **kwds)\n", - " (\u001b[1mwarnings.py\u001b[0m:99)\n", - "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/importlib/_bootstrap.py:219: QAWarning: pyne.material is not yet QA compliant.\n", - " return f(*args, **kwds)\n", - " (\u001b[1mwarnings.py\u001b[0m:99)\n", - "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", - " AstropyDeprecationWarning)\n", - " (\u001b[1mwarnings.py\u001b[0m:99)\n", "[\u001b[1mtardis.plasma.standard_plasmas\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Reading Atomic Data from kurucz_cd23_chianti_H_He.h5 (\u001b[1mstandard_plasmas.py\u001b[0m:74)\n", "[\u001b[1mtardis.io.atom_data.util\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Atom Data kurucz_cd23_chianti_H_He.h5 not found in local path. Exists in TARDIS Data repo /Users/wkerzend/projects/tardis/tardis-data/kurucz_cd23_chianti_H_He.h5 (\u001b[1mutil.py\u001b[0m:29)\n", - "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/IPython/core/interactiveshell.py:3267: PerformanceWarning: indexing past lexsort depth may impact performance.\n", - " exec(code_obj, self.user_global_ns, self.user_ns)\n", - " (\u001b[1mwarnings.py\u001b[0m:99)\n", "[\u001b[1mtardis.io.atom_data.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Read Atom Data with UUID=6f7b09e887a311e7a06b246e96350010 and MD5=864f1753714343c41f99cb065710cace. (\u001b[1mbase.py\u001b[0m:184)\n", "[\u001b[1mtardis.io.atom_data.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Non provided atomic data: synpp_refs, photoionization_data (\u001b[1mbase.py\u001b[0m:187)\n", - "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", - " AstropyDeprecationWarning)\n", - " (\u001b[1mwarnings.py\u001b[0m:99)\n", - "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/python/tardis/tardis/plasma/properties/ion_population.py:63: FutureWarning: \n", - "Passing list-likes to .loc or [] with any missing label will raise\n", - "KeyError in the future, you can use .reindex() as an alternative.\n", - "\n", - "See the documentation here:\n", - "https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike\n", - " partition_function.index].dropna())\n", - " (\u001b[1mwarnings.py\u001b[0m:99)\n", - "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/equivalencies.py:90: RuntimeWarning: divide by zero encountered in double_scalars\n", - " (si.m, si.Hz, lambda x: _si.c.value / x),\n", - " (\u001b[1mwarnings.py\u001b[0m:99)\n", - "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/miniconda/envs/tardis3/lib/python3.6/site-packages/astropy/units/quantity.py:1067: AstropyDeprecationWarning: The truth value of a Quantity is ambiguous. In the future this will raise a ValueError.\n", - " AstropyDeprecationWarning)\n", - " (\u001b[1mwarnings.py\u001b[0m:99)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 1/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 7.96915e+42 erg / s Luminosity absorbed = 2.63370e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 1/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 7.93730e+42 erg / s Luminosity absorbed = 2.66400e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 9926.501965 10171.209103 0.400392 0.500372\n", - "\t5 9852.611678 10306.111379 0.211205 0.191331\n", - "\t10 9779.813302 10174.379204 0.142695 0.116864\n", - "\t15 9708.082813 9910.442275 0.104556 0.085962\n", - "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 9933.952 K -- next t_inner 11453.040 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /Users/wkerzend/python/tardis/tardis/plasma/properties/ion_population.py:63: FutureWarning: \n", - "Passing list-likes to .loc or [] with any missing label will raise\n", - "KeyError in the future, you can use .reindex() as an alternative.\n", + "\t0 9926.501965 10168.422346 0.400392 0.501001\n", + "\t5 9852.611678 10367.510165 0.211205 0.186556\n", + "\t10 9779.813302 10222.882075 0.142695 0.113985\n", + "\t15 9708.082813 9928.649533 0.104556 0.085217\n", "\n", - "See the documentation here:\n", - "https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike\n", - " partition_function.index].dropna())\n", - " (\u001b[1mwarnings.py\u001b[0m:99)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 2/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.40398e+43 erg / s Luminosity absorbed = 4.68639e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 9933.952 K -- next t_inner 11475.997 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 2/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.41371e+43 erg / s Luminosity absorbed = 4.73752e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 10171.209103 11518.516702 0.500372 0.538298\n", - "\t5 10306.111379 11554.412119 0.191331 0.217946\n", - "\t10 10174.379204 11373.574056 0.116864 0.132935\n", - "\t15 9910.442275 11040.788763 0.085962 0.099700\n", + "\t0 10168.422346 11497.903617 0.501001 0.545136\n", + "\t5 10367.510165 11621.417600 0.186556 0.212874\n", + "\t10 10222.882075 11335.692704 0.113985 0.135635\n", + "\t15 9928.649533 11018.841465 0.085217 0.101203\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11453.040 K -- next t_inner 9948.201 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 3/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.16814e+42 erg / s Luminosity absorbed = 2.50161e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11475.997 K -- next t_inner 9933.797 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 3/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.04734e+42 erg / s Luminosity absorbed = 2.55640e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 11518.516702 10501.129902 0.538298 0.438591\n", - "\t5 11554.412119 10869.940791 0.217946 0.160809\n", - "\t10 11373.574056 10558.269547 0.132935 0.103807\n", - "\t15 11040.788763 10185.648701 0.099700 0.079165\n", + "\t0 11497.903617 10477.653343 0.545136 0.439296\n", + "\t5 11621.417600 10856.518852 0.212874 0.159058\n", + "\t10 11335.692704 10635.474976 0.135635 0.100253\n", + "\t15 11018.841465 10290.254692 0.101203 0.075529\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 9948.201 K -- next t_inner 11328.896 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 4/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.34487e+43 erg / s Luminosity absorbed = 4.47931e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 9933.797 K -- next t_inner 11397.084 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 4/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.38199e+43 erg / s Luminosity absorbed = 4.54590e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 10501.129902 11527.008679 0.438591 0.512509\n", - "\t5 10869.940791 11706.138980 0.160809 0.196458\n", - "\t10 10558.269547 11444.208532 0.103807 0.124092\n", - "\t15 10185.648701 11085.857161 0.079165 0.093694\n", + "\t0 10477.653343 11608.211738 0.439296 0.506501\n", + "\t5 10856.518852 11859.259666 0.159058 0.192802\n", + "\t10 10635.474976 11479.604579 0.100253 0.125779\n", + "\t15 10290.254692 11149.192411 0.075529 0.094052\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11328.896 K -- next t_inner 10054.300 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 5/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.44348e+42 erg / s Luminosity absorbed = 2.68000e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11397.084 K -- next t_inner 9978.058 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 5/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.16431e+42 erg / s Luminosity absorbed = 2.62454e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 11527.008679 10659.382763 0.512509 0.433573\n", - "\t5 11706.138980 11038.244897 0.196458 0.158494\n", - "\t10 11444.208532 10790.696726 0.124092 0.099660\n", - "\t15 11085.857161 10450.666394 0.093694 0.074550\n", + "\t0 11608.211738 10556.913414 0.506501 0.440229\n", + "\t5 11859.259666 11021.144022 0.192802 0.153136\n", + "\t10 11479.604579 10713.104080 0.125779 0.099268\n", + "\t15 11149.192411 10399.079825 0.094052 0.073482\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10054.300 K -- next t_inner 11261.489 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 6/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.32492e+43 erg / s Luminosity absorbed = 4.26229e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 9978.058 K -- next t_inner 11365.561 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 6/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.36136e+43 erg / s Luminosity absorbed = 4.54590e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 10659.382763 11507.437689 0.433573 0.499441\n", - "\t5 11038.244897 11634.568776 0.158494 0.197953\n", - "\t10 10790.696726 11418.594559 0.099660 0.124085\n", - "\t15 10450.666394 10999.619473 0.074550 0.094676\n", + "\t0 10556.913414 11562.006340 0.440229 0.509603\n", + "\t5 11021.144022 11799.980145 0.153136 0.194437\n", + "\t10 10713.104080 11482.742597 0.099268 0.124721\n", + "\t15 10399.079825 11124.799749 0.073482 0.093597\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11261.489 K -- next t_inner 10069.444 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 7/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.49858e+42 erg / s Luminosity absorbed = 2.69247e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11365.561 K -- next t_inner 10025.564 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 7/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.33278e+42 erg / s Luminosity absorbed = 2.66283e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 11507.437689 10679.650246 0.499441 0.431088\n", - "\t5 11634.568776 11048.266431 0.197953 0.157179\n", - "\t10 11418.594559 10825.714870 0.124085 0.098608\n", - "\t15 10999.619473 10506.321595 0.094676 0.073794\n", + "\t0 11562.006340 10655.549804 0.509603 0.430187\n", + "\t5 11799.980145 11063.665621 0.194437 0.155127\n", + "\t10 11482.742597 10926.058943 0.124721 0.094642\n", + "\t15 11124.799749 10477.041314 0.093597 0.072578\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10069.444 K -- next t_inner 11241.826 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 8/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.30632e+43 erg / s Luminosity absorbed = 4.31719e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10025.564 K -- next t_inner 11303.643 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 8/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.34650e+43 erg / s Luminosity absorbed = 4.30670e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 10679.650246 11459.828312 0.431088 0.506176\n", - "\t5 11048.266431 11688.139012 0.157179 0.193468\n", - "\t10 10825.714870 11441.768967 0.098608 0.122412\n", - "\t15 10506.321595 11099.449886 0.073794 0.090915\n", + "\t0 10655.549804 11572.119736 0.430187 0.496558\n", + "\t5 11063.665621 11696.304249 0.155127 0.198228\n", + "\t10 10926.058943 11482.609682 0.094642 0.124382\n", + "\t15 10477.041314 11098.080451 0.072578 0.093537\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11241.826 K -- next t_inner 10123.177 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 9/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.68357e+42 erg / s Luminosity absorbed = 2.75015e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11303.643 K -- next t_inner 10025.810 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 9/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.36983e+42 erg / s Luminosity absorbed = 2.63049e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 11459.828312 10666.223660 0.506176 0.445097\n", - "\t5 11688.139012 11000.288585 0.193468 0.163424\n", - "\t10 11441.768967 10822.884326 0.122412 0.101641\n", - "\t15 11099.449886 10384.181273 0.090915 0.078432\n", + "\t0 11572.119736 10590.775937 0.496558 0.439574\n", + "\t5 11696.304249 11060.842307 0.198228 0.154917\n", + "\t10 11482.609682 10761.665022 0.124382 0.099840\n", + "\t15 11098.080451 10436.629671 0.093537 0.074676\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10123.177 K -- next t_inner 11180.783 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 10/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.28170e+43 erg / s Luminosity absorbed = 4.19511e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10025.810 K -- next t_inner 11278.874 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 10/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.32624e+43 erg / s Luminosity absorbed = 4.34986e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 10666.223660 11427.410445 0.445097 0.500788\n", - "\t5 11000.288585 11612.349822 0.163424 0.193129\n", - "\t10 10822.884326 11373.245169 0.101641 0.121622\n", - "\t15 10384.181273 11047.955461 0.078432 0.090937\n", + "\t0 10590.775937 11489.769556 0.439574 0.511403\n", + "\t5 11060.842307 11791.517605 0.154917 0.191127\n", + "\t10 10761.665022 11527.732208 0.099840 0.120106\n", + "\t15 10436.629671 11111.114390 0.074676 0.091713\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11180.783 K -- next t_inner 10164.432 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 11/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.79074e+42 erg / s Luminosity absorbed = 2.82804e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11278.874 K -- next t_inner 10079.967 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 11/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.51915e+42 erg / s Luminosity absorbed = 2.72009e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 11427.410445 10741.337822 0.500788 0.439938\n", - "\t5 11612.349822 11230.515356 0.193129 0.153637\n", - "\t10 11373.245169 10870.696315 0.121622 0.101050\n", - "\t15 11047.955461 10538.170159 0.090937 0.074680\n", + "\t0 11489.769556 10664.234475 0.511403 0.437272\n", + "\t5 11791.517605 11091.518839 0.191127 0.156638\n", + "\t10 11527.732208 10885.771059 0.120106 0.096973\n", + "\t15 11111.114390 10484.177251 0.091713 0.074261\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10164.432 K -- next t_inner 11157.711 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 12/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.27128e+43 erg / s Luminosity absorbed = 4.15415e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10079.967 K -- next t_inner 11239.980 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 12/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.30886e+43 erg / s Luminosity absorbed = 4.28617e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 10741.337822 11507.877578 0.439938 0.483114\n", - "\t5 11230.515356 11808.852053 0.153637 0.181826\n", - "\t10 10870.696315 11557.412757 0.101050 0.113563\n", - "\t15 10538.170159 11117.762050 0.074680 0.087418\n", + "\t0 10664.234475 11510.842068 0.437272 0.495944\n", + "\t5 11091.518839 11716.009425 0.156638 0.189856\n", + "\t10 10885.771059 11479.636914 0.096973 0.120067\n", + "\t15 10484.177251 11117.963837 0.074261 0.090628\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11157.711 K -- next t_inner 10184.966 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 13/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.90399e+42 erg / s Luminosity absorbed = 2.80864e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11239.980 K -- next t_inner 10111.668 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 13/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.65047e+42 erg / s Luminosity absorbed = 2.72874e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 11507.877578 10727.217531 0.483114 0.443706\n", - "\t5 11808.852053 11171.758889 0.181826 0.160824\n", - "\t10 11557.412757 10971.722637 0.113563 0.098588\n", - "\t15 11117.762050 10574.916600 0.087418 0.075266\n", + "\t0 11510.842068 10636.025493 0.495944 0.446635\n", + "\t5 11716.009425 11175.711706 0.189856 0.154916\n", + "\t10 11479.636914 10916.188023 0.120067 0.097843\n", + "\t15 11117.963837 10431.720831 0.090628 0.077032\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10184.966 K -- next t_inner 11108.923 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 14/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.25052e+43 erg / s Luminosity absorbed = 4.07335e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10111.668 K -- next t_inner 11189.420 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 14/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.28712e+43 erg / s Luminosity absorbed = 4.19242e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 10727.217531 11413.626870 0.443706 0.489526\n", - "\t5 11171.758889 11697.006992 0.160824 0.184795\n", - "\t10 10971.722637 11424.445844 0.098588 0.116722\n", - "\t15 10574.916600 11047.434163 0.075266 0.088067\n", + "\t0 10636.025493 11423.118214 0.446635 0.503706\n", + "\t5 11175.711706 11682.224028 0.154916 0.189577\n", + "\t10 10916.188023 11389.994295 0.097843 0.121114\n", + "\t15 10431.720831 11029.450833 0.077032 0.091350\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11108.923 K -- next t_inner 10224.266 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 15/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 9.00727e+42 erg / s Luminosity absorbed = 2.88724e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11189.420 K -- next t_inner 10150.866 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 15/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.76501e+42 erg / s Luminosity absorbed = 2.79433e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 11413.626870 10712.622749 0.489526 0.455660\n", - "\t5 11697.006992 11125.894032 0.184795 0.164091\n", - "\t10 11424.445844 10816.390451 0.116722 0.104037\n", - "\t15 11047.434163 10421.687097 0.088067 0.080401\n", + "\t0 11423.118214 10634.831735 0.503706 0.452948\n", + "\t5 11682.224028 11112.411355 0.189577 0.159316\n", + "\t10 11389.994295 10831.887277 0.121114 0.101805\n", + "\t15 11029.450833 10396.372864 0.091350 0.078776\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10224.266 K -- next t_inner 11087.666 K (\u001b[1mbase.py\u001b[0m:350)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 16/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.23781e+43 erg / s Luminosity absorbed = 4.07435e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10150.866 K -- next t_inner 11159.164 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 16/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.27462e+43 erg / s Luminosity absorbed = 4.13373e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 10712.622749 11352.158138 0.455660 0.500754\n", - "\t5 11125.894032 11644.968350 0.164091 0.185289\n", - "\t10 10816.390451 11320.695930 0.104037 0.119195\n", - "\t15 10421.687097 10965.228363 0.080401 0.089940\n", + "\t0 10634.831735 11415.925493 0.452948 0.501153\n", + "\t5 11112.411355 11688.667754 0.159316 0.188430\n", + "\t10 10831.887277 11397.519913 0.101805 0.120134\n", + "\t15 10396.372864 11045.200458 0.078776 0.090180\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11087.666 K -- next t_inner 10256.946 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 17/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 9.18956e+42 erg / s Luminosity absorbed = 2.86249e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11159.164 K -- next t_inner 10172.913 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 17/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.86785e+42 erg / s Luminosity absorbed = 2.79094e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 11352.158138 10738.799194 0.500754 0.452965\n", - "\t5 11644.968350 11210.269586 0.185289 0.160945\n", - "\t10 11320.695930 10911.463205 0.119195 0.103910\n", - "\t15 10965.228363 10545.065525 0.089940 0.078433\n", + "\t0 11415.925493 10678.510651 0.501153 0.453127\n", + "\t5 11688.667754 11152.822099 0.188430 0.159726\n", + "\t10 11397.519913 10907.112682 0.120134 0.099725\n", + "\t15 11045.200458 10508.816973 0.090180 0.076667\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10256.946 K -- next t_inner 11012.230 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 18/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.20741e+43 erg / s Luminosity absorbed = 3.93375e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10172.913 K -- next t_inner 11118.359 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 18/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.24749e+43 erg / s Luminosity absorbed = 4.15445e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 10738.799194 11316.665617 0.452965 0.492135\n", - "\t5 11210.269586 11599.094127 0.160945 0.183929\n", - "\t10 10911.463205 11403.508986 0.103910 0.114400\n", - "\t15 10545.065525 10958.974248 0.078433 0.087415\n", + "\t0 10678.510651 11482.446420 0.453127 0.481917\n", + "\t5 11152.822099 11693.549165 0.159726 0.184456\n", + "\t10 10907.112682 11472.013555 0.099725 0.115208\n", + "\t15 10508.816973 10997.309982 0.076667 0.089730\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11012.230 K -- next t_inner 10314.623 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 19/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 9.29848e+42 erg / s Luminosity absorbed = 3.02011e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11118.359 K -- next t_inner 10245.337 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 19/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 9.09476e+42 erg / s Luminosity absorbed = 2.89713e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", - "\t0 11316.665617 10862.505720 0.492135 0.444495\n", - "\t5 11599.094127 11194.462074 0.183929 0.162842\n", - "\t10 11403.508986 11065.620645 0.114400 0.099372\n", - "\t15 10958.974248 10599.851144 0.087415 0.077690\n", + "\t0 11482.446420 10834.729769 0.481917 0.438322\n", + "\t5 11693.549165 11346.133670 0.184456 0.154204\n", + "\t10 11472.013555 10996.421420 0.115208 0.099677\n", + "\t15 10997.309982 10625.479432 0.089730 0.075531\n", "\n", - " (\u001b[1mbase.py\u001b[0m:348)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10314.623 K -- next t_inner 11009.102 K (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 20/20 (\u001b[1mbase.py\u001b[0m:266)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.21062e+43 erg / s Luminosity absorbed = 3.88405e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:357)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Simulation finished in 20 iterations and took 22.57 s (\u001b[1mbase.py\u001b[0m:306)\n" + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10245.337 K -- next t_inner 11056.949 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 20/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22623e+43 erg / s Luminosity absorbed = 4.00603e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Simulation finished in 20 iterations and took 26.74 s (\u001b[1mbase.py\u001b[0m:308)\n" ] } ], @@ -378,7 +329,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -390,809 +341,29 @@ }, { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "window.mpl = {};\n", - "\n", - "\n", - "mpl.get_websocket_type = function() {\n", - " if (typeof(WebSocket) !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof(MozWebSocket) !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert('Your browser does not have WebSocket support.' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.');\n", - " };\n", - "}\n", - "\n", - "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = (this.ws.binaryType != undefined);\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById(\"mpl-warnings\");\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent = (\n", - " \"This browser does not support binary websocket messages. \" +\n", - " \"Performance may be slow.\");\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = $('
');\n", - " this._root_extra_style(this.root)\n", - " this.root.attr('style', 'display: inline-block');\n", - "\n", - " $(parent_element).append(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", - " fig.send_message(\"send_image_mode\", {});\n", - " if (mpl.ratio != 1) {\n", - " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", - " }\n", - " fig.send_message(\"refresh\", {});\n", - " }\n", - "\n", - " this.imageObj.onload = function() {\n", - " if (fig.image_mode == 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function() {\n", - " fig.ws.close();\n", - " }\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "}\n", - "\n", - "mpl.figure.prototype._init_header = function() {\n", - " var titlebar = $(\n", - " '
');\n", - " var titletext = $(\n", - " '
');\n", - " titlebar.append(titletext)\n", - " this.root.append(titlebar);\n", - " this.header = titletext[0];\n", - "}\n", - "\n", - "\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", - "\n", - "}\n", - "\n", - "\n", - "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", - "\n", - "}\n", - "\n", - "mpl.figure.prototype._init_canvas = function() {\n", - " var fig = this;\n", - "\n", - " var canvas_div = $('
');\n", - "\n", - " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", - "\n", - " function canvas_keyboard_event(event) {\n", - " return fig.key_event(event, event['data']);\n", - " }\n", - "\n", - " canvas_div.keydown('key_press', canvas_keyboard_event);\n", - " canvas_div.keyup('key_release', canvas_keyboard_event);\n", - " this.canvas_div = canvas_div\n", - " this._canvas_extra_style(canvas_div)\n", - " this.root.append(canvas_div);\n", - "\n", - " var canvas = $('');\n", - " canvas.addClass('mpl-canvas');\n", - " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", - "\n", - " this.canvas = canvas[0];\n", - " this.context = canvas[0].getContext(\"2d\");\n", - "\n", - " var backingStore = this.context.backingStorePixelRatio ||\n", - "\tthis.context.webkitBackingStorePixelRatio ||\n", - "\tthis.context.mozBackingStorePixelRatio ||\n", - "\tthis.context.msBackingStorePixelRatio ||\n", - "\tthis.context.oBackingStorePixelRatio ||\n", - "\tthis.context.backingStorePixelRatio || 1;\n", - "\n", - " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband = $('');\n", - " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", - "\n", - " var pass_mouse_events = true;\n", - "\n", - " canvas_div.resizable({\n", - " start: function(event, ui) {\n", - " pass_mouse_events = false;\n", - " },\n", - " resize: function(event, ui) {\n", - " fig.request_resize(ui.size.width, ui.size.height);\n", - " },\n", - " stop: function(event, ui) {\n", - " pass_mouse_events = true;\n", - " fig.request_resize(ui.size.width, ui.size.height);\n", - " },\n", - " });\n", - "\n", - " function mouse_event_fn(event) {\n", - " if (pass_mouse_events)\n", - " return fig.mouse_event(event, event['data']);\n", - " }\n", - "\n", - " rubberband.mousedown('button_press', mouse_event_fn);\n", - " rubberband.mouseup('button_release', mouse_event_fn);\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband.mousemove('motion_notify', mouse_event_fn);\n", - "\n", - " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", - " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", - "\n", - " canvas_div.on(\"wheel\", function (event) {\n", - " event = event.originalEvent;\n", - " event['data'] = 'scroll'\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " mouse_event_fn(event);\n", - " });\n", - "\n", - " canvas_div.append(canvas);\n", - " canvas_div.append(rubberband);\n", - "\n", - " this.rubberband = rubberband;\n", - " this.rubberband_canvas = rubberband[0];\n", - " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", - " this.rubberband_context.strokeStyle = \"#000000\";\n", - "\n", - " this._resize_canvas = function(width, height) {\n", - " // Keep the size of the canvas, canvas container, and rubber band\n", - " // canvas in synch.\n", - " canvas_div.css('width', width)\n", - " canvas_div.css('height', height)\n", - "\n", - " canvas.attr('width', width * mpl.ratio);\n", - " canvas.attr('height', height * mpl.ratio);\n", - " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", - "\n", - " rubberband.attr('width', width);\n", - " rubberband.attr('height', height);\n", - " }\n", - "\n", - " // Set the figure to an initial 600x600px, this will subsequently be updated\n", - " // upon first draw.\n", - " this._resize_canvas(600, 600);\n", - "\n", - " // Disable right mouse context menu.\n", - " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", - " return false;\n", - " });\n", - "\n", - " function set_focus () {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "}\n", - "\n", - "mpl.figure.prototype._init_toolbar = function() {\n", - " var fig = this;\n", - "\n", - " var nav_element = $('
')\n", - " nav_element.attr('style', 'width: 100%');\n", - " this.root.append(nav_element);\n", - "\n", - " // Define a callback function for later on.\n", - " function toolbar_event(event) {\n", - " return fig.toolbar_button_onclick(event['data']);\n", - " }\n", - " function toolbar_mouse_event(event) {\n", - " return fig.toolbar_button_onmouseover(event['data']);\n", - " }\n", - "\n", - " for(var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " // put a spacer in here.\n", - " continue;\n", - " }\n", - " var button = $('');\n", + " button.click(method_name, toolbar_event);\n", + " button.mouseover(tooltip, toolbar_mouse_event);\n", + " nav_element.append(button);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = $('');\n", + " nav_element.append(status_bar);\n", + " this.message = status_bar[0];\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = $('
');\n", + " var button = $('');\n", + " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", + " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", + " buttongrp.append(button);\n", + " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", + " titlebar.prepend(buttongrp);\n", + "}\n", + "\n", + "mpl.figure.prototype._root_extra_style = function(el){\n", + " var fig = this\n", + " el.on(\"remove\", function(){\n", + "\tfig.close_ws(fig, {});\n", + " });\n", + "}\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function(el){\n", + " // this is important to make the div 'focusable\n", + " el.attr('tabindex', 0)\n", + " // reach out to IPython and tell the keyboard manager to turn it's self\n", + " // off when our div gets focus\n", + "\n", + " // location in version 3\n", + " if (IPython.notebook.keyboard_manager) {\n", + " IPython.notebook.keyboard_manager.register_events(el);\n", + " }\n", + " else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\n", + " }\n", + "\n", + "}\n", + "\n", + "mpl.figure.prototype._key_event_extra = function(event, name) {\n", + " var manager = IPython.notebook.keyboard_manager;\n", + " if (!manager)\n", + " manager = IPython.keyboard_manager;\n", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which == 13) {\n", + " this.canvas_div.blur();\n", + " event.shiftKey = false;\n", + " // Send a \"J\" for go to next cell\n", + " event.which = 74;\n", + " event.keyCode = 74;\n", + " manager.command_mode();\n", + " manager.handle_keydown(event);\n", + " }\n", + "}\n", + "\n", + "mpl.figure.prototype.handle_save = function(fig, msg) {\n", + " fig.ondownload(fig, null);\n", + "}\n", + "\n", + "\n", + "mpl.find_output_cell = function(html_output) {\n", + " // Return the cell and output element which can be found *uniquely* in the notebook.\n", + " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", + " // IPython event is triggered only after the cells have been serialised, which for\n", + " // our purposes (turning an active figure into a static one), is too late.\n", + " var cells = IPython.notebook.get_cells();\n", + " var ncells = cells.length;\n", + " for (var i=0; i= 3 moved mimebundle to data attribute of output\n", + " data = data.data;\n", + " }\n", + " if (data['text/html'] == html_output) {\n", + " return [cell, data, j];\n", + " }\n", + " }\n", + " }\n", + " }\n", + "}\n", + "\n", + "// Register the function which deals with the matplotlib target/channel.\n", + "// The kernel may be null if the page has been refreshed.\n", + "if (IPython.notebook.kernel != null) {\n", + " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", + "}\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "Text(0.5, 0, 'Iteration Number')" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "%pylab notebook\n", + "for t_rad in t_rad_table:\n", + " plot(t_rad)\n", + "ylabel(r'$T_{rad}\\ [K]$')\n", + "xlabel('Iteration Number')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "tardis", + "language": "python", + "name": "tardis" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.10" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/running/interaction/tardis_example.yml b/docs/running/interaction/tardis_example.yml new file mode 120000 index 00000000000..e5e5a53e026 --- /dev/null +++ b/docs/running/interaction/tardis_example.yml @@ -0,0 +1 @@ +../tardis_example.yml \ No newline at end of file From a87816c7cc3059286f93854adeec698b6d6bd8e6 Mon Sep 17 00:00:00 2001 From: rodot- Date: Fri, 29 May 2020 13:46:40 -0400 Subject: [PATCH 234/467] Updated the index to link to the callback tutorial --- docs/running/interaction/index.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/running/interaction/index.rst b/docs/running/interaction/index.rst index 5218f2b3658..2ede45a1bac 100644 --- a/docs/running/interaction/index.rst +++ b/docs/running/interaction/index.rst @@ -4,4 +4,11 @@ Interacting with TARDIS To get more information from each run of TARDIS one can run it interactively and have full access to the model properties (as described in :ref:`physical_quantities`) +.. toctree:: + :maxdepth: 1 + + callback_example + .. examples/run_simple_example.ipynb + + From 3783226da0b1c4615e53c244ed8130af84c43e1f Mon Sep 17 00:00:00 2001 From: Arjun Savel <35353555+arjunsavel@users.noreply.github.com> Date: Mon, 1 Jun 2020 13:35:31 -0700 Subject: [PATCH 235/467] Changed a print from python 2 to python 3 (#1171) --- docs/physics/plasma/plasma_plots/nebular_ionization_balance.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/physics/plasma/plasma_plots/nebular_ionization_balance.py b/docs/physics/plasma/plasma_plots/nebular_ionization_balance.py index 7da63d7f580..9c76f564eaf 100644 --- a/docs/physics/plasma/plasma_plots/nebular_ionization_balance.py +++ b/docs/physics/plasma/plasma_plots/nebular_ionization_balance.py @@ -90,7 +90,7 @@ #Plotting the ion fractions for ion_number in [0, 1, 2, 3]: - print "w=0.5" + print("w=0.5") current_ion_density = ion_number_densities.ix[14, ion_number] ax1.plot(current_ion_density.index, current_ion_density.values, '%s--' % ion_colors[ion_number], label='Si %s W=0.5' % tardis.util.base.int_to_roman(ion_number + 1).upper()) From 92f2f05582294e8ee784ce0d31ab880e4098e915 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Mon, 1 Jun 2020 19:22:35 -0300 Subject: [PATCH 236/467] Fix Jack O`Brien and Jordi Eguren author names (#1178) --- .mailmap | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.mailmap b/.mailmap index aded3e04eb2..c5609f82722 100644 --- a/.mailmap +++ b/.mailmap @@ -119,7 +119,10 @@ Alice Harpole Alice Harpole Jordi Eguren -Jordi Eguren Jordi Eguren <45364266+jordi5@users.noreply.github.com> +Jordi Eguren jordi5 <45364266+jordi5@users.noreply.github.com> Atul Kumar +Jack O'Brien + + From 307f326252b1d2ae68e5846f2a7641e67f914a35 Mon Sep 17 00:00:00 2001 From: Azure Pipelines Date: Mon, 1 Jun 2020 23:30:51 +0000 Subject: [PATCH 237/467] Update zenodo.json [skip ci] --- .zenodo.json | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/.zenodo.json b/.zenodo.json index 2785f8b09d7..68941509b52 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -102,10 +102,10 @@ "name": "Varanasi, Kaushik" }, { - "name": "Reinecke, Martin" + "name": "Eweis, Youssef" }, { - "name": "Eweis, Youssef" + "name": "Reinecke, Martin" }, { "name": "Bylund, Tomas" @@ -113,83 +113,83 @@ { "name": "Bentil, Laud" }, + { + "name": "Eguren, Jordi" + }, { "name": "Livneh, Ran" }, { - "name": "Rajagopalan, Srinath" + "name": "Singhal, Jaladh" }, { - "name": "Reichenbach, John" + "name": "O'Brien, Jack" }, { - "name": "Singhal, Jaladh" + "name": "Rajagopalan, Srinath" }, { "name": "Jain, Rinkle" }, { - "name": "Singh, Sourav" + "name": "Reichenbach, John" }, { - "name": "Pipelines, Azure" + "name": "Mishra, Sashank" }, { - "name": "Kowalski, Nathan" + "name": "Singh, Sourav" }, { "name": "Sofiatti, Caroline" }, { - "name": "Talegaonkar, Chinmay" + "name": "Selsing, Jonatan" }, { - "name": "Selsing, Jonatan" + "name": "Kowalski, Nathan" }, { "name": "Savel, Arjun" }, { - "name": "Nayak, Ashwin" + "name": "Talegaonkar, Chinmay" }, { - "name": "Wahi, Ujjwal" + "name": "Patel, Pratik" }, { - "name": "Kumar, Atul" + "name": "Patra, Nilesh" }, { - "name": "Mishra, Sashank" + "name": "Nayak, Ashwin" }, { - "name": "Dasgupta, Debajyoti" + "name": "Kumar, Atul" }, { - "name": "Gillanders, James" + "name": "Sarafina, Nance" }, { - "name": "Sharma, Sampark" + "name": "Gillanders, James" }, { - "name": "Eguren, Jordi" + "name": "Sharma, Sampark" }, { - "name": "Gupta, Suyash" + "name": "Wahi, Ujjwal" }, { - "name": "Yap, Kevin" + "name": "Dasgupta, Debajyoti" }, { "name": "Magee, Mark" }, { - "name": "Sarafina, Nance" - }, - { - "name": "Patra, Nilesh" + "name": "Yap, Kevin" }, { - "name": "Patel, Pratik" + "name": "Gupta, Suyash" } ] } \ No newline at end of file From 75f9286ed7f163d7dca1feae1c5465d6c04c9444 Mon Sep 17 00:00:00 2001 From: Wolfgang Kerzendorf Date: Tue, 2 Jun 2020 09:19:50 -0400 Subject: [PATCH 238/467] Fix the Plasma tests (#1150) * fix some PEP8 * removed PEP8 violations * remove tests plasma test_plasmas_full * fix coverage problem * add token * use upstream/master azure yml and add token --- azure-pipelines/simple_test_framework.yml | 2 + .../tests/data/plasma_test_config_lte.yml | 53 ------------- .../tests/data/plasma_test_config_nlte.yml | 55 ------------- tardis/plasma/tests/test_hdf_plasma.py | 22 ++++-- tardis/plasma/tests/test_plasma_vboundary.py | 13 ++-- tardis/plasma/tests/test_plasmas_full.py | 77 ------------------- 6 files changed, 24 insertions(+), 198 deletions(-) delete mode 100644 tardis/plasma/tests/data/plasma_test_config_lte.yml delete mode 100644 tardis/plasma/tests/data/plasma_test_config_nlte.yml delete mode 100644 tardis/plasma/tests/test_plasmas_full.py diff --git a/azure-pipelines/simple_test_framework.yml b/azure-pipelines/simple_test_framework.yml index 96442f5f19e..c345cb4c208 100644 --- a/azure-pipelines/simple_test_framework.yml +++ b/azure-pipelines/simple_test_framework.yml @@ -12,6 +12,8 @@ variables: ref.data.github.url: "https://github.com/tardis-sn/tardis-refdata.git" tardis.build.dir: $(Build.Repository.LocalPath) + codecov.token: "a876d307-9ed5-4f5d-a6c4-e58291ac4111" + jobs: - job: "Test" diff --git a/tardis/plasma/tests/data/plasma_test_config_lte.yml b/tardis/plasma/tests/data/plasma_test_config_lte.yml deleted file mode 100644 index c0bee588022..00000000000 --- a/tardis/plasma/tests/data/plasma_test_config_lte.yml +++ /dev/null @@ -1,53 +0,0 @@ -tardis_config_version: v1.0 - -supernova: - luminosity_requested: 2.8e9 solLum - time_explosion: 13 day - -atom_data: kurucz_atom_pure_simple.h5 - -model: - - structure: - type: specific - - velocity: - start: 1.1e4 km/s - stop: 2.0e4 km/s - num: 20 - - density: - type: branch85_w7 - - abundances: - type: uniform - O: 0.19 - Mg: 0.03 - Si: 0.52 - S: 0.19 - Ar: 0.04 - Ca: 0.03 - -plasma: - ionization: lte - excitation: lte - radiative_rates_type: dilute-blackbody - line_interaction_type: macroatom - -montecarlo: - seed: 23111963 - no_of_packets : 1.0e+5 - iterations: 10 - last_no_of_packets: 1.0e+5 - no_of_virtual_packets: 5 - convergence_strategy: - type: damped - damping_constant: 0.5 - threshold: 0.05 - lock_t_inner_cycles: 1 - t_inner_update_exponent: -0.5 - -spectrum: - start: 500 angstrom - stop: 20000 angstrom - num: 10000 diff --git a/tardis/plasma/tests/data/plasma_test_config_nlte.yml b/tardis/plasma/tests/data/plasma_test_config_nlte.yml deleted file mode 100644 index ab6417b08cb..00000000000 --- a/tardis/plasma/tests/data/plasma_test_config_nlte.yml +++ /dev/null @@ -1,55 +0,0 @@ -tardis_config_version: v1.0 - -supernova: - luminosity_requested: 2.8e9 solLum - time_explosion: 13 day - -atom_data: kurucz_atom_pure_simple.h5 - -model: - - structure: - type: specific - - velocity: - start: 1.1e4 km/s - stop: 2.0e4 km/s - num: 20 - - density: - type: branch85_w7 - - abundances: - type: uniform - He: 0.19 - Mg: 0.03 - Si: 0.52 - S: 0.19 - Ar: 0.04 - Ca: 0.03 - -plasma: - ionization: nebular - excitation: dilute-lte - radiative_rates_type: dilute-blackbody - line_interaction_type: macroatom - nlte: - species: [He I] - -montecarlo: - seed: 23111963 - no_of_packets : 1.0e+5 - iterations: 10 - last_no_of_packets: 1.0e+5 - no_of_virtual_packets: 5 - convergence_strategy: - type: damped - damping_constant: 0.5 - threshold: 0.05 - lock_t_inner_cycles: 1 - t_inner_update_exponent: -0.5 - -spectrum: - start: 500 angstrom - stop: 20000 angstrom - num: 10000 diff --git a/tardis/plasma/tests/test_hdf_plasma.py b/tardis/plasma/tests/test_hdf_plasma.py index 1237339f2ed..87924d558a0 100644 --- a/tardis/plasma/tests/test_hdf_plasma.py +++ b/tardis/plasma/tests/test_hdf_plasma.py @@ -6,21 +6,24 @@ from tardis.plasma.properties import property_collections ### -# Save and Load +# saving and loading of plasma properties in the HDF file ### + @pytest.fixture(scope="module", autouse=True) def to_hdf_buffer(hdf_file_path, simulation_verysimple): simulation_verysimple.plasma.to_hdf(hdf_file_path) -plasma_properties_list = ['number_density', 'beta_rad', 'general_level_boltzmann_factor', 'level_boltzmann_factor', - 'stimulated_emission_factor', 't_electrons', 'wavelength_cm', 'lines_lower_level_index', - 'ionization_data', 'density', 'atomic_mass', 'level_number_density', 'lines_upper_level_index', - 'nu', 'beta_sobolev', 'transition_probabilities', 'phi', - 'electron_densities', 't_rad', 'selected_atoms', 'ion_number_density', 'partition_function', - 'abundance', 'g_electron', 'g', 'lines', 'f_lu', 'tau_sobolevs', 'j_blues', - 'metastability', 'w', 'excitation_energy'] +plasma_properties_list = [ + 'number_density', 'beta_rad', 'general_level_boltzmann_factor', + 'level_boltzmann_factor', 'stimulated_emission_factor', 't_electrons', + 'wavelength_cm', 'lines_lower_level_index', 'ionization_data', 'density', + 'atomic_mass', 'level_number_density', 'lines_upper_level_index', 'nu', + 'beta_sobolev', 'transition_probabilities', 'phi', 'electron_densities', + 't_rad', 'selected_atoms', 'ion_number_density', 'partition_function', + 'abundance', 'g_electron', 'g', 'lines', 'f_lu', 'tau_sobolevs', + 'j_blues', 'metastability', 'w', 'excitation_energy'] @pytest.mark.parametrize("attr", plasma_properties_list) @@ -69,13 +72,16 @@ def test_atomic_data_uuid(hdf_file_path, simulation_verysimple): expected = pd.read_hdf(hdf_file_path, path)['atom_data_uuid'] assert actual == expected + @pytest.fixture(scope="module", autouse=True) def to_hdf_collection_buffer(hdf_file_path, simulation_verysimple): simulation_verysimple.plasma.to_hdf( hdf_file_path, name='collection', collection=property_collections.basic_inputs) + collection_properties = ['t_rad', 'w', 'density'] + @pytest.mark.parametrize("attr", collection_properties) def test_collection(hdf_file_path, simulation_verysimple, attr): actual = getattr(simulation_verysimple.plasma, attr) diff --git a/tardis/plasma/tests/test_plasma_vboundary.py b/tardis/plasma/tests/test_plasma_vboundary.py index cba7649ae6a..5fdc76ab3bd 100644 --- a/tardis/plasma/tests/test_plasma_vboundary.py +++ b/tardis/plasma/tests/test_plasma_vboundary.py @@ -7,14 +7,14 @@ from tardis.io.atom_data.base import AtomData from tardis.simulation import Simulation - - DATA_PATH = os.path.join(tardis.__path__[0], 'plasma', 'tests', 'data') + @pytest.fixture def config_init_trad_fname(): return os.path.join(DATA_PATH, 'config_init_trad.yml') + @pytest.mark.parametrize("v_inner_boundary, v_outer_boundary", [(3350, 3650), (2900, 3750), @@ -29,9 +29,12 @@ def config_init_trad_fname(): (3150, 3750), (3150, 3850), (3150, 3900)]) -def test_plasma_vboundary(config_init_trad_fname, v_inner_boundary, v_outer_boundary, atomic_data_fname): +def test_plasma_vboundary(config_init_trad_fname, v_inner_boundary, + v_outer_boundary, atomic_data_fname): tardis_config = Configuration.from_yaml(config_init_trad_fname) tardis_config.atom_data = atomic_data_fname - tardis_config.model.structure.v_inner_boundary = v_inner_boundary * u.km / u.s - tardis_config.model.structure.v_outer_boundary = v_outer_boundary * u.km / u.s + tardis_config.model.structure.v_inner_boundary = ( + v_inner_boundary * u.km / u.s) + tardis_config.model.structure.v_outer_boundary = ( + v_outer_boundary * u.km / u.s) simulation = Simulation.from_config(tardis_config) diff --git a/tardis/plasma/tests/test_plasmas_full.py b/tardis/plasma/tests/test_plasmas_full.py deleted file mode 100644 index 6bf79bd0e09..00000000000 --- a/tardis/plasma/tests/test_plasmas_full.py +++ /dev/null @@ -1,77 +0,0 @@ -import os -import pytest -import warnings -import copy - -import pandas as pd -import pandas.util.testing as pdt - -from tardis.simulation import Simulation -from tardis.io.config_reader import Configuration - -config_files = { - 'lte': 'tardis/plasma/tests/data/plasma_test_config_lte.yml', - 'nlte': 'tardis/plasma/tests/data/plasma_test_config_nlte.yml', - } - - -class TestPlasmas(): - - name = 'plasma_full/' - - @pytest.fixture(scope='class') - def refdata(self, tardis_ref_data): - def get_ref_data(key): - return tardis_ref_data[os.path.join( - self.name, self._test_name, key)] - return get_ref_data - - @pytest.fixture( - scope="class", - params=config_files.items(), - ids=config_files.keys() - ) - def simulation( - self, request, atomic_data_fname, - generate_reference, tardis_ref_data): - name = request.param[0] - config = Configuration.from_yaml(request.param[1]) - config['atom_data'] = atomic_data_fname - simulation = Simulation.from_config(config) - simulation.run() - self._test_name = name - - if not generate_reference: - return simulation - else: - simulation.plasma.hdf_properties = [ - 'level_number_density', - ] - simulation.model.hdf_properties = [ - 't_radiative' - ] - simulation.plasma.to_hdf( - tardis_ref_data, - self.name, - self._test_name) - simulation.model.to_hdf( - tardis_ref_data, - self.name, - self._test_name) - pytest.skip( - 'Reference data was generated during this run.') - return simulation - - def test_levels(self, simulation, refdata): - new_levels = simulation.plasma.get_value('level_number_density') - - old_levels = refdata('level_number_density') - pdt.assert_almost_equal( - new_levels, old_levels) - - def test_trads(self, simulation, refdata): - new_t_rads = pd.Series(simulation.model.t_rad.to('K').value) - - old_t_rads = refdata('t_radiative') - pdt.assert_almost_equal( - new_t_rads, old_t_rads) From d829b1c19185c9065cf6ce7b831e6bd325083dae Mon Sep 17 00:00:00 2001 From: Sashank Mishra Date: Tue, 2 Jun 2020 18:56:21 +0530 Subject: [PATCH 239/467] update doc page to a notebook (#1153) * update doc page to a notebook * fix errors * mention units as Astropy Quantities wherever present --- docs/physics/physical_quantities.ipynb | 4736 ++++++++++++++++++++++++ docs/physics/physical_quantities.rst | 134 - 2 files changed, 4736 insertions(+), 134 deletions(-) create mode 100644 docs/physics/physical_quantities.ipynb delete mode 100644 docs/physics/physical_quantities.rst diff --git a/docs/physics/physical_quantities.ipynb b/docs/physics/physical_quantities.ipynb new file mode 100644 index 00000000000..f136aef7d87 --- /dev/null +++ b/docs/physics/physical_quantities.ipynb @@ -0,0 +1,4736 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Accessing Physical Quantities" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In order to compute the synthetic spectrum, Tardis must either be told\n", + "or must calculate many physical properties of the model. To understand and\n", + "test the code it can be important to look at these values. One\n", + "easy way to do this is to run Tardis in an interactive mode and then\n", + "inspect the model properties." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Runing in interactive Python session" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/sashmish/anaconda3/envs/tardis/lib/python3.6/importlib/_bootstrap.py:219: QAWarning: pyne.data is not yet QA compliant.\n", + " return f(*args, **kwds)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.io.atom_data.atom_web_download\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Downloading atomic data from https://media.githubusercontent.com/media/tardis-sn/tardis-refdata/master/atom_data/kurucz_cd23_chianti_H_He.h5 to /Users/sashmish/Downloads/tardis-data/kurucz_cd23_chianti_H_He.h5 (\u001b[1matom_web_download.py\u001b[0m:47)\n", + " % Total % Received % Xferd Average Speed Time Time Time Current\n", + " Dload Upload Total Spent Left Speed\n", + "100 980 100 980 0 0 2222 0 --:--:-- --:--:-- --:--:-- 2222\n" + ] + } + ], + "source": [ + "# Download the atomic data\n", + "from tardis.io.atom_data.util import download_atom_data\n", + "download_atom_data('kurucz_cd23_chianti_H_He')\n", + "\n", + "# Download the example configuration file\n", + "!curl -O https://raw.githubusercontent.com/tardis-sn/tardis/master/docs/models/examples/tardis_example.yml" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.plasma.standard_plasmas\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Reading Atomic Data from kurucz_cd23_chianti_H_He.h5 (\u001b[1mstandard_plasmas.py\u001b[0m:74)\n", + "[\u001b[1mtardis.io.atom_data.util\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Atom Data kurucz_cd23_chianti_H_He.h5 not found in local path. Exists in TARDIS Data repo /Users/sashmish/Downloads/tardis-data/kurucz_cd23_chianti_H_He.h5 (\u001b[1mutil.py\u001b[0m:29)\n", + "[\u001b[1mtardis.io.atom_data.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Read Atom Data with UUID=6f7b09e887a311e7a06b246e96350010 and MD5=864f1753714343c41f99cb065710cace. (\u001b[1mbase.py\u001b[0m:184)\n", + "[\u001b[1mtardis.io.atom_data.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Non provided atomic data: synpp_refs, photoionization_data (\u001b[1mbase.py\u001b[0m:187)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 1/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 7.93730e+42 erg / s Luminosity absorbed = 2.66400e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 9926.501965 10168.422346 0.400392 0.501001\n", + "\t5 9852.611678 10367.510165 0.211205 0.186556\n", + "\t10 9779.813302 10222.882075 0.142695 0.113985\n", + "\t15 9708.082813 9928.649533 0.104556 0.085217\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 9933.952 K -- next t_inner 11475.997 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 2/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.41371e+43 erg / s Luminosity absorbed = 4.73752e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10168.422346 11497.903617 0.501001 0.545136\n", + "\t5 10367.510165 11621.417600 0.186556 0.212874\n", + "\t10 10222.882075 11335.692704 0.113985 0.135635\n", + "\t15 9928.649533 11018.841465 0.085217 0.101203\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11475.997 K -- next t_inner 9933.797 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 3/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.04734e+42 erg / s Luminosity absorbed = 2.55640e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11497.903617 10477.653343 0.545136 0.439296\n", + "\t5 11621.417600 10856.518852 0.212874 0.159058\n", + "\t10 11335.692704 10635.474976 0.135635 0.100253\n", + "\t15 11018.841465 10290.254692 0.101203 0.075529\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 9933.797 K -- next t_inner 11397.084 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 4/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.38199e+43 erg / s Luminosity absorbed = 4.54590e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10477.653343 11608.211738 0.439296 0.506501\n", + "\t5 10856.518852 11859.259666 0.159058 0.192802\n", + "\t10 10635.474976 11479.604579 0.100253 0.125779\n", + "\t15 10290.254692 11149.192411 0.075529 0.094052\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11397.084 K -- next t_inner 9978.058 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 5/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.16431e+42 erg / s Luminosity absorbed = 2.62454e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11608.211738 10556.913414 0.506501 0.440229\n", + "\t5 11859.259666 11021.144022 0.192802 0.153136\n", + "\t10 11479.604579 10713.104080 0.125779 0.099268\n", + "\t15 11149.192411 10399.079825 0.094052 0.073482\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 9978.058 K -- next t_inner 11365.561 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 6/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.36136e+43 erg / s Luminosity absorbed = 4.54590e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10556.913414 11562.006340 0.440229 0.509603\n", + "\t5 11021.144022 11799.980145 0.153136 0.194437\n", + "\t10 10713.104080 11482.742597 0.099268 0.124721\n", + "\t15 10399.079825 11124.799749 0.073482 0.093597\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11365.561 K -- next t_inner 10025.564 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 7/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.33278e+42 erg / s Luminosity absorbed = 2.66283e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11562.006340 10655.549804 0.509603 0.430187\n", + "\t5 11799.980145 11063.665621 0.194437 0.155127\n", + "\t10 11482.742597 10926.058943 0.124721 0.094642\n", + "\t15 11124.799749 10477.041314 0.093597 0.072578\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10025.564 K -- next t_inner 11303.643 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 8/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.34650e+43 erg / s Luminosity absorbed = 4.30670e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10655.549804 11572.119736 0.430187 0.496558\n", + "\t5 11063.665621 11696.304249 0.155127 0.198228\n", + "\t10 10926.058943 11482.609682 0.094642 0.124382\n", + "\t15 10477.041314 11098.080451 0.072578 0.093537\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11303.643 K -- next t_inner 10025.810 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 9/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.36983e+42 erg / s Luminosity absorbed = 2.63049e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11572.119736 10590.775937 0.496558 0.439574\n", + "\t5 11696.304249 11060.842307 0.198228 0.154917\n", + "\t10 11482.609682 10761.665022 0.124382 0.099840\n", + "\t15 11098.080451 10436.629671 0.093537 0.074676\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10025.810 K -- next t_inner 11278.874 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 10/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.32624e+43 erg / s Luminosity absorbed = 4.34986e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10590.775937 11489.769556 0.439574 0.511403\n", + "\t5 11060.842307 11791.517605 0.154917 0.191127\n", + "\t10 10761.665022 11527.732208 0.099840 0.120106\n", + "\t15 10436.629671 11111.114390 0.074676 0.091713\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11278.874 K -- next t_inner 10079.967 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 11/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.51915e+42 erg / s Luminosity absorbed = 2.72009e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11489.769556 10664.234475 0.511403 0.437272\n", + "\t5 11791.517605 11091.518839 0.191127 0.156638\n", + "\t10 11527.732208 10885.771059 0.120106 0.096973\n", + "\t15 11111.114390 10484.177251 0.091713 0.074261\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10079.967 K -- next t_inner 11239.980 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 12/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.30886e+43 erg / s Luminosity absorbed = 4.28617e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10664.234475 11510.842068 0.437272 0.495944\n", + "\t5 11091.518839 11716.009425 0.156638 0.189856\n", + "\t10 10885.771059 11479.636914 0.096973 0.120067\n", + "\t15 10484.177251 11117.963837 0.074261 0.090628\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11239.980 K -- next t_inner 10111.668 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 13/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.65047e+42 erg / s Luminosity absorbed = 2.72874e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11510.842068 10636.025493 0.495944 0.446635\n", + "\t5 11716.009425 11175.711706 0.189856 0.154916\n", + "\t10 11479.636914 10916.188023 0.120067 0.097843\n", + "\t15 11117.963837 10431.720831 0.090628 0.077032\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10111.668 K -- next t_inner 11189.420 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 14/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.28712e+43 erg / s Luminosity absorbed = 4.19242e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10636.025493 11423.118214 0.446635 0.503706\n", + "\t5 11175.711706 11682.224028 0.154916 0.189577\n", + "\t10 10916.188023 11389.994295 0.097843 0.121114\n", + "\t15 10431.720831 11029.450833 0.077032 0.091350\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11189.420 K -- next t_inner 10150.866 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 15/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.76501e+42 erg / s Luminosity absorbed = 2.79433e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11423.118214 10634.831735 0.503706 0.452948\n", + "\t5 11682.224028 11112.411355 0.189577 0.159316\n", + "\t10 11389.994295 10831.887277 0.121114 0.101805\n", + "\t15 11029.450833 10396.372864 0.091350 0.078776\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10150.866 K -- next t_inner 11159.164 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 16/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.27462e+43 erg / s Luminosity absorbed = 4.13373e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10634.831735 11415.925493 0.452948 0.501153\n", + "\t5 11112.411355 11688.667754 0.159316 0.188430\n", + "\t10 10831.887277 11397.519913 0.101805 0.120134\n", + "\t15 10396.372864 11045.200458 0.078776 0.090180\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11159.164 K -- next t_inner 10172.913 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 17/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.86785e+42 erg / s Luminosity absorbed = 2.79094e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11415.925493 10678.510651 0.501153 0.453127\n", + "\t5 11688.667754 11152.822099 0.188430 0.159726\n", + "\t10 11397.519913 10907.112682 0.120134 0.099725\n", + "\t15 11045.200458 10508.816973 0.090180 0.076667\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10172.913 K -- next t_inner 11118.359 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 18/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.24749e+43 erg / s Luminosity absorbed = 4.15445e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 10678.510651 11482.446420 0.453127 0.481917\n", + "\t5 11152.822099 11693.549165 0.159726 0.184456\n", + "\t10 10907.112682 11472.013555 0.099725 0.115208\n", + "\t15 10508.816973 10997.309982 0.076667 0.089730\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11118.359 K -- next t_inner 10245.337 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 19/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 9.09476e+42 erg / s Luminosity absorbed = 2.89713e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "\t t_rad next_t_rad w next_w\n", + "\tShell \n", + "\t0 11482.446420 10834.729769 0.481917 0.438322\n", + "\t5 11693.549165 11346.133670 0.184456 0.154204\n", + "\t10 11472.013555 10996.421420 0.115208 0.099677\n", + "\t15 10997.309982 10625.479432 0.089730 0.075531\n", + "\n", + " (\u001b[1mbase.py\u001b[0m:350)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10245.337 K -- next t_inner 11056.949 K (\u001b[1mbase.py\u001b[0m:352)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 20/20 (\u001b[1mbase.py\u001b[0m:268)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22623e+43 erg / s Luminosity absorbed = 4.00603e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", + "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Simulation finished in 20 iterations and took 23.27 s (\u001b[1mbase.py\u001b[0m:308)\n" + ] + } + ], + "source": [ + "from tardis import run_tardis\n", + "\n", + "simulation = run_tardis('tardis_example.yml')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If all goes well, the simulation should run as usual. Afterwards, the\n", + "information from the simulation will all exist in `Simulation` and\n", + "can be examined.\n", + "Some examples for useful/interesting quantities are\n", + "given below (but much more information is available: contact us via \n", + "[tardis-sn-users](http://groups.google.com/forum/#!forum/tardis-sn-users) if you need\n", + "further help)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Examples of finding physical quantities" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For example, two of our important quantities are the parameters of the\n", + "radiation field model, $T_{\\rm rad}$ and $W$. These exist as `numpy.ndarray`\n", + "\n", + "Thus `simulation.plasma.t_rad` will give you a list of the $T_{\\rm rad}$-values for the model zones in cgs units." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([10834.7297692 , 11024.52012206, 11134.85912792, 11299.31893687,\n", + " 11304.06901637, 11346.13367044, 11273.8729839 , 11201.3282228 ,\n", + " 11080.35051086, 11053.1815164 , 10996.42142 , 10906.50207322,\n", + " 10852.60134857, 10768.23991178, 10701.07288864, 10625.47943241,\n", + " 10578.25968193, 10462.71630881, 10328.2464022 , 10198.53837217])" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulation.plasma.t_rad" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similarly, the $W$-values can be accessed using `simulation.plasma.w`" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.43832195, 0.32677702, 0.26128919, 0.20770296, 0.17725587,\n", + " 0.15420374, 0.1387194 , 0.1264399 , 0.11830376, 0.10744254,\n", + " 0.09967675, 0.09360326, 0.08756804, 0.08325674, 0.07930315,\n", + " 0.07553141, 0.07138798, 0.06935054, 0.06784402, 0.06650938])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulation.plasma.w" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Several important quantities that were setup when the model was defined by the configuration file are located in the `model` section of the simulation. For example, the inner and outer velocity boundaries of the zones in the model is given by `simulation.model.v_inner.cgs` and `simulation.model.v_outer.cgs` respectively. These exist as Astropy [Quantities](http://astropy.readthedocs.org/en/v0.2.1/_generated/astropy.units.quantity.Quantity.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$[1.1 \\times 10^{9},~1.145 \\times 10^{9},~1.19 \\times 10^{9},~1.235 \\times 10^{9},~1.28 \\times 10^{9},~1.325 \\times 10^{9},~1.37 \\times 10^{9},~1.415 \\times 10^{9},~1.46 \\times 10^{9},~1.505 \\times 10^{9},~1.55 \\times 10^{9},~1.595 \\times 10^{9},~1.64 \\times 10^{9},~1.685 \\times 10^{9},~1.73 \\times 10^{9},~1.775 \\times 10^{9},~1.82 \\times 10^{9},~1.865 \\times 10^{9},~1.91 \\times 10^{9},~1.955 \\times 10^{9}] \\; \\mathrm{\\frac{cm}{s}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulation.model.v_inner.cgs" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$[1.145 \\times 10^{9},~1.19 \\times 10^{9},~1.235 \\times 10^{9},~1.28 \\times 10^{9},~1.325 \\times 10^{9},~1.37 \\times 10^{9},~1.415 \\times 10^{9},~1.46 \\times 10^{9},~1.505 \\times 10^{9},~1.55 \\times 10^{9},~1.595 \\times 10^{9},~1.64 \\times 10^{9},~1.685 \\times 10^{9},~1.73 \\times 10^{9},~1.775 \\times 10^{9},~1.82 \\times 10^{9},~1.865 \\times 10^{9},~1.91 \\times 10^{9},~1.955 \\times 10^{9},~2 \\times 10^{9}] \\; \\mathrm{\\frac{cm}{s}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulation.model.v_outer.cgs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The average density in the zones is given by `simulation.model.density.cgs`. These also exist as Astropy [Quantities](http://astropy.readthedocs.org/en/v0.2.1/_generated/astropy.units.quantity.Quantity.html)." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$[7.5428036 \\times 10^{-14},~5.728475 \\times 10^{-14},~4.3960742 \\times 10^{-14},~3.4062874 \\times 10^{-14},~2.6631346 \\times 10^{-14},~2.0995965 \\times 10^{-14},~1.6682872 \\times 10^{-14},~1.3353105 \\times 10^{-14},~1.0761538 \\times 10^{-14},~8.7290848 \\times 10^{-15},~7.1236516 \\times 10^{-15},~5.8469209 \\times 10^{-15},~4.8250928 \\times 10^{-15},~4.0023242 \\times 10^{-15},~3.3360386 \\times 10^{-15},~2.7935404 \\times 10^{-15},~2.3495504 \\times 10^{-15},~1.9843968 \\times 10^{-15},~1.6826769 \\times 10^{-15},~1.4322598 \\times 10^{-15}] \\; \\mathrm{\\frac{g}{cm^{3}}}$" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulation.model.density.cgs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Many other interesting quantities are stored in the `plasma`.\n", + "For example the calculated ion populations and level populations is given by `simulation.plasma.ion_number_density` and `simulation.plasma.level_number_density` respectively." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
012345678910111213141516171819
atomic_numberion_number
801.380280e+036.045221e+023.046902e+021.456868e+028.855874e+015.201972e+013.629170e+012.573196e+011.983458e+011.357656e+019.817542e+007.543514e+005.565623e+004.345404e+003.343570e+002.633578e+002.005298e+001.715762e+001.531726e+001.374292e+00
15.393290e+084.094843e+083.141101e+082.431228e+081.899693e+081.495973e+081.188702e+089.515165e+077.673358e+076.221905e+075.077488e+074.169038e+073.440446e+072.854724e+072.379873e+071.993347e+071.676551e+071.416739e+071.201946e+071.023437e+07
29.780989e+041.904997e+052.775463e+054.797901e+054.863297e+055.565803e+054.383339e+053.438730e+052.281928e+052.075235e+051.703380e+051.242273e+051.024814e+057.562351e+045.915039e+044.470640e+043.743945e+042.414008e+041.430706e+048.524308e+03
33.252281e-092.343311e-087.976996e-084.162940e-075.521097e-079.904266e-076.786694e-074.570699e-071.993626e-071.932109e-071.432370e-077.806358e-085.796411e-083.221132e-082.066853e-081.209496e-089.155287e-093.541742e-091.101099e-093.457566e-10
40.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
50.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
60.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
70.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
80.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
1201.346333e-063.950660e-071.426881e-074.794894e-082.277172e-081.031969e-085.976987e-093.547825e-092.376965e-091.345053e-098.243636e-105.520734e-103.490056e-102.397691e-101.614181e-101.125574e-107.472232e-115.898938e-114.971474e-114.231294e-11
16.084662e+022.608497e+021.299483e+026.113372e+013.716500e+012.176241e+011.529509e+011.092661e+018.527359e+005.856457e+004.261848e+003.307046e+002.455226e+001.935492e+001.501131e+001.193128e+009.138621e-017.931379e-017.204117e-016.577398e-01
25.606550e+074.257984e+073.267615e+072.531908e+071.979520e+071.560640e+071.240046e+079.925432e+067.999107e+066.488375e+065.295049e+064.346048e+063.586518e+062.974950e+062.479696e+062.076454e+061.746434e+061.475013e+061.250743e+061.064607e+06
34.120107e-171.847504e-164.315753e-161.483199e-151.533951e-152.087760e-151.222248e-157.092049e-162.819936e-162.283522e-161.467030e-167.216755e-174.688294e-172.368231e-171.364184e-177.273552e-184.886724e-181.821574e-185.619339e-191.755039e-19
40.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
50.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
60.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
70.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
80.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
90.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
100.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
110.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
120.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
1407.121410e-041.921013e-046.599549e-052.054382e-059.708417e-064.296360e-062.567117e-061.572651e-061.113705e-066.364852e-073.997533e-072.788974e-071.804863e-071.288509e-078.939595e-086.450650e-084.371505e-083.639895e-083.262155e-082.943795e-08
11.057234e+054.409044e+042.159442e+049.886849e+035.989365e+033.468313e+032.460782e+031.775245e+031.412253e+039.716312e+027.123876e+025.606352e+024.193053e+023.350009e+022.624996e+022.111578e+021.628349e+021.441288e+021.339320e+021.249635e+02
28.401073e+086.371392e+084.879292e+083.760672e+082.931690e+082.298363e+081.826186e+081.461958e+081.181696e+089.566890e+077.805477e+076.417624e+075.295412e+074.399297e+073.669628e+073.076475e+072.587415e+072.191312e+071.863251e+071.589078e+07
38.192553e+051.549018e+062.217086e+063.728327e+063.767905e+064.267904e+063.395076e+062.691213e+061.821504e+061.660538e+061.374144e+061.017116e+068.458608e+056.331180e+055.007190e+053.833675e+053.234797e+052.130184e+051.294170e+057.897841e+04
47.678176e-044.490784e-031.357295e-025.947951e-027.832168e-021.340207e-019.884805e-027.175832e-023.562515e-023.548489e-022.795368e-021.682397e-021.325599e-028.104905e-035.615334e-033.587664e-032.868875e-031.275024e-034.675402e-041.727755e-04
50.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
60.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
70.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
..................................................................
18100.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
110.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
120.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
130.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
140.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
150.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
160.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
170.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
180.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
2001.332681e-084.248991e-091.606786e-095.764976e-102.742923e-101.263310e-107.115362e-114.104046e-112.617119e-111.464219e-118.760639e-125.642345e-123.482507e-122.302501e-121.502345e-121.010506e-126.556032e-134.885474e-133.839339e-133.045743e-13
12.335159e+011.077167e+015.593754e+002.795791e+001.702578e+001.012249e+006.930320e-014.820902e-013.596454e-012.444799e-011.741170e-011.305166e-019.488691e-027.235695e-025.463538e-024.212014e-023.164596e-022.618354e-022.246849e-021.939451e-02
23.400155e+072.582290e+071.981669e+071.535491e+071.200492e+079.464593e+067.520331e+066.019333e+064.851103e+063.934910e+063.211211e+062.635684e+062.175063e+061.804174e+061.503825e+061.259276e+061.059134e+068.945295e+057.585197e+056.456363e+05
37.014243e-041.836190e-033.163463e-036.982618e-037.131144e-038.685252e-036.156902e-034.339911e-032.400688e-032.095729e-031.577122e-031.000142e-037.580963e-044.890214e-043.431818e-042.291922e-041.775305e-049.424970e-054.431810e-052.100575e-05
40.000000e+000.000000e+000.000000e+004.670974e-206.275559e-201.256827e-197.138208e-203.972085e-201.252727e-201.128297e-200.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
50.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
60.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
70.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
80.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
90.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
100.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
110.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
120.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
130.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
140.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
150.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
160.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
170.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
180.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
190.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
200.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
\n", + "

94 rows × 20 columns

\n", + "
" + ], + "text/plain": [ + " 0 1 2 \\\n", + "atomic_number ion_number \n", + "8 0 1.380280e+03 6.045221e+02 3.046902e+02 \n", + " 1 5.393290e+08 4.094843e+08 3.141101e+08 \n", + " 2 9.780989e+04 1.904997e+05 2.775463e+05 \n", + " 3 3.252281e-09 2.343311e-08 7.976996e-08 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "12 0 1.346333e-06 3.950660e-07 1.426881e-07 \n", + " 1 6.084662e+02 2.608497e+02 1.299483e+02 \n", + " 2 5.606550e+07 4.257984e+07 3.267615e+07 \n", + " 3 4.120107e-17 1.847504e-16 4.315753e-16 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "14 0 7.121410e-04 1.921013e-04 6.599549e-05 \n", + " 1 1.057234e+05 4.409044e+04 2.159442e+04 \n", + " 2 8.401073e+08 6.371392e+08 4.879292e+08 \n", + " 3 8.192553e+05 1.549018e+06 2.217086e+06 \n", + " 4 7.678176e-04 4.490784e-03 1.357295e-02 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "... ... ... ... \n", + "18 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "20 0 1.332681e-08 4.248991e-09 1.606786e-09 \n", + " 1 2.335159e+01 1.077167e+01 5.593754e+00 \n", + " 2 3.400155e+07 2.582290e+07 1.981669e+07 \n", + " 3 7.014243e-04 1.836190e-03 3.163463e-03 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 19 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 20 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "\n", + " 3 4 5 \\\n", + "atomic_number ion_number \n", + "8 0 1.456868e+02 8.855874e+01 5.201972e+01 \n", + " 1 2.431228e+08 1.899693e+08 1.495973e+08 \n", + " 2 4.797901e+05 4.863297e+05 5.565803e+05 \n", + " 3 4.162940e-07 5.521097e-07 9.904266e-07 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "12 0 4.794894e-08 2.277172e-08 1.031969e-08 \n", + " 1 6.113372e+01 3.716500e+01 2.176241e+01 \n", + " 2 2.531908e+07 1.979520e+07 1.560640e+07 \n", + " 3 1.483199e-15 1.533951e-15 2.087760e-15 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "14 0 2.054382e-05 9.708417e-06 4.296360e-06 \n", + " 1 9.886849e+03 5.989365e+03 3.468313e+03 \n", + " 2 3.760672e+08 2.931690e+08 2.298363e+08 \n", + " 3 3.728327e+06 3.767905e+06 4.267904e+06 \n", + " 4 5.947951e-02 7.832168e-02 1.340207e-01 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "... ... ... ... \n", + "18 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "20 0 5.764976e-10 2.742923e-10 1.263310e-10 \n", + " 1 2.795791e+00 1.702578e+00 1.012249e+00 \n", + " 2 1.535491e+07 1.200492e+07 9.464593e+06 \n", + " 3 6.982618e-03 7.131144e-03 8.685252e-03 \n", + " 4 4.670974e-20 6.275559e-20 1.256827e-19 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 19 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 20 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "\n", + " 6 7 8 \\\n", + "atomic_number ion_number \n", + "8 0 3.629170e+01 2.573196e+01 1.983458e+01 \n", + " 1 1.188702e+08 9.515165e+07 7.673358e+07 \n", + " 2 4.383339e+05 3.438730e+05 2.281928e+05 \n", + " 3 6.786694e-07 4.570699e-07 1.993626e-07 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "12 0 5.976987e-09 3.547825e-09 2.376965e-09 \n", + " 1 1.529509e+01 1.092661e+01 8.527359e+00 \n", + " 2 1.240046e+07 9.925432e+06 7.999107e+06 \n", + " 3 1.222248e-15 7.092049e-16 2.819936e-16 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "14 0 2.567117e-06 1.572651e-06 1.113705e-06 \n", + " 1 2.460782e+03 1.775245e+03 1.412253e+03 \n", + " 2 1.826186e+08 1.461958e+08 1.181696e+08 \n", + " 3 3.395076e+06 2.691213e+06 1.821504e+06 \n", + " 4 9.884805e-02 7.175832e-02 3.562515e-02 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "... ... ... ... \n", + "18 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "20 0 7.115362e-11 4.104046e-11 2.617119e-11 \n", + " 1 6.930320e-01 4.820902e-01 3.596454e-01 \n", + " 2 7.520331e+06 6.019333e+06 4.851103e+06 \n", + " 3 6.156902e-03 4.339911e-03 2.400688e-03 \n", + " 4 7.138208e-20 3.972085e-20 1.252727e-20 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 19 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 20 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "\n", + " 9 10 11 \\\n", + "atomic_number ion_number \n", + "8 0 1.357656e+01 9.817542e+00 7.543514e+00 \n", + " 1 6.221905e+07 5.077488e+07 4.169038e+07 \n", + " 2 2.075235e+05 1.703380e+05 1.242273e+05 \n", + " 3 1.932109e-07 1.432370e-07 7.806358e-08 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "12 0 1.345053e-09 8.243636e-10 5.520734e-10 \n", + " 1 5.856457e+00 4.261848e+00 3.307046e+00 \n", + " 2 6.488375e+06 5.295049e+06 4.346048e+06 \n", + " 3 2.283522e-16 1.467030e-16 7.216755e-17 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "14 0 6.364852e-07 3.997533e-07 2.788974e-07 \n", + " 1 9.716312e+02 7.123876e+02 5.606352e+02 \n", + " 2 9.566890e+07 7.805477e+07 6.417624e+07 \n", + " 3 1.660538e+06 1.374144e+06 1.017116e+06 \n", + " 4 3.548489e-02 2.795368e-02 1.682397e-02 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "... ... ... ... \n", + "18 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "20 0 1.464219e-11 8.760639e-12 5.642345e-12 \n", + " 1 2.444799e-01 1.741170e-01 1.305166e-01 \n", + " 2 3.934910e+06 3.211211e+06 2.635684e+06 \n", + " 3 2.095729e-03 1.577122e-03 1.000142e-03 \n", + " 4 1.128297e-20 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 19 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 20 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "\n", + " 12 13 14 \\\n", + "atomic_number ion_number \n", + "8 0 5.565623e+00 4.345404e+00 3.343570e+00 \n", + " 1 3.440446e+07 2.854724e+07 2.379873e+07 \n", + " 2 1.024814e+05 7.562351e+04 5.915039e+04 \n", + " 3 5.796411e-08 3.221132e-08 2.066853e-08 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "12 0 3.490056e-10 2.397691e-10 1.614181e-10 \n", + " 1 2.455226e+00 1.935492e+00 1.501131e+00 \n", + " 2 3.586518e+06 2.974950e+06 2.479696e+06 \n", + " 3 4.688294e-17 2.368231e-17 1.364184e-17 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "14 0 1.804863e-07 1.288509e-07 8.939595e-08 \n", + " 1 4.193053e+02 3.350009e+02 2.624996e+02 \n", + " 2 5.295412e+07 4.399297e+07 3.669628e+07 \n", + " 3 8.458608e+05 6.331180e+05 5.007190e+05 \n", + " 4 1.325599e-02 8.104905e-03 5.615334e-03 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "... ... ... ... \n", + "18 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "20 0 3.482507e-12 2.302501e-12 1.502345e-12 \n", + " 1 9.488691e-02 7.235695e-02 5.463538e-02 \n", + " 2 2.175063e+06 1.804174e+06 1.503825e+06 \n", + " 3 7.580963e-04 4.890214e-04 3.431818e-04 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 19 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 20 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "\n", + " 15 16 17 \\\n", + "atomic_number ion_number \n", + "8 0 2.633578e+00 2.005298e+00 1.715762e+00 \n", + " 1 1.993347e+07 1.676551e+07 1.416739e+07 \n", + " 2 4.470640e+04 3.743945e+04 2.414008e+04 \n", + " 3 1.209496e-08 9.155287e-09 3.541742e-09 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "12 0 1.125574e-10 7.472232e-11 5.898938e-11 \n", + " 1 1.193128e+00 9.138621e-01 7.931379e-01 \n", + " 2 2.076454e+06 1.746434e+06 1.475013e+06 \n", + " 3 7.273552e-18 4.886724e-18 1.821574e-18 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "14 0 6.450650e-08 4.371505e-08 3.639895e-08 \n", + " 1 2.111578e+02 1.628349e+02 1.441288e+02 \n", + " 2 3.076475e+07 2.587415e+07 2.191312e+07 \n", + " 3 3.833675e+05 3.234797e+05 2.130184e+05 \n", + " 4 3.587664e-03 2.868875e-03 1.275024e-03 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "... ... ... ... \n", + "18 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "20 0 1.010506e-12 6.556032e-13 4.885474e-13 \n", + " 1 4.212014e-02 3.164596e-02 2.618354e-02 \n", + " 2 1.259276e+06 1.059134e+06 8.945295e+05 \n", + " 3 2.291922e-04 1.775305e-04 9.424970e-05 \n", + " 4 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 19 0.000000e+00 0.000000e+00 0.000000e+00 \n", + " 20 0.000000e+00 0.000000e+00 0.000000e+00 \n", + "\n", + " 18 19 \n", + "atomic_number ion_number \n", + "8 0 1.531726e+00 1.374292e+00 \n", + " 1 1.201946e+07 1.023437e+07 \n", + " 2 1.430706e+04 8.524308e+03 \n", + " 3 1.101099e-09 3.457566e-10 \n", + " 4 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 \n", + "12 0 4.971474e-11 4.231294e-11 \n", + " 1 7.204117e-01 6.577398e-01 \n", + " 2 1.250743e+06 1.064607e+06 \n", + " 3 5.619339e-19 1.755039e-19 \n", + " 4 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 \n", + "14 0 3.262155e-08 2.943795e-08 \n", + " 1 1.339320e+02 1.249635e+02 \n", + " 2 1.863251e+07 1.589078e+07 \n", + " 3 1.294170e+05 7.897841e+04 \n", + " 4 4.675402e-04 1.727755e-04 \n", + " 5 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 \n", + "... ... ... \n", + "18 10 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 \n", + "20 0 3.839339e-13 3.045743e-13 \n", + " 1 2.246849e-02 1.939451e-02 \n", + " 2 7.585197e+05 6.456363e+05 \n", + " 3 4.431810e-05 2.100575e-05 \n", + " 4 0.000000e+00 0.000000e+00 \n", + " 5 0.000000e+00 0.000000e+00 \n", + " 6 0.000000e+00 0.000000e+00 \n", + " 7 0.000000e+00 0.000000e+00 \n", + " 8 0.000000e+00 0.000000e+00 \n", + " 9 0.000000e+00 0.000000e+00 \n", + " 10 0.000000e+00 0.000000e+00 \n", + " 11 0.000000e+00 0.000000e+00 \n", + " 12 0.000000e+00 0.000000e+00 \n", + " 13 0.000000e+00 0.000000e+00 \n", + " 14 0.000000e+00 0.000000e+00 \n", + " 15 0.000000e+00 0.000000e+00 \n", + " 16 0.000000e+00 0.000000e+00 \n", + " 17 0.000000e+00 0.000000e+00 \n", + " 18 0.000000e+00 0.000000e+00 \n", + " 19 0.000000e+00 0.000000e+00 \n", + " 20 0.000000e+00 0.000000e+00 \n", + "\n", + "[94 rows x 20 columns]" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulation.plasma.ion_number_density" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
012345678910111213141516171819
atomic_numberion_numberlevel_number
800724.299083316.384041159.21835975.95554446.16808627.10340518.92781713.43399610.3725977.1026245.1401433.9544882.9198232.282355e+001.757802e+001.385998e+001.056041e+009.050186e-018.094569e-017.275697e-01
1425.541419185.94975193.59724544.66410827.14843115.93892911.1296107.8981956.0969664.1746793.0208792.3236691.7155191.340759e+001.032475e+008.139671e-016.201311e-015.313209e-014.750836e-014.269029e-01
2140.55874661.42990730.92330514.7583448.9706795.2668853.6774802.6095982.0142701.3791690.9979470.7675670.5666544.428354e-013.409936e-012.688096e-012.047875e-011.754414e-011.568526e-011.409282e-01
388.06386839.88856920.48986710.0708456.1265653.6236882.4981951.7499891.3214570.9002950.6446310.4875200.3562412.739129e-012.081708e-011.616668e-011.220039e-011.020938e-018.875591e-027.756551e-02
41.6296180.7690110.4042880.2055220.1251480.0746510.0507200.0350070.0257780.0174620.0123540.0091640.0066184.994795e-033.739352e-032.854639e-032.131074e-031.735927e-031.461477e-031.237289e-03
50.0403280.0208520.0115440.0063270.0038610.0023470.0015440.0010310.0007180.0004800.0003310.0002350.0001651.196208e-048.660153e-056.363173e-054.636896e-053.556994e-052.787792e-052.198773e-05
60.0161880.0084280.0046840.0025820.0015760.0009590.0006290.0004190.0002910.0001940.0001330.0000950.0000664.789850e-053.458903e-052.534132e-051.843267e-051.407569e-051.097219e-058.607646e-06
70.0043880.0023360.0013150.0007380.0004510.0002760.0001790.0001190.0000810.0000540.0000370.0000260.0000181.287856e-059.223661e-066.694378e-064.840483e-063.642144e-062.789568e-062.150620e-06
80.0073110.0038930.0021910.0012300.0007510.0004590.0002990.0001980.0001350.0000900.0000610.0000430.0000302.145848e-051.536859e-051.115424e-058.065254e-066.068553e-064.647971e-063.583345e-06
90.0102310.0054480.0030660.0017220.0010510.0006430.0004180.0002770.0001890.0001260.0000860.0000600.0000423.002712e-052.150540e-051.560817e-051.128571e-058.491681e-066.503828e-065.014082e-06
100.0033620.0017990.0010150.0005720.0003490.0002140.0001390.0000920.0000630.0000420.0000280.0000200.0000149.852180e-067.044304e-065.102842e-063.685227e-062.764553e-062.109822e-061.620802e-06
110.0056030.0029970.0016920.0009530.0005820.0003560.0002320.0001530.0001040.0000690.0000470.0000330.0000231.641907e-051.173962e-058.504093e-066.141578e-064.607234e-063.516097e-062.701124e-06
120.0011210.0005990.0003380.0001910.0001160.0000710.0000460.0000310.0000210.0000140.0000090.0000070.0000053.283746e-062.347875e-061.700782e-061.228289e-069.214269e-077.032039e-075.402128e-07
130.0022580.0012270.0006980.0003990.0002440.0001500.0000970.0000630.0000430.0000280.0000190.0000130.0000096.578356e-064.676593e-063.365578e-062.420553e-061.797254e-061.354899e-061.028308e-06
140.0012260.0006680.0003800.0002180.0001330.0000820.0000530.0000350.0000230.0000150.0000110.0000070.0000053.571458e-062.537378e-061.824754e-061.311786e-069.729029e-077.324624e-075.551699e-07
150.0031390.0017130.0009780.0005600.0003420.0002100.0001360.0000890.0000600.0000400.0000270.0000190.0000139.132513e-066.481784e-064.656043e-063.344735e-062.476215e-061.860264e-061.407004e-06
160.0024420.0013330.0007610.0004360.0002660.0001640.0001060.0000690.0000470.0000310.0000210.0000150.0000107.102984e-065.041329e-063.621325e-062.601430e-061.925923e-061.446855e-061.094323e-06
170.0017440.0009520.0005430.0003110.0001900.0001170.0000750.0000490.0000330.0000220.0000150.0000100.0000075.073477e-063.600890e-062.586618e-061.858133e-061.375636e-061.033450e-067.816457e-07
180.0010460.0005710.0003260.0001870.0001140.0000700.0000450.0000300.0000200.0000130.0000090.0000060.0000043.044044e-062.160504e-061.551949e-061.114864e-068.253697e-076.200611e-074.689806e-07
190.0003490.0001900.0001090.0000620.0000380.0000230.0000150.0000100.0000070.0000040.0000030.0000020.0000011.014675e-067.201632e-075.173129e-073.716190e-072.751214e-072.066856e-071.563258e-07
200.0010370.0005660.0003230.0001850.0001130.0000700.0000450.0000290.0000200.0000130.0000090.0000060.0000043.016739e-062.141003e-061.537842e-061.104685e-068.177511e-076.142634e-074.645400e-07
210.0017280.0009430.0005390.0003090.0001890.0001160.0000750.0000490.0000330.0000220.0000150.0000100.0000075.027852e-063.568305e-062.563046e-061.841125e-061.362905e-061.023762e-067.742258e-07
220.0024200.0013210.0007540.0004320.0002640.0001620.0001050.0000690.0000460.0000310.0000210.0000140.0000107.038908e-064.995567e-063.588220e-062.577543e-061.908044e-061.433249e-061.083902e-06
230.0008380.0004590.0002630.0001510.0000920.0000570.0000370.0000240.0000160.0000110.0000070.0000050.0000032.434600e-061.725531e-061.237515e-068.880885e-076.558311e-074.912221e-073.704348e-07
240.0013970.0007650.0004380.0002520.0001540.0000950.0000610.0000400.0000270.0000180.0000120.0000080.0000064.057302e-062.875625e-062.062337e-061.480012e-061.092951e-068.186267e-076.173327e-07
250.0019550.0010710.0006130.0003520.0002150.0001320.0000850.0000560.0000370.0000250.0000170.0000120.0000085.679315e-064.025227e-062.886805e-062.071680e-061.529879e-061.145886e-068.641199e-07
260.0007750.0004250.0002430.0001400.0000860.0000530.0000340.0000220.0000150.0000100.0000070.0000050.0000032.250648e-061.594368e-061.142805e-068.198292e-076.048888e-074.525892e-073.409460e-07
270.0012920.0007090.0004060.0002330.0001430.0000880.0000570.0000370.0000250.0000160.0000110.0000080.0000053.751039e-062.657251e-061.904654e-061.366367e-061.008137e-067.543069e-075.682369e-07
280.0002580.0001420.0000810.0000470.0000290.0000180.0000110.0000070.0000050.0000030.0000020.0000020.0000017.501817e-075.314315e-073.809173e-072.732637e-072.016202e-071.508559e-071.136432e-07
290.0014910.0008210.0004710.0002720.0001660.0001020.0000660.0000430.0000290.0000190.0000130.0000090.0000064.324013e-063.059414e-062.189866e-061.569593e-061.155555e-068.623594e-076.479636e-07
.....................................................................
208530.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
540.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
550.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
560.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
570.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
580.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
590.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
600.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
610.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
620.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
630.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
640.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
650.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
660.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
670.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
680.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
690.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
700.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
900.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
1000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
1100.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
1200.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
1300.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
1400.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
1500.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
1600.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
1700.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
1800.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
1900.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
2000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
\n", + "

4435 rows × 20 columns

\n", + "
" + ], + "text/plain": [ + " 0 1 2 \\\n", + "atomic_number ion_number level_number \n", + "8 0 0 724.299083 316.384041 159.218359 \n", + " 1 425.541419 185.949751 93.597245 \n", + " 2 140.558746 61.429907 30.923305 \n", + " 3 88.063868 39.888569 20.489867 \n", + " 4 1.629618 0.769011 0.404288 \n", + " 5 0.040328 0.020852 0.011544 \n", + " 6 0.016188 0.008428 0.004684 \n", + " 7 0.004388 0.002336 0.001315 \n", + " 8 0.007311 0.003893 0.002191 \n", + " 9 0.010231 0.005448 0.003066 \n", + " 10 0.003362 0.001799 0.001015 \n", + " 11 0.005603 0.002997 0.001692 \n", + " 12 0.001121 0.000599 0.000338 \n", + " 13 0.002258 0.001227 0.000698 \n", + " 14 0.001226 0.000668 0.000380 \n", + " 15 0.003139 0.001713 0.000978 \n", + " 16 0.002442 0.001333 0.000761 \n", + " 17 0.001744 0.000952 0.000543 \n", + " 18 0.001046 0.000571 0.000326 \n", + " 19 0.000349 0.000190 0.000109 \n", + " 20 0.001037 0.000566 0.000323 \n", + " 21 0.001728 0.000943 0.000539 \n", + " 22 0.002420 0.001321 0.000754 \n", + " 23 0.000838 0.000459 0.000263 \n", + " 24 0.001397 0.000765 0.000438 \n", + " 25 0.001955 0.001071 0.000613 \n", + " 26 0.000775 0.000425 0.000243 \n", + " 27 0.001292 0.000709 0.000406 \n", + " 28 0.000258 0.000142 0.000081 \n", + " 29 0.001491 0.000821 0.000471 \n", + "... ... ... ... \n", + "20 8 53 0.000000 0.000000 0.000000 \n", + " 54 0.000000 0.000000 0.000000 \n", + " 55 0.000000 0.000000 0.000000 \n", + " 56 0.000000 0.000000 0.000000 \n", + " 57 0.000000 0.000000 0.000000 \n", + " 58 0.000000 0.000000 0.000000 \n", + " 59 0.000000 0.000000 0.000000 \n", + " 60 0.000000 0.000000 0.000000 \n", + " 61 0.000000 0.000000 0.000000 \n", + " 62 0.000000 0.000000 0.000000 \n", + " 63 0.000000 0.000000 0.000000 \n", + " 64 0.000000 0.000000 0.000000 \n", + " 65 0.000000 0.000000 0.000000 \n", + " 66 0.000000 0.000000 0.000000 \n", + " 67 0.000000 0.000000 0.000000 \n", + " 68 0.000000 0.000000 0.000000 \n", + " 69 0.000000 0.000000 0.000000 \n", + " 70 0.000000 0.000000 0.000000 \n", + " 9 0 0.000000 0.000000 0.000000 \n", + " 10 0 0.000000 0.000000 0.000000 \n", + " 11 0 0.000000 0.000000 0.000000 \n", + " 12 0 0.000000 0.000000 0.000000 \n", + " 13 0 0.000000 0.000000 0.000000 \n", + " 14 0 0.000000 0.000000 0.000000 \n", + " 15 0 0.000000 0.000000 0.000000 \n", + " 16 0 0.000000 0.000000 0.000000 \n", + " 17 0 0.000000 0.000000 0.000000 \n", + " 18 0 0.000000 0.000000 0.000000 \n", + " 19 0 0.000000 0.000000 0.000000 \n", + " 20 0 0.000000 0.000000 0.000000 \n", + "\n", + " 3 4 5 \\\n", + "atomic_number ion_number level_number \n", + "8 0 0 75.955544 46.168086 27.103405 \n", + " 1 44.664108 27.148431 15.938929 \n", + " 2 14.758344 8.970679 5.266885 \n", + " 3 10.070845 6.126565 3.623688 \n", + " 4 0.205522 0.125148 0.074651 \n", + " 5 0.006327 0.003861 0.002347 \n", + " 6 0.002582 0.001576 0.000959 \n", + " 7 0.000738 0.000451 0.000276 \n", + " 8 0.001230 0.000751 0.000459 \n", + " 9 0.001722 0.001051 0.000643 \n", + " 10 0.000572 0.000349 0.000214 \n", + " 11 0.000953 0.000582 0.000356 \n", + " 12 0.000191 0.000116 0.000071 \n", + " 13 0.000399 0.000244 0.000150 \n", + " 14 0.000218 0.000133 0.000082 \n", + " 15 0.000560 0.000342 0.000210 \n", + " 16 0.000436 0.000266 0.000164 \n", + " 17 0.000311 0.000190 0.000117 \n", + " 18 0.000187 0.000114 0.000070 \n", + " 19 0.000062 0.000038 0.000023 \n", + " 20 0.000185 0.000113 0.000070 \n", + " 21 0.000309 0.000189 0.000116 \n", + " 22 0.000432 0.000264 0.000162 \n", + " 23 0.000151 0.000092 0.000057 \n", + " 24 0.000252 0.000154 0.000095 \n", + " 25 0.000352 0.000215 0.000132 \n", + " 26 0.000140 0.000086 0.000053 \n", + " 27 0.000233 0.000143 0.000088 \n", + " 28 0.000047 0.000029 0.000018 \n", + " 29 0.000272 0.000166 0.000102 \n", + "... ... ... ... \n", + "20 8 53 0.000000 0.000000 0.000000 \n", + " 54 0.000000 0.000000 0.000000 \n", + " 55 0.000000 0.000000 0.000000 \n", + " 56 0.000000 0.000000 0.000000 \n", + " 57 0.000000 0.000000 0.000000 \n", + " 58 0.000000 0.000000 0.000000 \n", + " 59 0.000000 0.000000 0.000000 \n", + " 60 0.000000 0.000000 0.000000 \n", + " 61 0.000000 0.000000 0.000000 \n", + " 62 0.000000 0.000000 0.000000 \n", + " 63 0.000000 0.000000 0.000000 \n", + " 64 0.000000 0.000000 0.000000 \n", + " 65 0.000000 0.000000 0.000000 \n", + " 66 0.000000 0.000000 0.000000 \n", + " 67 0.000000 0.000000 0.000000 \n", + " 68 0.000000 0.000000 0.000000 \n", + " 69 0.000000 0.000000 0.000000 \n", + " 70 0.000000 0.000000 0.000000 \n", + " 9 0 0.000000 0.000000 0.000000 \n", + " 10 0 0.000000 0.000000 0.000000 \n", + " 11 0 0.000000 0.000000 0.000000 \n", + " 12 0 0.000000 0.000000 0.000000 \n", + " 13 0 0.000000 0.000000 0.000000 \n", + " 14 0 0.000000 0.000000 0.000000 \n", + " 15 0 0.000000 0.000000 0.000000 \n", + " 16 0 0.000000 0.000000 0.000000 \n", + " 17 0 0.000000 0.000000 0.000000 \n", + " 18 0 0.000000 0.000000 0.000000 \n", + " 19 0 0.000000 0.000000 0.000000 \n", + " 20 0 0.000000 0.000000 0.000000 \n", + "\n", + " 6 7 8 \\\n", + "atomic_number ion_number level_number \n", + "8 0 0 18.927817 13.433996 10.372597 \n", + " 1 11.129610 7.898195 6.096966 \n", + " 2 3.677480 2.609598 2.014270 \n", + " 3 2.498195 1.749989 1.321457 \n", + " 4 0.050720 0.035007 0.025778 \n", + " 5 0.001544 0.001031 0.000718 \n", + " 6 0.000629 0.000419 0.000291 \n", + " 7 0.000179 0.000119 0.000081 \n", + " 8 0.000299 0.000198 0.000135 \n", + " 9 0.000418 0.000277 0.000189 \n", + " 10 0.000139 0.000092 0.000063 \n", + " 11 0.000232 0.000153 0.000104 \n", + " 12 0.000046 0.000031 0.000021 \n", + " 13 0.000097 0.000063 0.000043 \n", + " 14 0.000053 0.000035 0.000023 \n", + " 15 0.000136 0.000089 0.000060 \n", + " 16 0.000106 0.000069 0.000047 \n", + " 17 0.000075 0.000049 0.000033 \n", + " 18 0.000045 0.000030 0.000020 \n", + " 19 0.000015 0.000010 0.000007 \n", + " 20 0.000045 0.000029 0.000020 \n", + " 21 0.000075 0.000049 0.000033 \n", + " 22 0.000105 0.000069 0.000046 \n", + " 23 0.000037 0.000024 0.000016 \n", + " 24 0.000061 0.000040 0.000027 \n", + " 25 0.000085 0.000056 0.000037 \n", + " 26 0.000034 0.000022 0.000015 \n", + " 27 0.000057 0.000037 0.000025 \n", + " 28 0.000011 0.000007 0.000005 \n", + " 29 0.000066 0.000043 0.000029 \n", + "... ... ... ... \n", + "20 8 53 0.000000 0.000000 0.000000 \n", + " 54 0.000000 0.000000 0.000000 \n", + " 55 0.000000 0.000000 0.000000 \n", + " 56 0.000000 0.000000 0.000000 \n", + " 57 0.000000 0.000000 0.000000 \n", + " 58 0.000000 0.000000 0.000000 \n", + " 59 0.000000 0.000000 0.000000 \n", + " 60 0.000000 0.000000 0.000000 \n", + " 61 0.000000 0.000000 0.000000 \n", + " 62 0.000000 0.000000 0.000000 \n", + " 63 0.000000 0.000000 0.000000 \n", + " 64 0.000000 0.000000 0.000000 \n", + " 65 0.000000 0.000000 0.000000 \n", + " 66 0.000000 0.000000 0.000000 \n", + " 67 0.000000 0.000000 0.000000 \n", + " 68 0.000000 0.000000 0.000000 \n", + " 69 0.000000 0.000000 0.000000 \n", + " 70 0.000000 0.000000 0.000000 \n", + " 9 0 0.000000 0.000000 0.000000 \n", + " 10 0 0.000000 0.000000 0.000000 \n", + " 11 0 0.000000 0.000000 0.000000 \n", + " 12 0 0.000000 0.000000 0.000000 \n", + " 13 0 0.000000 0.000000 0.000000 \n", + " 14 0 0.000000 0.000000 0.000000 \n", + " 15 0 0.000000 0.000000 0.000000 \n", + " 16 0 0.000000 0.000000 0.000000 \n", + " 17 0 0.000000 0.000000 0.000000 \n", + " 18 0 0.000000 0.000000 0.000000 \n", + " 19 0 0.000000 0.000000 0.000000 \n", + " 20 0 0.000000 0.000000 0.000000 \n", + "\n", + " 9 10 11 12 \\\n", + "atomic_number ion_number level_number \n", + "8 0 0 7.102624 5.140143 3.954488 2.919823 \n", + " 1 4.174679 3.020879 2.323669 1.715519 \n", + " 2 1.379169 0.997947 0.767567 0.566654 \n", + " 3 0.900295 0.644631 0.487520 0.356241 \n", + " 4 0.017462 0.012354 0.009164 0.006618 \n", + " 5 0.000480 0.000331 0.000235 0.000165 \n", + " 6 0.000194 0.000133 0.000095 0.000066 \n", + " 7 0.000054 0.000037 0.000026 0.000018 \n", + " 8 0.000090 0.000061 0.000043 0.000030 \n", + " 9 0.000126 0.000086 0.000060 0.000042 \n", + " 10 0.000042 0.000028 0.000020 0.000014 \n", + " 11 0.000069 0.000047 0.000033 0.000023 \n", + " 12 0.000014 0.000009 0.000007 0.000005 \n", + " 13 0.000028 0.000019 0.000013 0.000009 \n", + " 14 0.000015 0.000011 0.000007 0.000005 \n", + " 15 0.000040 0.000027 0.000019 0.000013 \n", + " 16 0.000031 0.000021 0.000015 0.000010 \n", + " 17 0.000022 0.000015 0.000010 0.000007 \n", + " 18 0.000013 0.000009 0.000006 0.000004 \n", + " 19 0.000004 0.000003 0.000002 0.000001 \n", + " 20 0.000013 0.000009 0.000006 0.000004 \n", + " 21 0.000022 0.000015 0.000010 0.000007 \n", + " 22 0.000031 0.000021 0.000014 0.000010 \n", + " 23 0.000011 0.000007 0.000005 0.000003 \n", + " 24 0.000018 0.000012 0.000008 0.000006 \n", + " 25 0.000025 0.000017 0.000012 0.000008 \n", + " 26 0.000010 0.000007 0.000005 0.000003 \n", + " 27 0.000016 0.000011 0.000008 0.000005 \n", + " 28 0.000003 0.000002 0.000002 0.000001 \n", + " 29 0.000019 0.000013 0.000009 0.000006 \n", + "... ... ... ... ... \n", + "20 8 53 0.000000 0.000000 0.000000 0.000000 \n", + " 54 0.000000 0.000000 0.000000 0.000000 \n", + " 55 0.000000 0.000000 0.000000 0.000000 \n", + " 56 0.000000 0.000000 0.000000 0.000000 \n", + " 57 0.000000 0.000000 0.000000 0.000000 \n", + " 58 0.000000 0.000000 0.000000 0.000000 \n", + " 59 0.000000 0.000000 0.000000 0.000000 \n", + " 60 0.000000 0.000000 0.000000 0.000000 \n", + " 61 0.000000 0.000000 0.000000 0.000000 \n", + " 62 0.000000 0.000000 0.000000 0.000000 \n", + " 63 0.000000 0.000000 0.000000 0.000000 \n", + " 64 0.000000 0.000000 0.000000 0.000000 \n", + " 65 0.000000 0.000000 0.000000 0.000000 \n", + " 66 0.000000 0.000000 0.000000 0.000000 \n", + " 67 0.000000 0.000000 0.000000 0.000000 \n", + " 68 0.000000 0.000000 0.000000 0.000000 \n", + " 69 0.000000 0.000000 0.000000 0.000000 \n", + " 70 0.000000 0.000000 0.000000 0.000000 \n", + " 9 0 0.000000 0.000000 0.000000 0.000000 \n", + " 10 0 0.000000 0.000000 0.000000 0.000000 \n", + " 11 0 0.000000 0.000000 0.000000 0.000000 \n", + " 12 0 0.000000 0.000000 0.000000 0.000000 \n", + " 13 0 0.000000 0.000000 0.000000 0.000000 \n", + " 14 0 0.000000 0.000000 0.000000 0.000000 \n", + " 15 0 0.000000 0.000000 0.000000 0.000000 \n", + " 16 0 0.000000 0.000000 0.000000 0.000000 \n", + " 17 0 0.000000 0.000000 0.000000 0.000000 \n", + " 18 0 0.000000 0.000000 0.000000 0.000000 \n", + " 19 0 0.000000 0.000000 0.000000 0.000000 \n", + " 20 0 0.000000 0.000000 0.000000 0.000000 \n", + "\n", + " 13 14 \\\n", + "atomic_number ion_number level_number \n", + "8 0 0 2.282355e+00 1.757802e+00 \n", + " 1 1.340759e+00 1.032475e+00 \n", + " 2 4.428354e-01 3.409936e-01 \n", + " 3 2.739129e-01 2.081708e-01 \n", + " 4 4.994795e-03 3.739352e-03 \n", + " 5 1.196208e-04 8.660153e-05 \n", + " 6 4.789850e-05 3.458903e-05 \n", + " 7 1.287856e-05 9.223661e-06 \n", + " 8 2.145848e-05 1.536859e-05 \n", + " 9 3.002712e-05 2.150540e-05 \n", + " 10 9.852180e-06 7.044304e-06 \n", + " 11 1.641907e-05 1.173962e-05 \n", + " 12 3.283746e-06 2.347875e-06 \n", + " 13 6.578356e-06 4.676593e-06 \n", + " 14 3.571458e-06 2.537378e-06 \n", + " 15 9.132513e-06 6.481784e-06 \n", + " 16 7.102984e-06 5.041329e-06 \n", + " 17 5.073477e-06 3.600890e-06 \n", + " 18 3.044044e-06 2.160504e-06 \n", + " 19 1.014675e-06 7.201632e-07 \n", + " 20 3.016739e-06 2.141003e-06 \n", + " 21 5.027852e-06 3.568305e-06 \n", + " 22 7.038908e-06 4.995567e-06 \n", + " 23 2.434600e-06 1.725531e-06 \n", + " 24 4.057302e-06 2.875625e-06 \n", + " 25 5.679315e-06 4.025227e-06 \n", + " 26 2.250648e-06 1.594368e-06 \n", + " 27 3.751039e-06 2.657251e-06 \n", + " 28 7.501817e-07 5.314315e-07 \n", + " 29 4.324013e-06 3.059414e-06 \n", + "... ... ... \n", + "20 8 53 0.000000e+00 0.000000e+00 \n", + " 54 0.000000e+00 0.000000e+00 \n", + " 55 0.000000e+00 0.000000e+00 \n", + " 56 0.000000e+00 0.000000e+00 \n", + " 57 0.000000e+00 0.000000e+00 \n", + " 58 0.000000e+00 0.000000e+00 \n", + " 59 0.000000e+00 0.000000e+00 \n", + " 60 0.000000e+00 0.000000e+00 \n", + " 61 0.000000e+00 0.000000e+00 \n", + " 62 0.000000e+00 0.000000e+00 \n", + " 63 0.000000e+00 0.000000e+00 \n", + " 64 0.000000e+00 0.000000e+00 \n", + " 65 0.000000e+00 0.000000e+00 \n", + " 66 0.000000e+00 0.000000e+00 \n", + " 67 0.000000e+00 0.000000e+00 \n", + " 68 0.000000e+00 0.000000e+00 \n", + " 69 0.000000e+00 0.000000e+00 \n", + " 70 0.000000e+00 0.000000e+00 \n", + " 9 0 0.000000e+00 0.000000e+00 \n", + " 10 0 0.000000e+00 0.000000e+00 \n", + " 11 0 0.000000e+00 0.000000e+00 \n", + " 12 0 0.000000e+00 0.000000e+00 \n", + " 13 0 0.000000e+00 0.000000e+00 \n", + " 14 0 0.000000e+00 0.000000e+00 \n", + " 15 0 0.000000e+00 0.000000e+00 \n", + " 16 0 0.000000e+00 0.000000e+00 \n", + " 17 0 0.000000e+00 0.000000e+00 \n", + " 18 0 0.000000e+00 0.000000e+00 \n", + " 19 0 0.000000e+00 0.000000e+00 \n", + " 20 0 0.000000e+00 0.000000e+00 \n", + "\n", + " 15 16 \\\n", + "atomic_number ion_number level_number \n", + "8 0 0 1.385998e+00 1.056041e+00 \n", + " 1 8.139671e-01 6.201311e-01 \n", + " 2 2.688096e-01 2.047875e-01 \n", + " 3 1.616668e-01 1.220039e-01 \n", + " 4 2.854639e-03 2.131074e-03 \n", + " 5 6.363173e-05 4.636896e-05 \n", + " 6 2.534132e-05 1.843267e-05 \n", + " 7 6.694378e-06 4.840483e-06 \n", + " 8 1.115424e-05 8.065254e-06 \n", + " 9 1.560817e-05 1.128571e-05 \n", + " 10 5.102842e-06 3.685227e-06 \n", + " 11 8.504093e-06 6.141578e-06 \n", + " 12 1.700782e-06 1.228289e-06 \n", + " 13 3.365578e-06 2.420553e-06 \n", + " 14 1.824754e-06 1.311786e-06 \n", + " 15 4.656043e-06 3.344735e-06 \n", + " 16 3.621325e-06 2.601430e-06 \n", + " 17 2.586618e-06 1.858133e-06 \n", + " 18 1.551949e-06 1.114864e-06 \n", + " 19 5.173129e-07 3.716190e-07 \n", + " 20 1.537842e-06 1.104685e-06 \n", + " 21 2.563046e-06 1.841125e-06 \n", + " 22 3.588220e-06 2.577543e-06 \n", + " 23 1.237515e-06 8.880885e-07 \n", + " 24 2.062337e-06 1.480012e-06 \n", + " 25 2.886805e-06 2.071680e-06 \n", + " 26 1.142805e-06 8.198292e-07 \n", + " 27 1.904654e-06 1.366367e-06 \n", + " 28 3.809173e-07 2.732637e-07 \n", + " 29 2.189866e-06 1.569593e-06 \n", + "... ... ... \n", + "20 8 53 0.000000e+00 0.000000e+00 \n", + " 54 0.000000e+00 0.000000e+00 \n", + " 55 0.000000e+00 0.000000e+00 \n", + " 56 0.000000e+00 0.000000e+00 \n", + " 57 0.000000e+00 0.000000e+00 \n", + " 58 0.000000e+00 0.000000e+00 \n", + " 59 0.000000e+00 0.000000e+00 \n", + " 60 0.000000e+00 0.000000e+00 \n", + " 61 0.000000e+00 0.000000e+00 \n", + " 62 0.000000e+00 0.000000e+00 \n", + " 63 0.000000e+00 0.000000e+00 \n", + " 64 0.000000e+00 0.000000e+00 \n", + " 65 0.000000e+00 0.000000e+00 \n", + " 66 0.000000e+00 0.000000e+00 \n", + " 67 0.000000e+00 0.000000e+00 \n", + " 68 0.000000e+00 0.000000e+00 \n", + " 69 0.000000e+00 0.000000e+00 \n", + " 70 0.000000e+00 0.000000e+00 \n", + " 9 0 0.000000e+00 0.000000e+00 \n", + " 10 0 0.000000e+00 0.000000e+00 \n", + " 11 0 0.000000e+00 0.000000e+00 \n", + " 12 0 0.000000e+00 0.000000e+00 \n", + " 13 0 0.000000e+00 0.000000e+00 \n", + " 14 0 0.000000e+00 0.000000e+00 \n", + " 15 0 0.000000e+00 0.000000e+00 \n", + " 16 0 0.000000e+00 0.000000e+00 \n", + " 17 0 0.000000e+00 0.000000e+00 \n", + " 18 0 0.000000e+00 0.000000e+00 \n", + " 19 0 0.000000e+00 0.000000e+00 \n", + " 20 0 0.000000e+00 0.000000e+00 \n", + "\n", + " 17 18 \\\n", + "atomic_number ion_number level_number \n", + "8 0 0 9.050186e-01 8.094569e-01 \n", + " 1 5.313209e-01 4.750836e-01 \n", + " 2 1.754414e-01 1.568526e-01 \n", + " 3 1.020938e-01 8.875591e-02 \n", + " 4 1.735927e-03 1.461477e-03 \n", + " 5 3.556994e-05 2.787792e-05 \n", + " 6 1.407569e-05 1.097219e-05 \n", + " 7 3.642144e-06 2.789568e-06 \n", + " 8 6.068553e-06 4.647971e-06 \n", + " 9 8.491681e-06 6.503828e-06 \n", + " 10 2.764553e-06 2.109822e-06 \n", + " 11 4.607234e-06 3.516097e-06 \n", + " 12 9.214269e-07 7.032039e-07 \n", + " 13 1.797254e-06 1.354899e-06 \n", + " 14 9.729029e-07 7.324624e-07 \n", + " 15 2.476215e-06 1.860264e-06 \n", + " 16 1.925923e-06 1.446855e-06 \n", + " 17 1.375636e-06 1.033450e-06 \n", + " 18 8.253697e-07 6.200611e-07 \n", + " 19 2.751214e-07 2.066856e-07 \n", + " 20 8.177511e-07 6.142634e-07 \n", + " 21 1.362905e-06 1.023762e-06 \n", + " 22 1.908044e-06 1.433249e-06 \n", + " 23 6.558311e-07 4.912221e-07 \n", + " 24 1.092951e-06 8.186267e-07 \n", + " 25 1.529879e-06 1.145886e-06 \n", + " 26 6.048888e-07 4.525892e-07 \n", + " 27 1.008137e-06 7.543069e-07 \n", + " 28 2.016202e-07 1.508559e-07 \n", + " 29 1.155555e-06 8.623594e-07 \n", + "... ... ... \n", + "20 8 53 0.000000e+00 0.000000e+00 \n", + " 54 0.000000e+00 0.000000e+00 \n", + " 55 0.000000e+00 0.000000e+00 \n", + " 56 0.000000e+00 0.000000e+00 \n", + " 57 0.000000e+00 0.000000e+00 \n", + " 58 0.000000e+00 0.000000e+00 \n", + " 59 0.000000e+00 0.000000e+00 \n", + " 60 0.000000e+00 0.000000e+00 \n", + " 61 0.000000e+00 0.000000e+00 \n", + " 62 0.000000e+00 0.000000e+00 \n", + " 63 0.000000e+00 0.000000e+00 \n", + " 64 0.000000e+00 0.000000e+00 \n", + " 65 0.000000e+00 0.000000e+00 \n", + " 66 0.000000e+00 0.000000e+00 \n", + " 67 0.000000e+00 0.000000e+00 \n", + " 68 0.000000e+00 0.000000e+00 \n", + " 69 0.000000e+00 0.000000e+00 \n", + " 70 0.000000e+00 0.000000e+00 \n", + " 9 0 0.000000e+00 0.000000e+00 \n", + " 10 0 0.000000e+00 0.000000e+00 \n", + " 11 0 0.000000e+00 0.000000e+00 \n", + " 12 0 0.000000e+00 0.000000e+00 \n", + " 13 0 0.000000e+00 0.000000e+00 \n", + " 14 0 0.000000e+00 0.000000e+00 \n", + " 15 0 0.000000e+00 0.000000e+00 \n", + " 16 0 0.000000e+00 0.000000e+00 \n", + " 17 0 0.000000e+00 0.000000e+00 \n", + " 18 0 0.000000e+00 0.000000e+00 \n", + " 19 0 0.000000e+00 0.000000e+00 \n", + " 20 0 0.000000e+00 0.000000e+00 \n", + "\n", + " 19 \n", + "atomic_number ion_number level_number \n", + "8 0 0 7.275697e-01 \n", + " 1 4.269029e-01 \n", + " 2 1.409282e-01 \n", + " 3 7.756551e-02 \n", + " 4 1.237289e-03 \n", + " 5 2.198773e-05 \n", + " 6 8.607646e-06 \n", + " 7 2.150620e-06 \n", + " 8 3.583345e-06 \n", + " 9 5.014082e-06 \n", + " 10 1.620802e-06 \n", + " 11 2.701124e-06 \n", + " 12 5.402128e-07 \n", + " 13 1.028308e-06 \n", + " 14 5.551699e-07 \n", + " 15 1.407004e-06 \n", + " 16 1.094323e-06 \n", + " 17 7.816457e-07 \n", + " 18 4.689806e-07 \n", + " 19 1.563258e-07 \n", + " 20 4.645400e-07 \n", + " 21 7.742258e-07 \n", + " 22 1.083902e-06 \n", + " 23 3.704348e-07 \n", + " 24 6.173327e-07 \n", + " 25 8.641199e-07 \n", + " 26 3.409460e-07 \n", + " 27 5.682369e-07 \n", + " 28 1.136432e-07 \n", + " 29 6.479636e-07 \n", + "... ... \n", + "20 8 53 0.000000e+00 \n", + " 54 0.000000e+00 \n", + " 55 0.000000e+00 \n", + " 56 0.000000e+00 \n", + " 57 0.000000e+00 \n", + " 58 0.000000e+00 \n", + " 59 0.000000e+00 \n", + " 60 0.000000e+00 \n", + " 61 0.000000e+00 \n", + " 62 0.000000e+00 \n", + " 63 0.000000e+00 \n", + " 64 0.000000e+00 \n", + " 65 0.000000e+00 \n", + " 66 0.000000e+00 \n", + " 67 0.000000e+00 \n", + " 68 0.000000e+00 \n", + " 69 0.000000e+00 \n", + " 70 0.000000e+00 \n", + " 9 0 0.000000e+00 \n", + " 10 0 0.000000e+00 \n", + " 11 0 0.000000e+00 \n", + " 12 0 0.000000e+00 \n", + " 13 0 0.000000e+00 \n", + " 14 0 0.000000e+00 \n", + " 15 0 0.000000e+00 \n", + " 16 0 0.000000e+00 \n", + " 17 0 0.000000e+00 \n", + " 18 0 0.000000e+00 \n", + " 19 0 0.000000e+00 \n", + " 20 0 0.000000e+00 \n", + "\n", + "[4435 rows x 20 columns]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulation.plasma.level_number_density" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "These are stored as Pandas `DataFrames`. An index can be supplied to obtain the population in a particular zone. E.g., for the ion populations of the innermost zone (index = 0), we will use \n", + "`simulation.plasma.ion_number_density[0]`" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "atomic_number ion_number\n", + "8 0 1.380280e+03\n", + " 1 5.393290e+08\n", + " 2 9.780989e+04\n", + " 3 3.252281e-09\n", + " 4 0.000000e+00\n", + " 5 0.000000e+00\n", + " 6 0.000000e+00\n", + " 7 0.000000e+00\n", + " 8 0.000000e+00\n", + "12 0 1.346333e-06\n", + " 1 6.084662e+02\n", + " 2 5.606550e+07\n", + " 3 4.120107e-17\n", + " 4 0.000000e+00\n", + " 5 0.000000e+00\n", + " 6 0.000000e+00\n", + " 7 0.000000e+00\n", + " 8 0.000000e+00\n", + " 9 0.000000e+00\n", + " 10 0.000000e+00\n", + " 11 0.000000e+00\n", + " 12 0.000000e+00\n", + "14 0 7.121410e-04\n", + " 1 1.057234e+05\n", + " 2 8.401073e+08\n", + " 3 8.192553e+05\n", + " 4 7.678176e-04\n", + " 5 0.000000e+00\n", + " 6 0.000000e+00\n", + " 7 0.000000e+00\n", + " ... \n", + "18 10 0.000000e+00\n", + " 11 0.000000e+00\n", + " 12 0.000000e+00\n", + " 13 0.000000e+00\n", + " 14 0.000000e+00\n", + " 15 0.000000e+00\n", + " 16 0.000000e+00\n", + " 17 0.000000e+00\n", + " 18 0.000000e+00\n", + "20 0 1.332681e-08\n", + " 1 2.335159e+01\n", + " 2 3.400155e+07\n", + " 3 7.014243e-04\n", + " 4 0.000000e+00\n", + " 5 0.000000e+00\n", + " 6 0.000000e+00\n", + " 7 0.000000e+00\n", + " 8 0.000000e+00\n", + " 9 0.000000e+00\n", + " 10 0.000000e+00\n", + " 11 0.000000e+00\n", + " 12 0.000000e+00\n", + " 13 0.000000e+00\n", + " 14 0.000000e+00\n", + " 15 0.000000e+00\n", + " 16 0.000000e+00\n", + " 17 0.000000e+00\n", + " 18 0.000000e+00\n", + " 19 0.000000e+00\n", + " 20 0.000000e+00\n", + "Name: 0, Length: 94, dtype: float64" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulation.plasma.ion_number_density[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ion populations for a particular ionization stage of a particular element can be accessed by specifying an appropriate tuple (𝑍,𝐶), which identifies the element (via atomic number 𝑍 ) and the charge (via the ion charge 𝐶 ). Thus, `simulation.plasma.ion_number_density.loc[14,1]` will identify the ion popuations for Si II (𝑍=14,𝐶=1) in all the zones. " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 105723.411638\n", + "1 44090.436208\n", + "2 21594.422001\n", + "3 9886.848793\n", + "4 5989.365036\n", + "5 3468.313242\n", + "6 2460.782422\n", + "7 1775.244868\n", + "8 1412.252955\n", + "9 971.631213\n", + "10 712.387551\n", + "11 560.635175\n", + "12 419.305282\n", + "13 335.000930\n", + "14 262.499557\n", + "15 211.157774\n", + "16 162.834905\n", + "17 144.128751\n", + "18 133.932017\n", + "19 124.963505\n", + "Name: (14, 1), dtype: float64" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulation.plasma.ion_number_density.loc[14,1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The above examples can be combined to obtain e.g. the Si II population in the innermost zone\n", + "can be obtained by\n", + "`simulation.plasma.ion_number_density[0].loc[14,1]`" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "105723.41163844905" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulation.plasma.ion_number_density[0].loc[14,1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The level populations are stored (and can be accessed) in a similar way - a third label can be used to pick out a particular atomic level. E.g., to pull out the population of the ground state (index 0) of Si II we can use `simulation.plasma.level_number_density.loc[14,1,0]`" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 35851.432649\n", + "1 14931.643658\n", + "2 7307.391148\n", + "3 3341.597977\n", + "4 2024.238524\n", + "5 1171.823393\n", + "6 831.862975\n", + "7 600.439318\n", + "8 478.083068\n", + "9 328.985257\n", + "10 241.304587\n", + "11 190.021082\n", + "12 142.171548\n", + "13 113.651958\n", + "14 89.095253\n", + "15 71.705046\n", + "16 55.312585\n", + "17 48.994766\n", + "18 45.567026\n", + "19 42.549623\n", + "Name: (14, 1, 0), dtype: float64" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "simulation.plasma.level_number_density.loc[14,1,0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Notes\n", + "- If you prefer to work in SI units, all the Astropy Quantities may instead by accessed with “xxx.si”.\n", + "\n", + "- Information that is not stored as Astropy Quantities (e.g. the ion and level populations used in the example above) are usually stored in cgs units (i.e. cm−3 for the populations)." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.7" + }, + "nbsphinx": { + "execute": "always", + "timeout": -1 + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/physics/physical_quantities.rst b/docs/physics/physical_quantities.rst deleted file mode 100644 index b0c4081ce9b..00000000000 --- a/docs/physics/physical_quantities.rst +++ /dev/null @@ -1,134 +0,0 @@ -.. _physical_quantities: - -***************************** -Accessing Physical Quantities -***************************** - -In order to compute the synthetic spectrum, Tardis must either be told -or must calculate many physical properties of the model. To understand and -test the code it can be important to look at these values. One -easy way to do this is to run Tardis in an interactive mode and then -inspect the model properties. - - -Runing in interactive Python session ------------------------------------- - -With iPython installed launch a session using - -.. code-block:: none - - ipython --pylab - -and then run your calculation, which is based on your "my_config.yml" file - -.. code-block:: python - - from tardis import run_tardis - - - model = run_tardis('myconfig.yml') - - -If all goes well, the simulation should run as usual. Afterwards, the -information from the simulation will all exist in "radial1d" and -can be examined. Some examples for useful/interesting quantities are -given below (but much more information is available: contact us via -`tardis-sn-users `_ if you need -further help). - -Examples of finding physical quantities ---------------------------------------- - -For example, two of our important quantities are the parameters of the -radiation field model, :math:`T_{\rm rad}` and :math:`W`. These exist -as Astropy `Quantities `_. Thus - -.. code-block:: python - - model.t_rad.cgs - -will give you a list of the :math:`T_{\rm rad}`-values for the model zones -in cgs units. To obtain an array of the values (without units) use - -.. code-block:: python - - model.t_rad.cgs.value - -Similarly, the :math:`W`-values can be accessed using - -.. code-block:: python - - model.ws.cgs - - -Several important quantities that were setup when the model was defined -by the configuration file are located in the "tardis_config" -section. For example, the inner and outer velocity boundaries of the -zones in the model - -.. code-block:: python - - model.tardis_config.structure.v_inner.cgs - model.tardis_config.structure.v_outer.cgs - -and the average density in the zones - -.. code-block:: python - - model.tardis_config.structure.mean_densities.cgs - -Many other interesting quantities are stored in the -"plasma_array". For example the calculated ion populations or level -populations: - -.. code-block:: python - - model.plasma_array.ion_populations - model.plasma_array.level_populations - -These are stored as Pandas `DataFrames -`_. -An index can be supplied to obtain the population in a particular -zone. E.g., for the ion populations of the innermost zone (index = 0) - -.. code-block:: python - - model.plasma_array.ion_populations[0] - -Ion populations for a particular ionization stage of a particular -element can be accessed by specifying an appropriate tuple :math:`(Z,C)`, which -identifies the element (via atomic number :math:`Z` ) and the charge -(via the ion charge :math:`C` ). Thus, - -.. code-block:: python - - model.plasma_array.ion_populations.ix[(14,1)] - -will identify the ion popuations for Si II (:math:`Z=14, C=1`) in all -the zones. The above examples can be combined to obtain e.g. the Si II -population in the innermost zone - -.. code-block:: python - - model.plasma_array.ion_populations[0].ix[(14,1)] - -The level populations are stored (and can be accessed) in a similar -way - a third label can be used to pick out a particular atomic -level. E.g., to pull out the population of the ground state (index 0) -of Si II - -.. code-block:: python - - model.plasma_array.level_populations.ix[(14,1,0)] - -.. note:: - - If you prefer to work in SI units, all the astropy Quantities may - instead by accessed with "xxx.si". - -.. note:: - - Information that is not stored as astropy Quantities (e.g. the ion - an level populations used in the example above) are usually stored - in cgs units (i.e. :math:`{\rm cm}^{-3}` for the populations). From 6056f3bb6083969c1aa0bd31d3849b86c2d5b703 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Tue, 2 Jun 2020 16:11:22 -0300 Subject: [PATCH 240/467] Remove test pipeline (#1180) --- azure-pipelines/self-agent-test.yml | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 azure-pipelines/self-agent-test.yml diff --git a/azure-pipelines/self-agent-test.yml b/azure-pipelines/self-agent-test.yml deleted file mode 100644 index 4d95830c531..00000000000 --- a/azure-pipelines/self-agent-test.yml +++ /dev/null @@ -1,23 +0,0 @@ -# Simple pipeline to test a self hosted agent. -# Set trigger and pull request trigger to none, since we do not need continuous integration. - -trigger: none - -pr: none - - -jobs: - -- job: 'Test_Self_Hosted_Agent' - pool: - name: Linux - - - steps: - - bash: | - ls - displayName: List remote server files - - - bash: | - python /home/youssef/helloworld.py - displayName: Run local file \ No newline at end of file From e5e29198034d36897a08cf686ea78660d866c927 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Fri, 12 Jun 2020 15:01:15 -0300 Subject: [PATCH 241/467] Upgrade pytest version (#1185) * Unpin pytest version from environment file * Fix integration tests skip condition * Revert "Fix integration tests skip condition" This reverts commit bb170bfbe52475ed0d0f8b179d013e4ff1398b25. * Trying new solution * Using `pytestconfig` * Using `pytestconfig` (2) * Pin pytest to 5 --- azure-pipelines/simple_test_framework.yml | 2 +- tardis/conftest.py | 8 ++++---- tardis/montecarlo/tests/test_packet_source.py | 4 ++-- tardis/plasma/tests/test_complete_plasmas.py | 4 ++-- tardis/tests/integration_tests/test_integration.py | 2 +- tardis_env3.yml | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/azure-pipelines/simple_test_framework.yml b/azure-pipelines/simple_test_framework.yml index c345cb4c208..ea5fc6d6717 100644 --- a/azure-pipelines/simple_test_framework.yml +++ b/azure-pipelines/simple_test_framework.yml @@ -56,7 +56,7 @@ jobs: - bash: | source activate tardis conda install -y pytest-cov - pip install git+https://github.com/tonybaloney/pytest-azurepipelines.git + pip install pytest-azurepipelines pytest tardis --tardis-refdata=$(ref.data.home) --cov=tardis --cov-report=xml --cov-report=html displayName: "TARDIS test" diff --git a/tardis/conftest.py b/tardis/conftest.py index 3028372a815..faae42e5caf 100644 --- a/tardis/conftest.py +++ b/tardis/conftest.py @@ -139,8 +139,8 @@ def pytest_addoption(parser): @pytest.fixture(scope='session') -def generate_reference(): - option = pytest.config.getvalue("generate_reference") +def generate_reference(pytestconfig): + option = pytestconfig.getvalue("generate_reference") if option is None: return False else: @@ -148,8 +148,8 @@ def generate_reference(): @pytest.fixture(scope="session") -def tardis_ref_path(): - tardis_ref_path = pytest.config.getvalue("tardis_refdata") +def tardis_ref_path(pytestconfig): + tardis_ref_path = pytestconfig.getvalue("tardis_refdata") if tardis_ref_path is None: pytest.skip('--tardis-refdata was not specified') else: diff --git a/tardis/montecarlo/tests/test_packet_source.py b/tardis/montecarlo/tests/test_packet_source.py index 1bacfc50872..daaad32210f 100644 --- a/tardis/montecarlo/tests/test_packet_source.py +++ b/tardis/montecarlo/tests/test_packet_source.py @@ -17,10 +17,10 @@ def packet_unit_test_fpath(tardis_ref_path): return os.path.abspath(os.path.join( tardis_ref_path, 'packet_unittest.h5')) -def test_bb_packet_sampling(tardis_ref_data, packet_unit_test_fpath): +def test_bb_packet_sampling(pytestconfig, tardis_ref_data, packet_unit_test_fpath): bb = BlackBodySimpleSource(2508) #ref_df = pd.read_hdf('test_bb_sampling.h5') - if pytest.config.getvalue("--generate-reference"): + if pytestconfig.getvalue("--generate-reference"): ref_bb = pd.read_hdf(packet_unit_test_fpath, key='/blackbody') ref_bb.to_hdf(tardis_ref_data, key='/packet_unittest/blackbody', mode='a') diff --git a/tardis/plasma/tests/test_complete_plasmas.py b/tardis/plasma/tests/test_complete_plasmas.py index ffbc25bc160..25f3b8cdb36 100644 --- a/tardis/plasma/tests/test_complete_plasmas.py +++ b/tardis/plasma/tests/test_complete_plasmas.py @@ -125,10 +125,10 @@ def config(self, request): return config @pytest.fixture(scope="class") - def plasma(self, chianti_he_db_fpath, config, tardis_ref_data): + def plasma(self, pytestconfig, chianti_he_db_fpath, config, tardis_ref_data): config['atom_data'] = chianti_he_db_fpath sim = Simulation.from_config(config) - if pytest.config.getvalue("--generate-reference"): + if pytestconfig.getvalue("--generate-reference"): sim.plasma.to_hdf(tardis_ref_data, path=config.plasma.save_path) pytest.skip("Reference data saved at {0}".format(tardis_ref_data)) return sim.plasma diff --git a/tardis/tests/integration_tests/test_integration.py b/tardis/tests/integration_tests/test_integration.py index 82c1d0407bc..f20c9a1052e 100644 --- a/tardis/tests/integration_tests/test_integration.py +++ b/tardis/tests/integration_tests/test_integration.py @@ -58,7 +58,7 @@ def model_quantities(request): return request.param -@pytest.mark.skipif(not pytest.config.getvalue("integration-tests"), +@pytest.mark.skipif('not config.getvalue("integration-tests")', reason="integration tests are not included in this run") @pytest.mark.integration class TestIntegration(object): diff --git a/tardis_env3.yml b/tardis_env3.yml index 8f0539b7893..2c1c23f691d 100644 --- a/tardis_env3.yml +++ b/tardis_env3.yml @@ -52,7 +52,7 @@ dependencies: #Test/Coverage requirements - git-lfs - - pytest=4 + - pytest=5 - pytest-html - requests - coverage From e95ca26974a35bdcf8fe45088072af7e67a3f94a Mon Sep 17 00:00:00 2001 From: Arjun Savel <35353555+arjunsavel@users.noreply.github.com> Date: Wed, 17 Jun 2020 08:48:48 -0700 Subject: [PATCH 242/467] Make consistency edits to documentation (#1158) * Make consistency edits for index and installation docs pages. * Remove spaces from and add comma to quickstart notebook. * Ensure YAML and CSVY are all caps throughout the Model page. * Add colon before list in ejecta model configuration page. * Make YAML spelling consistent in power law density page. * Make YAML spelling consistent in exponential density page. * Add hyphens, commas, and make consistent capitalization in custom density page. * Make consistent spaces inside units and add period to custom density notebook. * Add spaces, commas, and move parens in uniform composition page. * Ensure capitalization, add spaces, move parens, add periods to ASCII formatted custom composition page. * Add em dashes, add periods, remove periods, make parameters code in configuration page. * Add commas, capitalizations, periods, and code words to config validator page. * Add comma and period to read_configuration notebook. * Add periods, commas, bullet points, and capitalizations to atomic data description page. * Add em dash and periods to command line run page. * Add commas, capitalizations to tardis gui page. * Add period and comma to interacting with TARDIS page. * Make plural consistency on cmfgen page. * Added colon before list in physics index page. * Capitalize TARDIS, link external modules when necessary, add a few commas to plasma landing page. * Add hyphens, capitalize a word, and correct a typo in the Monte Carlo energy packets page. * Correct typos, add hyphens, move around commas in packet propagation page. * Correct typos, move commas around in line interaction page. * Correct typos, moved commas around in estimators page. * Correct typos, move commas around for virtual packets page. * Correct typos, move around commas for direct integration page. * Correct typos and add commas to random sampling page. * Correct typos in old monte carlo page. * Fix latex error in old montecarlo * Fix typos in LTE plasma plage * Finish up neburlar plasma, make edits to macroactom. * Correct typos, move commas, attempt latex fix for nlte page. * Capitalize TARDIS in helium_nlte page. * Add hyphen in code comparison page. * Correct spelling of BibTeX. * Correct spelling of AstroPy, adding a comma to developer workflow page. * Correct capitalizations, correct typos, shuffle commas in running tests page. * Correct a few more typos in running tests page. * Change GitHub spelling on issues page * Correct typos, commas, and capitalizations in git workflow page. * Change AstroPy spelling in release workflow page. * Add a period and shuffle commas in update refdata page. * Add periods, correct capitalizations, correct typos, and shuffle commas in continuous integration page. * Change AstroPy spelling, add period at end of developer faq page. * Format bulleted list better in atomic data description page. * Capitalize TARDIS; remove montecarlo primer from index, as it is included in the physics overview. * Capitalize Python in installation page. * Make final latex equation render correctly * Reword a few lines in installation page. * linking Anaconda in installation page * Add link to CMFGEN reference * Add period to montecarlo index * Linking physics is incomplete to TARDIS project board * did not correctly format links in .rst files * Had not merged correctly! * Missed a uncapitalized YAML * Removed a few double spaces * Bulleted list was not rendering correctly * Converting AstroPy to Astropy * Capitalize TARDIS in new doc notebook --- docs/atomic/atomic_data_description.rst | 22 +- docs/configuration/config_validator.rst | 37 +-- docs/configuration/configuration.rst | 51 +++-- docs/configuration/read_configuration.ipynb | 4 +- docs/credits.rst | 6 +- docs/development/continuous_integration.rst | 58 ++--- docs/development/developer_faq.rst | 4 +- docs/development/git_workflow.rst | 67 +++--- docs/development/index.rst | 2 +- docs/development/issues.rst | 2 +- docs/development/release_workflow.rst | 2 +- docs/development/running_tests.rst | 40 ++-- docs/development/update_refdata.rst | 6 +- docs/index.rst | 7 +- docs/installation.rst | 25 ++- ...stom_Density_And_Boundary_Velocities.ipynb | 6 +- docs/models/examples/abundancecust.rst | 36 +-- docs/models/examples/abundanceuni.rst | 14 +- docs/models/examples/densitycust.rst | 12 +- docs/models/examples/densityexp.rst | 6 +- docs/models/examples/densitypow.rst | 4 +- docs/models/examples/modelconfig.rst | 2 +- docs/models/index.rst | 18 +- docs/physics/index.rst | 5 +- docs/physics/montecarlo/discretization.rst | 14 +- docs/physics/montecarlo/estimators.rst | 20 +- docs/physics/montecarlo/index.rst | 2 +- docs/physics/montecarlo/lineinteraction.rst | 12 +- docs/physics/montecarlo/propagation.rst | 31 ++- docs/physics/montecarlo/randomsampling.rst | 18 +- docs/physics/montecarlo/sourceintegration.rst | 16 +- docs/physics/montecarlo/virtualpackets.rst | 10 +- docs/physics/montecarlo_old.rst | 56 ++--- docs/physics/new_plasma.rst | 14 +- docs/physics/physical_quantities.ipynb | 212 +++++++++--------- docs/physics/plasma/helium_nlte.rst | 10 +- docs/physics/plasma/lte_plasma.rst | 8 +- docs/physics/plasma/macroatom.rst | 8 +- docs/physics/plasma/nebular_plasma.rst | 18 +- docs/physics/plasma/nlte.rst | 22 +- docs/quickstart/quickstart.ipynb | 6 +- docs/research/code_comparison/index.rst | 3 +- docs/running/commandline.rst | 6 +- docs/running/converters/cmfgen.rst | 9 +- docs/running/gui.rst | 24 +- docs/running/interaction/index.rst | 4 +- docs/running/interaction/integrator.ipynb | 54 ++--- docs/team.rst | 2 +- 48 files changed, 516 insertions(+), 499 deletions(-) diff --git a/docs/atomic/atomic_data_description.rst b/docs/atomic/atomic_data_description.rst index 8fc2e898c76..33ed6dc9680 100644 --- a/docs/atomic/atomic_data_description.rst +++ b/docs/atomic/atomic_data_description.rst @@ -6,8 +6,8 @@ Atomic Data Format Description .. currentmodule:: tardis.io.atomic -The atomic data for tardis is stored in `hdf5 files `_. TARDIS ships with a -relatively simple atomic dataset which only contains silicon lines and levels. TARDIS also has a full atomic dataset which contains +The atomic data for tardis is stored in `HDF5 files `_. TARDIS ships with a +relatively simple atomic dataset that only contains silicon lines and levels. TARDIS also has a full atomic dataset which contains the complete Kurucz dataset (``_). This full dataset also contains recombination coefficients from the ground state (:math:`\zeta-\textrm{factor}` used in :ref:`calc_zeta_label`) and data for calculating the branching or macro atom line interaction (:ref:`macroatom`). @@ -17,8 +17,8 @@ branching or macro atom line interaction (:ref:`macroatom`). HDF5 Dataset ------------ -As mentioned previously, all atomic data is stored in `hdf5 files `_ which contain tables -that include mass, ionization, levels and lines data. The atom data that ships with TARDIS is located in data/atom +As mentioned previously, all atomic data is stored in `HDF5 files `_ that contain tables +that include mass, ionization, levels and lines data. The atom data that ships with TARDIS is located in data/atom. The dataset ``basic_atom_set`` contains the Atomic Number, Symbol of the elements and average mass of the elements. @@ -125,8 +125,12 @@ There are two datasets for using the macro atom and branching line interactions. The ``macro_atom_data`` contains blocks of transition probabilities, several indices and flags. The Transition Type flag -has three states -1 for downwards emitting, 0 for downwards internal and 1 for upwards internal (for more explanations please -refer to :ref:`macroatom`) +has three states: + +* -1 for downwards emitting +* 0 for downwards internal +* 1 for upwards internal (for more explanations, please +refer to :ref:`macroatom`). Macro Atom Data ^^^^^^^^^^^^^^^ @@ -151,7 +155,7 @@ Macro Atom Data Here's the structure of the probability block. The atomic number, ion number and source level number are the same within each block, the destination level number the transition type and transition probability are changing. The transition probabilities are only part of the final probability and will be changed during the calculation. -For details on the macro atom please refer to :ref:`macroatom`. +For details on the macro atom, please refer to :ref:`macroatom`. +-------------+------------+-------------------+------------------------+-----------------+--------------------------+--------------------+ |Atomic Number|Ion Number |Source Level Number|Destination Level Number| Transition Type |Transition probabilities |Transition Line ID | @@ -216,8 +220,8 @@ Indexing fun ------------ The main problem with the atomic data is indexing. Most of these references require multiple numbers, e.g. atomic number, -ion number and level number. The :py:module:`pandas`-framework provides the ideal functions to accomplish this. In TARDIS we extensively -use :py:class:`pandas.MultiIndex`, :py:class:`pandas.Series` and :py:class:`pandas.DataFrame` +ion number and level number. The `pandas `_ framework provides the ideal functions to accomplish this. In TARDIS, we extensively +use :py:class:`pandas.MultiIndex`, :py:class:`pandas.Series` and :py:class:`pandas.DataFrame`. TO BE BETTER DOCUMENTED ... diff --git a/docs/configuration/config_validator.rst b/docs/configuration/config_validator.rst index c3de69caf46..ba19e94ec18 100644 --- a/docs/configuration/config_validator.rst +++ b/docs/configuration/config_validator.rst @@ -2,34 +2,36 @@ Configuration Validator *********************** -The default config validator takes a user configuration and a default configuration and creates a consistent and valid configuration for tardis based on the constraints given in the default configuration. Both input data are normally given as a yaml dictionary with a consistent hierarchical structure i.e. for every item in the user configuration there has to be a declaration in the default configuration at the same hierarchical level. This declaration can be either an unspecific empty level declaration like: +The default config validator takes a user configuration and a default configuration and creates a consistent and valid configuration for TARDIS based on the constraints given in the default configuration. Both input data are normally given as a YAML dictionary with a consistent hierarchical structure, i.e. for every item in the user configuration there has to be a declaration in the default configuration at the same hierarchical level. This declaration can be either an unspecific empty level declaration like: - Main_level: - Second_level: - Third_level: … -or a declaration of a configuration item like: +or a declaration of a configuration item like: - item: - property_type: int - default: 1 - mandatory: True - help: ‘This is a doc string.' -This contains always the keywords help, default, mandatory, and property_type. The keyword help is a doc-string which describes the corresponding item. Default specifies the default value which is used in case that no value for this item is specified in the corresponding user configuration item. If the keyword mandatory is True, the item has to be specified in the user configuration. The keyword property_type is used to specify the type of the item. At the moment, the config parser knows the following types: -Int: The property type int is for integer like config items. -Float: The property type float is for float like config items. -String: The property type string is for string like config items. -Quantity: The property type quantity is for physical quantities with units given as string. The string contains value and unit separated by a whitespace E.g. 2 cm. -Range: The property type range specifies a range via start and end. Note: abs(start - end ) > 0 -Quantity_range: Like property type range but with quantities as start and stop. The consistency of the units is checked. -Additionally to the four standard keywords the types integer, float, and quantity can have the keywords allowed_value and allowed_type. allowed_value specifies the allowed values in a list, whereas allowed_type specifies a range of allowed values like “x>10”. +This contains always the keywords ``help``, ``default``, ``mandatory``, and ``property_type``. The keyword help is a doc-string which describes the corresponding item. "Default" specifies the default value which is used in case that no value for this item is specified in the corresponding user configuration item. If the keyword mandatory is ``True``, the item has to be specified in the user configuration. The keyword ``property_type`` is used to specify the type of the item. At the moment, the config parser knows the following types: +- Int: The property type int is for integer like config items. +- Float: The property type float is for float like config items. +- String: The property type string is for string like config items. +- Quantity: The property type quantity is for physical quantities with units given as string. The string contains value and unit separated by a whitespace E.g. 2 cm. +- Range: The property type range specifies a range via start and end. Note: ``abs(start - end ) > 0``. +- Quantity_range: Like property type range but with quantities as start and stop. The consistency of the units is checked. + + +Additionally to the four standard keywords the types integer, float, and quantity can have the keywords ``allowed_value`` and ``allowed_type``. ``allowed_value`` specifies the allowed values in a list, whereas ``allowed_type`` specifies a range of allowed values, such as “x>10”. Container ^^^^^^^^^ -For more complex configurations with dependencies, you can use the containers which allow branching in the configuration. A container is declared in the default configuration file by setting the property_type to container property and specifying the properties of the container with keyword type. The property_type of this section is container-declaration which allows you to specify the possible container items with the keyword container. For every specified container item, the code expects the declaration of all sub items. The keywords for this are “_“ + “name of the container item”. -If the type declaration for this container is finished you can specify all container items like normal items. Here is an example for a container configuration with two branches +For more complex configurations with dependencies, you can use the containers that allow branching in the configuration. A container is declared in the default configuration file by setting the ``property_type`` to container property and specifying the properties of the container with keyword type. The ``property_type`` of this section is container-declaration that allows you to specify the possible container items with the keyword container. For every specified container item, the code expects the declaration of all sub items. The keywords for this are “_“ + “name of the container item”. +If the type declaration for this container is finished, you can specify all container items like normal items. Here is an example for a container configuration with two branches: -..source: yaml +.. source: yaml - container_example: - property_type: container-property - type: @@ -66,11 +68,12 @@ If the type declaration for this container is finished you can specify all conta How to use ^^^^^^^^^^ -To use the default parser create a new config object form the class ConfigurationValidator by either from a dictionaries or from yaml files:: +To use the default parser create a new config object form the class ConfigurationValidator either from a dictionaries or from YAML files:: - My_config = ConfigurationValidator(default configuration dictionary, user configuration dictionary) +- My_config = ConfigurationValidator(default configuration dictionary, user configuration dictionary) or -- My_config = ConfigurationValidator.from_yaml(default configuration file, user configuration file) -To access the configuration for tardis use the method get_config +- My_config = ConfigurationValidator.from_yaml (default configuration file, user configuration file). + +To access the configuration for TARDIS, use the method ``get_config``. diff --git a/docs/configuration/configuration.rst b/docs/configuration/configuration.rst index b6d1b07e7fd..688d5df2e88 100644 --- a/docs/configuration/configuration.rst +++ b/docs/configuration/configuration.rst @@ -11,17 +11,16 @@ configuration file (with a small subset of the options that can be specified) ca .. warning:: One should note that currently floats in YAML need to be specified in a special format: - any pure floats need to have a +/- after the e e.g. 2e+5 + any pure floats need to have a +/- after the "e", e.g. 2e+5 The TARDIS configuration consists of multiple sections that pertain to certain parts of the code. We will use the -schemas to show what options are available. Our schema mark-up defines names in bold-fat as required. -can be seen here: +schemas to show what options are available. Our schema mark-up defines names in bold-fat as required and can be seen here: .. note:: The following shows all the options (and their default settings) that are available for TARDIS. No other options - are allowed or available + are allowed or available. .. contents:: Overview @@ -46,12 +45,12 @@ Model ----- The next sections, describing the model, are very hierarchical. The base level is ``model`` and contains two subsections: -``structure`` and ``abundances``. Both sections can either contain a ``file`` subsection which specifies a file and +``structure`` and ``abundances``. Both sections can either contain a ``file`` subsection that specifies a file and file type where the information is stored or a number of other sections. .. jsonschema:: schemas/model.yml -All types of ``structure`` definitions have two keywords in common ``v_inner_boundary`` and ``v_outer_boundary``. +All types of ``structure`` definitions have two keywords in common: ``v_inner_boundary`` and ``v_outer_boundary``. In the ``structure`` section, one can specify a ``file`` section containing a ``type`` parameter (currently only ``artis`` is supported``) and a ``name`` parameter giving a path top a file. @@ -60,7 +59,7 @@ parameter ``no_of_shells``. ``no_of_shells`` is the requested number of shells f requires a ``type``. Currently, only ``linear`` is supported. In the ``densities`` section the ``type`` parameter again decides on the parameters. The type ``uniform`` only needs a - ``value`` parameter with a density compatible quantity. The type ``branch85_w7`` uses a seven order polynomial fit to + ``value`` parameter with a density compatible quantity. The type ``branch85_w7`` uses a seven-order polynomial fit to the W7 model and is parametrised by time since explosion. The parameters ``time_0`` and ``density_coefficient`` are set to sensible defaults and should not be changed. @@ -69,10 +68,10 @@ and a ``name`` parameter giving a path to a file containing the abundance inform .. warning:: In contrast to the ``structure`` section, the ``abundance`` section will not ignore abundances set in the rest of - the section, but merely will overwrite the abundances given in the file section. + the section but merely will overwrite the abundances given in the file section. The rest of the section can be used to configure uniform abundances for all shells, by giving the atom name and a -relative abundance fraction. If it does not add up to 1., TARDIS will warn - but normalize the numbers. +relative abundance fraction. If it does not add up to 1., TARDIS will warn --- but normalize the numbers. @@ -81,23 +80,29 @@ Plasma .. jsonschema:: schemas/plasma.yml -``inital_t_inner`` is initial temperature (will be updated for most modes of TARDIS - see convergence section) of the black-body on the inner +``inital_t_inner`` is initial temperature (will be updated for most modes of TARDIS --- see convergence section) of the black-body on the inner boundary. ``initial_t_rad`` is the initial radiation temperature (will be updated for most modes of TARDIS - see convergence section). For debugging purposes and to compare to :term:`synapps` calculations one can disable the electron scattering. TARDIS will issue a warning that this is not physical. -There are currently two ``plasma_type`` options available: ``nebular`` and ``lte`` which tell TARDIS how to run the +There are currently two ``plasma_type`` options available: ``nebular`` and ``lte``, which tell TARDIS how to run the ionization equilibrium and level population calculations (see :ref:`plasmas` for more information). The radiative rates describe how to calculate the :math:`J_\textrm{blue}` needed for the :ref:`nlte` calculations and -:ref:`macroatom` calculations. There are three options for ``radiative_rates_type``: 1) ``lte`` in which -:math:`J_\textrm{blue} = \textrm{Blackbody}(T_\textrm{rad})`, 2) ``nebular`` in which -:math:`J_\textrm{blue} = W \times \textrm{Blackbody}(T_\textrm{rad})`, 3) ``detailed`` in which the :math:`J_\textrm{blue}` +:ref:`macroatom` calculations. There are three options for ``radiative_rates_type``: + +1) ``lte``, in which +:math:`J_\textrm{blue} = \textrm{Blackbody}(T_\textrm{rad})` + +2) ``nebular`` in which +:math:`J_\textrm{blue} = W \times \textrm{Blackbody}(T_\textrm{rad})` + +3) ``detailed`` in which the :math:`J_\textrm{blue}` are calculated using an estimator (this is described in ??????). -TARDIS currently supports three different kinds of line interaction: ``scatter`` - a resonance scattering implementation, -``macroatom`` - the most complex form of line interaction described in :ref:`macroatom` and ``downbranch`` a simplified +TARDIS currently supports three different kinds of line interaction: ``scatter`` --- a resonance scattering implementation, +``macroatom`` --- the most complex form of line interaction described in :ref:`macroatom` and ``downbranch`` a simplified version of ``macroatom`` in which only downward transitions are allowed. Finally, ``w_epsilon`` describes the dilution factor to use to calculate :math:`J_\textrm{blue}` that are 0, which -causes problem with the code (so :math:`J_\textrm{blue}` are set to a very small number). +causes problemsl with the code (so :math:`J_\textrm{blue}` are set to a very small number). NLTE ^^^^ @@ -108,8 +113,8 @@ NLTE coronal_approximation: True classical_nebular: False -The NLTE configuration currently allows setting ``coronal_approximation`` which sets all :math:`J_\textrm{blue}` to 0. -This is useful for debugging with :term:`chianti` for example. Furthermore one can enable 'classical_nebular' to set all +The NLTE configuration currently allows setting ``coronal_approximation``, which sets all :math:`J_\textrm{blue}` to 0. +This is useful for debugging with :term:`chianti` for example. Furthermore, one can enable 'classical_nebular' to set all :math:`\beta_\textrm{Sobolev}` to 1. Both options are used for checking with other codes and should not be enabled in normal operations. @@ -128,14 +133,14 @@ The ``no_of_packets`` parameter can take a float number for input convenience an used in each Monte Carlo loop. The parameters ``last_no_of_packets`` and ``no_of_virtual_packets`` influence the last run of the Monte Carlo loop (which calculates the final spectrum!) when the radiation field should have converged. ``last_no_of_packets`` is normally higher than ``no_of_packets`` to create a less noisy output spectrum. ``no_of_virtual_packets`` can also be set to greater than 0 (a useful number is 3) to -use the Virtual Packet formalism. Increasing this number drasitcally increases computational costs(and memory requirements if they are logged) +use the Virtual Packet formalism. Increasing this number drastically increases computational costs (and memory requirements if they are logged). The ``iterations`` parameter describes the maximum number of Monte Carlo loops executed in a simulation before it ends. Convergence criteria can be used to make the simulation stop sooner when the convergence threshold has been reached. The ``convergence_criteria`` section again has a ``type`` keyword. Currently, one type is allowed: ``damped``. All convergence criteria can be specified separately for the three variables for which convergence can be checked -(``t_inner``, ``t_rad``, ``ws``) by specifying subsections in the ``convergence_criteria`` of the same name. These -override then the defaults. +(``t_inner``, ``t_rad``, ``ws``) by specifying subsections in the ``convergence_criteria`` of the same name. These then +override the defaults. #. ``damped`` only has one parameter ``damping-constant`` and does not check for convergence. This can be used to fix the @@ -148,7 +153,7 @@ Spectrum .. jsonschema:: schemas/spectrum.yml -Start and end are given as Quantities with units. If they are given in +``Start`` and ``end`` are given as Quantities with units. If they are given in frequency space they are switched around if necessary. The number of bins is just an integer. Finally, the method option selects the final spectral synthesis mode. Currently, there are three options: diff --git a/docs/configuration/read_configuration.ipynb b/docs/configuration/read_configuration.ipynb index e664998a6b0..38d2d93fd6e 100644 --- a/docs/configuration/read_configuration.ipynb +++ b/docs/configuration/read_configuration.ipynb @@ -25,7 +25,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The configuration can be read this way. It will be validated by the json-schema schemas (including filling out default configuration options that had not been specified)" + "The configuration can be read this way. It will be validated by the json-schema schemas (including filling out default configuration options that had not been specified)." ] }, { @@ -46,7 +46,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Despite the very simple nature of tardis_example.yml the output does contain all the default values" + "Despite the very simple nature of tardis_example.yml, the output does contain all the default values" ] }, { diff --git a/docs/credits.rst b/docs/credits.rst index afb3b1d732b..02a4caddea4 100644 --- a/docs/credits.rst +++ b/docs/credits.rst @@ -12,7 +12,7 @@ Publication Policies If you use this code for any publications or presentations please acknowledge it. Please cite `Kerzendorf & Sim 2014 -`_ in the text +`_ in the text. Please add this paragraph to the Acknowledgement: @@ -29,7 +29,7 @@ Please add this paragraph to the Acknowledgement: If you use any of the full relativity treatments or use TARDIS for -modelling Type II supernovae you also add this citation to acknowledgement +modelling Type II supernovae, you also add this citation to acknowledgement `Spectral modeling of type II supernovae. I. Dilution factors `_: @@ -37,7 +37,7 @@ modelling Type II supernovae you also add this citation to acknowledgement \citep{2019A&A...621A..29V} -The following bibtex entries are needed for the references. +The following BibTeX entries are needed for the references. .. code-block:: none diff --git a/docs/development/continuous_integration.rst b/docs/development/continuous_integration.rst index cf99d13d9a1..e5ac81191e2 100644 --- a/docs/development/continuous_integration.rst +++ b/docs/development/continuous_integration.rst @@ -3,14 +3,14 @@ Continuous Integration ********************** We use a so-called `Continuous Integration`_ workflow with TARDIS. -This means that each time a change is proposed (via pull-request) -or a proposed change is merged into the main master branch a service will download the version +This means that each time a change is proposed (via pull request) +or a proposed change is merged into the main master branch, a service will download the version and execute all the unit tests and integration tests offered with TARDIS. This helps us detect bugs immediately. The following pages explain how we setup automated debugging on TARDIS through a remote cloud service, called Azure, hosted by Visual Studio Team Services. This is done by -testing, building, and securely deploying this documentation to gh-pages. As +testing, building, and securely deploying this documentation to `gh-pages`. As a developer, one should be familiar with how to smoothly run tests and record the documentation. @@ -22,28 +22,28 @@ Testing ------- To test TARDIS, we activate the designated environment, fetch the most recent reference data, install -TARDIS, and use the python app tester, pytest:: +TARDIS, and use the Python app tester, `pytest`:: $ sh ci-helpers/fetch_reference_data.sh $ source activate tardis $ python setup.py build_ext --inplace $ pytest tardis --tardis-refdata=$(ref.data.home) --test-run-title="TARDIS test" --cov=tardis --cov-report=xml --cov-report=html -The build_ext command is for accomdating C/C++ extentions. The --inplace command is to ensure that the build is in the source directory. +The build_ext command is for accommodating C/C++ extensions. The ``--inplace`` command is to ensure that the build is in the source directory. -See https://docs.pytest.org/en/latest/ for more information on pytest. +See https://docs.pytest.org/en/latest/ for more information on `pytest`. Documentation ------------- The documentation is built using Sphinx from the master branch. We use Restructured Text (reST) to encode the required files, which are then converted into html links, that are then pushed to the root of the -gh-pages branch. +`gh-pages` branch. See https://pythonhosted.org/an_example_pypi_project/sphinx.html and https://help.github.com/en/categories/github-pages-basics for more information. -Setting up a secure pathway to github +Setting up a secure pathway to GitHub ===================================== .. _install-ssh-key: @@ -75,12 +75,12 @@ For explicit details, see `git deploy key`_. Adding your key locally and copying the known host name ------------------------------------------------------- -**Instead of the method recommended by azure, you can add all the github hosts by copying this output, starting from: github.com ssh-rs...** +**Instead of the method recommended by azure, you can add all the GitHub hosts by copying this output, starting from: github.com ssh-rs...** [Default option suggested by wk]:: ssh-keyscan -t rsa github.com -If you wish to deploy the documentation locally to gh-pages, you must add the generated key on your computer and clone your repository:: +If you wish to deploy the documentation locally to `gh-pages`, you must add the generated key on your computer and clone your repository:: $ eval "$(ssh-agent -s)" $ ssh-add ~/.ssh/id_rsa (Or whatever you called your key) @@ -88,7 +88,7 @@ If you wish to deploy the documentation locally to gh-pages, you must add the ge $ git clone git@github.com:myOrganizationName/myRepositoryName.git -Accept the warning to add github and copy the saved known host, as we will need it for installing the key on Azure. +Accept the warning to add GitHub and copy the saved known host, as we will need it for installing the key on Azure. It should look something like (should look something like [1]As3...=ssh-rsa ..) and will be the last line added to:: ~/.ssh/known_hosts @@ -123,7 +123,7 @@ After which, one must use the InstallSSHKey@0 `Azure task`_ to add the ssh key. Setting up the YAML file to deploy ---------------------------------- -YAML is short for "YAML Ain't Markup Language", as it is intented to be a simple way to write script +YAML is short for "YAML Ain't Markup Language", as it is intended to be a simple way to write script that is standard for all programing languages. It is the file that communicates directly with the pipeline. @@ -166,7 +166,7 @@ To download and add the ssh-key, prepare the scripts as:: inputs: secureFile: 'id_azure_rsa' -Secure files stored in the Azure server are encryped and again decrypted by the Azure task that uses the file. +Secure files stored in the Azure server are encrypted and again decrypted by the Azure task that uses the file. Download a secure file to a temporary location in the virtual machine:: @@ -203,20 +203,24 @@ After defining the variable, one could optionally encrypt it using this lock sym Variables are referenced as $(variable_name), as seen in the InstallSSHKey@0 task in the hostName and sshPublicKey inputs. Azure provides a list of agent hosts that can run the pipeline on a virtual machine. In our pipelines, we +<<<<<<< HEAD use the vm_Images: Ubuntu 16.04 and macOs-10.14. +======= +use the vm_Images: Ubuntu 16.04 and macOS-10.13. +>>>>>>> Add periods, correct capitalizations, correct typos, and shuffle commas in continuous integration page. In a job, you can list a single vm as:: pool: vmImage: "Ubuntu 16.04" -If you are using a self hosted agent (see `Installing and running a self hosted agent` for more details):: +If you are using a self-hosted agent (see `Installing and running a self-hosted agent` for more details):: pool: name: "agent_pool_name" -Or if you prefer to use multiple virtual machines and specity the maximum that can run at the same time, in -addition to specifying variables as key value pairs such as conda and miniconda.url below :: +Or if you prefer to use multiple virtual machines and specify the maximum that can run at the same time, in +addition to specifying variables as key-value pairs such as conda and miniconda.url below. :: strategy: matrix: @@ -230,22 +234,22 @@ addition to specifying variables as key value pairs such as conda and miniconda. pool: vmImage: $(imageName) -This trick is also convenient for specying different variable builds for the same vmImage. As one can keep the vm_Image -constant, and change the key value pair for each job in the matrix. +This trick is also convenient for specifying different variable builds for the same vmImage. As one can keep the vm_Image +constant and change the key value pair for each job in the matrix. -Installing and running a self hosted agent +Installing and running a self-hosted agent ------------------------------------------ -Microsoft supplies multiple hosted agents for running virtual machines, but it is useful to create a self hosted -agent for incremental builds and the dependancy on local environments. +Microsoft supplies multiple hosted agents for running virtual machines, but it is useful to create a self-hosted +agent for incremental builds and the dependency on local environments. -To add a new agent or agent pool, you must have administrator priveledges. See `agent pool security roles`_ to add a new administrator to an agent pool or for all the agent pools. +To add a new agent or agent pool, you must have administrator privileges. See `agent pool security roles`_ to add a new administrator to an agent pool or for all the agent pools. You can view your current lists of agents for each agent pool from: https://dev.azure.com/{your_organization}/_settings/agentpools. -First decide if you will add your agent to an already exiting agent pool, or if you wish to add a new pool, by clicking on Add pool. -If you choose to add a new pool, make sure to click on securtiy and add permissions to your team/self (you cannot directly add your own account), as well as granting access permission to all pipelines, or a specific pipeline. -The first pool "Default" is owned by azure pipelines, and you cannot add pools to it without having even further permissions. +First decide if you will add your agent to an already-existing agent pool, or if you wish to add a new pool, by clicking on Add pool. +If you choose to add a new pool, make sure to click on security and add permissions to your team/self (you cannot directly add your own account), as well as granting access permission to all pipelines, or a specific pipeline. +The first pool "Default" is owned by Azure Pipelines, and you cannot add pools to it without having even further permissions. To give someone all security privileges: - Go to http://dev.azure.com/{your_organization}/_settings/permissions @@ -289,9 +293,9 @@ To uninstall :: ~/myagent$ sudo ./svc uninstall For adding environmental variables or editing the `service file`_, -see `self agent services`_ +see `self agent services`_. -For more details, see `Azure self hosted agents`_ +For more details, see `Azure self hosted agents`_. Carsus ------ diff --git a/docs/development/developer_faq.rst b/docs/development/developer_faq.rst index fc1e373c425..58f25506632 100644 --- a/docs/development/developer_faq.rst +++ b/docs/development/developer_faq.rst @@ -3,5 +3,5 @@ Developer FAQ ************* -Constants in TARDIS are all taken from astropy. The module tardis.constants import all constants currently -from astropy.constants.astropy13constants +Constants in TARDIS are all taken from Astropy. The module tardis.constants import all constants currently +from astropy.constants.astropy13constants. diff --git a/docs/development/git_workflow.rst b/docs/development/git_workflow.rst index 95c4d66b1dc..2c7abb5d66a 100644 --- a/docs/development/git_workflow.rst +++ b/docs/development/git_workflow.rst @@ -3,33 +3,33 @@ General Workflow to add a new feature ===================================== -In TARDIS we aim to stick to a test driven development. This uses the testing -framework extensively starting with a test that shows this feature lacking via +In TARDIS, we aim to stick to a test driven development. This uses the testing +framework extensively, starting with a test that shows this feature lacking via the implementation of the feature until the merging of the code to the main repository. -In most cases we try to break down big features into small, quantifiable goals +In most cases, we try to break down big features into small, quantifiable goals which are then acted upon. * Document feature to be added in an issue and maybe ask the mailing - list if this feature exists + list if this feature exists. * Write a test that demonstrates what feature will be added. * Run the test to verify that it fails in the way you think it should. * If it fails in an unexpected way, your test may be wrong. This is a - great time to ask the group for guidance + great time to ask the group for guidance. * If it passes, you are done! You just added test coverage to an already existing feature, and that is great! (unlikely) * Add the feature (also known as "a simple matter of programming"). * Run the test to verify that it passes. * Write documentation about your feature. -* close issue/partial PR and add to changelog. +* Close issue/partial PR and add to changelog. Preparation and Working with Git ================================ -In this document, we refer to the Tardis ``master`` branch as the *trunk*. The first step is to setup up a python environment. We recommend to use -Anaconda for this purpose and refer to our :doc:`Installation guide <../installation>` which covers this topic. +In this document, we refer to the TARDIS ``master`` branch as the *trunk*. The first step is to setup up a python environment. We recommend using +Anaconda for this purpose; refer to our :doc:`Installation guide <../installation>` which covers this topic. .. _forking: @@ -54,7 +54,7 @@ the `Generating SSH keys Create your own fork of a repository ------------------------------------ -The following example shows how to fork the core ``astropy`` repository, but +The following example shows how to fork the core ``Astropy`` repository, but the same applies to other packages: #. Log into your GitHub_ account. @@ -103,13 +103,13 @@ In detail * master remotes/origin/master - This tells you that you are currently on the ``master`` branch, and + This tells you that you are currently on the ``master`` branch and that you also have a ``remote`` connection to ``origin/master``. What remote repository is ``remote/origin``? Try ``git remote -v`` to see the URLs for the remote connections. They will point to your GitHub fork. - Now connect to the TARDIS repository, so you can merge in changes from the + Now connect to the TARDIS repository so you can merge in changes from the trunk:: cd @@ -119,7 +119,7 @@ In detail TARDIS_ repository. Note that we've used ``git://`` for the URL rather than ``git@``. The - ``git://`` URL is read only. This means that we can't accidentally (or + ``git://`` URL is read-only. This means that we can't accidentally (or deliberately) write to the upstream repo, and we are only going to use it to merge into our own code. @@ -138,7 +138,7 @@ Installing TARDIS in develop mode --------------------------------- TARDIS is designed so that it can generally be used directly out of the source -tree by using ``import `` when running Python in the source of an +tree by using ``import`` when running Python in the source of an TARDIS repository clone. #. Install TARDIS_ in develop mode:: @@ -182,7 +182,7 @@ given in the following sections. you have not accidentally caused regressions, and add new tests to ensure your contribution behaves correctly (see :ref:`testing-guidelines`). -* Issue a pull request on github! +* Issue a pull request on GitHub! * As the code is converging to a final state, ensure your documentation follows the guidelines (see :ref:`documentation-guidelines`). @@ -192,9 +192,9 @@ given in the following sections. least suggest a brief (one or two sentence) description of your change so that another developer can add it to the changelog. -This way of working helps to keep work well organized, with readable history. +This way of working helps to keep work well-organized, with readable history. This in turn makes it easier for project maintainers (that might be you) to -see what you've done, and why you did it. +see what you've done and why you did it. See `linux git workflow`_ and `ipython git workflow`_ for some explanation. @@ -209,7 +209,7 @@ confusion about which branch you are on. Updating the mirror of trunk ---------------------------- -From time to time you should fetch the upstream (trunk) changes from GitHub:: +From time to time, you should fetch the upstream (trunk) changes from GitHub:: git fetch upstream @@ -231,7 +231,7 @@ Making a new branch for each set of related changes will make it easier for someone reviewing your branch to see what you are doing. Choose an informative name for the branch to remind yourself and the rest of -us what the changes in the branch are for. For example ``add-ability-to-fly``, +us what the changes in the branch are for. For example, ``add-ability-to-fly``, or ``buxfix-for-issue-42``. :: @@ -245,18 +245,18 @@ or ``buxfix-for-issue-42``. Generally, you will want to keep your feature branches on your public GitHub_ fork. To do this, you `git push`_ this new branch up to your -github repo. Generally (if you followed the instructions in these pages, and +GitHub repo. Generally (if you followed the instructions in these pages, and by default), git will have a link to your GitHub repo, called ``origin``. You push up to your own repo on GitHub with:: git push origin my-new-feature -In git >= 1.7 you can ensure that the link is correctly set by using the +In git >= 1.7, you can ensure that the link is correctly set by using the ``--set-upstream`` option:: git push --set-upstream origin my-new-feature -From now on git will know that ``my-new-feature`` is related to the +From now on, git will know that ``my-new-feature`` is related to the ``my-new-feature`` branch in the GitHub repo. .. _edit-flow: @@ -283,7 +283,7 @@ In more detail python setup.py test - If you have sphinx installed, you can also check that the documentation + If you have `Sphinx `_ installed, you can also check that the documentation builds and looks correct:: python setup.py build_sphinx @@ -359,14 +359,14 @@ When you are ready to ask for someone to review your code and consider a merge: .. _using-virtualenv: -Making sure your Pull request stays up-to-date +Making sure your Pull Request stays up-to-date ---------------------------------------------- More often then not it will take a few days until a Pull Request is -merged as the community gives feedback and/or you add new fixes. During this -time often other pull requests are merged and the master branch evolves further. -To make sure that your changes are still working on the new master you want to -*rebase* your branch ontop of the evolved master +merged as the community gives feedback and/or you add new fixes. Often during this +time, other pull requests are merged and the master branch evolves further. +To make sure that your changes are still working on the new master, you want to +*rebase* your branch on top of the evolved master. Rebasing on trunk @@ -374,8 +374,8 @@ Rebasing on trunk Let's say you thought of some work you'd like to do. You :ref:`update-mirror-trunk` and :ref:`make-feature-branch` called -``cool-feature``. At this stage trunk is at some commit, let's call it E. Now -you make some new commits on your ``cool-feature`` branch, let's call them A, +``cool-feature``. At this stage trunk is at some commit, let's call it E. Now, +you make some new commits on your ``cool-feature`` branch --- let's call them A, B, C. Maybe your changes take a while, or you come back to them after a while. In the meantime, trunk has progressed from commit E to commit (say) G:: @@ -430,7 +430,7 @@ If it doesn't look good you may need to have a look at If you have made changes to files that have also changed in trunk, this may generate merge conflicts that you need to resolve - see the `git rebase`_ man page for some instructions at the end of the "Description" section. There is -some related help on merging in the git user manual - see `resolving a +some related help on merging in the git user manual --- see `resolving a merge`_. If your feature branch is already on GitHub and you rebase, you will have to @@ -442,7 +442,7 @@ remote called ``origin``, you use this command to force-push:: Note that this will overwrite the branch on GitHub, i.e. this is one of the few ways you can actually lose commits with git. Also note that it is never allowed -to force push to the main astropy repo (typically called ``upstream``), because +to force push to the main Astropy repo (typically called ``upstream``), because this would re-write commit history and thus cause problems for all others. .. _recovering-from-mess-up: @@ -481,11 +481,10 @@ If you forgot to make a backup branch:: Reviewing and helping others with Pull Requests ----------------------------------------------- -Github offers an extensive array of tools to comment on Pull Requests (line -based, normal forum-like discussion, etc.). This system is described here in +Github offers an extensive array of tools to comment on Pull Requests (line-based, normal forum-like discussion, etc.). This system is described here in detail ``_. -However sometimes, it is easier to just add a few changes yourself to quickly +However, it is sometimes easier to just add a few changes yourself to quickly show what you would suggest to be changed. So it is possible to make a Pull Request on a Pull Request. diff --git a/docs/development/index.rst b/docs/development/index.rst index e4fe42e68e9..b55a2056f7f 100644 --- a/docs/development/index.rst +++ b/docs/development/index.rst @@ -5,7 +5,7 @@ Developer Workflow If you want to contribute to the development of TARDIS, please read through this page and follow the guidelines outlined here. Many of the Development workflow is taken from `Astropy `_ and credit belongs +/en/stable/development/workflow/development_workflow.html>`_, and credit belongs to the Astropy team for designing it. .. toctree:: diff --git a/docs/development/issues.rst b/docs/development/issues.rst index 8690f448fa2..9431ce6bc9e 100644 --- a/docs/development/issues.rst +++ b/docs/development/issues.rst @@ -4,7 +4,7 @@ Reporting Issues TARDIS is under constant development. Thus, chances are high that some things do not operate as intended. If any bugs, inconsistencies or missing -functionalities are found, file an issue on our official `github +functionalities are found, file an issue on our official `GitHub `_ page. We encourage any interested user to actively contribute to the development of diff --git a/docs/development/release_workflow.rst b/docs/development/release_workflow.rst index 1bb7ee8ab91..99d21ab64cb 100644 --- a/docs/development/release_workflow.rst +++ b/docs/development/release_workflow.rst @@ -26,5 +26,5 @@ Doing the actual release ======================== This is best done in a clean environment (so a fresh checkout from the master). -We again use the astropy instructions: +We again use the Astropy instructions: ``_ diff --git a/docs/development/running_tests.rst b/docs/development/running_tests.rst index 8680331da4b..77e48476c65 100644 --- a/docs/development/running_tests.rst +++ b/docs/development/running_tests.rst @@ -2,29 +2,29 @@ Running tests ************* -There are two basic categories of tests unit tests in TARDIS 1) the unit -tests 2) integration tests. Unit tests check the outputs of individual functions +There are two basic categories of tests in TARDIS: 1) the unit +tests, and 2) the integration tests. Unit tests check the outputs of individual functions, while the integration tests check entire runs for different setups of TARDIS. -The Unit tests run very quickly and thus are executed after every suggested change -to TARDIS. The Integration tests are much more costly and thus are only executed +The unit tests run very quickly and thus are executed after every suggested change +to TARDIS. The integration tests are much more costly and thus are only executed every few days on a dedicated server. All of them are based on the excellent ``astropy-setup-helpers`` package and -``pytest``. +`pytest `_. -Running the unit tests +Running the Unit Tests ====================== -This is very straight forward to run on your own machine. For very simple unit -tests you can run this with: +This is very straightforward to run on your own machine. For very simple unit +tests, you can run this with: .. code-block:: shell > python setup.py test -Running the more advanced unit tests requires Tardis Reference data that can be +Running the more advanced unit tests requires TARDIS Reference data that can be downloaded (`tardis_refdata `_). @@ -35,14 +35,14 @@ downloaded Generating Plasma Reference =========================== -You can generate Plasma Reference by the following command +You can generate Plasma Reference by the following command: .. code-block:: shell > pytest -rs tardis/plasma/tests/test_complete_plasmas.py --tardis-refdata="/path/to/tardis-refdata/" --generate-reference -Running the integration tests +Running the Integration Tests ============================= These tests require reference files against which the results of the various @@ -50,17 +50,17 @@ tardis runs are tested. So you first need to either download the current reference files (`here `_) or generate new ones. -Both of of these require a configuration file for the integration tests: +Both of these require a configuration file for the integration tests: .. literalinclude:: integration.yml :language: yaml Inside the atomic data directory there needs to be atomic data for each of the setups that are provided in the ``test_integration`` folder. -If no references are given the first step is to generate them. +If no references are given, the first step is to generate them. The ``--less-packets`` option is useful for debugging purposes and will just use very few packets to generate the references and thus make the process much -faster - THIS IS ONLY FOR DEBUGGING PURPOSES. The ``-s`` option ensures that +faster --- THIS IS ONLY FOR DEBUGGING PURPOSES. The ``-s`` option ensures that TARDIS prints out the progress: .. code-block:: shell @@ -68,7 +68,7 @@ TARDIS prints out the progress: > python setup.py test --args="--integration=integration.yml -m integration --generate-reference --less-packets" -To run the test after having run the ``--generate-references`` all that is +To run the test after having run the ``--generate-references``, all that is needed is: .. code-block:: shell @@ -77,10 +77,10 @@ needed is: --less-packets" --remote-data -Setting up the Dokuwiki report +Setting up the DokuWiki report ============================== -A normal dokuwiki installation is performed on the required server. Before the +A normal `DokuWiki `_ installation is performed on the required server. Before the connection works one is requires to set the option remote access in the settings. If this is not done the ``dokuwiki`` python plugin will not connect with the warning ``DokuWikiError: syntax error: line 1, column 0``. One also @@ -88,11 +88,11 @@ has to enable this for users (``remoteuser`` option) otherwise the error: ``ProtocolError for xmlrpc.php?p=xxxxxx&u=tardistester: 403 Forbidden`` will appear. -Another important configuration option is to enable embedded html ``htmlok`` -otherwise it won't show nice html page reports. +Another important configuration option is to enable embedded html ``htmlok``; +otherwise, it won't show nice html page reports. Finally, one has to call the `python setup.py test` with the ``--remote-data`` -option to allow posting to an external dokuwiki server. +option to allow posting to an external DokuWiki server. diff --git a/docs/development/update_refdata.rst b/docs/development/update_refdata.rst index f7a77ad2537..3e8f59c213c 100644 --- a/docs/development/update_refdata.rst +++ b/docs/development/update_refdata.rst @@ -4,7 +4,7 @@ Procedure to update the reference data We assume that you have added the necessary changes to TARDIS and have an open pull request. -#. Fork the ``tardis-refdata`` repository like described in :ref:`development-workflow`. +#. Fork the ``tardis-refdata`` repository as described in :ref:`development-workflow`. #. Clone ``tardis-refdata`` to your computer. Then make a new branch named the same as your new TARDIS feature branch. Make sure to have correctly set up the ``upstream`` remote as explained in :ref:`reviewing-and-helping-with-pr`. @@ -71,14 +71,14 @@ We assume that you have added the necessary changes to TARDIS and have an open p #. Ensure TARDIS pull request passes Travis-CI again and ping someone to merge your PR to the TARDIS master branch. -Congratulations! You have updated TARDIS to be better. Have a beer and steak (or Tofu if you are vegetarian/vegan) +Congratulations! You have updated TARDIS to be better. Have a beer and steak (or Tofu if you are vegetarian/vegan). Troubleshooting ############### * Unable to generate reference data - * If generating fails due to an inability to open ``chianti_He.h5``, make sure that you have activated your `tardis` conda environment, and ``git-lfs`` is installed. Fetch and pull the files from GitHub as explained in step 4. + * If generating fails due to an inability to open ``chianti_He.h5``, make sure that you have activated your `tardis` conda environment and that ``git-lfs`` is installed. Fetch and pull the files from GitHub as explained in step 4. * Error when running ``comparer = ReferenceComparer(ref2_hash='upstream/pr/XX')`` on the comparer notebook: ``No such file or directory: '.../unit_test_data.h5'`` * If notebook file is unable to find the file ``unit_test_data.h5``, make sure you have correctly set your upstream as explained in :ref:`reviewing-and-helping-with-pr`. diff --git a/docs/index.rst b/docs/index.rst index d7646934154..3dceae076fb 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -9,7 +9,7 @@ .. ################################## -Tardis Core Package Documentation +TARDIS Core Package Documentation ################################## .. image:: graphics/tardis_banner.svg @@ -22,11 +22,11 @@ including software engineers, computer scientists, statisticians, and astrophysicists. If you use this code for any publications or presentations please follow our -citation guidelines in :ref:`tardiscredits` +citation guidelines in :ref:`tardiscredits`. User modifications and additions that lead to publications **need to be handed back to the community** by incorporating them into TARDIS. -Please contact the TARDIS team via the `github page +Please contact the TARDIS team via the `GitHub page `_ if you have questions or need assistance. @@ -57,7 +57,6 @@ assistance. Physics overview physics/plasma/index - physics/montecarlo/index .. toctree:: diff --git a/docs/installation.rst b/docs/installation.rst index 408db1764e6..0ab170dbae9 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -8,7 +8,7 @@ Before installing TARDIS, please check its :ref:`requirements `. We provide :ref:`instructions ` for installing TARDIS using Anaconda. If you encounter problems, consult the :ref:`troubleshooting ` section. Once you have -installed TARDIS, check out :doc:`running` for instructions of how to perform +installed TARDIS, check out :doc:`running` for instructions regarding how to perform simple TARDIS calculations. .. _requirements_label: @@ -16,11 +16,11 @@ simple TARDIS calculations. .. warning:: - TARDIS is only compatbile with Python >3.6 + TARDIS is only compatible with Python >3.6 .. note:: - We strongly recommend to install TARDIS within an Anaconda environment and - to always use the lastest github development version. + We strongly recommend installing TARDIS within an Anaconda environment and + to always use the latest GitHub development version. Requirements ============ @@ -35,7 +35,7 @@ instructions to Astropy. Installing TARDIS with Anaconda =============================== -We highly recommend using the Anaconda python environment to install TARDIS (or +We highly recommend using the `Anaconda `_ Python environment to install TARDIS (or any other scientific packages for that matter). Anaconda has the advantage of being an isolated environment that can be set to be the default one, but by no means will mess with your other environments. It will also work on computers @@ -43,7 +43,7 @@ where ``root``-rights are not available. Use these `instructions `_ to install Anaconda on your machine. The next step is to create an environment for TARDIS that contains all of the necessary packages (this ensures that TARDIS requirements won't clash -with any other python installs on disc:: +with any other Python installs on disc):: First, download the `environment definition file `_ from:: @@ -92,7 +92,7 @@ Enabling parallel execution with OpenMP Manually, cloning the repository enables other options such as running the code in parallel (enabling OpenMP). -In general we encourage to download the compilers from `conda` as we then can ensure that they work with TARDIS. +In general, we encourage downloading the compilers from `conda` as we then can ensure that they work with TARDIS. Within the TARDIS conda environment do:: conda install -c conda-forge compilers @@ -111,14 +111,15 @@ To compile TARDIS for parallel execution:: .. _troubleshooting_inst_label: + Installation Troubles (FAQ) =========================== We highly encourage with any installation problems to try the recommended install -method because this often fix problems. Here are some common problems when +method because this often fixes problems. Here are some common problems when installing and their fixes: -**Problem:** While building tardis via ``python setup.py`` build you +**Problem:** While building TARDIS via ``python setup.py`` build you may encounter the following error:: error: tardis/montecarlo/montecarlo.c: Could not find C file tardis/montecarlo/montecarlo.c for Cython file tardis/montecarlo/montecarlo.pyx when building extension tardis.montecarlo.montecarlo. Cython must be installed to build from a git checkout. @@ -126,7 +127,7 @@ may encounter the following error:: **Solution:** There are several solutions to this problem. A clean checkout will help. To clean up your repository please try ``python setup.py clean`` and -then ``git clean -dfx`` (**WARNING** will delete any non tardis file in that directory) +then ``git clean -dfx`` (**WARNING** will delete any non-TARDIS file in that directory) This will often clean this problem. If it still persists: Go into the tardis/montecarlo directory and build montecarlo.c by hand:: @@ -147,7 +148,7 @@ from tardis/_compiler.c:1: /Users/yssavo/miniconda2/envs/tardis-show2/lib/gcc/x8 **Solution:** Install gcc8 from macports and then install with these flags: `link_args = ['-fopenmp','-Wl,-rpath,/opt/local/lib/gcc8/']` -**Problem:** While building tardis(via python 2.7) via ``python setup.py`` build you +**Problem:** While building TARDIS (via python 2.7) via ``python setup.py`` build you may encounter the following error:: TypeError: super() argument 1 must be type, not None @@ -156,7 +157,7 @@ may encounter the following error:: Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-req-build-wPB39p/ -**Solution:** The cause for this problem is sphinx , or sphinx version . It can be easily solved by installing sphinx 1.5.6. +**Solution:** The cause for this problem is Sphinx or Sphinx version. It can be easily solved by installing Sphinx 1.5.6. The command for the same is : pip install sphinx==1.5.6 diff --git a/docs/models/examples/Custom_Density_And_Boundary_Velocities.ipynb b/docs/models/examples/Custom_Density_And_Boundary_Velocities.ipynb index 06804eac9d7..30adb1d86a9 100644 --- a/docs/models/examples/Custom_Density_And_Boundary_Velocities.ipynb +++ b/docs/models/examples/Custom_Density_And_Boundary_Velocities.ipynb @@ -48,7 +48,7 @@ "source": [ "* The first line specifies the time in days after the explosion\n", "* After a skipped line, each row corresponds to a shell with index specified by the first column.\n", - "* The second column lists the velocities of the outer boundary of the cell in km/s.\n", + "* The second column lists the velocities of the outer boundary of the cell in km / s.\n", "* The third column lists the density of the cell.\n", "\n", "__IMPORTANT__\n", @@ -81,7 +81,7 @@ "metadata": {}, "source": [ "* The first line indicates which elements (or isotopes) correspond to which columns.\n", - "* After a skipped line, each row specifies the chemical abundance of one shell. Therefore the numbers in a given row should sum to 1.0\n", + "* After a skipped line, each row specifies the chemical abundance of one shell. Therefore the numbers in a given row should sum to 1.0.\n", "\n", "__IMPORTANT__\n", "\n", @@ -407,7 +407,7 @@ "source": [ "## Example 1) v_inner_boundary lower than first velocity in density file\n", "\n", - "In this example, the first velocity in the density file is 9500 km/s. The user can specify in the config file the velocity of the inner boundary to a lower velocity, say v_inner_boundary = 9000 km/s. This will cause TARDIS to raise an error." + "In this example, the first velocity in the density file is 9500 km/s. The user can specify in the config file the velocity of the inner boundary to be a lower velocity, say v_inner_boundary = 9000 km/s. This will cause TARDIS to raise an error." ] }, { diff --git a/docs/models/examples/abundancecust.rst b/docs/models/examples/abundancecust.rst index 0cdfbb6a1e3..f756e9b2241 100644 --- a/docs/models/examples/abundancecust.rst +++ b/docs/models/examples/abundancecust.rst @@ -8,8 +8,8 @@ ASCII Format ============= To use a stratified ejecta composition in TARDIS, the elemental abundances may -be specified on a per-cell basis via an external ascii file (similar to setting -up a :doc:`custom density ` profile). An ascii file that could +be specified on a per-cell basis via an external ASCII file (similar to setting +up a :doc:`custom density ` profile). An ASCII file that could work on a mesh with ten cells should be formatted like this: .. literalinclude:: abund.dat @@ -21,10 +21,10 @@ In this file: - the remaining 30 entries in each row give the set of elemental abundances for atomic number Z=1 to Z=30 (in order) The abundances are specified as mass fractions (i.e. the sum of columns 1 to 30 -in each row should be 1.0). TARDIS does not currently include any elements -heavier that Z=30. The mass fractions specified will be adopted directly in -the TARDIS calculations - so if your model is e.g. based on an explosion -simulation you may need to calculate the state of any radioactive decay chains +in each row should be 1.0). TARDIS does not currently include any elements +heavier that Z=30. The mass fractions specified will be adopted directly in +the TARDIS calculations --- so if your model is, for example, based on an explosion +simulation, you may need to calculate the state of any radioactive decay chains at the correct epoch. The example file shown here has three simple layers: @@ -38,13 +38,13 @@ The example file shown here has three simple layers: .. warning:: The example given here is to show the format only. It is not a - realistic model. In any real calculation better resolution + realistic model. In any real calculation, better resolution (i.e. more grid points) should be used. .. warning:: The calculation can be no better / more complete than the atomic - data set. For further information on the atomic database - + data set. For further information on the atomic database --- including details of how to develop your own dataset to suit your needs, please contact us. @@ -53,7 +53,7 @@ TARDIS ascii input file If you create a correctly formatted abundance profile file (called "abund.dat" in this example), you can use it in TARDIS by putting the following lines in -the model section of the yaml file: +the model section of the YAML file: .. literalinclude:: tardis_configv1_abundance_cust_example.yml :language: yaml @@ -63,7 +63,7 @@ CSV Format ========== In this format, both elemental and isotopic abundances may -be specified on a per-cell basis via an external csv file. A csv file that could +be specified on a per-cell basis via an external CSV file. A CSV file that could work on a mesh with ten cells should be formatted like this: .. literalinclude:: tardis_model_abund.csv @@ -76,7 +76,7 @@ work on a mesh with ten cells should be formatted like this: .. danger:: The header line for the isotopic abundance structure can under no - circumstances start with a '#' + circumstances start with a '#'. In this file: @@ -94,20 +94,20 @@ The example file shown here has three simple layers: - a middle region that is composed of O and Mg -- an outer region that is composed of C and O. +- an outer region that is composed of C and O .. note:: Suppose you specify Elemental and Isotopic abundances for the same element. For ex- :code:`Ni` and :code:`Ni56`. - Here, Ni will refer to the stable Nickel, i.e. (Z=26, A=58). + Here, Ni will refer to the stable Nickel (i.e. Z=26, A=58). .. note:: As with the custom density file, the first row will be ignored. It is supposed to give the composition below the photosphere. Thus, the first row - (after the header) can be filled with dummy values + (after the header) can be filled with dummy values. .. warning:: @@ -115,20 +115,20 @@ The example file shown here has three simple layers: realistic model. In any real calculation better resolution (i.e. more grid points) should be used. -TARDIS csv input file +TARDIS CSV input file ===================== If you create a correctly formatted abundance profile file (called "tardis_model_abund.csv" in this example), you can use it in TARDIS by putting the following lines in -the model section of the yaml file: +the model section of the YAML file: .. literalinclude:: tardis_configv1_isotope_abundance_cust_example.yml :language: yaml -Convert ascii abundance file format to csv format +Convert ASCII abundance file format to CSV format ================================================= -If you want to convert an ASCII abundance file(say "abund.dat") to CSV format, you can use +If you want to convert an ASCII abundance file (say "abund.dat") to CSV format, you can use :code:`convert_abundances_format` function for it. Here is an example to demonstrate this: .. code:: python diff --git a/docs/models/examples/abundanceuni.rst b/docs/models/examples/abundanceuni.rst index 07017fb9648..59986517b52 100644 --- a/docs/models/examples/abundanceuni.rst +++ b/docs/models/examples/abundanceuni.rst @@ -7,10 +7,10 @@ Overview The simplest possibility for specifying an ejecta composition is to use a uniform abundance pattern in all cells specified in the density profile setup -step. These constant abundances can be supplied directly in the input (yaml) +step. These constant abundances can be supplied directly in the input (YAML) file. Elemental and Isotopic abundances are set in the "abundances" subsection of the "model" section, following the "type: uniform" specifier (see example input -file below). They are specified as mass fractions. E.g. +file below). They are specified as mass fractions, e.g. .. code-block:: none @@ -18,18 +18,18 @@ file below). They are specified as mass fractions. E.g. S: 0.2 Ni56: 0.2 -will set the mass fraction of silicon (Z=14) to 0.6, sulphur (Z=16) to 0.2 and Nickel(Z=26, A=56) to 0.2. +will set the mass fraction of silicon (Z=14) to 0.6, sulphur (Z=16) to 0.2 and Nickel (Z=26, A=56) to 0.2. .. note:: - Suppose you specify Elemental and Isotopic abundance for the same element. For ex- + Suppose you specify Elemental and Isotopic abundance for the same element, e.g. .. code-block:: none Ni: 0.8 Ni56: 0.2 - Here, Ni will refer to the stable Nickel, i.e. (Z=26, A=58). + Here, Ni will refer to the stable Nickel (i.e. Z=26, A=58). .. note:: @@ -40,8 +40,8 @@ will set the mass fraction of silicon (Z=14) to 0.6, sulphur (Z=16) to 0.2 and N TARDIS input file ================= -The following example shows the relevant section of a TARDIS input yaml file -which specifies a uniform ejecta composition; +The following example shows the relevant section of a TARDIS input YAML file +which specifies a uniform ejecta composition. .. literalinclude:: tardis_configv1_abundance_uniform_example.yml :language: yaml diff --git a/docs/models/examples/densitycust.rst b/docs/models/examples/densitycust.rst index 417e7de7c5c..3a49aa07c8e 100644 --- a/docs/models/examples/densitycust.rst +++ b/docs/models/examples/densitycust.rst @@ -7,10 +7,10 @@ Using a custom density profile Overview ======== -TARDIS has also the capability to work with arbitrary density profiles. This is +TARDIS also has the capability to work with arbitrary density profiles. This is particularly useful if the results of detailed explosion simulations should be mapped into TARDIS. The density profile is supplied in the form of a simple -ascii file that should look something like this: +ASCII file that should look something like this: .. literalinclude:: density.dat @@ -20,7 +20,7 @@ In this file: - (the second line in our example is a comment) -- the remaining lines (ten in our example) give an indexed table of points that specify mass density (g / cm^3) as a function of velocity (km /s). +- the remaining lines (ten in our example) give an indexed table of points that specify mass density (g / cm^3) as a function of velocity (km / s). TARDIS will use this table of density versus velocity to specify the density distribution in the ejecta. For the calculation, TARDIS will use the reference @@ -47,7 +47,7 @@ The values in the example here define a density profile that is dropping off wit Inner Boundary ============== -The first velocity-density pair in a custom density file (given by index 0) specifies the velocity of the inner boundary approximation. The density associated with this velocity is the density within the inner boundary, which does not affect TARDIS spectra. Therefore, the first density (5.4869692e-10 in the example above) can be replaced by a placeholder value. The user can choose to both specify a custom density file AND specify v_inner_boundary or v_outer_boundary in the configuration YAML file for a TARDIS run. However, the YAML specified values must be within the velocity range specified in the custom density file, otherwise TARDIS will raise an error. When one of the YAML specified boundary velocities falls within the velocity range specified in the custom density file, then the boundary velocity is set equal to the number in the configuration YAML file. This has the effect of splitting a cell in the custom density file into two parts, a region within the boundary and a region outside the boundary. +The first velocity-density pair in a custom density file (given by index 0) specifies the velocity of the inner boundary approximation. The density associated with this velocity is the density within the inner boundary, which does not affect TARDIS spectra. Therefore, the first density (5.4869692e-10 in the example above) can be replaced by a placeholder value. The user can choose to both specify a custom density file AND specify v_inner_boundary or v_outer_boundary in the configuration YAML file for a TARDIS run. However, the YAML-specified values must be within the velocity range specified in the custom density file, otherwise TARDIS will raise an error. When one of the YAML-specified boundary velocities falls within the velocity range specified in the custom density file, then the boundary velocity is set equal to the number in the configuration YAML file. This has the effect of splitting a cell in the custom density file into two parts, a region within the boundary and a region outside the boundary. .. toctree:: @@ -58,7 +58,7 @@ It is always a good idea to check the model velocities and abundances used in a .. warning:: The example given here is to show the format only. It is not a - realistic model. In any real calculation better resolution + realistic model. In any real calculation, better resolution (i.e. more grid points) should be used. @@ -67,7 +67,7 @@ TARDIS input file If you create a correctly formatted density profile file (called "density.dat" in this example), you can use it in TARDIS by putting the following lines in -the model section of the yaml file: +the model section of the YAML file: .. literalinclude:: tardis_configv1_density_cust_example.yml :language: yaml diff --git a/docs/models/examples/densityexp.rst b/docs/models/examples/densityexp.rst index 2b80f72f699..cc65dae4e05 100644 --- a/docs/models/examples/densityexp.rst +++ b/docs/models/examples/densityexp.rst @@ -13,19 +13,19 @@ explosion) is assumed to follow a functional form: \rho (v, t_{exp}) = \rho_0 (t_{0} / t_{exp})^{3} \exp( -v / v_0) defined by reference density, velocity and time parameters. These -parameters are set in the input yaml file, specifically in the "structure" +parameters are set in the input YAML file, specifically in the "structure" subsection of the "model" section, under the "density" heading (see example below). .. note:: - In this mode, the velocity grid has to be explicitly defined in the yml file (see example below) + In this mode, the velocity grid has to be explicitly defined in the YAML file (see example below) TARDIS input file example ========================= -The following example shows the relevant sections of a TARDIS input yaml file, +The following example shows the relevant sections of a TARDIS input YAML file, specifying an exponential density: .. literalinclude:: tardis_configv1_density_exponential_example.yml diff --git a/docs/models/examples/densitypow.rst b/docs/models/examples/densitypow.rst index 58512a79db2..13def79bf5b 100644 --- a/docs/models/examples/densitypow.rst +++ b/docs/models/examples/densitypow.rst @@ -19,13 +19,13 @@ example below). .. note:: - In this mode, the velocity grid has to be explicitly defined in the yml file (see example below) + In this mode, the velocity grid has to be explicitly defined in the YAML file (see example below) TARDIS input file example ========================= -The following example shows the relevant sections of a TARDIS input yaml file, +The following example shows the relevant sections of a TARDIS input YAML file, specifying a power law density: .. literalinclude:: tardis_configv1_density_power_law_example.yml diff --git a/docs/models/examples/modelconfig.rst b/docs/models/examples/modelconfig.rst index d838df5499b..c9ee0d99506 100644 --- a/docs/models/examples/modelconfig.rst +++ b/docs/models/examples/modelconfig.rst @@ -14,7 +14,7 @@ ejecta density and its composition have to be specified on a velocity grid. Since homology is implicitly assumed, the velocity grid immediately translates into a radial mesh -The density and composition may be specified independently in the following ways +The density and composition may be specified independently in the following ways: Specifying the density ====================== diff --git a/docs/models/index.rst b/docs/models/index.rst index b0bb864dabb..56173328c24 100644 --- a/docs/models/index.rst +++ b/docs/models/index.rst @@ -4,24 +4,24 @@ Model TARDIS requires a model of the homologously expanding ejecta in order to run a simulation. A model will include information like the velocity shell structure, abundances, density, etc. -TARDIS offers two ways of specifying the model: either directly in the configuration yaml file +TARDIS offers two ways of specifying the model: either directly in the configuration YAML file or separately in a model.csvy file. See `here `_ for an explanation of -the csvy file format and :ref:`here <../running/configuration/config-file>` for a link to the csvy_model schema. +the CSVY file format and :ref:`here <../running/configuration/config-file>` for a link to the csvy_model schema. .. note:: - We highly recommend using the cleaner csvy format. + We highly recommend using the cleaner CSVY format. CSVY Model ========== -The TARDIS YAML delimiter for csvy files is ``---``. This means that each csvy model +The TARDIS YAML delimiter for CSVY files is ``---``. This means that each CSVY model file has the following structure: The first line of the file is the YAML delimiter, -followed by the YAML portion of the csvy model. A line consisting of only the YAML -delimiter separates the YAML portion of the csvy file from the csv part. The YAML part -of the csvy file is for setting model parameters like **v_inner_boundary** or -**model_density_time_0** while the csv part of the file is for setting profiles of +followed by the YAML portion of the CSVY model. A line consisting of only the YAML +delimiter separates the YAML portion of the CSVY file from the CSV part. The YAML part +of the CSVY file is for setting model parameters like **v_inner_boundary** or +**model_density_time_0**, while the CSV part of the file is for setting profiles of physical parameters of the model (e.g. abundances, radiative temperature, dilution factor, etc). -If you use the csvy model, then you will need to specify the path to the csvy model file +If you use the CSVY model, then you will need to specify the path to the CSVY model file in the main TARDIS configuration file: .. code-block:: diff --git a/docs/physics/index.rst b/docs/physics/index.rst index ce7f8b15dbe..532a3c4501c 100644 --- a/docs/physics/index.rst +++ b/docs/physics/index.rst @@ -4,13 +4,14 @@ Physics of TARDIS .. warning:: - This section of the TARDIS documentation is still incomplete + This section of the TARDIS documentation is still `incomplete +`_. This part of the documentation is dedicated to providing some physical and astrophysical background for TARDIS. If you do not find the information you are looking for, consult the official TARDIS publications and the references therein. -Eventually, information about the following topics will be provided +Eventually, information about the following topics will be provided: * Spectral Synthesis in SNe Ia ejecta * Radiative Transfer Primer diff --git a/docs/physics/montecarlo/discretization.rst b/docs/physics/montecarlo/discretization.rst index 321d92b3404..baef5eeb2f0 100644 --- a/docs/physics/montecarlo/discretization.rst +++ b/docs/physics/montecarlo/discretization.rst @@ -1,6 +1,6 @@ -******************************************* -Monte Carlo Discretization - Energy Packets -******************************************* +********************************************* +Monte Carlo Discretization --- Energy Packets +********************************************* While it is instructive to think about tracking the propagation history of photons when illustrating the basic idea behind Monte Carlo radiative transfer @@ -12,19 +12,19 @@ building blocks of the Monte Carlo calculation. These basic Monte Carlo quanta are commonly referred to as "energy packets" or simply "packets". During a Monte Carlo calculation, a large number of packets, all with a certain -energy :math:`\varepsilon` are created. In addition, each packet is associated +energy :math:`\varepsilon`, are created. In addition, each packet is associated with a frequency. These assignments are performed in a manner which ensures that the ensemble of packets represents the spectral energy distribution of the radiation field (see :doc:`Propagation `). During the simulation, the energy of the packet remains constant in the local co-moving frame (see :doc:`Reference Frames <../physics/referenceframes>` for -details about the lab and co-moving frame). This naturally ensures energy +details about the lab and co-moving frames). This naturally ensures energy conservation and constitutes the main advantage of this discretization scheme. There is one side effect of this so-called indivisible packet energy scheme -which often causes confusion: even during radiation-matter interactions the +which often causes confusion: Even during radiation-matter interactions the packet energy is conserved in the co-moving frame (see :doc:`Propagation -`). However the frequency associated with a packet may chance +`). However, the frequency associated with a packet may change (e.g. during non-resonant line interactions). As a consequence, packets may represent a varying number of real photons during their lifetime. diff --git a/docs/physics/montecarlo/estimators.rst b/docs/physics/montecarlo/estimators.rst index c4ea19869e3..8c236e78651 100644 --- a/docs/physics/montecarlo/estimators.rst +++ b/docs/physics/montecarlo/estimators.rst @@ -6,15 +6,15 @@ An integral part of Monte Carlo radiative transfer calculations consists of reconstructing macroscopic radiation field properties from the ensemble of packet interaction histories. TARDIS uses volume-based Monte Carlo estimators for this purpose. This concept was originally developed by :cite:`Lucy1999` and -successively refined for example by :cite:`Lucy1999a`, :cite:`Lucy2002` and +successively refined, for example, by :cite:`Lucy1999a`, :cite:`Lucy2002` and :cite:`Lucy2003`. Basic Principle =============== The basic principle underlying volume-based estimators is best illustrated -at the example of reconstructing the mean radiation field energy density within -a certain control volume (in most cases this will be a grid cell). A simple +by the example of reconstructing the mean radiation field energy density within +a certain control volume (in most cases, this will be a grid cell). A simple approach would involve explicitly counting the number of Monte Carlo packets which reside in the control volume at a certain time. Although being intuitive, this approach suffers heavily from Monte Carlo shot noise, in particular in @@ -60,7 +60,7 @@ estimator derived above: J = \frac{1}{4\pi \Delta V \Delta t}\sum_i \varepsilon_i l_i D_{\mu} -An intensity weighted estimate for the mean frequency is obtained from +An intensity-weighted estimate for the mean frequency is obtained from .. math:: @@ -68,22 +68,22 @@ An intensity weighted estimate for the mean frequency is obtained from .. note:: - Compared to the estimtors derived in the previous section, the ones + Compared to the estimators derived in the previous section, the ones presented here involve a relativistic factor, :math:`D_{\mu} = (1 - \beta \mu)`, which ensures the correct frame transformation behaviour of the estimators (to first order in :math:`v/c`). Using the estimators just derived the radiation temperature (which should be -interpreted as a colour temperature) of the radiation field +interpreted as a colour temperature) of the radiation field, .. math:: T_{\mathrm{R}} = \frac{h}{k_{\mathrm{B}}} \frac{\pi^4}{360 \zeta(5)} \frac{\bar \nu}{J} may be derived. The normalization constants, involving Riemann's zeta function, -are a consequence from the definition of this colour temperature: this should -be the temperature of a black body radiation field whose mean frequency is +are a consequence from the definition of this colour temperature: This should +be the temperature of a black-body radiation field whose mean frequency is equal to the one reconstructed from the Monte Carlo simulation. With the temperature determined, the dilution factor, describing the deviation of the radiation field from a thermal field with the same colour temperature may be calculated @@ -97,7 +97,7 @@ These two quantities, :math:`T_{\mathrm{R}}` and :math:`W` are vital for the calculation of the plasma state of the ejecta (see :doc:`Plasma State Calulation <../physics/plasma/index>`). -Finally, TARDIS also reconstruct the mean intensity of the radiation field in +Finally, TARDIS also reconstructs the mean intensity of the radiation field in the blue wing of each line transition :math:`l \rightarrow u`, which is used in the Macro Atom treatment and in the ionisation calculation. @@ -106,7 +106,7 @@ the Macro Atom treatment and in the ionisation calculation. J_{lu}^b = \frac{1}{4\pi \Delta V \Delta t} \frac{t_{\mathrm{exp}}}{c} \sum_i \frac{\varepsilon_i}{\nu_{lu}} D_{\mu}. The summation here only involves packets which passed through the Sobolev point -(see :doc:`Propagation `) of the transition. For a derivation of this +(see :doc:`Propagation `) of the transition. For a derivation of this estimator, in particular, for a motivation of the expansion factor involving the time since explosion :math:`t_{\mathrm{exp}}`, we refer to :cite:`Lucy2003`, section 6.2. diff --git a/docs/physics/montecarlo/index.rst b/docs/physics/montecarlo/index.rst index 2f05c796781..9f5c3faf8c5 100644 --- a/docs/physics/montecarlo/index.rst +++ b/docs/physics/montecarlo/index.rst @@ -7,7 +7,7 @@ transfer techniques as they are used in TARDIS. All the information listed here can also be found in various papers by L. Lucy and in the main TARDIS publication (c.f. :cite:`Abbott1985`, :cite:`Mazzali1993`, :cite:`Lucy1999`, :cite:`Long2002`, :cite:`Lucy2002`, :cite:`Lucy2003`, :cite:`Lucy2005`, -:cite:`Kerzendorf2014`) +:cite:`Kerzendorf2014`). .. toctree:: basicprinciples diff --git a/docs/physics/montecarlo/lineinteraction.rst b/docs/physics/montecarlo/lineinteraction.rst index 3d3be867e81..57b42fa2e74 100644 --- a/docs/physics/montecarlo/lineinteraction.rst +++ b/docs/physics/montecarlo/lineinteraction.rst @@ -8,7 +8,7 @@ treatment, a number of steps are always carried out when a Monte Carlo packet performs a line interaction. Since TARDIS adopts the indivisible energy packet formalism (see :doc:`Discretization `), the packet will have the same energy in the co-moving frame after (f for final) the line interaction as -before (i for initial). Thus, after accounting for the frame transformations +before (i for initial). Thus, after accounting for the frame transformations, .. math:: @@ -30,8 +30,8 @@ as an isotropic process. Thus, .. note:: - Strictly speaking the re-mission process occurs in the local co-moving - frame. Thus, the so called angle abberration effect should be taken into + Strictly speaking, the re-mission process occurs in the local co-moving + frame. Thus, the so called angle aberration effect should be taken into account when transforming into the lab frame. However, TARDIS, currently neglects this effect. @@ -58,7 +58,7 @@ The so-called downbranching scheme, introduced by :cite:`Lucy1999a`, is an elegant approach to approximately account for fluorescence effects. In this scheme, the packet is not re-emitted in the same transitions as it was absorbed in. Instead, it now can emerge from any line transition linking the activated -upper energy level to a lower one. For any specific line interaction event the +upper energy level to a lower one. For any specific line interaction event, the re-emission channel is probabilistically selected according to the branching ratios of the different allowed de-excitation transitions. For more details about the downbranching scheme, we refer to :cite:`Lucy1999a` and @@ -74,7 +74,7 @@ fluorescence processes and multi-line effects. Once a Monte Carlo packet is absorbed in a certain line transition (macro atom activation), an arbitrary number of internal jumps up and downwards may be performed. One may think of them as changing the energy level which is excited. At any point during this -process, there is the change that the internal jump procedure terminates and +process, there is the chance that the internal jump procedure terminates and that the packet is re-emitted in a transition linking the currently excited upper energy level to a lower one (macro atom deactivation). Again, all involved processes are governed by probabilities reflecting the different line @@ -88,7 +88,7 @@ Comparison ========== The different levels of sophistication are illustrated in the following plot, -taken from :cite:`Kerzendorf2014` and showing the incident and versus the +taken from :cite:`Kerzendorf2014` and showing the incident wavelength versus the emergent wavelength of Monte Carlo packets in line interactions. The left panel shows the situation in the resonant scatter mode, the middle one for the downbranching scheme and the right one the macro atom results. diff --git a/docs/physics/montecarlo/propagation.rst b/docs/physics/montecarlo/propagation.rst index 1a5b98f7989..3859e6e97e9 100644 --- a/docs/physics/montecarlo/propagation.rst +++ b/docs/physics/montecarlo/propagation.rst @@ -7,7 +7,7 @@ determining the propagation history of the different packets. After a packet is initialised, it is launched and may then perform interactions with the surrounding material. This occurs again in a probabilistic manner. The packet propagation is followed until it escapes through the outer boundary of the -computational domain at which point the packet contributes to the synthetic +computational domain, at which point the packet contributes to the synthetic spectrum, the main product of a TARDIS calculation. The different spectral features are simply a combined product of the changes in the packet properties induced in the radiation-matter interactions. @@ -93,7 +93,7 @@ interaction into a physical distance is not straight-forward in the presence of frequency-dependent interaction process such as atomic line interactions. The detailed procedure is outlined in the following section. -In addition to the physical processes, numerical events which are a consequence +In addition to the physical processes, numerical events that are a consequence of the spatial discretization of the computational domain require interrupting the propagating process. In TARDIS, as in many other numerical codes, physical quantities are stored on a discrete mesh. Within the different cells, which in @@ -105,7 +105,7 @@ new state of the ambient material. Thus, during the packet propagation, the distance to the next radial shell is tracked to predict when the packet crosses into a new shell. Special care is taken at the edges of the computational domain. If a packet crosses back into the photosphere, it is discarded. Its -propagation is stopped and it is no longer considered. Instead processing the +propagation is stopped and it is no longer considered. Instead, processing the next packet of the population is started. Similarly, the propagation is stopped if the packet escapes through the outer surface of the domain. However, in this case the packet contributes to the final emergent spectrum (see :doc:`Spectrum @@ -123,8 +123,7 @@ supernovae. Since the main focus of TARDIS is to calculate optical spectra, electron-scatterings are treated in the elastic low-energy limit as classical -Thomson scatterings. In this case, the electron scattering process is frequency -independent. It's opacity only depends on the number density of free electrons +Thomson scatterings. In this case, the electron scattering process is frequency-independent. Its opacity only depends on the number density of free electrons :math:`n_e` .. math:: @@ -140,7 +139,7 @@ Thomson scattering according to \Delta \tau = \sigma_{\mathrm{T}} l. -The situation is complicated by the inclusion of frequency dependent +The situation is complicated by the inclusion of frequency-dependent bound-bound interactions, i.e. interactions with atomic line transitions. Photons and thus Monte Carlo packets can only interact with a line transition if their frequency in the co-moving frame (see :doc:`Reference Frames @@ -148,12 +147,12 @@ if their frequency in the co-moving frame (see :doc:`Reference Frames atomic levels linked by the transition, i.e. if it comes into resonance. As a photon/packet propagates through the homologously expanding ejecta, its co-moving frame frequency is continuously red-shifted. Thus, during its -propagation through the SN ejecta, a photon/packet may come into resonance with +propagation through the supernova ejecta, a photon/packet may come into resonance with many line transitions. This and the fact that line transitions have a finite width given by the line profile function (in the case at hand, this width is mainly given by thermal broadening) would render the determination of the line optical depth accumulated along the photon/packet trajectory a complicated -task. Fortunately, the typical conditions in supernova ejecta warrant the use +task. Fortunately, the typical conditions in supernova ejecta warrant the use of the so-called Sobolev approximation (see :doc:`Sobolev Approximation <../physics/sobolev>`). Roughly speaking, this approximation replaces the line profile function with a :math:`\delta` distribution around the natural line @@ -167,16 +166,16 @@ With these assumptions, the calculation of the optical depth a packet accumulates along its trajectory currently adopted in TARDIS proceeds according to the following scheme (which was originally introduced by :cite:`Mazzali1993`): given the current lab-frame frequency of the packet, the distance to the next -Sobolev point (i.e. to the next line resonance) is calculated +Sobolev point (i.e. to the next line resonance) is calculated. Until this location, the packet continuously accumulates optical depth due to electron-scattering. At the Sobolev point, the accumulated optical depth is instantaneously incremented by the full line optical depth. Afterwards, the -procedure is repeated, now with respect to next transition in the +procedure is repeated, now with respect to the next transition in the frequency-ordered list of all possible atomic line transitions. The point at which the accumulated optical depth surpasses the value determined in the random number experiment described above (determining the distance to the next -physical interaction), determines the type of interaction the packet performs +physical interaction) determines the type of interaction the packet performs and at which location in the spatial mesh. The entire process is summarized in the sketch below (taken from :cite:`Noebauer2014`, adapted from :cite:`Mazzali1993`): @@ -206,7 +205,7 @@ sampled according to \mu_f = 2 z - 1. -In addition, energy conservation has in the local co-moving frame has to be +In addition, energy conservation in the local co-moving frame has to be obeyed. Thus, the packets energy and frequency in the lab-frame suffer from the relativistic Doppler shift @@ -223,7 +222,7 @@ Line interactions proceed in a similar fashion. Since we assume that the re-emission process occurs isotropically as well, the same directional sampling as described above is used. Energy conservation again dictates how the packet energy after the line interaction event is determined. The important difference -is the assignment of the post interaction frequency. This depends on the +is the assignment of the post-interaction frequency. This depends on the selected line interaction mode (see :doc:`Line Interaction Modes `). @@ -232,7 +231,7 @@ selected line interaction mode (see :doc:`Line Interaction Modes Note that the inclusion of special relativistic effects in TARDIS is at best to first order in :math:`\beta`. -Implementation: Main Propagation loop +Implementation: Main Propagation Loop ===================================== In summary of the concepts outlined above, the main Monte Carlo process within @@ -246,8 +245,8 @@ radiation field emitted by the photosphere in the following way: * the packet covers the shorter of these two distances: * if the new shell is reached first, propagate into the shell and recalculate both distances * if the packet has crossed through the inner domain boundary (photosphere), terminate propagation - * likewise in case the packet escapes through outer boundary (ejecta surface): account for contribution to emergent spectrum and terminate propagation - * if the interaction location is reached first, propagated to this location, perform interaction and recalculate both distances + * likewise, in case the packet escapes through the outer boundary (ejecta surface): account for contribution to emergent spectrum and terminate propagation + * if the interaction location is reached first, propagate to this location, perform interaction and recalculate both distances * repeat this procedure until one of the two termination events occurs The following flow chart summarizes this process again: diff --git a/docs/physics/montecarlo/randomsampling.rst b/docs/physics/montecarlo/randomsampling.rst index 9fbcd1eccea..0c626897563 100644 --- a/docs/physics/montecarlo/randomsampling.rst +++ b/docs/physics/montecarlo/randomsampling.rst @@ -13,34 +13,34 @@ Number Generators are available. These produce (pseudo-) random numbers :math:`z` uniformly distributed on the interval :math:`[0,1]`. The challenge now lies in using these numbers to sample any physical process involved in the Radiative transfer calculation. From a probability theory point of view, this -just implies finding mapping between the probability distribution governing the -physical process and the one underlying the Random number generator. This +just implies finding a mapping between the probability distribution governing the +physical process and the one underlying the Random Number Generator. This process is typically referred to as random sampling. Inverse transformation method ============================= .. note:: - This is a very superficial and sloppy description Random sampling. More + This is a very superficial and sloppy description of Random sampling. More detailed and rigorous accounts are found in the standard literature, for - example in :cite:`Kalos2008` + example in :cite:`Kalos2008`. -The simplest and most used technique in Monte Carlo radiative transfer +The simplest and most-used technique in Monte Carlo radiative transfer applications is referred to as the inverse transformation method and involves the cumulative distribution function. In general, a random process captured by the random variable :math:`X` is governed by a probability density :math:`\rho_X(x)` (the continuous counterpart to discrete probabilities), with :math:`\rho_X(x) \mathrm{d}x` describing the probability of the variable taking values in the interval :math:`[x, x+\mathrm{d}x]`. The cumulative distribution -function in turn describes, as the name suggests the probability of the -variable taking the any value between :math:`-\infty` and :math:`x`: +function in turn describes, as the name suggests, the probability of the +variable taking any value between :math:`-\infty` and :math:`x`: .. math:: f_X(x) = \int_{-\infty}^x \mathrm{d}x \rho_X(x) Since the probability density is by definition always positive, the cumulative -distribution function is monotonously increasing. This constitutes the basis +distribution function is monotonically increasing. This constitutes the basis for the inverse transformation function. Consider two random variables, :math:`X` and :math:`Y`. A mapping between those may be established by equating their cumulative distribution functions. Numbers :math:`y` distributed @@ -56,7 +56,7 @@ function is trivial, namely :math:`f_Z(z) = z`. However, the inverse distribution sampling method relies on finding the analytic inverse function of the cumulative distribution function governing the physical processes to be sampled. If this is not possible, other sampling methods, such as von-Neumann -rejection sampling techniques have to be used. +rejection sampling techniques, have to be used. Examples ======== diff --git a/docs/physics/montecarlo/sourceintegration.rst b/docs/physics/montecarlo/sourceintegration.rst index f5b4d9b3f3a..165f6e5129e 100644 --- a/docs/physics/montecarlo/sourceintegration.rst +++ b/docs/physics/montecarlo/sourceintegration.rst @@ -8,7 +8,7 @@ Direct integration of the radiation field synthetic supernova spectra. Instead of using the frequency and energy of virtual Monte Carlo (MC) packets to create a spectrum through binning, one can formally integrate the line source functions which can be calculated from -volume based estimators collected during the MC simulation. Spectra generated +volume-based estimators collected during the MC simulation. Spectra generated using this method are virtually noise-free. However, statistical fluctuations inherent to Monte Carlo calculations still affect the determination of the source functions and thus indirectly introduce an uncertainty in the spectral @@ -53,10 +53,10 @@ Finally, the line source function for each transition can be derived with \dot E_u Here, :math:`\lambda_{ul}` is the wavelength of the line :math:`u \rightarrow -l`, and :math:`q_{ul}` is the corresponding branching ratio, i.e.\ the fraction +l`, and :math:`q_{ul}` is the corresponding branching ratio, i.e. the fraction of de-excitations of level :math:`u` proceeding via the transition :math:`u\rightarrow l`. For convenience, the attenuating factor is kept on the -left hand side because it is the product of the two that will appear in later +left-hand side because it is the product of the two that will appear in later formulae. Finally, if the contribution by electron-scattering has to be taken into @@ -129,10 +129,10 @@ Implementation Details We seek to integrate all emissions at a certain wavelength :math:`\nu` along a ray with impact parameter :math:`p`. Because the supernova ejecta is expanding homologously, the co-moving frame frequency is continuously shifted to longer -wavelength due to the relativistic Doppler effect as the packet/photon +wavelengths due to the relativistic Doppler effect as the packet/photon propagates. -To find out, which lines can shift into the target frequency, we need to +To find out which lines can shift into the target frequency, we need to calculate the maximum Doppler shift along a given ray. At any point, the Doppler effect in our coordinates is @@ -159,7 +159,7 @@ and in turn :math:`z_c` can be given as z_c = \sqrt{r_c^2 + p_c^2} -where the subscripts indicate the value at point C. By symmetry the +where the subscripts indicate the value at point C. By symmetry, the intersection point for negative :math:`z` is simply :math:`-z_c`. Using the expression for :math:`\mu`, :math:`\beta` above leads to the @@ -169,7 +169,7 @@ dependence on :math:`r` cancelling, and solving for :math:`\nu_0` gives \nu_0 = \frac{\nu}{1 + \frac{z}{ct}} -For any given shell and impact parameter we can thus find the maximum and +For any given shell and impact parameter, we can thus find the maximum and minimum co-moving frequency that will give the specified lab frame frequency. This allows us to find the section of the line list with the transitions whose resonances have to be considered in the calculation of the limiting specific @@ -185,7 +185,7 @@ The current implementation of the formal integral has some limitations: otherwise the :math:`J^b` and :math:`J^r` do not provide an accurate representation of the diffuse radiation field at the current location on the ray. Also, :math:`d\tau` can become large which can create unphysical, - negative intensities + negative intensities. It is always advised to check the results of the formal integration against the spectrum constructed from the emerging Monte Carlo packets. diff --git a/docs/physics/montecarlo/virtualpackets.rst b/docs/physics/montecarlo/virtualpackets.rst index 1b1f7fce41b..b92c23b00cd 100644 --- a/docs/physics/montecarlo/virtualpackets.rst +++ b/docs/physics/montecarlo/virtualpackets.rst @@ -9,7 +9,7 @@ two methods are implemented to calculate the spectrum during the main Monte Carlo calculation. One follows the obvious approach of recording the properties of all escaping Monte Carlo packets and binning their contributions in frequency (or wavelength) space. This "real packet" spectrum will naturally -suffer from Monte Carlo noise and if one tries to improve its signal-to-noise +suffer from Monte Carlo noise, and if one tries to improve its signal-to-noise ratio, one immediately encounters a fundamental characteristic of Monte Carlo approaches. Since Monte Carlo processes are typically governed by Poisson statistics, the level of stochastic fluctuations decreases only as :math:`\propto @@ -59,7 +59,7 @@ optical depth. In particular, it contributes with the to the emergent luminosity in the frequency interval :math:`[\nu, \nu + \Delta \nu]`. Here, :math:`\Delta t` denotes the physical duration of the simulation step (the same duration which is used during the initialization process at the -photosphere, see :doc:`Propagation `) and :math:`\varepsilon` is +photosphere, see :doc:`Propagation `), and :math:`\varepsilon` is the energy of the virtual packet when it was generated. .. note:: @@ -71,7 +71,7 @@ the energy of the virtual packet when it was generated. The initialization process for virtual packets is slightly different from real ones. For example, whenever a real packet is emitted by the photosphere, -:math:`N_v` virtual packets are spawned as well. The propagation direction of +:math:`N_v` virtual packets are spawned, as well. The propagation direction of these virtual packets is assigned uniformly. However, since :math:`N_v` is typically small, an unequal sampling of the solid angle is avoided by selecting :math:`N_v` equal :math:`\mu` bins and sampling the direction uniformly within @@ -116,10 +116,10 @@ problem : I(R, \mu, \nu) = I(R_{\mathrm{phot}}, \mu, \nu) \exp(-\tau(s_0)) + \int_0^{s_0} \eta(R - \mu s, \mu, \nu) \exp(-\tau(s)) \mathrm{d}s -This formulation of the formal solution is valid for the SN ejecta problem and +This formulation of the formal solution is valid for the supernova ejecta problem and involves the location of the photosphere, the radius of the ejecta surface :math:`R` and the packet trajectory :math:`s`. Here, the optical depth -:math:`\tau(s)` measures the optical depth from :math:`s` to the ejecta surface +:math:`\tau(s)` measures the optical depth from :math:`s` to the ejecta surface. For more details see :doc:`Radiative Transfer Primer <../physics/radiativetransfer>`. diff --git a/docs/physics/montecarlo_old.rst b/docs/physics/montecarlo_old.rst index 6075f2e69bf..5425fdd23fc 100644 --- a/docs/physics/montecarlo_old.rst +++ b/docs/physics/montecarlo_old.rst @@ -6,34 +6,34 @@ Radiative Monte Carlo .. :currentmodule:: tardis.montecarlo_multizone -We assume the supernova is in homologous expansion and we assume that -there is photon injection from an inner boundary and we assume an outer boundary +We assume the supernova is in homologous expansion, and we assume that +there is photon injection from an inner boundary, and we assume an outer boundary where these photons can leave the simulation again. -Montecarlo packets -^^^^^^^^^^^^^^^^^^ +Monte Carlo packets +^^^^^^^^^^^^^^^^^^^ -Montecarlo packets have a frequency, angle (:math:`\mu=\cos{\theta}` ) -and an energy: :math:`P(\nu, \mu, \epsilon)`. A large number :math:`n` are generated -at the start of each Montecarlo run in TARDIS by drawing :math:`\nu` from a +Monte Carlo packets have a frequency, angle (:math:`\mu=\cos{\theta}` ) +and an energy: :math:`P(\nu, \mu, \epsilon)`. A large number :math:`n` is generated +at the start of each Monte Carlo run in TARDIS by drawing :math:`\nu` from a black-body distribution distribution with a :math:`\mu` being drawn from a :math:`\sqrt[2]{z}` distribution and an energy that is :math:`1/n`. -These packets are then launched into the simulation and there are two possible +These packets are then launched into the simulation, and there are two possible outcomes for each packet. - * **packet leaves the simulation through the outer bound** and count towards the + * **packet leaves the simulation through the outer bound** and counts towards the spectrum - * **packet leaves the simulation through the inner boundary** and are lost + * **packet leaves the simulation through the inner boundary** and is lost (reabsorbed) -The packets can gain and loose energy throughout the simulation. If these packets -scatter (through the various mechanisms), we transform into the comoving frame at -that position :math:`v(r) = r / t_\textrm{explosion}`, where :math:`t_explosion` -is the time since explosion with the doppler factor -:math:`d_\textrm{rest \rightarrow comoving}` then change direction from +The packets can gain and lose energy throughout the simulation. If these packets +scatter (through the various mechanisms), we transform into the co-moving frame at +that position :math:`v(r) = r / t_\textrm{explosion}`, where :math:`t_\textrm{explosion}` +is the time since explosion with the Doppler factor +:math:`d_\textrm{rest \rightarrow comoving}`, then change direction from :math:`\mu_\textrm{in}` to :math:`mu_\textrm{out}` and transform back and change the energy accordingly: @@ -42,7 +42,7 @@ change the energy accordingly: d_\textrm{rest \rightarrow comoving} = 1 - \mu_\textrm{out} v(r) / c \\ E_\textrm{after scatter} = E_\textrm{before scatter} \times \frac{1 - \mu_\textrm{in} v(r) / c}{1 - \mu_\textrm{out} v(r) / c} -This way the montecarlo packets can gain or loose energy in the simulation: +This way, the Monte Carlo packets can gain or lose energy in the simulation: .. plot:: physics/pyplot/plot_mu_in_out_packet.py @@ -50,15 +50,15 @@ This way the montecarlo packets can gain or loose energy in the simulation: The spectrum is then generated as a weighted histogram. For each bin with edges -:math:`\nu_{n}, \nu_{n+1}` we get all the packets that left the simulation through +:math:`\nu_{n}, \nu_{n+1}`, we get all the packets that left the simulation through the outer boundary and add up their remaining energies. -Montecarlo Geometry -^^^^^^^^^^^^^^^^^^^ +Monte Carlo Geometry +^^^^^^^^^^^^^^^^^^^^ -Before any packet action is performed we calculate four different distances +Before any packet action is performed, we calculate four different distances ( :math:`d_\textrm{inner}, d_\textrm{outer}, d_\textrm{line}, d_{\textrm{e}^{-}}` ) The calculations for the distance to the outer boundary: @@ -73,23 +73,23 @@ The calculations for the distance to the inner boundary: -Radiationfield estimators +Radiation field estimators ^^^^^^^^^^^^^^^^^^^^^^^^^ -During the monte-carlo run we collect two estimators for the radiation field: +During the Monte Carlo run, we collect two estimators for the radiation field: .. math:: J_\textrm{estimator} &= \sum{\epsilon l}\\ \bar{\nu}_\textrm{estimator} &= \sum{\epsilon \nu l}, -where :math:`\epsilon, \nu` are comoving energy and comoving frequency of a packet respectively. +where :math:`\epsilon, \nu` are co-moving energy and co-moving frequency of a packet, respectively. -To calculate the temperature and dilution factor we first calculate the mean intensity in each cell +To calculate the temperature and dilution factor, we first calculate the mean intensity in each cell ( :math:`J = \frac{1}{4\pi\, \Delta t\, V} J_\textrm{estimator}` )., :cite:`2003A&A...403..261L`. The weighted mean frequency is used to obtain the radiation temperature. Specifically, the radiation temperature is chosen as the -temperature of a black body that has the same weighted mean frequency as has been computed in the simulation. Accordingly, +temperature of a black-body that has the same weighted mean frequency as has been computed in the simulation. Accordingly, .. math:: @@ -110,14 +110,14 @@ and so T_{R} &= \frac{1}{\bar{x}} \frac{h}{k_{B}} \frac{\bar{\nu}_\textrm{estimator}}{J_\textrm{estimator}} \\ &= 0.260945 \frac{h}{k_{B}} \frac{\bar{\nu}_\textrm{estimator}}{J_\textrm{estimator}}. -With the radiation temperature known, we can then obtain our estimate for for the dilution factor. Our radiation field model in the -nebular approximation is +With the radiation temperature known, we can then obtain our estimate for the dilution factor. Our radiation field model in the +nebular approximation is: .. math:: J = W B(T_{R}) = W \frac{\sigma_{SB}}{\pi} T_{R}^4, -i.e. a dilute blackbody. Therefore we use our value of the mean intensity derrived from the estimator (above) to obtain the +i.e., a dilute black-body. Therefore we use our value of the mean intensity derived from the estimator (above) to obtain the dilution factor .. math:: diff --git a/docs/physics/new_plasma.rst b/docs/physics/new_plasma.rst index d55a83557ad..d15117b5944 100644 --- a/docs/physics/new_plasma.rst +++ b/docs/physics/new_plasma.rst @@ -6,9 +6,9 @@ The role of the plasma module is to determine the ionisation and excitation stat supernova ejecta, given the basic structure, including the elemental abundances, densities and radiation temperature. After the calculation of the plasma state, the :math:`\tau_{\textrm{sobolev}}` values can be calculated. -The Tardis plasma structure inherits from the `BasePlasma class`. The code currently uses the `LegacyPlasmaArray` +The TARDIS plasma structure inherits from the `BasePlasma` class. The code currently uses the `LegacyPlasmaArray` for generating a plasma from the information provided by `model`. A variety of different plasmas can be generated -depending on the options selected in the plasma section of the Tardis config. file. The options currently considered +depending on the options selected in the plasma section of the TARDIS config. file. The options currently considered by the Legacy Plasma when creating the plasma calculation structure include: plasma: @@ -18,11 +18,11 @@ plasma: * helium_treatment: dilute-lte/recomb-nlte * nlte: [can provide list of ion species to be treated in NLTE, as well as specifying the use of the coronal_approximation/classical_nebular settings. -`LegacyPlasmaArray` uses these options to construct a map of the necessary plasma parameters that demonstrates how these parameters are dependent on one another (using networkx). Each time a particular parameter of the plasma is updated, all of the parameters dependent (directly or indirectly) on that particular one can be easily updated automatically, without requiring that all the plasma calculations are repeated. +`LegacyPlasmaArray` uses these options to construct a map of the necessary plasma parameters that demonstrates how these parameters are dependent on one another (using `NetworkX `_). Each time a particular parameter of the plasma is updated, all of the parameters dependent (directly or indirectly) on that particular one can be easily updated automatically, without requiring that all the plasma calculations are repeated. Properties, Inputs and Outputs ------------------------------ -Each Tardis plasma possesses an array of plasma properties, which are used to calculate plasma parameter values. Most plasma properties have a single output, e.g. +Each TARDIS plasma possesses an array of plasma properties, which are used to calculate plasma parameter values. Most plasma properties have a single output, e.g. * `GElectron`: (`g_electron`,) * `HeliumNLTE`: (`helium_population`,) @@ -30,12 +30,12 @@ but some have two or more, e.g. * `IonNumberDensity`: (`ion_number_density`, `electron_densities`) * `Levels`: (`levels`, `excitation_energy`, `metastability`, `g`) -Every property has a `calculate` function that returns the values of its outputs. The arguments required for that function become the property inputs. Tardis will raise an error if it does not have all of the required inputs for a particular property. It will also raise an error if there is an output loop, i.e. if two properties are dependent on each other. Some different properties share output names, for example, `PhiSahaLTE` and `PhiSahaNebular` both have an output called `phi`. That is because the `phi` value is calculated differently depending on the ionization method selected, but once calculated both values interact in the same way with the rest of the plasma. Tardis will import only one of the `phi` properties when initialising the plasma. +Every property has a `calculate` function that returns the values of its outputs. The arguments required for that function become the property inputs. TARDIS will raise an error if it does not have all of the required inputs for a particular property. It will also raise an error if there is an output loop, i.e. if two properties are dependent on each other. Some different properties share output names; for example, `PhiSahaLTE` and `PhiSahaNebular` both have an output called `phi`. That is because the `phi` value is calculated differently depending on the ionization method selected, but once calculated, both values interact in the same way with the rest of the plasma. TARDIS will import only one of the `phi` properties when initialising the plasma. The Plasma Graph ---------------- -If the necessary Python modules (pygraphviz and dot2tex) are available, Tardis will automatically output a .tex file at the beginning of each run that can be compiled to produce a PDF image of the plasma module graph. The nodes on this graph are the names of plasma properties, e.g. `Levels`, `TauSobolev`, `IonNumberDensity`, along with a list of outputs from those properties and equations showing how they are calculated. These nodes are connected by arrows linking nodes with the sources of their inputs, and labelled with the name of the input/output linking the two properties, e.g. `levels`, :math:`\tau_{\textrm{sobolev}}`, :math:`n_{e}`. +If the necessary Python modules (`PyGraphviz `_ and `dot2tex `_) are available, TARDIS will automatically output a .tex file at the beginning of each run that can be compiled to produce a PDF image of the plasma module graph. The nodes on this graph are the names of plasma properties, e.g. `Levels`, `TauSobolev`, `IonNumberDensity`, along with a list of outputs from those properties and equations showing how they are calculated. These nodes are connected by arrows linking nodes with the sources of their inputs, and labelled with the name of the input/output linking the two properties, e.g. `levels`, :math:`\tau_{\textrm{sobolev}}`, :math:`n_{e}`. Updating the Plasma ------------------- -During each iteration of the main code, Tardis updates the plasma using the `update_radiationfield` function. This requires, at minimum, new values for `t_rad` (the radiation temperature), `w` (the dilution factor) and `j_blues` (the intensity in the blue part of each line). +During each iteration of the main code, TARDIS updates the plasma using the `update_radiationfield` function. This requires, at minimum, new values for `t_rad` (the radiation temperature), `w` (the dilution factor) and `j_blues` (the intensity in the blue part of each line). diff --git a/docs/physics/physical_quantities.ipynb b/docs/physics/physical_quantities.ipynb index f136aef7d87..a98a716e7c0 100644 --- a/docs/physics/physical_quantities.ipynb +++ b/docs/physics/physical_quantities.ipynb @@ -11,10 +11,10 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In order to compute the synthetic spectrum, Tardis must either be told\n", + "In order to compute the synthetic spectrum, TARDIS must either be told\n", "or must calculate many physical properties of the model. To understand and\n", "test the code it can be important to look at these values. One\n", - "easy way to do this is to run Tardis in an interactive mode and then\n", + "easy way to do this is to run TARDIS in an interactive mode and then\n", "inspect the model properties." ] }, @@ -42,7 +42,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[1mtardis.io.atom_data.atom_web_download\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Downloading atomic data from https://media.githubusercontent.com/media/tardis-sn/tardis-refdata/master/atom_data/kurucz_cd23_chianti_H_He.h5 to /Users/sashmish/Downloads/tardis-data/kurucz_cd23_chianti_H_He.h5 (\u001b[1matom_web_download.py\u001b[0m:47)\n", + "[\u001B[1mtardis.io.atom_data.atom_web_download\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Downloading atomic data from https://media.githubusercontent.com/media/tardis-sn/tardis-refdata/master/atom_data/kurucz_cd23_chianti_H_He.h5 to /Users/sashmish/Downloads/tardis-data/kurucz_cd23_chianti_H_He.h5 (\u001B[1matom_web_download.py\u001B[0m:47)\n", " % Total % Received % Xferd Average Speed Time Time Time Current\n", " Dload Upload Total Spent Left Speed\n", "100 980 100 980 0 0 2222 0 --:--:-- --:--:-- --:--:-- 2222\n" @@ -67,13 +67,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[1mtardis.plasma.standard_plasmas\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Reading Atomic Data from kurucz_cd23_chianti_H_He.h5 (\u001b[1mstandard_plasmas.py\u001b[0m:74)\n", - "[\u001b[1mtardis.io.atom_data.util\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Atom Data kurucz_cd23_chianti_H_He.h5 not found in local path. Exists in TARDIS Data repo /Users/sashmish/Downloads/tardis-data/kurucz_cd23_chianti_H_He.h5 (\u001b[1mutil.py\u001b[0m:29)\n", - "[\u001b[1mtardis.io.atom_data.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Read Atom Data with UUID=6f7b09e887a311e7a06b246e96350010 and MD5=864f1753714343c41f99cb065710cace. (\u001b[1mbase.py\u001b[0m:184)\n", - "[\u001b[1mtardis.io.atom_data.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Non provided atomic data: synpp_refs, photoionization_data (\u001b[1mbase.py\u001b[0m:187)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 1/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 7.93730e+42 erg / s Luminosity absorbed = 2.66400e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "[\u001B[1mtardis.plasma.standard_plasmas\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Reading Atomic Data from kurucz_cd23_chianti_H_He.h5 (\u001B[1mstandard_plasmas.py\u001B[0m:74)\n", + "[\u001B[1mtardis.io.atom_data.util\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Atom Data kurucz_cd23_chianti_H_He.h5 not found in local path. Exists in TARDIS Data repo /Users/sashmish/Downloads/tardis-data/kurucz_cd23_chianti_H_He.h5 (\u001B[1mutil.py\u001B[0m:29)\n", + "[\u001B[1mtardis.io.atom_data.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Read Atom Data with UUID=6f7b09e887a311e7a06b246e96350010 and MD5=864f1753714343c41f99cb065710cace. (\u001B[1mbase.py\u001B[0m:184)\n", + "[\u001B[1mtardis.io.atom_data.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Non provided atomic data: synpp_refs, photoionization_data (\u001B[1mbase.py\u001B[0m:187)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 1/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 7.93730e+42 erg / s Luminosity absorbed = 2.66400e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 9926.501965 10168.422346 0.400392 0.501001\n", @@ -81,11 +81,11 @@ "\t10 9779.813302 10222.882075 0.142695 0.113985\n", "\t15 9708.082813 9928.649533 0.104556 0.085217\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 9933.952 K -- next t_inner 11475.997 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 2/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.41371e+43 erg / s Luminosity absorbed = 4.73752e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 9933.952 K -- next t_inner 11475.997 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 2/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 1.41371e+43 erg / s Luminosity absorbed = 4.73752e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 10168.422346 11497.903617 0.501001 0.545136\n", @@ -93,11 +93,11 @@ "\t10 10222.882075 11335.692704 0.113985 0.135635\n", "\t15 9928.649533 11018.841465 0.085217 0.101203\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11475.997 K -- next t_inner 9933.797 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 3/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.04734e+42 erg / s Luminosity absorbed = 2.55640e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 11475.997 K -- next t_inner 9933.797 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 3/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 8.04734e+42 erg / s Luminosity absorbed = 2.55640e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 11497.903617 10477.653343 0.545136 0.439296\n", @@ -105,11 +105,11 @@ "\t10 11335.692704 10635.474976 0.135635 0.100253\n", "\t15 11018.841465 10290.254692 0.101203 0.075529\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 9933.797 K -- next t_inner 11397.084 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 4/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.38199e+43 erg / s Luminosity absorbed = 4.54590e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 9933.797 K -- next t_inner 11397.084 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 4/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 1.38199e+43 erg / s Luminosity absorbed = 4.54590e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 10477.653343 11608.211738 0.439296 0.506501\n", @@ -117,11 +117,11 @@ "\t10 10635.474976 11479.604579 0.100253 0.125779\n", "\t15 10290.254692 11149.192411 0.075529 0.094052\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11397.084 K -- next t_inner 9978.058 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 5/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.16431e+42 erg / s Luminosity absorbed = 2.62454e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 11397.084 K -- next t_inner 9978.058 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 5/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 8.16431e+42 erg / s Luminosity absorbed = 2.62454e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 11608.211738 10556.913414 0.506501 0.440229\n", @@ -129,11 +129,11 @@ "\t10 11479.604579 10713.104080 0.125779 0.099268\n", "\t15 11149.192411 10399.079825 0.094052 0.073482\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 9978.058 K -- next t_inner 11365.561 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 6/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.36136e+43 erg / s Luminosity absorbed = 4.54590e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 9978.058 K -- next t_inner 11365.561 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 6/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 1.36136e+43 erg / s Luminosity absorbed = 4.54590e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 10556.913414 11562.006340 0.440229 0.509603\n", @@ -141,11 +141,11 @@ "\t10 10713.104080 11482.742597 0.099268 0.124721\n", "\t15 10399.079825 11124.799749 0.073482 0.093597\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11365.561 K -- next t_inner 10025.564 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 7/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.33278e+42 erg / s Luminosity absorbed = 2.66283e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 11365.561 K -- next t_inner 10025.564 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 7/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 8.33278e+42 erg / s Luminosity absorbed = 2.66283e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 11562.006340 10655.549804 0.509603 0.430187\n", @@ -153,11 +153,11 @@ "\t10 11482.742597 10926.058943 0.124721 0.094642\n", "\t15 11124.799749 10477.041314 0.093597 0.072578\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10025.564 K -- next t_inner 11303.643 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 8/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.34650e+43 erg / s Luminosity absorbed = 4.30670e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 10025.564 K -- next t_inner 11303.643 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 8/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 1.34650e+43 erg / s Luminosity absorbed = 4.30670e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 10655.549804 11572.119736 0.430187 0.496558\n", @@ -165,11 +165,11 @@ "\t10 10926.058943 11482.609682 0.094642 0.124382\n", "\t15 10477.041314 11098.080451 0.072578 0.093537\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11303.643 K -- next t_inner 10025.810 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 9/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.36983e+42 erg / s Luminosity absorbed = 2.63049e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 11303.643 K -- next t_inner 10025.810 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 9/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 8.36983e+42 erg / s Luminosity absorbed = 2.63049e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 11572.119736 10590.775937 0.496558 0.439574\n", @@ -177,17 +177,17 @@ "\t10 11482.609682 10761.665022 0.124382 0.099840\n", "\t15 11098.080451 10436.629671 0.093537 0.074676\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n" + " (\u001B[1mbase.py\u001B[0m:350)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10025.810 K -- next t_inner 11278.874 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 10/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.32624e+43 erg / s Luminosity absorbed = 4.34986e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 10025.810 K -- next t_inner 11278.874 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 10/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 1.32624e+43 erg / s Luminosity absorbed = 4.34986e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 10590.775937 11489.769556 0.439574 0.511403\n", @@ -195,11 +195,11 @@ "\t10 10761.665022 11527.732208 0.099840 0.120106\n", "\t15 10436.629671 11111.114390 0.074676 0.091713\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11278.874 K -- next t_inner 10079.967 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 11/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.51915e+42 erg / s Luminosity absorbed = 2.72009e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 11278.874 K -- next t_inner 10079.967 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 11/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 8.51915e+42 erg / s Luminosity absorbed = 2.72009e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 11489.769556 10664.234475 0.511403 0.437272\n", @@ -207,11 +207,11 @@ "\t10 11527.732208 10885.771059 0.120106 0.096973\n", "\t15 11111.114390 10484.177251 0.091713 0.074261\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10079.967 K -- next t_inner 11239.980 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 12/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.30886e+43 erg / s Luminosity absorbed = 4.28617e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 10079.967 K -- next t_inner 11239.980 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 12/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 1.30886e+43 erg / s Luminosity absorbed = 4.28617e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 10664.234475 11510.842068 0.437272 0.495944\n", @@ -219,11 +219,11 @@ "\t10 10885.771059 11479.636914 0.096973 0.120067\n", "\t15 10484.177251 11117.963837 0.074261 0.090628\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11239.980 K -- next t_inner 10111.668 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 13/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.65047e+42 erg / s Luminosity absorbed = 2.72874e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 11239.980 K -- next t_inner 10111.668 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 13/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 8.65047e+42 erg / s Luminosity absorbed = 2.72874e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 11510.842068 10636.025493 0.495944 0.446635\n", @@ -231,11 +231,11 @@ "\t10 11479.636914 10916.188023 0.120067 0.097843\n", "\t15 11117.963837 10431.720831 0.090628 0.077032\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10111.668 K -- next t_inner 11189.420 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 14/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.28712e+43 erg / s Luminosity absorbed = 4.19242e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 10111.668 K -- next t_inner 11189.420 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 14/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 1.28712e+43 erg / s Luminosity absorbed = 4.19242e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 10636.025493 11423.118214 0.446635 0.503706\n", @@ -243,11 +243,11 @@ "\t10 10916.188023 11389.994295 0.097843 0.121114\n", "\t15 10431.720831 11029.450833 0.077032 0.091350\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11189.420 K -- next t_inner 10150.866 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 15/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.76501e+42 erg / s Luminosity absorbed = 2.79433e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 11189.420 K -- next t_inner 10150.866 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 15/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 8.76501e+42 erg / s Luminosity absorbed = 2.79433e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 11423.118214 10634.831735 0.503706 0.452948\n", @@ -255,11 +255,11 @@ "\t10 11389.994295 10831.887277 0.121114 0.101805\n", "\t15 11029.450833 10396.372864 0.091350 0.078776\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10150.866 K -- next t_inner 11159.164 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 16/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.27462e+43 erg / s Luminosity absorbed = 4.13373e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 10150.866 K -- next t_inner 11159.164 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 16/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 1.27462e+43 erg / s Luminosity absorbed = 4.13373e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 10634.831735 11415.925493 0.452948 0.501153\n", @@ -267,11 +267,11 @@ "\t10 10831.887277 11397.519913 0.101805 0.120134\n", "\t15 10396.372864 11045.200458 0.078776 0.090180\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11159.164 K -- next t_inner 10172.913 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 17/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.86785e+42 erg / s Luminosity absorbed = 2.79094e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 11159.164 K -- next t_inner 10172.913 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 17/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 8.86785e+42 erg / s Luminosity absorbed = 2.79094e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 11415.925493 10678.510651 0.501153 0.453127\n", @@ -279,11 +279,11 @@ "\t10 11397.519913 10907.112682 0.120134 0.099725\n", "\t15 11045.200458 10508.816973 0.090180 0.076667\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10172.913 K -- next t_inner 11118.359 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 18/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.24749e+43 erg / s Luminosity absorbed = 4.15445e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 10172.913 K -- next t_inner 11118.359 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 18/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 1.24749e+43 erg / s Luminosity absorbed = 4.15445e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 10678.510651 11482.446420 0.453127 0.481917\n", @@ -291,11 +291,11 @@ "\t10 10907.112682 11472.013555 0.099725 0.115208\n", "\t15 10508.816973 10997.309982 0.076667 0.089730\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 11118.359 K -- next t_inner 10245.337 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 19/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 9.09476e+42 erg / s Luminosity absorbed = 2.89713e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Plasma stratification:\n", + " (\u001B[1mbase.py\u001B[0m:350)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 11118.359 K -- next t_inner 10245.337 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 19/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 9.09476e+42 erg / s Luminosity absorbed = 2.89713e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Plasma stratification:\n", "\t t_rad next_t_rad w next_w\n", "\tShell \n", "\t0 11482.446420 10834.729769 0.481917 0.438322\n", @@ -303,17 +303,17 @@ "\t10 11472.013555 10996.421420 0.115208 0.099677\n", "\t15 10997.309982 10625.479432 0.089730 0.075531\n", "\n", - " (\u001b[1mbase.py\u001b[0m:350)\n" + " (\u001B[1mbase.py\u001B[0m:350)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] t_inner 10245.337 K -- next t_inner 11056.949 K (\u001b[1mbase.py\u001b[0m:352)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 20/20 (\u001b[1mbase.py\u001b[0m:268)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 1.22623e+43 erg / s Luminosity absorbed = 4.00603e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:359)\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Simulation finished in 20 iterations and took 23.27 s (\u001b[1mbase.py\u001b[0m:308)\n" + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] t_inner 10245.337 K -- next t_inner 11056.949 K (\u001B[1mbase.py\u001B[0m:352)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 20/20 (\u001B[1mbase.py\u001B[0m:268)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 1.22623e+43 erg / s Luminosity absorbed = 4.00603e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:359)\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Simulation finished in 20 iterations and took 23.27 s (\u001B[1mbase.py\u001B[0m:308)\n" ] } ], @@ -4733,4 +4733,4 @@ }, "nbformat": 4, "nbformat_minor": 4 -} +} \ No newline at end of file diff --git a/docs/physics/plasma/helium_nlte.rst b/docs/physics/plasma/helium_nlte.rst index 6f3ec0eaf4a..99267d6de20 100644 --- a/docs/physics/plasma/helium_nlte.rst +++ b/docs/physics/plasma/helium_nlte.rst @@ -1,17 +1,17 @@ Helium NLTE ============ -The `helium_treatment` setting in the Tardis config. file will accept one of three options: +The `helium_treatment` setting in the TARDIS config. file will accept one of three options: * `none`: The default setting. Populate helium in the same way as the other elements. * `recomb-nlte`: Treats helium in NLTE using the analytical approximation outlined in an upcoming paper. - * `numerical-nlte`: To be implemented. Will allow the use of a separate module (not distributed with Tardis) to perform helium NLTE calculations numerically. + * `numerical-nlte`: To be implemented. Will allow the use of a separate module (not distributed with TARDIS) to perform helium NLTE calculations numerically. Recombination He NLTE ---------------------- Paper version: -This section will summarise the equations used in the calculation of the helium state for the `recomb-NLTE` approximation in Tardis. A full physical justification for these equations will be provided in an upcoming paper. All of the level populations are given as a function of the He II ground state population (:math:`n_{2,1,0}`), and the values are then normalised using the helium number density to give the correct level number densities. +This section will summarise the equations used in the calculation of the helium state for the `recomb-NLTE` approximation in TARDIS. A full physical justification for these equations will be provided in an upcoming paper. All of the level populations are given as a function of the He II ground state population (:math:`n_{2,1,0}`), and the values are then normalised using the helium number density to give the correct level number densities. Symbols/Indexing: * :math:`N_{i,j}`: Ion Number Density @@ -40,7 +40,7 @@ Symbols/Indexing: Code Version: -In the Tardis plasma, some of these equations are re-written slightly to make use of existing property methods (e.g. `PhiSahaLTE`, `PhiSahaNebular`) often using the relation: +In the TARDIS plasma, some of these equations are re-written slightly to make use of existing property methods (e.g. `PhiSahaLTE`, `PhiSahaNebular`) often using the relation: .. math:: \frac{N_{i,j}}{Z_{i,j}} = \frac{n_{i,j,k}}{g_{i,j,k}} @@ -48,4 +48,4 @@ In the Tardis plasma, some of these equations are re-written slightly to make us Numerical He NLTE ------------------ -Another `helium_treatment` option offered by Tardis is `numerical-nlte`. The use of this plasma property requires an additional code that is the property of Stephan Hachinger (see arXiv:1201.1506) and is not distributed with Tardis. Tardis also requires a specific atomic datafile to use this module. This plasma option is included so that people who have access to and permission to use the necessary module may use it. Otherwise, the `recomb-NLTE` option provides a very accurate alternative approximation. \ No newline at end of file +Another `helium_treatment` option offered by TARDIS is `numerical-nlte`. The use of this plasma property requires an additional code that is the property of Stephan Hachinger (see arXiv:1201.1506) and is not distributed with TARDIS. TARDIS also requires a specific atomic datafile to use this module. This plasma option is included so that people who have access to and permission to use the necessary module may use it. Otherwise, the `recomb-NLTE` option provides a very accurate alternative approximation. \ No newline at end of file diff --git a/docs/physics/plasma/lte_plasma.rst b/docs/physics/plasma/lte_plasma.rst index 8f773b45933..ff18efaf52a 100644 --- a/docs/physics/plasma/lte_plasma.rst +++ b/docs/physics/plasma/lte_plasma.rst @@ -2,12 +2,12 @@ LTE Plasma ---------- The `LTEPlasma` plasma class is the child of `BasePlasma` but is the first class that actually calculates plasma conditions. -After running exactley through the same steps as `BasePlasma`, `LTEPlasma` will start calculating the `partition functions `_. +After running exactly through the same steps as `BasePlasma`, `LTEPlasma` will start calculating the `partition functions `_. .. math:: Z_{i, j} = \sum_{k=0}^{max (k)} g_k \times e^{-E_k / (k_\textrm{b} T)} -, where Z is the partition function, g is the degeneracy factor, E the energy of the level and T the temperature of the radiation field. +where Z is the partition function, g is the degeneracy factor, E the energy of the level and T the temperature of the radiation field. The next step is to calculate the ionization balance using the `Saha ionization equation `_. and then calculating the Number density of the ions (and an electron number density) in a second step. @@ -30,11 +30,11 @@ In the second step (`LTEPlasma.calculate_ionization_balance`), we calculate in a N_1 &= \frac{N(X)}{\alpha} Initially, we set the electron density (:math:`N_e`) to the sum of all atom number densities. After having calculated the -ion species number densities we recalculated the electron density by weighting the ion species number densities with their +ion species number densities, we recalculate the electron density by weighting the ion species number densities with their ion number (e.g. neutral ion number densities don't contribute at all to the electron number density, once ionized contribute with a factor of 1, twice ionized contribute with a factor of two, ....). -Finally we calculate the level populations (`LTEPlasma.calculate_level_populations`), by using the calculated ion species number densities: +Finally, we calculate the level populations (`LTEPlasma.calculate_level_populations`) by using the calculated ion species number densities: .. math:: N_{i, j, k} = \frac{g_k}{Z_{i, j}}\times N_{i, j} \times e^{-\beta_\textrm{rad} E_k} diff --git a/docs/physics/plasma/macroatom.rst b/docs/physics/plasma/macroatom.rst index c0272de8d18..9340fe79594 100644 --- a/docs/physics/plasma/macroatom.rst +++ b/docs/physics/plasma/macroatom.rst @@ -10,15 +10,15 @@ level and emitting a photon while doing this respectively (see Figure 1 in :cite The macro atom is the most complex idea to implement as a data structure. The setup is done in `~tardisatomic`, but we will nonetheless discuss it here (as `~tardisatomic` is even less documented than this one). -For each level we look at the line list to see what transitions (upwards or downwards are possible). We create a two arrays, -the first is a long one-dimensional array containing the probabilities. Each level contains a set of probabilities, The first +For each level, we look at the line list to see what transitions (upwards or downwards are possible). We create a two arrays, +the first is a long one-dimensional array containing the probabilities. Each level contains a set of probabilities. The first part of each set contains the upwards probabilities (internal upward), the second part the downwards probabilities (internal downward), and the last part is the downward and emission probability. each set is stacked after the other one to make one long one dimensional `~numpy.ndarray`. -The second array is for book-keeping it has exactly the length as levels (with an example for the Si II level 15): +The second array is for book-keeping; it has exactly the length as levels (with an example for the Si II level 15): +--------+------------------+------------+----------------+-----------------+ |Level ID| Probability index|N\ :sub:`up`| N\ :sub:`down` | N\ :sub:`total` | @@ -41,7 +41,7 @@ where :math:`i` is the current level, :math:`\epsilon` is the energy of the leve We ignore the probability to emit a k-packet as TARDIS only works with photon packets. -Next we calculate the radidative +Next we calculate the radiative rates using equation 10 in :cite:`2003A&A...403..261L`. .. math:: diff --git a/docs/physics/plasma/nebular_plasma.rst b/docs/physics/plasma/nebular_plasma.rst index 51c729c26ed..1409d543dfc 100644 --- a/docs/physics/plasma/nebular_plasma.rst +++ b/docs/physics/plasma/nebular_plasma.rst @@ -5,7 +5,7 @@ The `NebularPlasma` class is a more complex description of the Plasma state than (W) into account, which deals with the dilution of the radiation field due to geometric, line-blocking and other effects. -The calculations follow the same steps as `LTEPlasma`, however the calculations are different and often take into account +The calculations follow the same steps as `LTEPlasma`; however, the calculations are different and often take into account if a particular level is :term:`meta-stable` or not. `NebularPlasma` will start calculating the `partition functions `_. @@ -14,13 +14,13 @@ if a particular level is :term:`meta-stable` or not. Z_{i,j} = \underbrace{\sum_{k=0}^{max(k)_{i,j}} g_k \times e^{-E_k / (k_\textrm{b} T)}}_\textrm{metastable levels} + \underbrace{W\times\sum_{k=0}^{max(k)_{i,j}} g_k \times e^{-E_k / (k_\textrm{b} T)}}_\textrm{non-metastable levels} -, where Z is the partition function, g is the degeneracy factor, E the energy of the level, T the temperature of the radiation field +where Z is the partition function, g is the degeneracy factor, E the energy of the level, T the temperature of the radiation field and W the dilution factor. -The next step is to calculate the ionization balance using the `Saha ionization equation `_. -and then calculating the Number density of the ions (and an electron number density) in a second step. +The next step is to calculate the ionization balance using the `Saha ionization equation `_ +and then calculate the number density of the ions (and an electron number density) in a second step. In the first step, we calculate the ionization balance using the LTE approximation (:math:`\Phi_{i, j}(\textrm{LTE})`). Then we adjust the ionization balance using -two factors :math:`\zeta` and :math:`\delta`. +two factors: :math:`\zeta` and :math:`\delta`. .. _calc_zeta_label: @@ -36,7 +36,7 @@ Calculating Delta :math:`\delta` is a radiation field correction factors which is calculated according to Mazzali & Lucy 1993 (:cite:`1993A&A...279..447M`; henceforth ML93) -In ML93 the radiation field correction factor is denoted as :math:`\delta` and is calculated in Formula 15 & 20 +In ML93, the radiation field correction factor is denoted as :math:`\delta` and is calculated in Formula 15 & 20. The radiation correction factor changes according to a ionization energy threshold :math:`\chi_\textrm{T}` and the species ionization threshold (from the ground state) :math:`\chi_0`. @@ -54,11 +54,11 @@ and the species ionization threshold (from the ground state) :math:`\chi_0`. \frac{T_\textrm{e}}{b_1 W T_\textrm{R}} \exp(\frac{\chi_\textrm{T}}{k T_\textrm{R}} - \frac{\chi_0}{k T_\textrm{e}}), -where :math:`T_\textrm{R}` is the radiation field Temperature, :math:`T_\textrm{e}` is the electron temperature and W is the +where :math:`T_\textrm{R}` is the radiation field temperature, :math:`T_\textrm{e}` is the electron temperature and W is the dilution factor. -Now we can calculate the ionization balance using equation 14 in :cite:`1993A&A...279..447M`: +Now, we can calculate the ionization balance using equation 14 in :cite:`1993A&A...279..447M`: .. math:: \Phi_{i,j} &= \frac{N_{i, j+1} n_e}{N_{i, j}} \\ @@ -69,7 +69,7 @@ Now we can calculate the ionization balance using equation 14 in :cite:`1993A&A. In the last step, we calculate the ion number densities according using the methods in :class:`LTEPlasma` -Finally we calculate the level populations (:func:`NebularPlasma.calculate_level_populations`), +Finally, we calculate the level populations (:func:`NebularPlasma.calculate_level_populations`), by using the calculated ion species number densities: .. math:: diff --git a/docs/physics/plasma/nlte.rst b/docs/physics/plasma/nlte.rst index 9a2e76a37ea..349bc3734e0 100644 --- a/docs/physics/plasma/nlte.rst +++ b/docs/physics/plasma/nlte.rst @@ -30,7 +30,7 @@ Next, we calculate the rate of change of a level by adding up all outgoing and a \frac{dn_j}{dt} = \underbrace{\sum_{i \ne j} r_{ij}}_\textrm{incoming rate} - \underbrace{\sum_{i \ne j} r_{ji}}_\textrm{outgoing rate} -In a statistical equilibrium all incoming rates and outgoing rates add up to 0 (:math:`\frac{dn_j}{dt}=0`). We use this to +In a statistical equilibrium, all incoming rates and outgoing rates add up to 0 (:math:`\frac{dn_j}{dt}=0`). We use this to calculate the level populations using the rate coefficients (:math:`r_ij, r_ji`). @@ -63,7 +63,7 @@ calculate the level populations using the rate coefficients (:math:`r_ij, r_ji`) \right) -with the additional constrained that all the level number populations need to add up to the current ion population $N$ we change this to +with the additional constraint that all the level number populations need to add up to the current ion population :math:`N`, we change this to .. math:: @@ -98,7 +98,7 @@ with the additional constrained that all the level number populations need to ad -For a three level atom we have: +For a three-level atom we have: .. math:: @@ -137,8 +137,7 @@ which can be written in matrix from: \end{matrix} \right) -To solve for the level populations we need an additional constraint: :math:`n_1 + n_2 + n_3 = N`. By setting :math:`N = 1`: -we can get the relative rates: +To solve for the level populations, we need an additional constraint: :math:`n_1 + n_2 + n_3 = N`. By setting :math:`N = 1`, we can get the relative rates: .. math:: @@ -164,7 +163,7 @@ we can get the relative rates: \right) -Now we go back and look at the rate coefficients used for a level population - as an example :math:`\frac{dn_2}{dt}`: +Now we go back and look at the rate coefficients used for a level population --- as an example :math:`\frac{dn_2}{dt}`: .. math:: @@ -173,13 +172,16 @@ Now we go back and look at the rate coefficients used for a level population - a - n_2 B_{23} \bar{J}_{23} - n_2 C_{23} n_e + n_3 A_{32} + n_3 B_{32} \bar{J}_{32} + n_3 C_{32} n_e,\\ + n_3 A_{32} + n_3 C_{32} n_e, -Next we will group the stimulated emission and stimulated absorption terms as we can assume :math:`\bar{J_{12}} = \bar{J_{21}}`: +Next, we will group the stimulated emission and stimulated absorption terms, as we can assume :math:`\bar{J_{12}} = \bar{J_{21}}`: .. math:: - \frac{dn_2}{dt} &= n_1 (B_{12} \bar{J}_{12} \underbrace{(1 - \frac{n_2}{n_1}\frac{B_{21}}{B_{12}})}_\textrm{stimulated emission term} + C_{12} n_e) - - n_2 (A_{21} + C_{23} n_e + n_2 B_{23} \bar{J}_{23} \underbrace{(1 - \frac{n_3}{n_2}\frac{B_{32}}{B_{23}})}_\textrm{stimulated emission term}) - + n_3 (A_{32} + C_{32} n_e) + \frac{dn_2}{dt} &= n_1 \bigg{(}B_{12} \bar{J}_{12} + \underbrace{\bigg{(}1 - \frac{n_2}{n_1}\frac{B_{21}}{B_{12}}\bigg{)}}_\text{stimulated emission term} + + C_{12} n_e\bigg{)}\\ + - n_2 \bigg{(}A_{21} + C_{23} n_e + n_2 B_{23} \bar{J}_{23} + \underbrace{\bigg{(}1 - \frac{n_3}{n_2}\frac{B_{32}}{B_{23}}\bigg{)}}_\text{stimulated emission term}\bigg{)} + + n_3 (A_{32} + C_{32} n_e) diff --git a/docs/quickstart/quickstart.ipynb b/docs/quickstart/quickstart.ipynb index 39bdc38926c..e4dde04ce84 100644 --- a/docs/quickstart/quickstart.ipynb +++ b/docs/quickstart/quickstart.ipynb @@ -15,9 +15,9 @@ "You can obtain a copy of the atomic database from the\n", "(https://github.com/tardis-sn/tardis-refdata) repository\n", "(`atom_data` subfolder). We recommended to use the\n", - "`kurucz_cd23_chianti_H_He.h5` dataset (which is auto-downloaded in the second cell already). The configuration file for this quickstart is `tardis_example.yml`, which can be downloaded [here](https://raw.githubusercontent.com/tardis-sn/tardis/master/docs/models/examples/tardis_example.yml)), though this file is auto-downloaded in third cell.\n", + "`kurucz_cd23_chianti_H_He.h5` dataset (which is auto-downloaded in the second cell already). The configuration file for this quickstart is `tardis_example.yml`, which can be downloaded [here](https://raw.githubusercontent.com/tardis-sn/tardis/master/docs/models/examples/tardis_example.yml)), though this file is auto-downloaded in the third cell.\n", "\n", - "After the [installation](../installation.rst) start a jupyter server executing `jupyter notebook` on the commandline in a directory that contains this quickstart." + "After the [installation](../installation.rst), start a Jupyter server executing `jupyter notebook` on the command line in a directory that contains this quickstart." ] }, { @@ -444,7 +444,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.7" + "version": "3.6.10" }, "nbsphinx": { "execute": "always", diff --git a/docs/research/code_comparison/index.rst b/docs/research/code_comparison/index.rst index ea34b681d3c..ec2740d85bd 100644 --- a/docs/research/code_comparison/index.rst +++ b/docs/research/code_comparison/index.rst @@ -9,8 +9,7 @@ The first meeting is summarized The description of file formats used can be found here ``_. -For our code comparison, we will calculate spectra at 5, 10, 15, 20 days post -explosion. +For our code comparison, we will calculate spectra at 5, 10, 15, 20 days post-explosion. .. toctree:: diff --git a/docs/running/commandline.rst b/docs/running/commandline.rst index e480552da88..e7f8625a7a8 100644 --- a/docs/running/commandline.rst +++ b/docs/running/commandline.rst @@ -6,7 +6,7 @@ Running TARDIS in the commandline This option will be removed in the next versions of TARDIS -After installing TARDIS just download the configuration file from the +After installing TARDIS, just download the configuration file from the `tardis-setups `_ and the standard atomic data set from the `tardis-refdata `_ repository and run TARDIS. @@ -22,8 +22,8 @@ Assuming you have ``wget``, you could follow the procedure: tardis tardis_example.yml output_spectrum.dat -Then plot the output_spectrum.dat with your favourite plotting program. Here's an example how to do this with python. -(The only thing you need to install is ipython and matplotlib - in addition to TARDIS's requirements) +Then plot the output_spectrum.dat with your favourite plotting program. Here's an example of how to do this with python +(the only thing you need to install is ipython and matplotlib --- in addition to TARDIS's requirements). .. code-block:: python diff --git a/docs/running/converters/cmfgen.rst b/docs/running/converters/cmfgen.rst index 9e2f7b227e5..d26d563016d 100644 --- a/docs/running/converters/cmfgen.rst +++ b/docs/running/converters/cmfgen.rst @@ -1,10 +1,11 @@ Convert CMFGEN files to TARDIS file format ========================================== -This script converts a CMFGEN input files so that they can be used as input for -TARDIS. The script expects the path to the CMFGEN files and the destination -path for the TARDIS files as parameters (:code:`cmfgen2tardis -/path/to/input_file path/to/output/`): +This script converts `CMFGEN +`_ input files so that +they can be used as input for TARDIS. The script expects the path to the CMFGEN +files and the destination path for the TARDIS files as parameters +(:code:`cmfgen2tardis /path/to/input_file path/to/output/`): .. code-block:: bash diff --git a/docs/running/gui.rst b/docs/running/gui.rst index ab62f23aa0d..2691aef01b1 100644 --- a/docs/running/gui.rst +++ b/docs/running/gui.rst @@ -16,7 +16,7 @@ to create/calculate the tardis model. So the module is basically a tool to visua The GUI can use one of two python bindings for qt, namely PyQt5 and PySide2. You can choose which binding is used by setting the -environment variable QT_API in your bash. Currently, the TARDIS team uses PyQT5 +environment variable QT_API in your bash. Currently, the TARDIS team uses PyQT5. **1**. Installing required packages @@ -41,9 +41,9 @@ To use PySide2: **3**. An example of creating a model and GUI -First get the example file `tardis_example.yml `_. +First, get the example file `tardis_example.yml `_. -To download a copy of the atomic database (if you haven't already) add: +To download a copy of the atomic database (if you haven't already), add: .. code-block:: python @@ -51,7 +51,7 @@ To download a copy of the atomic database (if you haven't already) add: from tardis.io.atom_data.util import download_atom_data download_atom_data('kurucz_cd23_chianti_H_He') -To show the GUI from a Jupyter Notebook use the following commands +To show the GUI from a Jupyter Notebook, use the following commands: .. code-block:: python @@ -63,8 +63,8 @@ To show the GUI from a Jupyter Notebook use the following commands interface.show(sim) If you just want to run from a configuration file and show the results, you can -do that outside the jupyter notebook. Navigate to the folder where you -installed tardis and go to tardis/tardis/gui, and use the following command. +do that outside the Jupyter notebook. Navigate to the folder where you +installed TARDIS, go to tardis/tardis/gui, and use the following command. .. code-block:: none @@ -92,15 +92,15 @@ Display your model:: from tardis.gui import interface interface.show(mdl) -(WIP) You can also run a configuration from the shell. To do this first set -QT_API in the shell. Then navigate to the tardis installation folder and go to +(WIP) You can also run a configuration from the shell. To do this, first set +QT_API in the shell. Next, navigate to the TARDIS installation folder and go to tardis/tardis/gui. Then use the command:: python interface.py path-to-configuration-file path-to-atomic-data-file GUI Layout and Features ----------------------- -When you launch the GUI the first screen that you see will be something like the snapshot below. +When you launch the GUI, the first screen that you see will be something like the snapshot below. You can inspect the plot of shells on this window and use the toggle button to change between the plot of dilution factor and the radiation temperature in shells. @@ -109,7 +109,7 @@ plot of dilution factor and the radiation temperature in shells. Shell Info ~~~~~~~~~~ -To see the abundances in a shell double-click on the shell number in the table. You can follow a +To see the abundances in a shell, double-click on the shell number in the table. You can follow a similar strategy in the tables that appear to bring up the ion and level populations for each shell. The snapshot below shows all the tables that you can bring up by successively clicking the horizontal table headers. This feature is not supported at the moment. @@ -119,8 +119,8 @@ table headers. This feature is not supported at the moment. Line Info ~~~~~~~~~ -If you switch to the spectrum tab you can see the spectrum plot and a button to show line info. -Once again you can double-click the table headers to get further information. The snapshot below +If you switch to the spectrum tab, you can see the spectrum plot and a button to show line info. +Once again, you can double-click the table headers to get further information. The snapshot below shows all the tables that you can bring up in this window. This feature is not supported at the moment. .. image:: images/LineInfo.png diff --git a/docs/running/interaction/index.rst b/docs/running/interaction/index.rst index 2ede45a1bac..de802b17091 100644 --- a/docs/running/interaction/index.rst +++ b/docs/running/interaction/index.rst @@ -1,8 +1,8 @@ Interacting with TARDIS ======================= -To get more information from each run of TARDIS one can run it interactively and -have full access to the model properties (as described in :ref:`physical_quantities`) +To get more information from each run of TARDIS, one can run it interactively and +have full access to the model properties (as described in :ref:`physical_quantities`). .. toctree:: :maxdepth: 1 diff --git a/docs/running/interaction/integrator.ipynb b/docs/running/interaction/integrator.ipynb index 9abe317ad14..ea46312380c 100644 --- a/docs/running/interaction/integrator.ipynb +++ b/docs/running/interaction/integrator.ipynb @@ -60,19 +60,19 @@ "name": "stderr", "output_type": "stream", "text": [ - "[\u001b[1mtardis.plasma.standard_plasmas\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Reading Atomic Data from /media/data/projects/tardis/tardis-code/tardis/../../data/tardis_example/kurucz_cd23_chianti_H_He.h5 (\u001b[1mstandard_plasmas.py\u001b[0m:72)\n", - "tardis.plasma.standard_plasmas - \u001b[1;37mINFO\u001b[0m - Reading Atomic Data from /media/data/projects/tardis/tardis-code/tardis/../../data/tardis_example/kurucz_cd23_chianti_H_He.h5\n", + "[\u001B[1mtardis.plasma.standard_plasmas\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Reading Atomic Data from /media/data/projects/tardis/tardis-code/tardis/../../data/tardis_example/kurucz_cd23_chianti_H_He.h5 (\u001B[1mstandard_plasmas.py\u001B[0m:72)\n", + "tardis.plasma.standard_plasmas - \u001B[1;37mINFO\u001B[0m - Reading Atomic Data from /media/data/projects/tardis/tardis-code/tardis/../../data/tardis_example/kurucz_cd23_chianti_H_He.h5\n", "tardis.atomic - INFO - Read Atom Data with UUID=5ca3035ca8b311e3bb684437e69d75d7 and MD5=21095dd25faa1683f4c90c911a00c3f8\n", - "[\u001b[1mtardis.plasma.base \u001b[0m][\u001b[1;34mDEBUG\u001b[0m ] Updating modules in the following order: (\u001b[1mbase.py\u001b[0m:195)\n", - "tardis.plasma.base - \u001b[1;34mDEBUG\u001b[0m - Updating modules in the following order:\n", - "[\u001b[1mtardis.montecarlo.base\u001b[0m][\u001b[1;34mDEBUG\u001b[0m ] Electron scattering switched on (\u001b[1mbase.py\u001b[0m:411)\n", - "tardis.montecarlo.base - \u001b[1;34mDEBUG\u001b[0m - Electron scattering switched on\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 1/1 (\u001b[1mbase.py\u001b[0m:194)\n", - "tardis.simulation.base - \u001b[1;37mINFO\u001b[0m - Starting iteration 1/1\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.03041e+42 erg / s Luminosity absorbed = 2.57695e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:271)\n", - "tardis.simulation.base - \u001b[1;37mINFO\u001b[0m - Luminosity emitted = 8.03041e+42 erg / s Luminosity absorbed = 2.57695e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Simulation finished in 1 iterations and took 0.90 s (\u001b[1mbase.py\u001b[0m:221)\n", - "tardis.simulation.base - \u001b[1;37mINFO\u001b[0m - Simulation finished in 1 iterations and took 0.90 s\n" + "[\u001B[1mtardis.plasma.base \u001B[0m][\u001B[1;34mDEBUG\u001B[0m ] Updating modules in the following order: (\u001B[1mbase.py\u001B[0m:195)\n", + "tardis.plasma.base - \u001B[1;34mDEBUG\u001B[0m - Updating modules in the following order:\n", + "[\u001B[1mtardis.montecarlo.base\u001B[0m][\u001B[1;34mDEBUG\u001B[0m ] Electron scattering switched on (\u001B[1mbase.py\u001B[0m:411)\n", + "tardis.montecarlo.base - \u001B[1;34mDEBUG\u001B[0m - Electron scattering switched on\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 1/1 (\u001B[1mbase.py\u001B[0m:194)\n", + "tardis.simulation.base - \u001B[1;37mINFO\u001B[0m - Starting iteration 1/1\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 8.03041e+42 erg / s Luminosity absorbed = 2.57695e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:271)\n", + "tardis.simulation.base - \u001B[1;37mINFO\u001B[0m - Luminosity emitted = 8.03041e+42 erg / s Luminosity absorbed = 2.57695e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Simulation finished in 1 iterations and took 0.90 s (\u001B[1mbase.py\u001B[0m:221)\n", + "tardis.simulation.base - \u001B[1;37mINFO\u001B[0m - Simulation finished in 1 iterations and took 0.90 s\n" ] } ], @@ -874,7 +874,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "When running the command line script, we can control the type of spectrum that is written to txt with the `method` option of the `spectrum` setting in the yaml. If omitted, the default value is 'virtual', however it can be set to 'real' for the spectrum of the real packets, or to 'integrated' for a spectrum from the formal integral approach.\n", + "When running the command line script, we can control the type of spectrum that is written to txt with the `method` option of the `spectrum` setting in the YAML. If omitted, the default value is 'virtual', however it can be set to 'real' for the spectrum of the real packets, or to 'integrated' for a spectrum from the formal integral approach.\n", "\n", "Here we verify our method for the spectral generation is 'integrated'." ] @@ -919,21 +919,21 @@ "name": "stdout", "output_type": "stream", "text": [ - "[\u001b[1mtardis.plasma.standard_plasmas\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Reading Atomic Data from /media/data/projects/tardis/tardis-code/tardis/../../data/tardis_example/kurucz_cd23_chianti_H_He.h5 (\u001b[1mstandard_plasmas.py\u001b[0m:72)\n", - "tardis.plasma.standard_plasmas - \u001b[1;37mINFO\u001b[0m - Reading Atomic Data from /media/data/projects/tardis/tardis-code/tardis/../../data/tardis_example/kurucz_cd23_chianti_H_He.h5\n", + "[\u001B[1mtardis.plasma.standard_plasmas\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Reading Atomic Data from /media/data/projects/tardis/tardis-code/tardis/../../data/tardis_example/kurucz_cd23_chianti_H_He.h5 (\u001B[1mstandard_plasmas.py\u001B[0m:72)\n", + "tardis.plasma.standard_plasmas - \u001B[1;37mINFO\u001B[0m - Reading Atomic Data from /media/data/projects/tardis/tardis-code/tardis/../../data/tardis_example/kurucz_cd23_chianti_H_He.h5\n", "tardis.atomic - INFO - Read Atom Data with UUID=5ca3035ca8b311e3bb684437e69d75d7 and MD5=21095dd25faa1683f4c90c911a00c3f8\n", - "[\u001b[1mtardis.plasma.base \u001b[0m][\u001b[1;34mDEBUG\u001b[0m ] Updating modules in the following order: (\u001b[1mbase.py\u001b[0m:195)\n", - "tardis.plasma.base - \u001b[1;34mDEBUG\u001b[0m - Updating modules in the following order:\n", - "[\u001b[1mtardis.montecarlo.base\u001b[0m][\u001b[1;34mDEBUG\u001b[0m ] Electron scattering switched on (\u001b[1mbase.py\u001b[0m:411)\n", - "tardis.montecarlo.base - \u001b[1;34mDEBUG\u001b[0m - Electron scattering switched on\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Starting iteration 1/1 (\u001b[1mbase.py\u001b[0m:194)\n", - "tardis.simulation.base - \u001b[1;37mINFO\u001b[0m - Starting iteration 1/1\n", + "[\u001B[1mtardis.plasma.base \u001B[0m][\u001B[1;34mDEBUG\u001B[0m ] Updating modules in the following order: (\u001B[1mbase.py\u001B[0m:195)\n", + "tardis.plasma.base - \u001B[1;34mDEBUG\u001B[0m - Updating modules in the following order:\n", + "[\u001B[1mtardis.montecarlo.base\u001B[0m][\u001B[1;34mDEBUG\u001B[0m ] Electron scattering switched on (\u001B[1mbase.py\u001B[0m:411)\n", + "tardis.montecarlo.base - \u001B[1;34mDEBUG\u001B[0m - Electron scattering switched on\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Starting iteration 1/1 (\u001B[1mbase.py\u001B[0m:194)\n", + "tardis.simulation.base - \u001B[1;37mINFO\u001B[0m - Starting iteration 1/1\n", "Running with OpenMP - 4 threads\n", - "\u001b[2K\t[100%] Packets(finished/total): 10000/10000\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Luminosity emitted = 8.03041e+42 erg / s Luminosity absorbed = 2.57695e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001b[1mbase.py\u001b[0m:271)\n", - "tardis.simulation.base - \u001b[1;37mINFO\u001b[0m - Luminosity emitted = 8.03041e+42 erg / s Luminosity absorbed = 2.57695e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n", - "[\u001b[1mtardis.simulation.base\u001b[0m][\u001b[1;37mINFO\u001b[0m ] Simulation finished in 1 iterations and took 1.05 s (\u001b[1mbase.py\u001b[0m:221)\n", - "tardis.simulation.base - \u001b[1;37mINFO\u001b[0m - Simulation finished in 1 iterations and took 1.05 s\n", + "\u001B[2K\t[100%] Packets(finished/total): 10000/10000\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Luminosity emitted = 8.03041e+42 erg / s Luminosity absorbed = 2.57695e+42 erg / s Luminosity requested = 1.05928e+43 erg / s (\u001B[1mbase.py\u001B[0m:271)\n", + "tardis.simulation.base - \u001B[1;37mINFO\u001B[0m - Luminosity emitted = 8.03041e+42 erg / s Luminosity absorbed = 2.57695e+42 erg / s Luminosity requested = 1.05928e+43 erg / s\n", + "[\u001B[1mtardis.simulation.base\u001B[0m][\u001B[1;37mINFO\u001B[0m ] Simulation finished in 1 iterations and took 1.05 s (\u001B[1mbase.py\u001B[0m:221)\n", + "tardis.simulation.base - \u001B[1;37mINFO\u001B[0m - Simulation finished in 1 iterations and took 1.05 s\n", "Saving the integrated spectrum.\n", "Doing the formal integral with 4 threads\n", "\n", @@ -1739,4 +1739,4 @@ }, "nbformat": 4, "nbformat_minor": 1 -} +} \ No newline at end of file diff --git a/docs/team.rst b/docs/team.rst index f9971c93b87..41905923f2a 100644 --- a/docs/team.rst +++ b/docs/team.rst @@ -4,7 +4,7 @@ Team **** -TARDIS is developed by a multidisciplinary team. We adhere to the AstroPy +TARDIS is developed by a multidisciplinary team. We adhere to the Astropy `code of conduct `_. Principle Investigator From d9e183103f88a9dab001ac80b788c97a81ed66d0 Mon Sep 17 00:00:00 2001 From: Jordi Eguren Brown Date: Fri, 19 Jun 2020 10:30:06 -0300 Subject: [PATCH 243/467] Add note to tell users which OS are supported (issue #1125) (#1191) * add note for linux and mac * add note correctly * add Vicente's corrections * Update installation.rst --- docs/installation.rst | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 0ab170dbae9..d9496757078 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -14,13 +14,11 @@ simple TARDIS calculations. .. _requirements_label: -.. warning:: - - TARDIS is only compatible with Python >3.6 - .. note:: - We strongly recommend installing TARDIS within an Anaconda environment and - to always use the latest GitHub development version. + + - TARDIS is only compatible with Python >=3.6 + - TARDIS only supports Linux and MacOS. + - We strongly recommend installing TARDIS within an Anaconda environment and to always use the latest GitHub development version. Requirements ============ From 2faf0ef058a5d4120249c338691a9e7a71944e6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Fri, 19 Jun 2020 19:37:12 -0300 Subject: [PATCH 244/467] Unpin astropy version (#1193) --- tardis_env3.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tardis_env3.yml b/tardis_env3.yml index 2c1c23f691d..6a29b708fa9 100644 --- a/tardis_env3.yml +++ b/tardis_env3.yml @@ -9,7 +9,7 @@ dependencies: - numpy=1.15 - scipy=1.1 - pandas=0.24 - - astropy=3.2.1 + - astropy=3 - numba=0.43 - numexpr From 6c663258d7e6a20f01b01c0f29e5822044e2fd9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ezequiel=20P=C3=A1ssaro?= Date: Fri, 19 Jun 2020 19:51:02 -0300 Subject: [PATCH 245/467] Fix badges in README.rst (#1195) * Replace `coverall` badge with `codecov`. Move badges to the top of RST file * Update Zenodo badge and bibtex citation * Add documentation badge via shields.io --- README.rst | 89 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 32 deletions(-) diff --git a/README.rst b/README.rst index c8098e74541..65cdeb8cb60 100644 --- a/README.rst +++ b/README.rst @@ -2,9 +2,24 @@ TARDIS ****** +.. image:: https://img.shields.io/badge/read-documentation-blue + :target: https://tardis-sn.github.io/tardis + +.. image:: https://dev.azure.com/tardis-sn/TARDIS/_apis/build/status/tardis-sn.tardis?branchName=master + :target: https://dev.azure.com/tardis-sn/TARDIS/_build/latest?definitionId=1&branchName=master + +.. image:: https://codecov.io/gh/tardis-sn/tardis/branch/master/graph/badge.svg + :target: https://codecov.io/gh/tardis-sn/tardis + +.. image:: https://zenodo.org/badge/DOI/10.5281/zenodo.3893940.svg + :target: https://doi.org/10.5281/zenodo.3893940 + +.. image:: https://badges.gitter.im/Join%20Chat.svg + :target: https://gitter.im/tardis-sn/tardis + + TARDIS is a tool that creates synthetic observations (spectra) for exploding -stars (supernovae). Documentation can be found at -https://tardis-sn.github.io/tardis/. +stars (supernovae). ****************************** Credits & Publication Policies @@ -84,58 +99,68 @@ The following bibtex entries are needed for the references. } - @software{kerzendorf_wolfgang_2019_2590539, + @software{kerzendorf_wolfgang_2020_3893940, author = {Kerzendorf, Wolfgang and - Nöbauer, Ulrich and Sim, Stuart and - Lietzau, Stefan and - Jančauskas, Vytautas and Vogl, Christian and + Williamson, Marc and + Pássaro, Ezequiel and + Flörs, Andreas and + Camacho, Yssa and + Jančauskas, Vytautas and + Harpole, Alice and + Nöbauer, Ulrich and + Lietzau, Stefan and Mishin, Mikhail and Tsamis, Fotis and Boyle, Aoife and + Shingles, Luke and Gupta, Vaibhav and Desai, Karan and Klauser, Michael and Beaujean, Frederik and Suban-Loewen, Adam and Heringer, Epson and - Shingles, Luke and - Barna, Barnabas and + Barna, Barnabás and Gautam, Gaurav and - Patel, Maryam and Barbosa, Talytha and + Patel, Maryam and Varanasi, Kaushik and + Eweis, Youssef and Reinecke, Martin and Bylund, Tomas and Bentil, Laud and + Eguren, Jordi and + Livneh, Ran and + Singhal, Jaladh and + O'Brien, Jack and Rajagopalan, Srinath and Jain, Rinkle and + Reichenbach, John and + Mishra, Sashank and Singh, Sourav and - Talegaonkar, Chinmay and Sofiatti, Caroline and + Selsing, Jonatan and + Kowalski, Nathan and + Savel, Arjun and + Talegaonkar, Chinmay and Patel, Pratik and - Yap, Kevin and + Patra, Nilesh and + Nayak, Ashwin and + Kumar, Atul and + Sarafina, Nance and + Gillanders, James and + Sharma, Sampark and Wahi, Ujjwal and + Dasgupta, Debajyoti and + Magee, Mark and + Yap, Kevin and Gupta, Suyash}, - title = {tardis-sn/tardis: TARDIS v3.0 alpha2}, - month = mar, - year = 2019, - doi = {10.5281/zenodo.2590539}, - url = {https://doi.org/10.5281/zenodo.2590539} - } - -.. image:: https://dev.azure.com/tardis-sn/TARDIS/_apis/build/status/tardis-sn.tardis?branchName=master - :target: https://dev.azure.com/tardis-sn/TARDIS/_build/latest?definitionId=1&branchName=master - -.. image:: https://img.shields.io/coveralls/tardis-sn/tardis.svg - :target: https://coveralls.io/r/tardis-sn/tardis - -.. image:: https://zenodo.org/badge/5756/tardis-sn/tardis.svg - :target: http://dx.doi.org/10.5281/zenodo.17630 - -.. image:: https://badges.gitter.im/Join%20Chat.svg - :target: https://gitter.im/tardis-sn/tardis - - - + title = {tardis-sn/tardis: TARDIS v3.0.dev3459}, + month = jun, + year = 2020, + publisher = {Zenodo}, + version = {v3.0.dev3459}, + doi = {10.5281/zenodo.3893940}, + url = {https://doi.org/10.5281/zenodo.3893940} + } \ No newline at end of file From 19beeecc8bdfb9aabd264cdab880c19ad89d6c4b Mon Sep 17 00:00:00 2001 From: Jaladh Singhal Date: Wed, 24 Jun 2020 04:48:30 +0530 Subject: [PATCH 246/467] Create a new subpackage for jupyter-widgets and add shell info widgets (#1166) * Create a widgets submodule * Creat a class for shell info with functions to extract tables data * Put all shell info widget code in its class * Debugged several logical errors in code due to copying * Import main ShellInfoWidget class in init.py * Removed default simulation argument from ShellInfoWidget class * Created one method for creating 4 different table widgets in init * Separated shell info data into HDF and Simulation child class * Made ShellInfoWidget work with both HDF & simulation object * Imputed NaN count values wih 0 * Fixed settingwithcopy error in Z_count_table * Added widgets notebook to be put in docs and shell info demo gif * Refactored Z to element and atomic_num to respect PEP8 * Added docstrings to multiple functions and classes * Converted 2 interdependent optional args of create_table_widget as 1 dict * Added some docstrings and improved signature of display function * Updated the way of accessing shell info widget from hdf and simulation * Added unit tests for shwll info data * Added tests for ion_count and element_count * Added tests for shell info widget * Added qgrid to tardis env file * Added jupyter-widgets notebook to index * Several fixes to docstrings - Notes section wasn't visible - Other parameters section was being rendered incorrectly - External links & inline code blocks were also incorrect * Fixed typo in widgets notebook * Applied black formatter to cover all pep8 changes --- .../running/images/shell-info-widget-demo.gif | Bin 0 -> 1097723 bytes docs/running/index.rst | 1 + docs/running/jupyter-widgets.ipynb | 6710 +++++++++++++++++ tardis/widgets/__init__.py | 1 + tardis/widgets/base.py | 583 ++ tardis/widgets/tests/__init__.py | 0 tardis/widgets/tests/test_base.py | 171 + tardis_env3.yml | 3 + 8 files changed, 7469 insertions(+) create mode 100644 docs/running/images/shell-info-widget-demo.gif create mode 100644 docs/running/jupyter-widgets.ipynb create mode 100644 tardis/widgets/__init__.py create mode 100644 tardis/widgets/base.py create mode 100644 tardis/widgets/tests/__init__.py create mode 100644 tardis/widgets/tests/test_base.py diff --git a/docs/running/images/shell-info-widget-demo.gif b/docs/running/images/shell-info-widget-demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..b76b2006e5cc6efe44d7393c6a22b6849640e3da GIT binary patch literal 1097723 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%0D5g9kAHFm_3wst}}wkIC8zf-{oY~W>cm|^H}xC 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