Last updated: 2021-01-25

Checks: 7 0

Knit directory: emlr_mod_v_XXX/

This reproducible R Markdown analysis was created with workflowr (version 1.6.2). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.


Great! Since the R Markdown file has been committed to the Git repository, you know the exact version of the code that produced these results.

Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.

The command set.seed(20200707) was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.

Great job! Recording the operating system, R version, and package versions is critical for reproducibility.

Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.

Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.

Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.

The results in this page were generated with repository version 17a7d1a. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.

Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish or wflow_git_commit). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:


Ignored files:
    Ignored:    .Rproj.user/

Unstaged changes:
    Modified:   data/auxillary/params_local.rds

Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.


These are the previous versions of the repository in which changes were made to the R Markdown (analysis/mapping_cant.Rmd) and HTML (docs/mapping_cant.html) files. If you’ve configured a remote Git repository (see ?wflow_git_remote), click on the hyperlinks in the table below to view the files as they were in that past version.

File Version Author Date Message
Rmd 17a7d1a Donghe-Zhu 2021-01-25 MLR = SO
html c1cec47 Donghe-Zhu 2021-01-25 Build site.
html 05ffb0c Donghe-Zhu 2021-01-25 Build site.
html 8b97165 Donghe-Zhu 2021-01-25 Build site.
html c569946 Donghe-Zhu 2021-01-24 Build site.
html a2f0d56 Donghe-Zhu 2021-01-23 Build site.
html 28509fc Donghe-Zhu 2021-01-23 Build site.
html 4c28e4a Donghe-Zhu 2021-01-22 Build site.
html 24cc264 jens-daniel-mueller 2021-01-22 cleaned /docs before creating copies
html 88eb28f Donghe-Zhu 2021-01-21 Build site.
Rmd 72f8e94 Donghe-Zhu 2021-01-21 DIC plots
html 2679490 Donghe-Zhu 2021-01-21 Build site.
Rmd 962521f Donghe-Zhu 2021-01-21 Test with nitrate replace oxygen as predictor, atmospheric equilibrium and plot set to n
html 7891955 Donghe-Zhu 2021-01-21 Build site.
Rmd 13c3031 Donghe-Zhu 2021-01-21 Test with nitrate replace oxygen as predictor, atmospheric equilibrium and plot set to n
html d4cf1cb Donghe-Zhu 2021-01-21 Build site.
Rmd 167eeec Donghe-Zhu 2021-01-21 surface DIC calculation with atmospheric equilibrium option
html 1f3e5b6 jens-daniel-mueller 2021-01-20 Build site.
Rmd 0e7bdf1 jens-daniel-mueller 2021-01-15 cleaning template repository
html 0e7bdf1 jens-daniel-mueller 2021-01-15 cleaning template repository
html 73cbef3 jens-daniel-mueller 2021-01-15 Build site.
html 4571843 jens-daniel-mueller 2021-01-14 revision and html deleted for template copying
html 23151cd jens-daniel-mueller 2021-01-14 Build site.
html b3564aa jens-daniel-mueller 2021-01-14 Build site.
html 8d032c3 jens-daniel-mueller 2021-01-14 Build site.
html 022871c Donghe-Zhu 2021-01-13 Build site.
Rmd d44f36f Donghe-Zhu 2021-01-13 reorder analysis final
html 17dee1d jens-daniel-mueller 2021-01-13 Build site.
html a076226 Donghe-Zhu 2021-01-11 Build site.
html 7cdea0c jens-daniel-mueller 2021-01-06 Build site.
Rmd b5934dd jens-daniel-mueller 2021-01-06 local rebuild after revision
html fa85b93 jens-daniel-mueller 2021-01-06 Build site.
html e5cb81a Donghe-Zhu 2021-01-05 Build site.
html a499f10 Donghe-Zhu 2021-01-05 Build site.
Rmd 715bdb4 Donghe-Zhu 2021-01-02 model modification
html fb8a752 Donghe-Zhu 2020-12-23 Build site.
Rmd 82e3c9c Donghe-Zhu 2020-12-23 first build after creating model template
html 8fae0b2 Donghe-Zhu 2020-12-21 Build site.
Rmd 00a1322 Donghe-Zhu 2020-12-21 first build after creating model template
html c8b76b3 jens-daniel-mueller 2020-12-19 Build site.
Rmd b5fedce jens-daniel-mueller 2020-12-19 first build after creating model template
Rmd 8e8abf5 Jens Müller 2020-12-18 Initial commit

