proctor_prep: Simplify the process of adding water to soil compaction...

View source: R/proctor_prep.R

proctor_prepR Documentation

Simplify the process of adding water to soil compaction specimens

Description

Pass in a tibble of specimen information and compute the amount of water to add for each aliquot.

Usage

proctor_prep(
  x = NULL,
  PLs = NULL,
  date = Sys.Date(),
  sample_name,
  w_extant = NULL,
  effort = c("standard", "modified"),
  w_int = 0.015,
  assumed_d_max = 2.25,
  n_cylinders = 6,
  cylinder_volume_cm3 = 940
)

Arguments

x

Data frame containing columns sample_name, w_extant, and effort. May also contain a column of plastic limit values, named PL. # S3 object of class sand_scr_mix_tbl

PLs

Plastic limit values. If x contains a PL column, may be NULL (the default). If x is provided but does not contain a PL column, PLs should be a data frame having two columns: the same sample names and a column titled PLs. If x is NULL, PLs should be a numeric vector of the same length assample_name.

date

Date of mixing or testing.

sample_name

Character vector of unique sample identifiers.

w_extant

Existing water content values. If x is provided, can be ignored. If x is NULL (the default), should be a numeric vector of same length as sample_name.

effort

Character vector of compaction efforts. May be one or more of 'standard', 'modified', or 'reduced'.

w_int

Gravimetric water content interval between successive compaction points. Defaults to 0.015 (1.5%)

assumed_d_max

A conservatively high estimate of the maximum density that will be achieved in this test. Defaults to 2.25 g/cm3 to ensure enough soil is wetted for all aliquots.

n_cylinders

Number of specimens to prepare per test. Defaults to 6. 5 specimens is considered the minimum, but more or tighter-spaced cylinders can better define the compaction curve.

cylinder_volume_cm3

volume of the compaction mold in cm3. Used to compute compacted volume of soil plus 0.25" of "over-pack" extending above the top of the 4.5"-high mold.

Details

[Experimental]

The simplest way to use this function for splitting soil mixtures is to generate two tables.

The rationale for this function is efficient Proctor testing of soil mixtures. When preparing samples for compaction testing, it is often desired to mix the specimens to known water contents, rather than "eyeballing" the water additions. This ensures the water contents of the test specimens tested will bracket the optimum water content and be spaced along a roughly equal range. Some a priori knowledge about the soil is needed to predict what this range will be. proctor_prep() allows the user to specify the interval between 5 successive water contents to use along with the anticipated maximum density and the plastic limit of the soil. The maximum density for the standard effort test is estimated as 95% of w~~opt~~. w~~opt~~ for the modified test is estimated as 0.75 x w~~opt standard~~. Returned table contains information about the mass of soil to prepare and how much water to add.

Value

A tibble with one row per aliquot (tidy format). If there are soils with extant water contents above the lowest required for the test, these cases will populate with negative values for water_to_add_g. Soil masses are rounded to the nearest 100 g and water additions are rounded to the nearest 10 g.

References

ASTMc D698-12e2

See Also

proctor_fit(), mix_calcs(), proctor_datasheet()

Examples

# Recommended approach: provide the `x` argument as a full table of required data

# first prepare three tables - the efforts to test, the existing water contents, and the plastic limits

w_extants <- tibble::tibble(
  sample_name = paste0("mix_0", 1:3),
  w_extant = c(0.048, 0.027, 0.052),
)

pl_values <- tibble::tibble(
  sample_name = w_extants$sample_name,
  PL = c(0.095, 0.10, 0.14))

efforts <- tidyr::crossing(
  sample_name = paste0("mix_0", 1:3),
  effort = c('reduced', 'standard', 'modified')
)

full_args <- list(efforts, w_extants, pl_values) %>%
  purrr::reduce(dplyr::left_join, by= 'sample_name')

# now pass the complete table to `protor_prep()`
proctor_prep(x = full_args)

# An alternative approach is to provide the x argument (which can be piped directly from `sand_clay_mix_calcs()` _and_ a data frame
# having PL values

component_masses <- sand_clay_mix_calcs(
  mix_date = Sys.Date(),
  sample_name = NULL,
  sandy_name = "concrete-sand",
  clayey_name = 'brown-gumbo',
  final_sand_pct = seq(0.2, 0.8, by = 0.2),
  final_OD_kg = 30,
  sand_sandy = 0.97,
  sand_clayey = 0.06,
  w_sand = 0.001,
  w_clay = 0.02)

pl_df2 <- tibble::tibble(
  sample_name = component_masses$sample_name,
  PL = (1 - 0.01*component_masses$final_sand_pct) * 0.18
)

proctor_prep(component_masses, PLs = pl_df2)


# Alternatively, provide individual 'loose" vectors
proctor_prep(sample_name = w_extants$sample_name,
             w_extant = w_extants$w_extant,
             PLs = pl_values$PL)


# widen the interval for a clayey soil
mix_03 <- dplyr::filter(full_args, sample_name == 'mix_03', effort == 'standard')
proctor_prep(x = mix_03, PLs = pl_values,
             date= Sys.Date(), w_int = 0.025)



evanmascitti/soiltestr documentation built on Oct. 6, 2022, 5:32 p.m.