IGRF values can be calculated for a single point using the below call. This will generate a data frame with model values. The routine is relatively fast so looping over a time vector will generate time series fairly quickly. To calculate grids a simple function is provided (see below).
# load the library
library(igrf)
<- igrf(
df field = "main",
year = 2000,
altitude = 2,
latitude = 0,
longitude = 0
)
print(df)
#> X Y Z F D H I
#> 1 27437.31 -3501.466 -14803.5 31372.12 -7.272602 27659.83 -28.15562
You may generate global maps of the IGRF using the igrf_grid()
function, setting similar parameters as above while specifying a resolution as decimal degrees of the global grid. Keep in mind that values under 1 (fractions) will take an increasing amount of time and space to store the data.
<- igrf::igrf_grid(
grid field = "main",
year = 2000,
altitude = 2,
resolution = 5
)
print(head(grid))
#> lon lat X Y Z F D H I
#> 1 -180 -90 -14558.63 7793.387 -53321.91 55820.39 151.8394 16513.34 -72.79269
#> 2 -175 -90 -13823.99 9032.599 -53321.91 55820.39 146.8394 16513.34 -72.79269
#> 3 -170 -90 -12984.14 10203.067 -53321.91 55820.39 141.8394 16513.34 -72.79269
#> 4 -165 -90 -12045.48 11295.884 -53321.91 55820.39 136.8394 16513.34 -72.79269
#> 5 -160 -90 -11015.14 12302.732 -53321.91 55820.39 131.8394 16513.34 -72.79269
#> 6 -155 -90 -9900.97 13215.949 -53321.91 55820.39 126.8394 16513.34 -72.79269
library(ggplot2)
library(metR)
library(rnaturalearth)
<- ne_coastline(returnclass = "sf")
coast
ggplot(grid) +
geom_contour_fill(
aes(
lon,
lat,z = D
),breaks = MakeBreaks(10)
+
) geom_sf(
data = coast) +
scale_fill_divergent(
name = "declination"
+
) labs(
x = "",
y = "",
title = "IGRF magnetic declination"
+
) theme_bw() +
theme(
plot.background = element_rect(fill = "#ffffff", color = NA),
panel.background = element_rect(fill = "#ffffff", color = NA)
)