1 Required data

1.1 Predictor fields

Currently, we use following cmorized climatology predictor fields in 2007:

predictors <-
  read_csv(paste(path_version_data,
                 "predictors_M2007.csv",
                 sep = ""))

predictors_surface <-
  read_csv(paste(path_version_data,
                 "predictors_surface_M2007.csv",
                 sep = ""))

1.2 Atm. pCO2

Required only to estimate the change of Cant in surface water and assuming that the ocean pCO2 trend follows the atmospheric forcing.

co2_atm_tref <-
  read_csv(paste(path_version_data,
                 "co2_atm_tref.csv",
                 sep = ""))

1.3 MLR models

lm_best_cant <-
  read_csv(paste(path_version_data,
                 "lm_best_cant.csv",
                 sep = ""))

2 Join MLRs + climatologies

# remove predictor variable from model
lm_best_cant <- lm_best_cant %>% 
  mutate(model = str_remove(model, paste(params_local$MLR_target, "~ ")))

# join predictors and MLR
cant <- full_join(predictors, lm_best_cant)

if (params_local$MLR_basins == "SO") {
  cant <- cant %>%
    drop_na()
}

rm(predictors, lm_best_cant)

3 Map Cant

3.1 Deep water

3.1.1 Apply MLRs to predictor

cant <- b_cant(cant)

3.1.2 Sections by model

Zonal section plots are produced for every 20° longitude, each era and for all models individually. Plots can be accessed here:

  • /nfs/kryo/work/jenmueller/emlr_cant/model/v_XXX/figures/Cant_model_sections/
if (params_local$plot_all_figures == "y") {
  for (i_eras in unique(cant$eras)) {
    # i_eras <- unique(cant$eras)[2]
    cant_eras <- cant %>%
      filter(eras == i_eras)
    
    for (i_lon in params_global$longitude_sections_regular) {
      # i_lon <- params_global$longitude_sections_regular[7]
      cant_eras_lon <- cant_eras %>%
        filter(lon == i_lon)
      
      limits = max(abs(cant_eras_lon$cant)) * c(-1, 1)
      
      cant_eras_lon %>%
        ggplot(aes(lat, depth, z = cant)) +
        stat_summary_2d(
          fun = "mean",
          na.rm = TRUE,
          bins = 20,
          col = "grey"
        ) +
        scale_fill_scico(name = "Cant",
                         palette = "vik",
                         limit = limits) +
        scale_y_reverse(limits = c(params_global$plotting_depth, NA)) +
        scale_x_continuous(limits = c(-85, 85)) +
        labs(title = paste(
          "eras:",
          i_eras,
          "| lon:",
          i_lon,
          "|",
          params_local$Version_ID
        )) +
        facet_wrap(~ model, ncol = 5)
      
      ggsave(
        paste(
          path_version_figures,
          "Cant_model_sections/",
          paste("Cant_model",
                i_eras,
                "lon",
                i_lon,
                "section.png",
                sep = "_"),
          sep = ""
        ),
        width = 17,
        height = 9
      )
      
    }
  }
}

3.2 Surface water

As outlined in Gruber et al. (2019), a transient equilibrium approach was applied to estimate Cant in surface waters, assuming that the CO2 system in these waters has followed the increase in atmospheric CO2 closely. Using eq 10.2.16 from OBD, the change in anthropogenic CO2 in the upper ocean was computed as:

\(\Delta\)tCant,eq(t2 − t1) = 1∕\(\gamma\) ⋅ DIC/pCO2 ⋅ (pCO2,atm (t2)− pCO2,atm(t1))

, where DIC and pCO2 are the in situ values, where \(\gamma\) is the buffer (Revelle) factor and where we evaluated the right-hand side using seacarb employing the Luecker constants using the climatological values for temperature, salinity, DIC and Alk.

The second option for the surface Cant calculation is based on atmospheric equilibrium assumption. That is calculate dCant from reference year DIC, which are obtained using seacarb with TAlk climatology and reference year pCO2.

3.2.1 pCO2 climatology

Plots below show the calculated climatological pCO2 values.

