1
0
Fork 0
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:
Lukas Winkler 2021-03-08 15:43:45 +01:00
parent 2b0e589568
commit a145ed05f9
Signed by: lukas
GPG key ID: 54DE4D798D244853
7 changed files with 183 additions and 136 deletions

2
bac

@ -1 +1 @@
Subproject commit e2e0ae067b4820980c8bea11656468d87a12f325
Subproject commit 88bbf9a16095078d1ad05f5a38220bf7b01333ed

View file

@ -11,6 +11,7 @@ from scipy.constants import astronomical_unit, year
@dataclass
class ParticleData:
water_mass_fraction: float
core_mass_fraction: float
type: str
escaped: float = None
collided_with_sun: float = None
@ -20,6 +21,10 @@ class ParticleData:
def water_mass(self) -> float:
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
class Input:
@ -47,9 +52,11 @@ class CollisionMeta:
collision_radii: Tuple[float, float] = None
interpolation_input: List[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
mass_retention: float = None
mantle_retention: float = None
core_retention: float = None
total_mass: float = None
final_wmf: float = None
final_radius: float = None

View file

@ -1,6 +1,4 @@
import sys
from copy import copy
from pathlib import Path
from pprint import pprint
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 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
sys.path.append("./bac")
from bac.simulation_list import SimulationList
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]:
def get_mass_fractions(input_data: Input) -> Tuple[float, float, float, CollisionMeta]:
print("v_esc", input_data.escape_velocity)
print("v_orig,v_si", input_data.velocity_original, input_data.velocity_si)
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.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.interpolation_input = [data.alpha, data.velocity_esc, data.projectile_mass, data.gamma]
metadata.input = input_data
metadata.adjusted_input = data
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)
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.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):
@ -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})")
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_cmf = ed.pd(target).core_mass_fraction
# get the velocities, velocity differences and unit vector as numpy arrays
# 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,
)
water_ret, stone_ret, meta = get_mass_fractions(input_data)
print("interpolation finished")
print(water_ret, stone_ret)
if ed.meta.perfect_merging:
water_ret = mantle_ret = core_ret = 1
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_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
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
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_cmf = core_mass / total_mass
print(final_wmf)
# create new object preserving momentum
merged_planet = (target * target.m + projectile * projectile.m) / total_mass
merged_planet.m = total_mass
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(
water_mass_fraction=final_wmf,
core_mass_fraction=final_cmf,
type=ed.pd(target).type,
total_mass=total_mass
)

154
poetry.lock generated
View file

@ -627,34 +627,6 @@ category = "main"
optional = false
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]]
name = "pyrsistent"
version = "0.17.3"
@ -728,6 +700,29 @@ url = "https://github.com/Findus23/rebound-stubs.git"
reference = "main"
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]]
name = "scipy"
version = "1.6.1"
@ -828,6 +823,28 @@ category = "main"
optional = false
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]]
name = "wcwidth"
version = "0.2.5"
@ -870,7 +887,7 @@ testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake
[metadata]
lock-version = "1.1"
python-versions = "^3.7"
content-hash = "7491c409b501abca5119fcbd55bc34f30c0967e54881498443f5dd7017122681"
content-hash = "53dfdeeb62518b321425c670586d99eb06670e89a3b7db77560ed718f3bc8c11"
[metadata.files]
appnope = [
@ -1286,42 +1303,6 @@ pyparsing = [
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
{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 = [
{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"},
]
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 = [
{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"},
@ -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.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 = [
{file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
{file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"},

View file

@ -8,7 +8,6 @@ authors = ["Lukas Winkler <git@lw1.at>"]
python = "^3.7"
rebound = "^3.16.0"
matplotlib = "^3.2.1"
pyqt5 = "^5.14.1"
ipywidgets = "^7.5.1"
scipy = "^1.4.1"
graphviz = "^0.16"
@ -16,6 +15,7 @@ py-spy = "^0.3.3"
mypy = "^0.812"
rebound-stubs = {git = "https://github.com/Findus23/rebound-stubs.git", rev = "main"}
setproctitle = "^1.2.2"
"vext.pyqt5" = "^0.7.4"
[tool.poetry.dev-dependencies]

View file

@ -1,21 +1,49 @@
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):
core_mass = total_mass * (1 - water_fraction)
return (core_mass / density * 3 / 4 / pi) ** (1 / 3)
def total_radius(total_mass, water_fraction, density, inner_radius):
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))
if __name__ == '__main__':
testradius = PlanetaryRadius(1e21, 0.1, 0)
assert testradius.mantle_radius == 430127.0069140495
assert testradius.total_radius == 472683.51839024643
testradius = PlanetaryRadius(1e21, 0.05, 0)
assert testradius.total_radius == 459494.5247690266

View file

@ -13,11 +13,12 @@ from scipy.constants import astronomical_unit, mega, year
from extradata import ExtraData, ParticleData
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, \
third_kepler_law, solar_radius, git_hash
MIN_TIMESTEP_PER_ORBIT = 20
TWO_LAYERS = True
PERFECT_MERGING = False
INITCON_FILE = Path("initcon/conditions_many.input")
@ -81,15 +82,16 @@ def main(fn: Path, testrun=False):
columns = list(map(float, line.split()))
hash = unique_hash(extradata)
if len(columns) > 7:
# print(columns[7:])
cmf, mmf, wmf = columns[7:]
total_fractions = cmf + mmf + wmf
if total_fractions != 1:
diff = 1 - total_fractions
print(f"fractions don't add up by {diff}")
print("adding rest to cmf")
cmf += diff
print("adding rest to mmf")
mmf += diff
assert cmf + mmf + wmf - 1 <= 1e-10
if TWO_LAYERS:
cmf = 0
if i > num_embryos + 3:
object_type = "planetesimal"
else:
@ -103,6 +105,7 @@ def main(fn: Path, testrun=False):
object_type = "gas giant"
extradata.pdata[hash.value] = ParticleData(
water_mass_fraction=wmf,
core_mass_fraction=cmf,
type=object_type,
total_mass=columns[0]
)
@ -116,7 +119,7 @@ def main(fn: Path, testrun=False):
Omega=columns[5], M=columns[6],
simulation=sim,
hash=hash,
r=radius(columns[0], wmf) / astronomical_unit
r=PlanetaryRadius(columns[0], wmf,cmf).total_radius / astronomical_unit
)
sim.add(part)
i += 1