Note
Go to the end to download the full example code
Make a phase curve GIF#
This example turns a phase curve into a gif.
from pathlib import Path
import os
import numpy as np
import matplotlib.pyplot as plt
from astropy import units as u
from imageio.v2 import imread, mimsave
from cartopy import crs as ccrs
import pypsg
from pypsg.globes import GCMdecoder, PyGCM
from VSPEC import ObservationModel,PhaseAnalyzer
from VSPEC.geometry import SystemGeometry
try:
CONFIG_PATH = Path(__file__).parent / 'phase_gif.yaml'
except NameError:
CONFIG_PATH = Path('phase_gif.yaml')
pypsg.docker.set_url_and_run()
Saved settings to /home/ted/.pypsg/settings.json
Reloading settings...
Load in the configuration#
It is stored in a YAML file.
model = ObservationModel.from_yaml(CONFIG_PATH)
model.build_planet()
model.build_spectra()
/home/ted/github/VSPEC/VSPEC/gcm/heat_transfer.py:538: RuntimeWarning: Energy balance off by -6.5 %. eps = 3.0, T0 = 0.5
warnings.warn(msg, RuntimeWarning)
Starting at phase 0.0 deg, observe for 10.0 d in 120 steps
Phases = [ 0. 3. 6. 9. 12. 15. 18. 21. 24. 27. 30. 33. 36. 39.
42. 45. 48. 51. 54. 57. 60. 63. 66. 69. 72. 75. 78. 81.
84. 87. 90. 93. 96. 99. 102. 105. 108. 111. 114. 117. 120. 123.
126. 129. 132. 135. 138. 141. 144. 147. 150. 153. 156. 159. 162. 165.
168. 171. 174. 177. 180. 183. 186. 189. 192. 195. 198. 201. 204. 207.
210. 213. 216. 219. 222. 225. 228. 231. 234. 237. 240. 243. 246. 249.
252. 255. 258. 261. 264. 267. 270. 273. 276. 279. 282. 285. 288. 291.
294. 297. 300. 303. 306. 309. 312. 315. 318. 321. 324. 327. 330. 333.
336. 339. 342. 345. 348. 351. 354. 357. 0.] deg
Build Planet: 0%| | 0/120 [00:00<?, ?it/s]
Build Planet: 1%| | 1/120 [00:00<00:22, 5.30it/s]
Build Planet: 2%|▏ | 2/120 [00:00<00:22, 5.32it/s]
Build Planet: 2%|▎ | 3/120 [00:00<00:21, 5.45it/s]
Build Planet: 3%|▎ | 4/120 [00:00<00:19, 5.85it/s]
Build Planet: 4%|▍ | 5/120 [00:00<00:19, 5.96it/s]
Build Planet: 5%|▌ | 6/120 [00:01<00:18, 6.13it/s]
Build Planet: 6%|▌ | 7/120 [00:01<00:18, 6.21it/s]
Build Planet: 7%|▋ | 8/120 [00:01<00:18, 5.90it/s]
Build Planet: 8%|▊ | 9/120 [00:01<00:18, 6.15it/s]
Build Planet: 8%|▊ | 10/120 [00:01<00:17, 6.18it/s]
Build Planet: 9%|▉ | 11/120 [00:01<00:18, 6.04it/s]
Build Planet: 10%|█ | 12/120 [00:02<00:17, 6.03it/s]
Build Planet: 11%|█ | 13/120 [00:02<00:17, 6.01it/s]
Build Planet: 12%|█▏ | 14/120 [00:02<00:17, 6.11it/s]
Build Planet: 12%|█▎ | 15/120 [00:02<00:17, 5.98it/s]
Build Planet: 13%|█▎ | 16/120 [00:02<00:17, 6.07it/s]
Build Planet: 14%|█▍ | 17/120 [00:02<00:16, 6.25it/s]
Build Planet: 15%|█▌ | 18/120 [00:02<00:16, 6.37it/s]
Build Planet: 16%|█▌ | 19/120 [00:03<00:15, 6.34it/s]
Build Planet: 17%|█▋ | 20/120 [00:03<00:15, 6.33it/s]
Build Planet: 18%|█▊ | 21/120 [00:03<00:15, 6.26it/s]
Build Planet: 18%|█▊ | 22/120 [00:03<00:16, 5.88it/s]
Build Planet: 19%|█▉ | 23/120 [00:03<00:16, 5.88it/s]
Build Planet: 20%|██ | 24/120 [00:03<00:16, 5.93it/s]
Build Planet: 21%|██ | 25/120 [00:04<00:15, 6.03it/s]
Build Planet: 22%|██▏ | 26/120 [00:04<00:15, 6.13it/s]
Build Planet: 22%|██▎ | 27/120 [00:04<00:14, 6.26it/s]
Build Planet: 23%|██▎ | 28/120 [00:04<00:15, 5.89it/s]
Build Planet: 24%|██▍ | 29/120 [00:04<00:15, 5.94it/s]
Build Planet: 25%|██▌ | 30/120 [00:04<00:15, 5.89it/s]
Build Planet: 26%|██▌ | 31/120 [00:05<00:14, 6.02it/s]
Build Planet: 27%|██▋ | 32/120 [00:05<00:14, 5.89it/s]
Build Planet: 28%|██▊ | 33/120 [00:05<00:15, 5.78it/s]
Build Planet: 28%|██▊ | 34/120 [00:05<00:15, 5.72it/s]
Build Planet: 29%|██▉ | 35/120 [00:05<00:15, 5.46it/s]
Build Planet: 30%|███ | 36/120 [00:06<00:14, 5.61it/s]
Build Planet: 31%|███ | 37/120 [00:06<00:14, 5.76it/s]
Build Planet: 32%|███▏ | 38/120 [00:06<00:14, 5.74it/s]
Build Planet: 32%|███▎ | 39/120 [00:06<00:13, 5.79it/s]
Build Planet: 33%|███▎ | 40/120 [00:06<00:14, 5.55it/s]
Build Planet: 34%|███▍ | 41/120 [00:06<00:14, 5.61it/s]
Build Planet: 35%|███▌ | 42/120 [00:07<00:13, 5.58it/s]
Build Planet: 36%|███▌ | 43/120 [00:07<00:13, 5.68it/s]
Build Planet: 37%|███▋ | 44/120 [00:07<00:13, 5.52it/s]
Build Planet: 38%|███▊ | 45/120 [00:07<00:13, 5.38it/s]
Build Planet: 38%|███▊ | 46/120 [00:07<00:14, 5.26it/s]
Build Planet: 39%|███▉ | 47/120 [00:08<00:14, 5.11it/s]
Build Planet: 40%|████ | 48/120 [00:08<00:14, 5.01it/s]
Build Planet: 41%|████ | 49/120 [00:08<00:13, 5.24it/s]
Build Planet: 42%|████▏ | 50/120 [00:08<00:12, 5.42it/s]
Build Planet: 42%|████▎ | 51/120 [00:08<00:12, 5.51it/s]
Build Planet: 43%|████▎ | 52/120 [00:08<00:12, 5.58it/s]
Build Planet: 44%|████▍ | 53/120 [00:09<00:11, 5.63it/s]
Build Planet: 45%|████▌ | 54/120 [00:09<00:11, 5.54it/s]
Build Planet: 46%|████▌ | 55/120 [00:09<00:11, 5.55it/s]
Build Planet: 47%|████▋ | 56/120 [00:09<00:11, 5.58it/s]
Build Planet: 48%|████▊ | 57/120 [00:09<00:11, 5.56it/s]
Build Planet: 48%|████▊ | 58/120 [00:10<00:11, 5.31it/s]
Build Planet: 49%|████▉ | 59/120 [00:10<00:11, 5.44it/s]
Build Planet: 50%|█████ | 60/120 [00:10<00:11, 5.21it/s]
Build Planet: 51%|█████ | 61/120 [00:10<00:11, 5.24it/s]
Build Planet: 52%|█████▏ | 62/120 [00:10<00:11, 5.23it/s]
Build Planet: 52%|█████▎ | 63/120 [00:11<00:11, 5.12it/s]
Build Planet: 53%|█████▎ | 64/120 [00:11<00:10, 5.09it/s]
Build Planet: 54%|█████▍ | 65/120 [00:11<00:10, 5.21it/s]
Build Planet: 55%|█████▌ | 66/120 [00:11<00:10, 5.26it/s]
Build Planet: 56%|█████▌ | 67/120 [00:11<00:09, 5.35it/s]
Build Planet: 57%|█████▋ | 68/120 [00:11<00:09, 5.31it/s]
Build Planet: 57%|█████▊ | 69/120 [00:12<00:10, 5.07it/s]
Build Planet: 58%|█████▊ | 70/120 [00:12<00:09, 5.07it/s]
Build Planet: 59%|█████▉ | 71/120 [00:12<00:09, 4.92it/s]
Build Planet: 60%|██████ | 72/120 [00:12<00:09, 5.09it/s]
Build Planet: 61%|██████ | 73/120 [00:12<00:09, 5.12it/s]
Build Planet: 62%|██████▏ | 74/120 [00:13<00:08, 5.20it/s]
Build Planet: 62%|██████▎ | 75/120 [00:13<00:08, 5.29it/s]
Build Planet: 63%|██████▎ | 76/120 [00:13<00:08, 5.33it/s]
Build Planet: 64%|██████▍ | 77/120 [00:13<00:07, 5.39it/s]
Build Planet: 65%|██████▌ | 78/120 [00:13<00:07, 5.25it/s]
Build Planet: 66%|██████▌ | 79/120 [00:14<00:07, 5.24it/s]
Build Planet: 67%|██████▋ | 80/120 [00:14<00:07, 5.35it/s]
Build Planet: 68%|██████▊ | 81/120 [00:14<00:07, 5.25it/s]
Build Planet: 68%|██████▊ | 82/120 [00:14<00:07, 5.14it/s]
Build Planet: 69%|██████▉ | 83/120 [00:14<00:07, 5.07it/s]
Build Planet: 70%|███████ | 84/120 [00:15<00:07, 4.99it/s]
Build Planet: 71%|███████ | 85/120 [00:15<00:07, 4.93it/s]
Build Planet: 72%|███████▏ | 86/120 [00:15<00:06, 4.90it/s]
Build Planet: 72%|███████▎ | 87/120 [00:15<00:06, 4.86it/s]
Build Planet: 73%|███████▎ | 88/120 [00:15<00:06, 4.85it/s]
Build Planet: 74%|███████▍ | 89/120 [00:16<00:06, 4.96it/s]/home/ted/github/VSPEC/VSPEC/gcm/heat_transfer.py:538: RuntimeWarning: Energy balance off by -6.5 %. eps = 3.0, T0 = 0.5
warnings.warn(msg, RuntimeWarning)
Build Planet: 75%|███████▌ | 90/120 [00:16<00:05, 5.25it/s]
Build Planet: 76%|███████▌ | 91/120 [00:16<00:05, 5.67it/s]
Build Planet: 77%|███████▋ | 92/120 [00:16<00:04, 5.71it/s]
Build Planet: 78%|███████▊ | 93/120 [00:16<00:04, 6.00it/s]
Build Planet: 78%|███████▊ | 94/120 [00:16<00:04, 6.23it/s]
Build Planet: 79%|███████▉ | 95/120 [00:17<00:03, 6.40it/s]
Build Planet: 80%|████████ | 96/120 [00:17<00:03, 6.46it/s]
Build Planet: 81%|████████ | 97/120 [00:17<00:03, 6.48it/s]
Build Planet: 82%|████████▏ | 98/120 [00:17<00:03, 6.49it/s]
Build Planet: 82%|████████▎ | 99/120 [00:17<00:03, 6.47it/s]
Build Planet: 83%|████████▎ | 100/120 [00:17<00:03, 6.19it/s]
Build Planet: 84%|████████▍ | 101/120 [00:18<00:03, 6.22it/s]
Build Planet: 85%|████████▌ | 102/120 [00:18<00:02, 6.38it/s]
Build Planet: 86%|████████▌ | 103/120 [00:18<00:02, 6.25it/s]
Build Planet: 87%|████████▋ | 104/120 [00:18<00:02, 6.21it/s]
Build Planet: 88%|████████▊ | 105/120 [00:18<00:02, 6.14it/s]
Build Planet: 88%|████████▊ | 106/120 [00:18<00:02, 6.20it/s]
Build Planet: 89%|████████▉ | 107/120 [00:18<00:02, 6.22it/s]
Build Planet: 90%|█████████ | 108/120 [00:19<00:01, 6.27it/s]
Build Planet: 91%|█████████ | 109/120 [00:19<00:01, 6.18it/s]
Build Planet: 92%|█████████▏| 110/120 [00:19<00:01, 6.18it/s]
Build Planet: 92%|█████████▎| 111/120 [00:19<00:01, 6.07it/s]
Build Planet: 93%|█████████▎| 112/120 [00:19<00:01, 6.09it/s]
Build Planet: 94%|█████████▍| 113/120 [00:19<00:01, 6.08it/s]
Build Planet: 95%|█████████▌| 114/120 [00:20<00:01, 6.00it/s]
Build Planet: 96%|█████████▌| 115/120 [00:20<00:00, 6.00it/s]
Build Planet: 97%|█████████▋| 116/120 [00:20<00:00, 6.00it/s]
Build Planet: 98%|█████████▊| 117/120 [00:20<00:00, 5.71it/s]
Build Planet: 98%|█████████▊| 118/120 [00:20<00:00, 5.78it/s]
Build Planet: 99%|█████████▉| 119/120 [00:20<00:00, 5.79it/s]
Build Planet: 100%|██████████| 120/120 [00:21<00:00, 5.80it/s]
Build Planet: 121it [00:21, 5.92it/s]
Build Planet: 121it [00:21, 5.67it/s]
Build Spectra: 0%| | 0/120 [00:00<?, ?it/s]
Loading Spectra: 0%| | 0/3 [00:00<?, ?it/s]
Loading Spectra: 33%|███▎ | 1/3 [00:00<00:00, 3.45it/s]
Loading Spectra: 67%|██████▋ | 2/3 [00:00<00:00, 3.39it/s]
Loading Spectra: 100%|██████████| 3/3 [00:00<00:00, 3.40it/s]
Loading Spectra: 100%|██████████| 3/3 [00:00<00:00, 3.40it/s]
Build Spectra: 1%| | 1/120 [00:11<23:17, 11.74s/it]
Build Spectra: 2%|▏ | 2/120 [00:12<09:48, 4.99s/it]
Build Spectra: 2%|▎ | 3/120 [00:12<05:29, 2.81s/it]
Build Spectra: 3%|▎ | 4/120 [00:12<03:28, 1.80s/it]
Build Spectra: 4%|▍ | 5/120 [00:12<02:22, 1.24s/it]
Build Spectra: 5%|▌ | 6/120 [00:12<01:41, 1.12it/s]
Build Spectra: 6%|▌ | 7/120 [00:13<01:16, 1.48it/s]
Build Spectra: 7%|▋ | 8/120 [00:13<00:59, 1.87it/s]
Build Spectra: 8%|▊ | 9/120 [00:13<00:48, 2.28it/s]
Build Spectra: 8%|▊ | 10/120 [00:13<00:41, 2.68it/s]
Build Spectra: 9%|▉ | 11/120 [00:14<00:35, 3.03it/s]
Build Spectra: 10%|█ | 12/120 [00:14<00:32, 3.35it/s]
Build Spectra: 11%|█ | 13/120 [00:14<00:29, 3.60it/s]
Build Spectra: 12%|█▏ | 14/120 [00:14<00:27, 3.79it/s]
Build Spectra: 12%|█▎ | 15/120 [00:15<00:26, 3.95it/s]
Build Spectra: 13%|█▎ | 16/120 [00:15<00:25, 4.07it/s]
Build Spectra: 14%|█▍ | 17/120 [00:15<00:25, 4.09it/s]
Build Spectra: 15%|█▌ | 18/120 [00:15<00:25, 3.97it/s]
Build Spectra: 16%|█▌ | 19/120 [00:15<00:25, 4.03it/s]
Build Spectra: 17%|█▋ | 20/120 [00:16<00:24, 4.10it/s]
Build Spectra: 18%|█▊ | 21/120 [00:16<00:25, 3.82it/s]
Build Spectra: 18%|█▊ | 22/120 [00:16<00:25, 3.86it/s]
Build Spectra: 19%|█▉ | 23/120 [00:17<00:24, 3.93it/s]
Build Spectra: 20%|██ | 24/120 [00:17<00:24, 3.96it/s]
Build Spectra: 21%|██ | 25/120 [00:17<00:23, 4.04it/s]
Build Spectra: 22%|██▏ | 26/120 [00:17<00:22, 4.12it/s]
Build Spectra: 22%|██▎ | 27/120 [00:17<00:22, 4.16it/s]
Build Spectra: 23%|██▎ | 28/120 [00:18<00:22, 4.17it/s]
Build Spectra: 24%|██▍ | 29/120 [00:18<00:21, 4.22it/s]
Build Spectra: 25%|██▌ | 30/120 [00:18<00:21, 4.22it/s]
Build Spectra: 26%|██▌ | 31/120 [00:18<00:21, 4.24it/s]
Build Spectra: 27%|██▋ | 32/120 [00:19<00:21, 4.15it/s]
Build Spectra: 28%|██▊ | 33/120 [00:19<00:21, 4.12it/s]
Build Spectra: 28%|██▊ | 34/120 [00:19<00:20, 4.16it/s]
Build Spectra: 29%|██▉ | 35/120 [00:19<00:20, 4.13it/s]
Build Spectra: 30%|███ | 36/120 [00:20<00:20, 4.01it/s]
Build Spectra: 31%|███ | 37/120 [00:20<00:20, 4.04it/s]
Build Spectra: 32%|███▏ | 38/120 [00:20<00:20, 4.05it/s]
Build Spectra: 32%|███▎ | 39/120 [00:20<00:19, 4.11it/s]
Build Spectra: 33%|███▎ | 40/120 [00:21<00:19, 4.16it/s]
Build Spectra: 34%|███▍ | 41/120 [00:21<00:19, 4.15it/s]
Build Spectra: 35%|███▌ | 42/120 [00:21<00:18, 4.13it/s]
Build Spectra: 36%|███▌ | 43/120 [00:21<00:18, 4.15it/s]
Build Spectra: 37%|███▋ | 44/120 [00:22<00:18, 4.13it/s]
Build Spectra: 38%|███▊ | 45/120 [00:22<00:22, 3.37it/s]
Build Spectra: 38%|███▊ | 46/120 [00:22<00:22, 3.36it/s]
Build Spectra: 39%|███▉ | 47/120 [00:23<00:20, 3.48it/s]
Build Spectra: 40%|████ | 48/120 [00:23<00:19, 3.68it/s]
Build Spectra: 41%|████ | 49/120 [00:23<00:18, 3.76it/s]
Build Spectra: 42%|████▏ | 50/120 [00:23<00:18, 3.87it/s]
Build Spectra: 42%|████▎ | 51/120 [00:24<00:18, 3.64it/s]
Build Spectra: 43%|████▎ | 52/120 [00:24<00:18, 3.72it/s]
Build Spectra: 44%|████▍ | 53/120 [00:24<00:17, 3.75it/s]
Build Spectra: 45%|████▌ | 54/120 [00:24<00:17, 3.86it/s]
Build Spectra: 46%|████▌ | 55/120 [00:25<00:16, 3.91it/s]
Build Spectra: 47%|████▋ | 56/120 [00:25<00:16, 3.80it/s]
Build Spectra: 48%|████▊ | 57/120 [00:25<00:16, 3.86it/s]
Build Spectra: 48%|████▊ | 58/120 [00:25<00:15, 3.97it/s]
Build Spectra: 49%|████▉ | 59/120 [00:26<00:16, 3.72it/s]
Build Spectra: 50%|█████ | 60/120 [00:26<00:16, 3.61it/s]
Build Spectra: 51%|█████ | 61/120 [00:26<00:16, 3.68it/s]
Build Spectra: 52%|█████▏ | 62/120 [00:26<00:15, 3.78it/s]
Build Spectra: 52%|█████▎ | 63/120 [00:27<00:14, 3.87it/s]
Build Spectra: 53%|█████▎ | 64/120 [00:27<00:13, 4.00it/s]
Build Spectra: 54%|█████▍ | 65/120 [00:27<00:13, 4.07it/s]
Build Spectra: 55%|█████▌ | 66/120 [00:27<00:13, 4.13it/s]
Build Spectra: 56%|█████▌ | 67/120 [00:28<00:12, 4.19it/s]
Build Spectra: 57%|█████▋ | 68/120 [00:28<00:12, 4.20it/s]
Build Spectra: 57%|█████▊ | 69/120 [00:28<00:12, 4.21it/s]
Build Spectra: 58%|█████▊ | 70/120 [00:28<00:11, 4.18it/s]
Build Spectra: 59%|█████▉ | 71/120 [00:29<00:11, 4.18it/s]
Build Spectra: 60%|██████ | 72/120 [00:29<00:11, 4.25it/s]
Build Spectra: 61%|██████ | 73/120 [00:29<00:11, 4.25it/s]
Build Spectra: 62%|██████▏ | 74/120 [00:29<00:11, 3.97it/s]
Build Spectra: 62%|██████▎ | 75/120 [00:30<00:11, 3.89it/s]
Build Spectra: 63%|██████▎ | 76/120 [00:30<00:11, 3.89it/s]
Build Spectra: 64%|██████▍ | 77/120 [00:30<00:10, 3.99it/s]
Build Spectra: 65%|██████▌ | 78/120 [00:30<00:10, 4.10it/s]
Build Spectra: 66%|██████▌ | 79/120 [00:31<00:09, 4.15it/s]
Build Spectra: 67%|██████▋ | 80/120 [00:31<00:09, 4.21it/s]
Build Spectra: 68%|██████▊ | 81/120 [00:31<00:09, 4.11it/s]
Build Spectra: 68%|██████▊ | 82/120 [00:31<00:09, 3.98it/s]
Build Spectra: 69%|██████▉ | 83/120 [00:32<00:09, 3.83it/s]
Build Spectra: 70%|███████ | 84/120 [00:32<00:09, 3.83it/s]
Build Spectra: 71%|███████ | 85/120 [00:32<00:09, 3.88it/s]
Build Spectra: 72%|███████▏ | 86/120 [00:32<00:08, 4.01it/s]
Build Spectra: 72%|███████▎ | 87/120 [00:33<00:08, 4.09it/s]
Build Spectra: 73%|███████▎ | 88/120 [00:33<00:07, 4.17it/s]
Build Spectra: 74%|███████▍ | 89/120 [00:33<00:07, 3.89it/s]
Build Spectra: 75%|███████▌ | 90/120 [00:33<00:08, 3.70it/s]
Build Spectra: 76%|███████▌ | 91/120 [00:34<00:08, 3.57it/s]
Build Spectra: 77%|███████▋ | 92/120 [00:34<00:07, 3.72it/s]
Build Spectra: 78%|███████▊ | 93/120 [00:34<00:07, 3.82it/s]
Build Spectra: 78%|███████▊ | 94/120 [00:34<00:06, 3.97it/s]
Build Spectra: 79%|███████▉ | 95/120 [00:35<00:06, 4.07it/s]
Build Spectra: 80%|████████ | 96/120 [00:35<00:05, 4.16it/s]
Build Spectra: 81%|████████ | 97/120 [00:35<00:05, 4.19it/s]
Build Spectra: 82%|████████▏ | 98/120 [00:35<00:05, 4.24it/s]
Build Spectra: 82%|████████▎ | 99/120 [00:36<00:04, 4.25it/s]
Build Spectra: 83%|████████▎ | 100/120 [00:36<00:04, 4.30it/s]
Build Spectra: 84%|████████▍ | 101/120 [00:36<00:04, 4.30it/s]
Build Spectra: 85%|████████▌ | 102/120 [00:36<00:04, 4.32it/s]
Build Spectra: 86%|████████▌ | 103/120 [00:37<00:03, 4.31it/s]
Build Spectra: 87%|████████▋ | 104/120 [00:37<00:03, 4.28it/s]
Build Spectra: 88%|████████▊ | 105/120 [00:37<00:03, 3.93it/s]
Build Spectra: 88%|████████▊ | 106/120 [00:37<00:03, 4.04it/s]
Build Spectra: 89%|████████▉ | 107/120 [00:38<00:03, 3.87it/s]
Build Spectra: 90%|█████████ | 108/120 [00:38<00:03, 3.88it/s]
Build Spectra: 91%|█████████ | 109/120 [00:38<00:02, 3.93it/s]
Build Spectra: 92%|█████████▏| 110/120 [00:38<00:02, 4.06it/s]
Build Spectra: 92%|█████████▎| 111/120 [00:39<00:02, 3.80it/s]
Build Spectra: 93%|█████████▎| 112/120 [00:39<00:02, 3.88it/s]
Build Spectra: 94%|█████████▍| 113/120 [00:39<00:01, 3.90it/s]
Build Spectra: 95%|█████████▌| 114/120 [00:39<00:01, 3.94it/s]
Build Spectra: 96%|█████████▌| 115/120 [00:40<00:01, 4.00it/s]
Build Spectra: 97%|█████████▋| 116/120 [00:40<00:00, 4.09it/s]
Build Spectra: 98%|█████████▊| 117/120 [00:40<00:00, 4.11it/s]
Build Spectra: 98%|█████████▊| 118/120 [00:40<00:00, 4.17it/s]
Build Spectra: 99%|█████████▉| 119/120 [00:41<00:00, 4.16it/s]
Build Spectra: 100%|██████████| 120/120 [00:41<00:00, 4.08it/s]
Build Spectra: 100%|██████████| 120/120 [00:41<00:00, 2.90it/s]
Write a figure making function#
So we can make a GIF later.
def make_fig(data:PhaseAnalyzer,geo:SystemGeometry,gcm:PyGCM,s:tuple):
"""
data is the simulation data
s is the phase index (start, stop)
"""
i = int(np.mean(s)) # int representation of s
p,q = s
fig = plt.figure(figsize=(10,5))
gs = fig.add_gridspec(1,2)
prof_ax = fig.add_subplot(gs[0,0])
pressure = np.mean(data.get_layer('Pressure')[p:q,:],axis=0)
temp = np.mean(data.get_layer('Temp')[p:q,:],axis=0)
prof_ax.plot(temp,pressure)
prof_ax.set_yscale('log')
prof_ax.set_xlabel('Temperature (K)')
prof_ax.set_ylabel('Pressure (bar)')
prof_ax.set_ylim(np.flip(prof_ax.get_ylim()))
prof_ax.set_xlim(-5,290)
phase = data.phase[i]
inax = prof_ax.inset_axes([0.5,0.5,0.4,0.4])
inax.set_aspect(1)
geo.get_system_visual(phase,ax=inax)
pl_spec = data.spectrum('thermal',s,noise=False)
star_spec = data.spectrum('star',s,noise=False)
noi_spec = data.spectrum('noise',s,noise=False)
wl = data.wavelength.to_value(u.um)
cont = ((pl_spec)/star_spec).to_value(u.dimensionless_unscaled)
contp = ((pl_spec+noi_spec)/star_spec).to_value(u.dimensionless_unscaled)
contm = ((pl_spec-noi_spec)/star_spec).to_value(u.dimensionless_unscaled)
spec_ax = fig.add_subplot(gs[0,1],projection=ccrs.PlateCarree())
spec_ax.plot(wl,cont*1e6,c='k')
spec_ax.fill_between(wl,contp*1e6,contm*1e6,color='k',alpha=0.2)
spec_ax.set_xlabel('Wavelength (um)')
spec_ax.set_ylabel('Thermal emission (ppm)')
spec_ax.set_aspect('auto')
spec_ax.tick_params(axis='both',which='major',direction='out')
spec_ax.set_xticks(np.arange(1,19,2))
spec_ax.set_yticks(np.arange(-1,10,2)*10)
lat = geo.get_pl_sub_obs_lat(phase)
time = data.time[i]
lon = geo.get_pl_sub_obs_lon(time,phase)
proj = ccrs.Orthographic(
central_latitude=lat.to_value(u.deg),
central_longitude=lon.to_value(u.deg)
)
mapax = spec_ax.inset_axes([0.05,0.5,0.4,0.4],projection=proj)
cbarax = spec_ax.inset_axes([0.5,0.5,0.1,0.4],projection=ccrs.PlateCarree())
cbarax.set_axis_off()
tsurf = gcm.tsurf.dat.to_value(u.K)
lats = gcm.lats
lons = gcm.lons
im = mapax.pcolormesh(lons,lats,tsurf.T,cmap='gist_heat',transform=ccrs.PlateCarree())
fig.colorbar(im,ax=cbarax,label='$T_{\\rm surf}$ (K)')
return fig
Get the data#
data = PhaseAnalyzer(model.directories['all_model'])
geometry = model.get_observation_parameters()
gcm = model.params.gcm.get_gcm()
# gcm = GCMdecoder.from_psg(model.params.gcm.content())
/home/ted/github/VSPEC/VSPEC/gcm/heat_transfer.py:538: RuntimeWarning: Energy balance off by -6.5 %. eps = 3.0, T0 = 0.5
warnings.warn(msg, RuntimeWarning)
Display one frame#
Make a GIF#
def gif_image(i):
s = (max(0,i-10),min(data.N_images-1,i+10))
return make_fig(data,geometry,gcm,s)
images = []
fname='temp.png'
for i in range(data.N_images):
fig = gif_image(i)
fig.savefig(fname)
plt.close(fig)
images.append(imread(fname))
os.remove(fname)
filename = 'phase_curve.gif'
_=mimsave(filename, images,fps=20)
Total running time of the script: (1 minutes 39.272 seconds)