{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Graviton SDK: Astrophysics & N-Body Supercomputing\n", "This notebook demonstrates how to run astrophysical N-body simulations using **REBOUND** and **Mercury6** on Graviton's high-density CPU Turing nodes.\n", "\n", "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/CodeZeroLabs/graviton-examples/blob/master/graviton_sdk_astrophys_example.ipynb)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# 1. Install the Graviton SDK\n", "!pip install graviton-sdk" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import graviton as gv\n", "import tempfile\n", "import os\n", "\n", "# 2. Authenticate with Graviton\n", "gv.login(\"a-little-more-art-than-science\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Running a REBOUND Simulation\n", "REBOUND simulations use a unified JSON structure specifying simulation duration, step resolution, and orbital bodies." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "rebound_payload = {\n", " \"t\": \"rebound\",\n", " \"sim_time\": 365.25,\n", " \"time_step\": 0.1,\n", " \"bodies\": [\n", " {\"name\": \"Sun\", \"mass\": 1.0, \"x\": 0.0, \"y\": 0.0, \"z\": 0.0},\n", " {\"name\": \"Earth\", \"mass\": 3.0e-6, \"a\": 1.0, \"e\": 0.0167},\n", " {\"name\": \"Mars\", \"mass\": 3.2e-7, \"a\": 1.524, \"e\": 0.0934}\n", " ]\n", "}\n", "\n", "# Evaluate complexity and estimated credits\n", "eval_data = gv.evaluate(rebound_payload)\n", "print(f\"Job ID: {eval_data.id}\")\n", "print(f\"Estimated Credit Cost: {eval_data.cost:.2f}\")\n", "print(f\"Estimated Duration: {eval_data.estimated_time:.2f}s\")\n", "\n", "# Trigger computation on Turing swarm\n", "job = gv.compute(eval_data.id)\n", "print(f\"Job status: {job.status()}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Scraping and Executing Legacy Mercury6 Datasets\n", "The Graviton SDK includes `gv.load_mercury(directory)` to parse legacy Fortran `param.in`, `big.in`, and `small.in` parameter files without manual conversion." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Create sample Mercury directory for demonstration\n", "sample_dir = tempfile.mkdtemp(prefix=\"mercury_demo_\")\n", "\n", "param_content = \"\"\"\n", ")O+_06 Integration parameters\n", " start time (days) = 0.0\n", " stop time (days) = 365.25\n", " timestep (days) = 1.0\n", "\"\"\"\n", "\n", "big_content = \"\"\"\n", ")O+_06 Big bodies\n", " style = Cartesian\n", " Central_Star m=1.0 r=0.005 d=1.0\n", " 0.0 0.0 0.0\n", " 0.0 0.0 0.0\n", " 0.0 0.0 0.0\n", " Planet_A m=0.001 r=0.001 d=1.0\n", " 1.0 0.0 0.0\n", " 0.0 6.28 0.0\n", " 0.0 0.0 0.0\n", "\"\"\"\n", "\n", "with open(os.path.join(sample_dir, \"param.in\"), \"w\") as f:\n", " f.write(param_content)\n", "\n", "with open(os.path.join(sample_dir, \"big.in\"), \"w\") as f:\n", " f.write(big_content)\n", "\n", "# Automatically load and transform the dataset\n", "mercury_payload = gv.load_mercury(sample_dir)\n", "print(\"Transformed Payload:\")\n", "print(mercury_payload)\n", "\n", "# Evaluate and compute\n", "mercury_eval = gv.evaluate(mercury_payload)\n", "print(f\"Mercury Job ID: {mercury_eval.id}\")\n", "print(f\"Cost: {mercury_eval.cost:.2f} credits\")\n", "\n", "mercury_job = gv.compute(mercury_eval.id)\n", "print(f\"Mercury Job provisioned: {mercury_job.job_id}\")" ] } ], "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.12.0" } }, "nbformat": 4, "nbformat_minor": 4 }