if (params_local$surface_DIC_calculation == "revelle factor") {
  # calculate pCO2 from talk and tco2 climatology
  predictors_surface <- predictors_surface %>%
    mutate(
      pCO2 = carb(
        flag = 15,
        var1 = TAlk * 1e-6,
        var2 = TCO2 * 1e-6,
        S = sal,
        T = temp,
        P = depth / 10,
        Pt = phosphate * 1e-6,
        Sit = silicate * 1e-6,
        k1k2 = "l"
      )$pCO2
    )
}
if (params_local$surface_DIC_calculation == "revelle factor") {
  p_map_climatology(df = predictors_surface,
                    var = "pCO2")
}

Version Author Date
4c28e4a Donghe-Zhu 2021-01-22
d4cf1cb Donghe-Zhu 2021-01-21
1f3e5b6 jens-daniel-mueller 2021-01-20
0e7bdf1 jens-daniel-mueller 2021-01-15
4571843 jens-daniel-mueller 2021-01-14
b3564aa jens-daniel-mueller 2021-01-14
8d032c3 jens-daniel-mueller 2021-01-14
a499f10 Donghe-Zhu 2021-01-05
8fae0b2 Donghe-Zhu 2020-12-21
c8b76b3 jens-daniel-mueller 2020-12-19
if (params_local$surface_DIC_calculation == "revelle factor") {
  p_section_climatology_regular(df = predictors_surface,
                                var = "pCO2",
                                surface = "y")
}

Version Author Date
4c28e4a Donghe-Zhu 2021-01-22
d4cf1cb Donghe-Zhu 2021-01-21
1f3e5b6 jens-daniel-mueller 2021-01-20
0e7bdf1 jens-daniel-mueller 2021-01-15
4571843 jens-daniel-mueller 2021-01-14
b3564aa jens-daniel-mueller 2021-01-14
8d032c3 jens-daniel-mueller 2021-01-14
a499f10 Donghe-Zhu 2021-01-05
8fae0b2 Donghe-Zhu 2020-12-21
c8b76b3 jens-daniel-mueller 2020-12-19

3.2.2 Revelle factor

Plots below show the calculated climatological Revelle factor values.

if (params_local$surface_DIC_calculation == "revelle factor") {
  predictors_surface <- predictors_surface %>%
    mutate(
      rev_fac = buffer(
        flag = 15,
        var1 = TAlk * 1e-6,
        var2 = TCO2 * 1e-6,
        S = sal,
        T = temp,
        P = depth / 10,
        Pt = phosphate * 1e-6,
        Sit = silicate * 1e-6,
        k1k2 = "l"
      )$BetaD
    )
}
if (params_local$surface_DIC_calculation == "revelle factor") {
  p_map_climatology(df = predictors_surface,
                    var = "rev_fac")
}

Version Author Date
4c28e4a Donghe-Zhu 2021-01-22
d4cf1cb Donghe-Zhu 2021-01-21
1f3e5b6 jens-daniel-mueller 2021-01-20
0e7bdf1 jens-daniel-mueller 2021-01-15
4571843 jens-daniel-mueller 2021-01-14
b3564aa jens-daniel-mueller 2021-01-14
8d032c3 jens-daniel-mueller 2021-01-14
a499f10 Donghe-Zhu 2021-01-05
8fae0b2 Donghe-Zhu 2020-12-21
c8b76b3 jens-daniel-mueller 2020-12-19
if (params_local$surface_DIC_calculation == "revelle factor") {
  p_section_climatology_regular(df = predictors_surface,
                                var = "rev_fac",
                                surface = "y")
}

Version Author Date
4c28e4a Donghe-Zhu 2021-01-22
d4cf1cb Donghe-Zhu 2021-01-21
1f3e5b6 jens-daniel-mueller 2021-01-20
0e7bdf1 jens-daniel-mueller 2021-01-15
4571843 jens-daniel-mueller 2021-01-14
b3564aa jens-daniel-mueller 2021-01-14
8d032c3 jens-daniel-mueller 2021-01-14
a499f10 Donghe-Zhu 2021-01-05
8fae0b2 Donghe-Zhu 2020-12-21
c8b76b3 jens-daniel-mueller 2020-12-19

3.2.3 Cant calculation

