---
title: "Compare R and C implementations"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{Compare R and C implementations}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.width = 8, fig.height = 4
)
## modern_r <- getRversion() >= "4.1.0"
pth <- withr::local_tempdir(pattern = "snvecR")
withr::local_options(list(snvecR.cachedir = pth))
```
```{r setup}
library(tibble) # nice dataframes
library(ggplot2) # nice plots
library(snvecR) # this package
```
# Introduction
The function `snvec()` uses some of the parameters of a full astronomical
solution (AS) such as ZB18a from Zeebe and Lourens (2019) in combination with
values for tidal dissipation (Td) and dynamical ellipticity
(Ed) to calculate precession and obliquity (or tilt).
In this vignette we show how we can run `snvec()` and contrast the result to pre-computed solutions, which were calculated using the [c-routine](https://github.com/rezeebe/snvec).
# Apply `snvec`
For the full 100 Myr available:
```{r snvec}
dat <- snvec(-1e5, 1, 1, astronomical_solution = "full-ZB18a")
```
# Load PT-solution
```{r pt}
pt <- get_solution("PT-ZB18a(1,1)")
```
# Inspect results
We find that despite the different ODE solvers and timesteps, the C- and
R-implementations are almost identical up to -60 Myr.
```{r prec}
pl <- ggplot(dat, aes(x = time / 1000, y = cp)) +
labs(x = "Time (Myr)",
y = "Climatic precession") +
geom_line(aes(colour = "snvecR ZB18a(1,1)")) +
geom_line(aes(colour = "snvec ZB18a(1,1)"),
data = pt) +
# add eccentricity
geom_line(aes(y = ee, colour = "ZB18a eccentricity"),
linetype = "solid",
data = get_solution("full-ZB18a")) +
labs(colour = "")
pl + xlim(-60, -59)
```
```{r obl}
plo <- ggplot(dat, aes(x = time / 1000, y = epl)) +
labs(x = "Time (Myr)",
y = "Obliquity (rad)") +
geom_line(aes(colour = "snvecR ZB18a(1,1)")) +
geom_line(aes(colour = "snvec ZB18a(1,1)"), data = pt) +
labs(colour = "")
plo + xlim(-60, -59)
```
But note the subtle differences at around -100 Myr. This is not significant,
however, because this difference occurs far beyond the horizon of
predictability in the orbital solutions (the eccentricity curves).
```{r prec2}
pl + xlim(-100, -99)
```
```{r obl2}
plo + xlim(-100, -99)
```
# References
Zeebe, R. E., & Lourens, L. J. (2019). Solar System chaos and the
Paleocene–Eocene boundary age constrained by geology and astronomy.
_Science_, 365(6456), 926–929.
[doi:10.1126/science.aax0612](https://doi.org/10.1126/science.aax0612).
Zeebe, R. E., & Lourens, L. J. (2022). A deep-time dating tool for
paleo-applications utilizing obliquity and precession cycles: The role of
dynamical ellipticity and tidal dissipation. _Paleoceanography and
Paleoclimatology_, e2021PA004349.
[doi:10.1029/2021PA004349](https://doi.org/10.1029/2021PA004349).