mirror of
https://github.com/Findus23/rebound-collisions.git
synced 2024-09-19 15:53:48 +02:00
use core,mantle,water for planets
This commit is contained in:
parent
2b0e589568
commit
a145ed05f9
7 changed files with 183 additions and 136 deletions
2
bac
2
bac
|
@ -1 +1 @@
|
||||||
Subproject commit e2e0ae067b4820980c8bea11656468d87a12f325
|
Subproject commit 88bbf9a16095078d1ad05f5a38220bf7b01333ed
|
11
extradata.py
11
extradata.py
|
@ -11,6 +11,7 @@ from scipy.constants import astronomical_unit, year
|
||||||
@dataclass
|
@dataclass
|
||||||
class ParticleData:
|
class ParticleData:
|
||||||
water_mass_fraction: float
|
water_mass_fraction: float
|
||||||
|
core_mass_fraction: float
|
||||||
type: str
|
type: str
|
||||||
escaped: float = None
|
escaped: float = None
|
||||||
collided_with_sun: float = None
|
collided_with_sun: float = None
|
||||||
|
@ -20,6 +21,10 @@ class ParticleData:
|
||||||
def water_mass(self) -> float:
|
def water_mass(self) -> float:
|
||||||
return self.total_mass * self.water_mass_fraction
|
return self.total_mass * self.water_mass_fraction
|
||||||
|
|
||||||
|
@property
|
||||||
|
def mantle_mass_fraction(self) -> float:
|
||||||
|
return 1 - self.core_mass_fraction - self.water_mass_fraction
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Input:
|
class Input:
|
||||||
|
@ -47,9 +52,11 @@ class CollisionMeta:
|
||||||
collision_radii: Tuple[float, float] = None
|
collision_radii: Tuple[float, float] = None
|
||||||
interpolation_input: List[float] = None
|
interpolation_input: List[float] = None
|
||||||
raw_water_retention: float = None
|
raw_water_retention: float = None
|
||||||
raw_mass_retention: float = None
|
raw_mantle_retention: float = None
|
||||||
|
raw_core_retention: float = None
|
||||||
water_retention: float = None
|
water_retention: float = None
|
||||||
mass_retention: float = None
|
mantle_retention: float = None
|
||||||
|
core_retention: float = None
|
||||||
total_mass: float = None
|
total_mass: float = None
|
||||||
final_wmf: float = None
|
final_wmf: float = None
|
||||||
final_radius: float = None
|
final_radius: float = None
|
||||||
|
|
75
merge.py
75
merge.py
|
@ -1,6 +1,4 @@
|
||||||
import sys
|
|
||||||
from copy import copy
|
from copy import copy
|
||||||
from pathlib import Path
|
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
|
||||||
|
@ -11,40 +9,12 @@ from rebound.simulation import POINTER_REB_SIM, reb_collision
|
||||||
from scipy.constants import astronomical_unit, G
|
from scipy.constants import astronomical_unit, G
|
||||||
|
|
||||||
from extradata import ExtraData, ParticleData, CollisionMeta, Input
|
from extradata import ExtraData, ParticleData, CollisionMeta, Input
|
||||||
from radius_utils import radius
|
from merge_interpolation import interpolate
|
||||||
|
from radius_utils import PlanetaryRadius
|
||||||
from utils import unique_hash, clamp
|
from utils import unique_hash, clamp
|
||||||
|
|
||||||
sys.path.append("./bac")
|
|
||||||
|
|
||||||
from bac.simulation_list import SimulationList
|
def get_mass_fractions(input_data: Input) -> Tuple[float, float, float, CollisionMeta]:
|
||||||
from bac.CustomScaler import CustomScaler
|
|
||||||
from bac.interpolators.rbf import RbfInterpolator
|
|
||||||
|
|
||||||
simulations = SimulationList.jsonlines_load(Path("./save.jsonl"))
|
|
||||||
|
|
||||||
scaler = CustomScaler()
|
|
||||||
scaler.fit(simulations.X)
|
|
||||||
|
|
||||||
scaled_data = scaler.transform_data(simulations.X)
|
|
||||||
water_interpolator = RbfInterpolator(scaled_data, simulations.Y_water)
|
|
||||||
mass_interpolator = RbfInterpolator(scaled_data, simulations.Y_mass)
|
|
||||||
|
|
||||||
|
|
||||||
def interpolate(alpha, velocity, projectile_mass, gamma):
|
|
||||||
hard_coded_water_mass_fraction = 0.15 # workaround to get proper results for water poor collisions
|
|
||||||
testinput = [alpha, velocity, projectile_mass, gamma,
|
|
||||||
hard_coded_water_mass_fraction, hard_coded_water_mass_fraction]
|
|
||||||
|
|
||||||
print("# alpha velocity projectile_mass gamma target_water_fraction projectile_water_fraction\n")
|
|
||||||
print(" ".join(map(str, testinput)))
|
|
||||||
|
|
||||||
scaled_input = list(scaler.transform_parameters(testinput))
|
|
||||||
water_retention = water_interpolator.interpolate(*scaled_input)
|
|
||||||
mass_retention = mass_interpolator.interpolate(*scaled_input)
|
|
||||||
return float(water_retention), float(mass_retention)
|
|
||||||
|
|
||||||
|
|
||||||
def get_mass_fractions(input_data: Input) -> Tuple[float, float, CollisionMeta]:
|
|
||||||
print("v_esc", input_data.escape_velocity)
|
print("v_esc", input_data.escape_velocity)
|
||||||
print("v_orig,v_si", input_data.velocity_original, input_data.velocity_si)
|
print("v_orig,v_si", input_data.velocity_original, input_data.velocity_si)
|
||||||
print("v/v_esc", input_data.velocity_esc)
|
print("v/v_esc", input_data.velocity_esc)
|
||||||
|
@ -59,22 +29,26 @@ def get_mass_fractions(input_data: Input) -> Tuple[float, float, CollisionMeta]:
|
||||||
data.projectile_mass = clamp(data.projectile_mass, 2 * m_ceres, 2 * m_earth)
|
data.projectile_mass = clamp(data.projectile_mass, 2 * m_ceres, 2 * m_earth)
|
||||||
data.gamma = clamp(data.gamma, 1 / 10, 1)
|
data.gamma = clamp(data.gamma, 1 / 10, 1)
|
||||||
|
|
||||||
water_retention, mass_retention = interpolate(data.alpha, data.velocity_esc, data.projectile_mass, data.gamma)
|
water_retention, mantle_retention, core_retention = \
|
||||||
|
interpolate(data.alpha, data.velocity_esc, data.projectile_mass, data.gamma)
|
||||||
|
|
||||||
metadata = CollisionMeta()
|
metadata = CollisionMeta()
|
||||||
metadata.interpolation_input = [data.alpha, data.velocity_esc, data.projectile_mass, data.gamma]
|
metadata.interpolation_input = [data.alpha, data.velocity_esc, data.projectile_mass, data.gamma]
|
||||||
metadata.input = input_data
|
metadata.input = input_data
|
||||||
metadata.adjusted_input = data
|
metadata.adjusted_input = data
|
||||||
metadata.raw_water_retention = water_retention
|
metadata.raw_water_retention = water_retention
|
||||||
metadata.raw_mass_retention = mass_retention
|
metadata.raw_mantle_retention = mantle_retention
|
||||||
|
metadata.raw_core_retention = core_retention
|
||||||
|
|
||||||
water_retention = clamp(water_retention, 0, 1)
|
water_retention = clamp(water_retention, 0, 1)
|
||||||
mass_retention = clamp(mass_retention, 0, 1)
|
mantle_retention = clamp(mantle_retention, 0, 1)
|
||||||
|
core_retention = clamp(core_retention, 0, 1)
|
||||||
|
|
||||||
metadata.water_retention = water_retention
|
metadata.water_retention = water_retention
|
||||||
metadata.mass_retention = mass_retention
|
metadata.mantle_retention = mantle_retention
|
||||||
|
metadata.core_retention = core_retention
|
||||||
|
|
||||||
return water_retention, mass_retention, metadata
|
return water_retention, mantle_retention, core_retention, metadata
|
||||||
|
|
||||||
|
|
||||||
def merge_particles(sim_p: POINTER_REB_SIM, collision: reb_collision, ed: ExtraData):
|
def merge_particles(sim_p: POINTER_REB_SIM, collision: reb_collision, ed: ExtraData):
|
||||||
|
@ -110,7 +84,9 @@ def merge_particles(sim_p: POINTER_REB_SIM, collision: reb_collision, ed: ExtraD
|
||||||
f"with {projectile.hash.value} ({ed.pd(projectile).type})")
|
f"with {projectile.hash.value} ({ed.pd(projectile).type})")
|
||||||
|
|
||||||
projectile_wmf = ed.pd(projectile).water_mass_fraction
|
projectile_wmf = ed.pd(projectile).water_mass_fraction
|
||||||
|
projectile_cmf = ed.pd(projectile).core_mass_fraction
|
||||||
target_wmf = ed.pd(target).water_mass_fraction
|
target_wmf = ed.pd(target).water_mass_fraction
|
||||||
|
target_cmf = ed.pd(target).core_mass_fraction
|
||||||
|
|
||||||
# get the velocities, velocity differences and unit vector as numpy arrays
|
# get the velocities, velocity differences and unit vector as numpy arrays
|
||||||
# all units are in sytem units (so AU/year)
|
# all units are in sytem units (so AU/year)
|
||||||
|
@ -158,9 +134,14 @@ def merge_particles(sim_p: POINTER_REB_SIM, collision: reb_collision, ed: ExtraD
|
||||||
projectile_water_fraction=projectile_wmf,
|
projectile_water_fraction=projectile_wmf,
|
||||||
)
|
)
|
||||||
|
|
||||||
water_ret, stone_ret, meta = get_mass_fractions(input_data)
|
if ed.meta.perfect_merging:
|
||||||
print("interpolation finished")
|
water_ret = mantle_ret = core_ret = 1
|
||||||
print(water_ret, stone_ret)
|
meta = CollisionMeta()
|
||||||
|
print("skip interpolation due to perfect merging")
|
||||||
|
else:
|
||||||
|
water_ret, mantle_ret, core_ret, meta = get_mass_fractions(input_data)
|
||||||
|
print("interpolation finished")
|
||||||
|
print(water_ret, mantle_ret, core_ret)
|
||||||
|
|
||||||
meta.collision_velocities = (v1.tolist(), v2.tolist())
|
meta.collision_velocities = (v1.tolist(), v2.tolist())
|
||||||
meta.collision_positions = (target.xyz, projectile.xyz)
|
meta.collision_positions = (target.xyz, projectile.xyz)
|
||||||
|
@ -170,22 +151,26 @@ def merge_particles(sim_p: POINTER_REB_SIM, collision: reb_collision, ed: ExtraD
|
||||||
|
|
||||||
# handle loss of water and core mass
|
# handle loss of water and core mass
|
||||||
water_mass = target.m * target_wmf + projectile.m * projectile_wmf
|
water_mass = target.m * target_wmf + projectile.m * projectile_wmf
|
||||||
stone_mass = target.m + projectile.m - water_mass
|
core_mass = target.m * target_cmf + projectile.m * projectile_cmf
|
||||||
|
mantle_mass = target.m + projectile.m - water_mass - core_mass
|
||||||
|
|
||||||
water_mass *= water_ret
|
water_mass *= water_ret
|
||||||
stone_mass *= stone_ret
|
mantle_mass *= mantle_ret
|
||||||
|
core_mass *= core_ret
|
||||||
|
|
||||||
total_mass = water_mass + stone_mass
|
total_mass = water_mass + mantle_mass + core_mass
|
||||||
final_wmf = water_mass / total_mass
|
final_wmf = water_mass / total_mass
|
||||||
|
final_cmf = core_mass / total_mass
|
||||||
print(final_wmf)
|
print(final_wmf)
|
||||||
# create new object preserving momentum
|
# create new object preserving momentum
|
||||||
merged_planet = (target * target.m + projectile * projectile.m) / total_mass
|
merged_planet = (target * target.m + projectile * projectile.m) / total_mass
|
||||||
merged_planet.m = total_mass
|
merged_planet.m = total_mass
|
||||||
merged_planet.hash = hash
|
merged_planet.hash = hash
|
||||||
|
|
||||||
merged_planet.r = radius(merged_planet.m, final_wmf) / astronomical_unit
|
merged_planet.r = PlanetaryRadius(merged_planet.m, final_wmf, final_cmf).total_radius / astronomical_unit
|
||||||
ed.pdata[hash.value] = ParticleData(
|
ed.pdata[hash.value] = ParticleData(
|
||||||
water_mass_fraction=final_wmf,
|
water_mass_fraction=final_wmf,
|
||||||
|
core_mass_fraction=final_cmf,
|
||||||
type=ed.pd(target).type,
|
type=ed.pd(target).type,
|
||||||
total_mass=total_mass
|
total_mass=total_mass
|
||||||
)
|
)
|
||||||
|
|
154
poetry.lock
generated
154
poetry.lock
generated
|
@ -627,34 +627,6 @@ category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
|
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pyqt5"
|
|
||||||
version = "5.15.3"
|
|
||||||
description = "Python bindings for the Qt cross platform application toolkit"
|
|
||||||
category = "main"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.6"
|
|
||||||
|
|
||||||
[package.dependencies]
|
|
||||||
PyQt5-Qt = ">=5.15"
|
|
||||||
PyQt5-sip = ">=12.8,<13"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pyqt5-qt"
|
|
||||||
version = "5.15.2"
|
|
||||||
description = "The subset of a Qt installation needed by PyQt5."
|
|
||||||
category = "main"
|
|
||||||
optional = false
|
|
||||||
python-versions = "*"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pyqt5-sip"
|
|
||||||
version = "12.8.1"
|
|
||||||
description = "The sip module support for PyQt5"
|
|
||||||
category = "main"
|
|
||||||
optional = false
|
|
||||||
python-versions = ">=3.5"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyrsistent"
|
name = "pyrsistent"
|
||||||
version = "0.17.3"
|
version = "0.17.3"
|
||||||
|
@ -728,6 +700,29 @@ url = "https://github.com/Findus23/rebound-stubs.git"
|
||||||
reference = "main"
|
reference = "main"
|
||||||
resolved_reference = "a63d190c2bac25450e9bcdf8f95c5e2490198faa"
|
resolved_reference = "a63d190c2bac25450e9bcdf8f95c5e2490198faa"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ruamel.yaml"
|
||||||
|
version = "0.16.12"
|
||||||
|
description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
"ruamel.yaml.clib" = {version = ">=0.1.2", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.9\""}
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
docs = ["ryd"]
|
||||||
|
jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ruamel.yaml.clib"
|
||||||
|
version = "0.2.2"
|
||||||
|
description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scipy"
|
name = "scipy"
|
||||||
version = "1.6.1"
|
version = "1.6.1"
|
||||||
|
@ -828,6 +823,28 @@ category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "vext"
|
||||||
|
version = "0.7.4"
|
||||||
|
description = "Use system python packages from a virtualenv"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
"ruamel.yaml" = ">=0.11.10"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "vext.pyqt5"
|
||||||
|
version = "0.7.4"
|
||||||
|
description = "Use system pyqt5 from a virtualenv"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
vext = ">=0.7.4"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wcwidth"
|
name = "wcwidth"
|
||||||
version = "0.2.5"
|
version = "0.2.5"
|
||||||
|
@ -870,7 +887,7 @@ testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "1.1"
|
lock-version = "1.1"
|
||||||
python-versions = "^3.7"
|
python-versions = "^3.7"
|
||||||
content-hash = "7491c409b501abca5119fcbd55bc34f30c0967e54881498443f5dd7017122681"
|
content-hash = "53dfdeeb62518b321425c670586d99eb06670e89a3b7db77560ed718f3bc8c11"
|
||||||
|
|
||||||
[metadata.files]
|
[metadata.files]
|
||||||
appnope = [
|
appnope = [
|
||||||
|
@ -1286,42 +1303,6 @@ pyparsing = [
|
||||||
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
|
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
|
||||||
{file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
|
{file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
|
||||||
]
|
]
|
||||||
pyqt5 = [
|
|
||||||
{file = "PyQt5-5.15.3-cp36.cp37.cp38.cp39-abi3-macosx_10_13_intel.whl", hash = "sha256:69fdceed983ebd388f44ceab9b8a6c2c086c79c705182fcc7b06837e2ccf7ba3"},
|
|
||||||
{file = "PyQt5-5.15.3-cp36.cp37.cp38.cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:8b9e07094382d51dc34f63c5a417b735dae1ad934a9dd9bc08bbc0a39452bfe8"},
|
|
||||||
{file = "PyQt5-5.15.3-cp36.cp37.cp38.cp39-none-win32.whl", hash = "sha256:ef2682dc829d6603fb5c958274d721fb076fd84a88fcb8f9fc7655cbb72b2bfc"},
|
|
||||||
{file = "PyQt5-5.15.3-cp36.cp37.cp38.cp39-none-win_amd64.whl", hash = "sha256:4e0fc6993df120e686528de46f2e002e930e24f99f103788724f0bd8bec9b4f7"},
|
|
||||||
{file = "PyQt5-5.15.3.tar.gz", hash = "sha256:965ba50e7029b37f218a54ace24e87c77db3e5a9f0b83baeb21fb57b4154b838"},
|
|
||||||
]
|
|
||||||
pyqt5-qt = [
|
|
||||||
{file = "PyQt5_Qt-5.15.2-py3-none-macosx_10_13_intel.whl", hash = "sha256:962511bfdc847f0746e1de92499cbb1ae127ca5ec356f009a6d9f924fe1230d5"},
|
|
||||||
{file = "PyQt5_Qt-5.15.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:dec2e88fbfabc0d3365bb4007c88c75fc99fc75cfb418399aeb5acd1d5f7d484"},
|
|
||||||
{file = "PyQt5_Qt-5.15.2-py3-none-win32.whl", hash = "sha256:8aba4f0a245c42f186a235c47011ee422a14b949e52fc64e697b10d1c433ff39"},
|
|
||||||
{file = "PyQt5_Qt-5.15.2-py3-none-win_amd64.whl", hash = "sha256:756b8c055033b2d96d18e74e1380bdb64984b150879fa92cd62d327f78636153"},
|
|
||||||
]
|
|
||||||
pyqt5-sip = [
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:bb5a87b66fc1445915104ee97f7a20a69decb42f52803e3b0795fa17ff88226c"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:a29e2ac399429d3b7738f73e9081e50783e61ac5d29344e0802d0dcd6056c5a2"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp35-cp35m-win32.whl", hash = "sha256:0304ca9114b9817a270f67f421355075b78ff9fc25ac58ffd72c2601109d2194"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp35-cp35m-win_amd64.whl", hash = "sha256:84ba7746762bd223bed22428e8561aa267a229c28344c2d28c5d5d3f8970cffb"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:7b81382ce188d63890a0e35abe0f9bb946cabc873a31873b73583b0fc84ac115"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:b6d42250baec52a5f77de64e2951d001c5501c3a2df2179f625b241cbaec3369"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp36-cp36m-win32.whl", hash = "sha256:6c1ebee60f1d2b3c70aff866b7933d8d8d7646011f7c32f9321ee88c290aa4f9"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp36-cp36m-win_amd64.whl", hash = "sha256:34dcd29be47553d5f016ff86e89e24cbc5eebae92eb2f96fb32d2d7ba028c43c"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ed897c58acf4a3cdca61469daa31fe6e44c33c6c06a37c3f21fab31780b3b86a"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:a1b8ef013086e224b8e86c93f880f776d01b59195bdfa2a8e0b23f0480678fec"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp37-cp37m-win32.whl", hash = "sha256:0cd969be528c27bbd4755bd323dff4a79a8fdda28215364e6ce3e069cb56c2a9"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp37-cp37m-win_amd64.whl", hash = "sha256:c9800729badcb247765e4ffe2241549d02da1fa435b9db224845bc37c3e99cb0"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9312ec47cac4e33c11503bc1cbeeb0bdae619620472f38e2078c5a51020a930f"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2f35e82fd7ec1e1f6716e9154721c7594956a4f5bd4f826d8c6a6453833cc2f0"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp38-cp38-win32.whl", hash = "sha256:da9c9f1e65b9d09e73bd75befc82961b6b61b5a3b9d0a7c832168e1415f163c6"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:832fd60a264de4134c2824d393320838f3ab648180c9c357ec58a74524d24507"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c317ab1263e6417c498b81f5c970a9b1af7acefab1f80b4cc0f2f8e661f29fc5"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:c9d6d448c29dc6606bb7974696608f81f4316c8234f7c7216396ed110075e777"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp39-cp39-win32.whl", hash = "sha256:5a011aeff89660622a6d5c3388d55a9d76932f3b82c95e82fc31abd8b1d2990d"},
|
|
||||||
{file = "PyQt5_sip-12.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:f168f0a7f32b81bfeffdf003c36f25d81c97dee5eb67072a5183e761fe250f13"},
|
|
||||||
{file = "PyQt5_sip-12.8.1.tar.gz", hash = "sha256:30e944db9abee9cc757aea16906d4198129558533eb7fadbe48c5da2bd18e0bd"},
|
|
||||||
]
|
|
||||||
pyrsistent = [
|
pyrsistent = [
|
||||||
{file = "pyrsistent-0.17.3.tar.gz", hash = "sha256:2e636185d9eb976a18a8a8e96efce62f2905fea90041958d8cc2a189756ebf3e"},
|
{file = "pyrsistent-0.17.3.tar.gz", hash = "sha256:2e636185d9eb976a18a8a8e96efce62f2905fea90041958d8cc2a189756ebf3e"},
|
||||||
]
|
]
|
||||||
|
@ -1390,6 +1371,43 @@ rebound = [
|
||||||
{file = "rebound-3.16.0.tar.gz", hash = "sha256:2686f68afe96351abb2c248c4da7f24d493841cf2596e8e7187fc0ca3287e57b"},
|
{file = "rebound-3.16.0.tar.gz", hash = "sha256:2686f68afe96351abb2c248c4da7f24d493841cf2596e8e7187fc0ca3287e57b"},
|
||||||
]
|
]
|
||||||
rebound-stubs = []
|
rebound-stubs = []
|
||||||
|
"ruamel.yaml" = [
|
||||||
|
{file = "ruamel.yaml-0.16.12-py2.py3-none-any.whl", hash = "sha256:012b9470a0ea06e4e44e99e7920277edf6b46eee0232a04487ea73a7386340a5"},
|
||||||
|
{file = "ruamel.yaml-0.16.12.tar.gz", hash = "sha256:076cc0bc34f1966d920a49f18b52b6ad559fbe656a0748e3535cf7b3f29ebf9e"},
|
||||||
|
]
|
||||||
|
"ruamel.yaml.clib" = [
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:28116f204103cb3a108dfd37668f20abe6e3cafd0d3fd40dba126c732457b3cc"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:daf21aa33ee9b351f66deed30a3d450ab55c14242cfdfcd377798e2c0d25c9f1"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp27-cp27m-win32.whl", hash = "sha256:30dca9bbcbb1cc858717438218d11eafb78666759e5094dd767468c0d577a7e7"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp27-cp27m-win_amd64.whl", hash = "sha256:f6061a31880c1ed6b6ce341215336e2f3d0c1deccd84957b6fa8ca474b41e89f"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:73b3d43e04cc4b228fa6fa5d796409ece6fcb53a6c270eb2048109cbcbc3b9c2"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:53b9dd1abd70e257a6e32f934ebc482dac5edb8c93e23deb663eac724c30b026"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:839dd72545ef7ba78fd2aa1a5dd07b33696adf3e68fae7f31327161c1093001b"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:1236df55e0f73cd138c0eca074ee086136c3f16a97c2ac719032c050f7e0622f"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp35-cp35m-win32.whl", hash = "sha256:b1e981fe1aff1fd11627f531524826a4dcc1f26c726235a52fcb62ded27d150f"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp35-cp35m-win_amd64.whl", hash = "sha256:4e52c96ca66de04be42ea2278012a2342d89f5e82b4512fb6fb7134e377e2e62"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a873e4d4954f865dcb60bdc4914af7eaae48fb56b60ed6daa1d6251c72f5337c"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ab845f1f51f7eb750a78937be9f79baea4a42c7960f5a94dde34e69f3cce1988"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:2fd336a5c6415c82e2deb40d08c222087febe0aebe520f4d21910629018ab0f3"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp36-cp36m-win32.whl", hash = "sha256:e9f7d1d8c26a6a12c23421061f9022bb62704e38211fe375c645485f38df34a2"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp36-cp36m-win_amd64.whl", hash = "sha256:2602e91bd5c1b874d6f93d3086f9830f3e907c543c7672cf293a97c3fabdcd91"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:44c7b0498c39f27795224438f1a6be6c5352f82cb887bc33d962c3a3acc00df6"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:8e8fd0a22c9d92af3a34f91e8a2594eeb35cba90ab643c5e0e643567dc8be43e"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:75f0ee6839532e52a3a53f80ce64925ed4aed697dd3fa890c4c918f3304bd4f4"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp37-cp37m-win32.whl", hash = "sha256:464e66a04e740d754170be5e740657a3b3b6d2bcc567f0c3437879a6e6087ff6"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:52ae5739e4b5d6317b52f5b040b1b6639e8af68a5b8fd606a8b08658fbd0cab5"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4df5019e7783d14b79217ad9c56edf1ba7485d614ad5a385d1b3c768635c81c0"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5254af7d8bdf4d5484c089f929cb7f5bafa59b4f01d4f48adda4be41e6d29f99"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8be05be57dc5c7b4a0b24edcaa2f7275866d9c907725226cdde46da09367d923"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp38-cp38-win32.whl", hash = "sha256:74161d827407f4db9072011adcfb825b5258a5ccb3d2cd518dd6c9edea9e30f1"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:058a1cc3df2a8aecc12f983a48bda99315cebf55a3b3a5463e37bb599b05727b"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6ac7e45367b1317e56f1461719c853fd6825226f45b835df7436bb04031fd8a"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b4b0d31f2052b3f9f9b5327024dc629a253a83d8649d4734ca7f35b60ec3e9e5"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:1f8c0a4577c0e6c99d208de5c4d3fd8aceed9574bb154d7a2b21c16bb924154c"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp39-cp39-win32.whl", hash = "sha256:46d6d20815064e8bb023ea8628cfb7402c0f0e83de2c2227a88097e239a7dffd"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:6c0a5dc52fc74eb87c67374a4e554d4761fd42a4d01390b7e868b30d21f4b8bb"},
|
||||||
|
{file = "ruamel.yaml.clib-0.2.2.tar.gz", hash = "sha256:2d24bd98af676f4990c4d715bcdc2a60b19c56a3fb3a763164d2d8ca0e806ba7"},
|
||||||
|
]
|
||||||
scipy = [
|
scipy = [
|
||||||
{file = "scipy-1.6.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a15a1f3fc0abff33e792d6049161b7795909b40b97c6cc2934ed54384017ab76"},
|
{file = "scipy-1.6.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a15a1f3fc0abff33e792d6049161b7795909b40b97c6cc2934ed54384017ab76"},
|
||||||
{file = "scipy-1.6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:e79570979ccdc3d165456dd62041d9556fb9733b86b4b6d818af7a0afc15f092"},
|
{file = "scipy-1.6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:e79570979ccdc3d165456dd62041d9556fb9733b86b4b6d818af7a0afc15f092"},
|
||||||
|
@ -1534,6 +1552,12 @@ typing-extensions = [
|
||||||
{file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"},
|
{file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"},
|
||||||
{file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"},
|
{file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"},
|
||||||
]
|
]
|
||||||
|
vext = [
|
||||||
|
{file = "vext-0.7.4.tar.gz", hash = "sha256:d188b0d214179cd6234b48c3ac708f9cb7793739d2a7bb7d1cb03f3bf59cf767"},
|
||||||
|
]
|
||||||
|
"vext.pyqt5" = [
|
||||||
|
{file = "vext.pyqt5-0.7.4.tar.gz", hash = "sha256:06873b83f1731f55cc9bcd4c4754d7d0681855022e2377d41670c41cb3d3f8a6"},
|
||||||
|
]
|
||||||
wcwidth = [
|
wcwidth = [
|
||||||
{file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
|
{file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
|
||||||
{file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"},
|
{file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"},
|
||||||
|
|
|
@ -8,7 +8,6 @@ authors = ["Lukas Winkler <git@lw1.at>"]
|
||||||
python = "^3.7"
|
python = "^3.7"
|
||||||
rebound = "^3.16.0"
|
rebound = "^3.16.0"
|
||||||
matplotlib = "^3.2.1"
|
matplotlib = "^3.2.1"
|
||||||
pyqt5 = "^5.14.1"
|
|
||||||
ipywidgets = "^7.5.1"
|
ipywidgets = "^7.5.1"
|
||||||
scipy = "^1.4.1"
|
scipy = "^1.4.1"
|
||||||
graphviz = "^0.16"
|
graphviz = "^0.16"
|
||||||
|
@ -16,6 +15,7 @@ py-spy = "^0.3.3"
|
||||||
mypy = "^0.812"
|
mypy = "^0.812"
|
||||||
rebound-stubs = {git = "https://github.com/Findus23/rebound-stubs.git", rev = "main"}
|
rebound-stubs = {git = "https://github.com/Findus23/rebound-stubs.git", rev = "main"}
|
||||||
setproctitle = "^1.2.2"
|
setproctitle = "^1.2.2"
|
||||||
|
"vext.pyqt5" = "^0.7.4"
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,49 @@
|
||||||
from math import pi
|
from math import pi
|
||||||
|
|
||||||
ice_density = 0.917 / 1000 * 100 ** 3 # kg/m^3
|
|
||||||
basalt_density = 2.7 / 1000 * 100 ** 3 # kg/m^3
|
class PlanetaryRadius:
|
||||||
|
# all densities are till_rho_0
|
||||||
|
ice_density = 917 # kg/m^3
|
||||||
|
basalt_density = 2700 # kg/m^3
|
||||||
|
iron_density = 7800 # kg/m^3
|
||||||
|
|
||||||
|
def __init__(self, total_mass: float, water_fraction: float, core_fraction: float):
|
||||||
|
self.total_mass = total_mass
|
||||||
|
self.water_fraction = water_fraction
|
||||||
|
self.core_fraction = core_fraction
|
||||||
|
|
||||||
|
@property
|
||||||
|
def mantle_fraction(self) -> float:
|
||||||
|
return 1 - self.core_fraction - self.water_fraction
|
||||||
|
|
||||||
|
@property
|
||||||
|
def core_mass(self) -> float:
|
||||||
|
return self.total_mass * self.core_fraction
|
||||||
|
|
||||||
|
@property
|
||||||
|
def mantle_mass(self) -> float:
|
||||||
|
return self.total_mass * self.mantle_fraction
|
||||||
|
|
||||||
|
@property
|
||||||
|
def water_mass(self) -> float:
|
||||||
|
return self.total_mass * self.water_fraction
|
||||||
|
|
||||||
|
@property
|
||||||
|
def core_radius(self) -> float:
|
||||||
|
return (self.core_mass / self.iron_density * 3 / 4 / pi) ** (1 / 3)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def mantle_radius(self) -> float:
|
||||||
|
return (self.mantle_mass / self.basalt_density * 3 / 4 / pi + self.core_radius ** 3) ** (1 / 3)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def total_radius(self) -> float:
|
||||||
|
return (self.water_mass / self.ice_density * 3 / 4 / pi + self.mantle_radius ** 3) ** (1 / 3)
|
||||||
|
|
||||||
|
|
||||||
def core_radius(total_mass, water_fraction, density):
|
if __name__ == '__main__':
|
||||||
core_mass = total_mass * (1 - water_fraction)
|
testradius = PlanetaryRadius(1e21, 0.1, 0)
|
||||||
return (core_mass / density * 3 / 4 / pi) ** (1 / 3)
|
assert testradius.mantle_radius == 430127.0069140495
|
||||||
|
assert testradius.total_radius == 472683.51839024643
|
||||||
|
testradius = PlanetaryRadius(1e21, 0.05, 0)
|
||||||
def total_radius(total_mass, water_fraction, density, inner_radius):
|
assert testradius.total_radius == 459494.5247690266
|
||||||
mantle_mass = total_mass * water_fraction
|
|
||||||
return (mantle_mass / density * 3 / 4 / pi + inner_radius ** 3) ** (1 / 3)
|
|
||||||
|
|
||||||
|
|
||||||
def radius(mass: float, water_fraction: float) -> float:
|
|
||||||
"""
|
|
||||||
:return: radius in Meter
|
|
||||||
"""
|
|
||||||
return total_radius(mass, water_fraction, ice_density, core_radius(mass, water_fraction, basalt_density))
|
|
||||||
|
|
13
water_sim.py
13
water_sim.py
|
@ -13,11 +13,12 @@ from scipy.constants import astronomical_unit, mega, year
|
||||||
|
|
||||||
from extradata import ExtraData, ParticleData
|
from extradata import ExtraData, ParticleData
|
||||||
from merge import merge_particles
|
from merge import merge_particles
|
||||||
from radius_utils import radius
|
from radius_utils import PlanetaryRadius
|
||||||
from utils import unique_hash, filename_from_argv, innermost_period, total_momentum, process_friendlyness, total_mass, \
|
from utils import unique_hash, filename_from_argv, innermost_period, total_momentum, process_friendlyness, total_mass, \
|
||||||
third_kepler_law, solar_radius, git_hash
|
third_kepler_law, solar_radius, git_hash
|
||||||
|
|
||||||
MIN_TIMESTEP_PER_ORBIT = 20
|
MIN_TIMESTEP_PER_ORBIT = 20
|
||||||
|
TWO_LAYERS = True
|
||||||
PERFECT_MERGING = False
|
PERFECT_MERGING = False
|
||||||
INITCON_FILE = Path("initcon/conditions_many.input")
|
INITCON_FILE = Path("initcon/conditions_many.input")
|
||||||
|
|
||||||
|
@ -81,15 +82,16 @@ def main(fn: Path, testrun=False):
|
||||||
columns = list(map(float, line.split()))
|
columns = list(map(float, line.split()))
|
||||||
hash = unique_hash(extradata)
|
hash = unique_hash(extradata)
|
||||||
if len(columns) > 7:
|
if len(columns) > 7:
|
||||||
# print(columns[7:])
|
|
||||||
cmf, mmf, wmf = columns[7:]
|
cmf, mmf, wmf = columns[7:]
|
||||||
total_fractions = cmf + mmf + wmf
|
total_fractions = cmf + mmf + wmf
|
||||||
if total_fractions != 1:
|
if total_fractions != 1:
|
||||||
diff = 1 - total_fractions
|
diff = 1 - total_fractions
|
||||||
print(f"fractions don't add up by {diff}")
|
print(f"fractions don't add up by {diff}")
|
||||||
print("adding rest to cmf")
|
print("adding rest to mmf")
|
||||||
cmf += diff
|
mmf += diff
|
||||||
assert cmf + mmf + wmf - 1 <= 1e-10
|
assert cmf + mmf + wmf - 1 <= 1e-10
|
||||||
|
if TWO_LAYERS:
|
||||||
|
cmf = 0
|
||||||
if i > num_embryos + 3:
|
if i > num_embryos + 3:
|
||||||
object_type = "planetesimal"
|
object_type = "planetesimal"
|
||||||
else:
|
else:
|
||||||
|
@ -103,6 +105,7 @@ def main(fn: Path, testrun=False):
|
||||||
object_type = "gas giant"
|
object_type = "gas giant"
|
||||||
extradata.pdata[hash.value] = ParticleData(
|
extradata.pdata[hash.value] = ParticleData(
|
||||||
water_mass_fraction=wmf,
|
water_mass_fraction=wmf,
|
||||||
|
core_mass_fraction=cmf,
|
||||||
type=object_type,
|
type=object_type,
|
||||||
total_mass=columns[0]
|
total_mass=columns[0]
|
||||||
)
|
)
|
||||||
|
@ -116,7 +119,7 @@ def main(fn: Path, testrun=False):
|
||||||
Omega=columns[5], M=columns[6],
|
Omega=columns[5], M=columns[6],
|
||||||
simulation=sim,
|
simulation=sim,
|
||||||
hash=hash,
|
hash=hash,
|
||||||
r=radius(columns[0], wmf) / astronomical_unit
|
r=PlanetaryRadius(columns[0], wmf,cmf).total_radius / astronomical_unit
|
||||||
)
|
)
|
||||||
sim.add(part)
|
sim.add(part)
|
||||||
i += 1
|
i += 1
|
||||||
|
|
Loading…
Reference in a new issue