# surface cant calculation with revelle factor option
if (params_local$surface_DIC_calculation == "revelle factor") {
  # calculate increase in atm pCO2 between eras
  co2_atm_tref <- co2_atm_tref %>%
    arrange(pCO2_tref) %>%
    mutate(d_pCO2_tref = pCO2_tref - lag(pCO2_tref),
           eras = paste(lag(era), era, sep = " --> ")) %>%
    drop_na() %>%
    select(eras, d_pCO2_tref)
  
  cant_surface <- full_join(predictors_surface, co2_atm_tref,
                            by = character())
  
  # calculate cant
  cant_surface <- cant_surface %>%
    mutate(cant = (1 / rev_fac) * (TCO2 / pCO2) * d_pCO2_tref)
}

# surface cant calculation with atmospheric equilibrium option
if (params_local$surface_DIC_calculation == "atmospheric equilibrium") {
  predictors_surface <-
    full_join(predictors_surface,
              co2_atm_tref %>% select(pCO2_tref),
              by = character())
  
  # calculate DIC from TAlk climatology and pCO2 in reference years
  predictors_surface <- predictors_surface %>%
    mutate(
      DIC = carb(
        flag = 24,
        var1 = pCO2_tref,
        var2 = TAlk * 1e-6,
        S = sal,
        T = temp,
        P = depth / 10,
        Pt = phosphate * 1e-6,
        Sit = silicate * 1e-6,
        k1k2 = "l"
      )$DIC * 1e6
    )
  
  # 
  p_map_climatology(df = predictors_surface,
                    var = "DIC")
  
  #
  p_section_climatology_regular(df = predictors_surface,
                                var = "DIC",
                                surface = "y")
  
  predictors_surface <- predictors_surface %>%
    group_by(lon,
             lat,
             depth,
             basin_AIP,
             basin,
             gamma,
             sal,
             temp,
             TCO2,
             TAlk,
             phosphate,
             silicate) %>%
    # hard coded for 3 eras, need to change later
    mutate(DIC_era1 = DIC[2] - DIC[1], DIC_era2 = DIC[3] - DIC[2]) %>%
    ungroup() %>%
    select(-pCO2_tref,-DIC) %>%
    unique()
  
  predictors_surface_era1 <- predictors_surface %>%
    select(-DIC_era2) %>%
    rename(cant = DIC_era1) %>%
    mutate(eras = paste(co2_atm_tref$era[1], co2_atm_tref$era[2], sep = " --> "))
  
  predictors_surface_era2 <- predictors_surface %>%
    select(-DIC_era1) %>%
    rename(cant = DIC_era2) %>%
    mutate(eras = paste(co2_atm_tref$era[2], co2_atm_tref$era[3], sep = " --> "))
  
  cant_surface <-
    full_join(predictors_surface_era1, predictors_surface_era2)
}

# calculate positive cant
cant_surface <- cant_surface %>%
  mutate(cant_pos = if_else(cant < 0, 0, cant))

3.2.4 Control plots

# i_eras <- unique(cant_average$eras)[2]

for (i_eras in unique(cant_surface$eras)) {
  print(
    p_map_climatology(df = cant_surface %>% filter(eras == i_eras),
                      var = "cant")  +
      labs(subtitle = paste("era:", i_eras))
  )
  
}

Version Author Date
4c28e4a Donghe-Zhu 2021-01-22
24cc264 jens-daniel-mueller 2021-01-22
88eb28f Donghe-Zhu 2021-01-21
2679490 Donghe-Zhu 2021-01-21
7891955 Donghe-Zhu 2021-01-21
d4cf1cb Donghe-Zhu 2021-01-21
1f3e5b6 jens-daniel-mueller 2021-01-20
0e7bdf1 jens-daniel-mueller 2021-01-15
4571843 jens-daniel-mueller 2021-01-14
b3564aa jens-daniel-mueller 2021-01-14
8d032c3 jens-daniel-mueller 2021-01-14
e5cb81a Donghe-Zhu 2021-01-05
a499f10 Donghe-Zhu 2021-01-05
fb8a752 Donghe-Zhu 2020-12-23
8fae0b2 Donghe-Zhu 2020-12-21
c8b76b3 jens-daniel-mueller 2020-12-19

