-
Notifications
You must be signed in to change notification settings - Fork 4
/
README.Rmd
151 lines (105 loc) · 5.29 KB
/
README.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
---
output: github_document
---
```{r echo=FALSE, results="hide", message=FALSE}
library("badger")
```
```{r, echo = FALSE, results='asis', message = FALSE}
cat('# earthtide',
'[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.2673048.svg)](https://doi.org/10.5281/zenodo.2673048)',
'[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)',
'[![R-CMD-check](https://github.com/jkennel/earthtide/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/jkennel/earthtide/actions/workflows/R-CMD-check.yaml)',
'[![Codecov test coverage](https://codecov.io/gh/jkennel/earthtide/branch/main/graph/badge.svg)](https://app.codecov.io/gh/jkennel/earthtide?branch=main)',
badge_cran_release("earthtide", "green"),
badge_cran_download("earthtide", "grand-total", "green")
)
```
The **earthtide** package simplifies the generation of earth tides and wave group harmonics for analysis in **R**.
## Background ##
**earthtide** is a port of the 'Fortran ETERNA 3.4' (Wenzel, 1996) predict and part of the analyze codes with the Kudryavtsev 2004 update. The original 'Fortran' code was rewritten in **R**, and **C++** using the great **Rcpp**, **RcppArmadillo**, and **RcppParallel**. The package is useful for generating synthetic earth tides using highly accurate tidal catalogs for prediction and regression. Attempts were made to ensure that results were consistent with the 'ETERNA 3.4', however, there is always the possibility that a bug was introduced in during the conversion and update.
Hartmann, T., Wenzel, H.-G., 1995. The HW95 tidal potential catalogue. Geophys. Res. Lett. 22, 3553–3556. \url(https://doi.org/10.1029/95GL03324)
Kudryavtsev, S.M., 2004. Improved harmonic development of the Earth tide-generating potential. J. Geod. 77, 829–838. \url(https://doi.org/10.1007/s00190-003-0361-2)
Wenzel, H.G. 1996: The nanogal software: Earth tide data processing package ETERNA 3.30. Bull. Inf. Marges Terrestres. 124, 9425-9439. \url(https://www.eas.slu.edu/GGP/ETERNA34/MANUAL/ETERNA33.HTM)
## Installation ##
You can install the [CRAN](https://CRAN.R-project.org/package=earthtide) version with the following command:
```{r fromcran, echo = TRUE, eval = FALSE}
install.packages('earthtide')
```
The development version can be installed from github using the following commands:
```{r setup, echo = TRUE, eval = FALSE}
library(remotes)
remotes::install_github('jkennel/earthtide')
```
I will try to keep the IERS orientation datasets up-to-date in the development version (weekly update).
## Predict ##
The following code computes the synthetic gravity, LOD tide, and pole tide and returns a `data.frame` of results. To see the list of possible arguments and methods of the Earthtide class use `?Earthtide`.
```{r example}
library(earthtide)
# One month of hourly data
tide <- Earthtide$
new(utc = as.POSIXct("2015-01-01", tz = "UTC") + 0:(24*31) * 3600,
latitude = 52.3868,
longitude = 9.7144,
wave_groups = data.frame(start = 0.0, end = 6.0))$
predict(method = "gravity", astro_update = 1)$ # compute gravity
lod_tide()$ # LOD tide column
pole_tide()$ # pole tide column
tide() # return result
```
```{r plot, echo = FALSE}
layout(matrix(1:3, ncol=1, nrow = 3))
par(mai = c(0.3, 0.9, 0.1, 0.1))
plot(gravity~datetime, tide,
ylab = expression('Gravity nm/s' ^ 2),
type = 'l',
lwd = 1.5,
col = '#5696BC',
las = 1)
plot(lod_tide~datetime, tide,
ylab = expression('LOD nm/s' ^ 2),
type = 'l',
lwd = 1.5,
col = '#5696BC',
las = 1)
plot(pole_tide~datetime, tide,
ylab = expression('Pole nm/s' ^ 2),
type = 'l',
lwd = 1.5,
col = '#5696BC',
las = 1)
```
## Analyze ##
To generate curves for regression applications we can use the analyze method. For each wave group, normalized sin and cosine curves are generated.
```{r analyze, echo = TRUE}
wave_groups <- na.omit(eterna_wavegroups[eterna_wavegroups$time == '1 month',
c('start', 'end')])
tide_groups <- Earthtide$
new(utc = as.POSIXct("2015-01-01", tz = "UTC") + 0:(24*31) * 3600,
latitude = 52.3868,
longitude = 9.7144,
wave_groups = wave_groups)$
analyze(method = 'gravity', astro_update = 1)$
tide()
print(str(tide_groups))
```
## Non-R6 function ##
There are two main methods for using the **earthtide** package. The codes were developed using R6 classes, but wrappers have been written if a more typical interface is desired. Both should give the same results, but R6 stores more information about the calculations.
For example (the standard method):
```{r standardmethod, echo = TRUE}
tms <- as.POSIXct("2015-01-01", tz = "UTC") + 0:(24*31) * 3600
grav_std <- calc_earthtide(utc = tms,
do_predict = TRUE,
method = 'gravity',
latitude = 52.3868,
longitude = 9.7144)
```
and the R6 method:
```{r r6method, echo = TRUE}
grav_r6 <- Earthtide$
new(utc = tms,
latitude = 52.3868,
longitude = 9.7144)$
predict(method = 'gravity')$
tide()
all.equal(grav_std, grav_r6)
```