Version Author Date
4c28e4a Donghe-Zhu 2021-01-22
24cc264 jens-daniel-mueller 2021-01-22
88eb28f Donghe-Zhu 2021-01-21
2679490 Donghe-Zhu 2021-01-21
7891955 Donghe-Zhu 2021-01-21
d4cf1cb Donghe-Zhu 2021-01-21
1f3e5b6 jens-daniel-mueller 2021-01-20
0e7bdf1 jens-daniel-mueller 2021-01-15
4571843 jens-daniel-mueller 2021-01-14
b3564aa jens-daniel-mueller 2021-01-14
8d032c3 jens-daniel-mueller 2021-01-14
e5cb81a Donghe-Zhu 2021-01-05
a499f10 Donghe-Zhu 2021-01-05
fb8a752 Donghe-Zhu 2020-12-23
8fae0b2 Donghe-Zhu 2020-12-21
c8b76b3 jens-daniel-mueller 2020-12-19
# i_eras <- unique(cant_surface$eras)[2]

for (i_eras in unique(cant_surface$eras)) {
  print(
    p_section_climatology_regular(df = cant_surface %>% filter(eras == i_eras),
                                  var = "cant",
                                  surface = "y") +
      labs(subtitle = paste("era:", i_eras))
  )
  
}

Version Author Date
4c28e4a Donghe-Zhu 2021-01-22
24cc264 jens-daniel-mueller 2021-01-22
88eb28f Donghe-Zhu 2021-01-21
2679490 Donghe-Zhu 2021-01-21
7891955 Donghe-Zhu 2021-01-21
d4cf1cb Donghe-Zhu 2021-01-21
1f3e5b6 jens-daniel-mueller 2021-01-20
0e7bdf1 jens-daniel-mueller 2021-01-15
4571843 jens-daniel-mueller 2021-01-14
b3564aa jens-daniel-mueller 2021-01-14
8d032c3 jens-daniel-mueller 2021-01-14
e5cb81a Donghe-Zhu 2021-01-05
a499f10 Donghe-Zhu 2021-01-05
fb8a752 Donghe-Zhu 2020-12-23
8fae0b2 Donghe-Zhu 2020-12-21
c8b76b3 jens-daniel-mueller 2020-12-19

Version Author Date
4c28e4a Donghe-Zhu 2021-01-22
24cc264 jens-daniel-mueller 2021-01-22
88eb28f Donghe-Zhu 2021-01-21
2679490 Donghe-Zhu 2021-01-21
7891955 Donghe-Zhu 2021-01-21
d4cf1cb Donghe-Zhu 2021-01-21
1f3e5b6 jens-daniel-mueller 2021-01-20
0e7bdf1 jens-daniel-mueller 2021-01-15
4571843 jens-daniel-mueller 2021-01-14
b3564aa jens-daniel-mueller 2021-01-14
8d032c3 jens-daniel-mueller 2021-01-14
e5cb81a Donghe-Zhu 2021-01-05
a499f10 Donghe-Zhu 2021-01-05
fb8a752 Donghe-Zhu 2020-12-23
8fae0b2 Donghe-Zhu 2020-12-21
c8b76b3 jens-daniel-mueller 2020-12-19

3.3 Average model Cant

Mean and sd are calculated across 10 models for Cant in each grid cell (XYZ), basin and era combination. Calculations are performed for all cant values vs positive values only.

3.3.1 Deep water averaging

cant_average <- m_cant_model_average(cant)
cant_average <- m_cut_gamma(cant_average, "gamma")

# split data set for individual predictor contributions and total cant
cant_predictor_average <- cant_average %>% 
  select(-c("cant", "cant_pos", ends_with("_sd")))

cant_average <- cant_average %>% 
  select(lon, lat, depth, eras, basin, basin_AIP,
            cant, cant_pos, cant_sd, cant_pos_sd,
            gamma, gamma_sd, gamma_slab)
# i_eras <- unique(cant_average$eras)[2]

for (i_eras in unique(cant_surface$eras)) {
  print(
    p_map_climatology(
      df = cant_average %>% filter(eras == i_eras),
      var = "cant_pos",
      subtitle_text = paste("era:", i_eras)
    )
  )
  
}

Version Author Date
c1cec47 Donghe-Zhu 2021-01-25
05ffb0c Donghe-Zhu 2021-01-25
8b97165 Donghe-Zhu 2021-01-25
c569946 Donghe-Zhu 2021-01-24
a2f0d56 Donghe-Zhu 2021-01-23
28509fc Donghe-Zhu 2021-01-23
4c28e4a Donghe-Zhu 2021-01-22
24cc264 jens-daniel-mueller 2021-01-22
88eb28f Donghe-Zhu 2021-01-21
7891955 Donghe-Zhu 2021-01-21
d4cf1cb Donghe-Zhu 2021-01-21
1f3e5b6 jens-daniel-mueller 2021-01-20
0e7bdf1 jens-daniel-mueller 2021-01-15
4571843 jens-daniel-mueller 2021-01-14
b3564aa jens-daniel-mueller 2021-01-14
8d032c3 jens-daniel-mueller 2021-01-14
17dee1d jens-daniel-mueller 2021-01-13
7cdea0c jens-daniel-mueller 2021-01-06
fa85b93 jens-daniel-mueller 2021-01-06
e5cb81a Donghe-Zhu 2021-01-05
a499f10 Donghe-Zhu 2021-01-05
fb8a752 Donghe-Zhu 2020-12-23
8fae0b2 Donghe-Zhu 2020-12-21
c8b76b3 jens-daniel-mueller 2020-12-19

Version Author Date
c1cec47 Donghe-Zhu 2021-01-25
05ffb0c Donghe-Zhu 2021-01-25
8b97165 Donghe-Zhu 2021-01-25
c569946 Donghe-Zhu 2021-01-24
a2f0d56 Donghe-Zhu 2021-01-23
28509fc Donghe-Zhu 2021-01-23
4c28e4a Donghe-Zhu 2021-01-22
24cc264 jens-daniel-mueller 2021-01-22
88eb28f Donghe-Zhu 2021-01-21
7891955 Donghe-Zhu 2021-01-21
d4cf1cb Donghe-Zhu 2021-01-21
1f3e5b6 jens-daniel-mueller 2021-01-20
0e7bdf1 jens-daniel-mueller 2021-01-15
4571843 jens-daniel-mueller 2021-01-14
b3564aa jens-daniel-mueller 2021-01-14
8d032c3 jens-daniel-mueller 2021-01-14
17dee1d jens-daniel-mueller 2021-01-13
7cdea0c jens-daniel-mueller 2021-01-06
fa85b93 jens-daniel-mueller 2021-01-06
e5cb81a Donghe-Zhu 2021-01-05
a499f10 Donghe-Zhu 2021-01-05
fb8a752 Donghe-Zhu 2020-12-23
8fae0b2 Donghe-Zhu 2020-12-21
c8b76b3 jens-daniel-mueller 2020-12-19
# i_eras <- unique(cant_surface$eras)[2]

for (i_eras in unique(cant_surface$eras)) {
  print(
    p_section_climatology_regular(
      df = cant_average %>% filter(eras == i_eras),
      var = "cant_pos",
      subtitle_text = paste("era:", i_eras)
    )
  )
}

Version Author Date
c1cec47 Donghe-Zhu 2021-01-25
05ffb0c Donghe-Zhu 2021-01-25
8b97165 Donghe-Zhu 2021-01-25
c569946 Donghe-Zhu 2021-01-24
a2f0d56 Donghe-Zhu 2021-01-23
28509fc Donghe-Zhu 2021-01-23
4c28e4a Donghe-Zhu 2021-01-22
24cc264 jens-daniel-mueller 2021-01-22
88eb28f Donghe-Zhu 2021-01-21
7891955 Donghe-Zhu 2021-01-21
d4cf1cb Donghe-Zhu 2021-01-21
1f3e5b6 jens-daniel-mueller 2021-01-20
0e7bdf1 jens-daniel-mueller 2021-01-15
4571843 jens-daniel-mueller 2021-01-14
b3564aa jens-daniel-mueller 2021-01-14
8d032c3 jens-daniel-mueller 2021-01-14
17dee1d jens-daniel-mueller 2021-01-13
fa85b93 jens-daniel-mueller 2021-01-06
e5cb81a Donghe-Zhu 2021-01-05
a499f10 Donghe-Zhu 2021-01-05
fb8a752 Donghe-Zhu 2020-12-23
8fae0b2 Donghe-Zhu 2020-12-21
c8b76b3 jens-daniel-mueller 2020-12-19

Version Author Date
c1cec47 Donghe-Zhu 2021-01-25
05ffb0c Donghe-Zhu 2021-01-25
8b97165 Donghe-Zhu 2021-01-25
c569946 Donghe-Zhu 2021-01-24
a2f0d56 Donghe-Zhu 2021-01-23
28509fc Donghe-Zhu 2021-01-23
4c28e4a Donghe-Zhu 2021-01-22
24cc264 jens-daniel-mueller 2021-01-22
88eb28f Donghe-Zhu 2021-01-21
7891955 Donghe-Zhu 2021-01-21
d4cf1cb Donghe-Zhu 2021-01-21
1f3e5b6 jens-daniel-mueller 2021-01-20
0e7bdf1 jens-daniel-mueller 2021-01-15
4571843 jens-daniel-mueller 2021-01-14
b3564aa jens-daniel-mueller 2021-01-14
8d032c3 jens-daniel-mueller 2021-01-14
17dee1d jens-daniel-mueller 2021-01-13
7cdea0c jens-daniel-mueller 2021-01-06
fa85b93 jens-daniel-mueller 2021-01-06
e5cb81a Donghe-Zhu 2021-01-05
a499f10 Donghe-Zhu 2021-01-05
fb8a752 Donghe-Zhu 2020-12-23
8fae0b2 Donghe-Zhu 2020-12-21
c8b76b3 jens-daniel-mueller 2020-12-19

3.3.2 Surface water averaging

The averaging function is also applied to the surface data, although only one value per grid cell was mapped, to ensure consistency with the deep water values.

cant_surface_average <- m_cant_model_average(cant_surface)
cant_surface_average <- m_cut_gamma(cant_surface_average, "gamma")
rm(cant_surface)

3.3.3 Join surface and deep water

cant_average <- full_join(cant_average, cant_surface_average)
rm(cant_surface_average)

3.4 Zonal mean sections

For each basin and era combination, the zonal mean cant is calculated, again for all vs positive only values. Likewise, sd is calculated for the averaging of the mean basin fields.

cant_average_zonal <- m_cant_zonal_mean(cant_average)
cant_average_zonal <- m_cut_gamma(cant_average_zonal, "gamma_mean")
cant_average_zonal %>% 
  filter(basin_AIP == "Atlantic",
         eras == "1982-1999 --> 2000-2012") %>% 
  ggplot(aes(lat, depth, z = cant_pos_mean)) +
  geom_contour_fill() +
  scale_y_reverse() +
  scale_fill_viridis_c()

3.5 Mean cant sections by coefficient

For each basin and era combination, the zonal mean is calculated for the term of each predictor.

cant_predictor_average_zonal <-
  m_cant_predictor_zonal_mean(cant_predictor_average)

cant_predictor_average_zonal <-
  m_cut_gamma(cant_predictor_average_zonal, "gamma")

3.6 Inventory calculation

To calculate Cant column inventories, we:

  1. Convert Cant concentrations to volumetric units
  2. Multiply layer thickness with volumetric Cant concentration to get a layer inventory
  3. For each horizontal grid cell and era, sum cant layer inventories for different inventory depths (100, 500, 1000, 3000, 10^{4} m)

Step 2 is performed separately for all Cant and positive Cant values only.

cant_inv <- m_cant_inv(cant_average)

p_map_cant_inv(df = cant_inv,
               var = "cant_pos_inv",
               subtitle_text = "for predefined integration depths") +
  facet_grid(inv_depth ~ eras)

Version Author Date
c1cec47 Donghe-Zhu 2021-01-25
05ffb0c Donghe-Zhu 2021-01-25
8b97165 Donghe-Zhu 2021-01-25
c569946 Donghe-Zhu 2021-01-24
a2f0d56 Donghe-Zhu 2021-01-23
28509fc Donghe-Zhu 2021-01-23
4c28e4a Donghe-Zhu 2021-01-22
24cc264 jens-daniel-mueller 2021-01-22
88eb28f Donghe-Zhu 2021-01-21
2679490 Donghe-Zhu 2021-01-21
7891955 Donghe-Zhu 2021-01-21
d4cf1cb Donghe-Zhu 2021-01-21
1f3e5b6 jens-daniel-mueller 2021-01-20
0e7bdf1 jens-daniel-mueller 2021-01-15
4571843 jens-daniel-mueller 2021-01-14
b3564aa jens-daniel-mueller 2021-01-14
8d032c3 jens-daniel-mueller 2021-01-14
17dee1d jens-daniel-mueller 2021-01-13
7cdea0c jens-daniel-mueller 2021-01-06
fa85b93 jens-daniel-mueller 2021-01-06
e5cb81a Donghe-Zhu 2021-01-05
a499f10 Donghe-Zhu 2021-01-05
fb8a752 Donghe-Zhu 2020-12-23
8fae0b2 Donghe-Zhu 2020-12-21
c8b76b3 jens-daniel-mueller 2020-12-19

4 Write csv

cant_average %>%
  write_csv(paste(path_version_data,
                  "cant_3d.csv", sep = ""))

cant_predictor_average %>%
  write_csv(paste(path_version_data,
                  "cant_predictor_3d.csv", sep = ""))

cant_average_zonal %>%
  write_csv(paste(path_version_data,
                  "cant_zonal.csv", sep = ""))

cant_predictor_average_zonal %>%
  write_csv(paste(path_version_data,
                  "cant_predictor_zonal.csv", sep = ""))

cant_inv %>%
  write_csv(paste(path_version_data,
                  "cant_inv.csv", sep = ""))

sessionInfo()
R version 4.0.3 (2020-10-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: openSUSE Leap 15.2

Matrix products: default
BLAS:   /usr/local/R-4.0.3/lib64/R/lib/libRblas.so
LAPACK: /usr/local/R-4.0.3/lib64/R/lib/libRlapack.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] seacarb_3.2.15  oce_1.2-0       gsw_1.0-5       testthat_3.0.1 
 [5] metR_0.9.0      scico_1.2.0     patchwork_1.1.1 collapse_1.5.0 
 [9] forcats_0.5.0   stringr_1.4.0   dplyr_1.0.2     purrr_0.3.4    
[13] readr_1.4.0     tidyr_1.1.2     tibble_3.0.4    ggplot2_3.3.3  
[17] tidyverse_1.3.0 workflowr_1.6.2

loaded via a namespace (and not attached):
 [1] httr_1.4.2               jsonlite_1.7.2           viridisLite_0.3.0       
 [4] here_1.0.1               modelr_0.1.8             assertthat_0.2.1        
 [7] blob_1.2.1               cellranger_1.1.0         yaml_2.2.1              
[10] pillar_1.4.7             backports_1.1.10         lattice_0.20-41         
[13] glue_1.4.2               RcppEigen_0.3.3.9.1      digest_0.6.27           
[16] promises_1.1.1           checkmate_2.0.0          rvest_0.3.6             
[19] colorspace_2.0-0         htmltools_0.5.0          httpuv_1.5.4            
[22] Matrix_1.2-18            pkgconfig_2.0.3          broom_0.7.3             
[25] haven_2.3.1              scales_1.1.1             whisker_0.4             
[28] later_1.1.0.1            git2r_0.27.1             farver_2.0.3            
[31] generics_0.1.0           ellipsis_0.3.1           withr_2.3.0             
[34] cli_2.2.0                magrittr_2.0.1           crayon_1.3.4            
[37] readxl_1.3.1             evaluate_0.14            fs_1.5.0                
[40] fansi_0.4.1              xml2_1.3.2               RcppArmadillo_0.10.1.2.2
[43] tools_4.0.3              data.table_1.13.6        hms_0.5.3               
[46] lifecycle_0.2.0          munsell_0.5.0            reprex_0.3.0            
[49] isoband_0.2.3            compiler_4.0.3           rlang_0.4.10            
[52] grid_4.0.3               rstudioapi_0.13          labeling_0.4.2          
[55] rmarkdown_2.5            gtable_0.3.0             DBI_1.1.0               
[58] R6_2.5.0                 lubridate_1.7.9          knitr_1.30              
[61] rprojroot_2.0.2          stringi_1.5.3            parallel_4.0.3          
[64] Rcpp_1.0.5               vctrs_0.3.6              dbplyr_1.4.4            
[67] tidyselect_1.1.0         xfun_0.20