-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhr_03_texture.qmd
303 lines (234 loc) · 13 KB
/
hr_03_texture.qmd
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
---
output: html_document
editor_options:
chunk_output_type: console
---
```{r}
library(tidyverse)
library(gt)
library(gtExtras)
library(ggtern)
library(extrafont)
loadfonts(quiet = TRUE)
```
# Horizon texture {#sec-tex}
Texture refers to the behaviour of the fine-earth fraction when thoroughly reworked under moist conditions. Texture provides a field estimate of particle size distribution, which is determined in the laboratory. The two measurements are analogous but not identical.
Soil texture is a rapid method that can suggest information about clay mineral type, angularity or roundedness in the sand and silt fractions, organic matter content, and the influence of secondary minerals, as well as the mineral particle size distribution itself. However, the method has precision limits and requires careful user calibration.
Laboratory particle size measurement can involve measurements of particle shape and mineralogy but these methods are labour-intensive and generally confined to a research context. High-throughput analyses confine themselves to assessment of particle size alone, making assumptions about shape and mineralogy (see @loveland2001, for a more detailed discussion.)
Particle size analysis usually involves removal of organic materials and soluble minerals as well as more aggressive aggregate dispersion using shaking and chemical solutions. Following dispersion, measurements of 3-8 specific size fractions are recorded. These data are then usually summarised into a three part sand/silt/clay composition and classified against a texture triangle for efficient communication.
The boundaries of these three size fractions are somewhat unsettled. The silt-clay boundary aligns with some major changes in particle properties; chief among them the emergence of electrostatic behaviour in the clay fraction. The sand/silt boundary can range from 0.02-0.063 µm. See @tbl-hr-texcompar for the fractions used in NZ and other jurisdictions.
```{r}
#| label: tbl-hr-texcompar
#| tbl-cap: "Size fraction limits: New Zealand and elsewhere"
#| classes : no-stripe
# can also build out to coarse/med/fine sand and fine clay etc
dat_hr_texcompar <-
tribble(~Jurisdiction, ~Sand, ~Silt, ~Clay,
'New Zealand, UK', '< 2.0 mm', '< 0.06 mm', '< 0.002 mm',
'Australia ', '< 2.0 mm', '< 0.02 mm', '< 0.002 mm',
'USA, Canada', '< 2.0 mm', '< 0.05 mm', '< 0.002 mm',
'Global', '< 2.0 mm', '< 0.063 mm', '< 0.002 mm')
tbl_hr_texcompar <- gt(dat_hr_texcompar) |>
tab_options(
column_labels.font.weight = 'bold',
heading.title.font.weight = 'bold',
table.align = 'center',
table.width = '85%'
) |>
tab_style(style = list(cell_text(weight = 'bold')),
locations = cells_body(columns = 1)) |>
cols_width(Jurisdiction ~pct(40))
tbl_hr_texcompar
```
## Texture classes {#sec-hr-tex}
Sand/silt/clay compositional data can be displayed on a triangle plot (see @fig-texture-tri), and domains within the plot, or 'texture classes', are labelled for ease of communication. It is important to remember that these classes do not have sharp changes in hand-feel texture at their boundaries. A very large number of soil texture triangles have been defined in different jurisdictions.
```{r}
#| label: fig-texture-tri
#| fig-cap: "New Zealand Soil Texture Triangle"
nztt_dat <- readRDS(file.path('data', 'NZTT.RDS'))
nztt_labels <- readRDS(file.path('data', 'NZTT_LABELS.RDS'))
nz_tri <-
ggtern(data = nztt_dat, aes(x = SAND, y = CLAY, z = SILT)) +
geom_polygon(aes(group = NAME, fill = GROUP),
colour = 'grey50', alpha = 0.7) +
geom_text(data = nztt_labels, aes(label = cat_texture_code),
colour = 'grey30') +
scale_fill_manual(values = c('Sandy' = '#ffffb3', 'Silty' = '#bebada',
'Loamy' = '#8dd3c7', 'Clayey' = '#fb8072')) +
theme_showarrows() +
theme_nomask() +
labs(x = 'Sand %', y = 'Clay %', z = 'Silt %', fill = 'Texture Group') +
theme(panel.border = element_rect(colour = 'grey40'),
panel.background = element_rect(fill = NA),
tern.panel.grid.ontop = FALSE,
panel.grid = element_line(colour = 'grey90'),
text = element_text(family = "Ebrima"),
legend.key = element_blank(),
tern.axis.title.show = FALSE,
legend.position = 'right')
nz_tri
```
```{r}
#| label: tbl-texture-tri
#| tbl-cap: "New Zealand Texture Triangle class names and compositional limits"
#| classes : no-stripe
tbl_hr_textri <- nztt_labels |>
dplyr::select(matches('cat_'), matches('txt_'), -cat_texture_group) |>
dplyr::select(cat_texture_code, cat_texture_name, everything()) |>
gt() |>
tab_options(
column_labels.font.weight = 'bold',
heading.title.font.weight = 'bold',
table.align = 'center',
table.width = '85%'
) |>
tab_style(style = list(cell_text(color = 'red',
weight = 'bold',
align = 'center')),
locations = cells_body(columns = 1)) |>
cols_width(cat_texture_code ~pct(10), cat_texture_name ~ pct(20)) |>
cols_label(cat_texture_name = 'Name', cat_texture_code = 'Code',
txt_clay_range = 'Clay range',
txt_silt_range = 'Silt range',
txt_sand_range = 'Sand range')
tbl_hr_textri
```
### Generalised texture classes {#sec-tex-gen}
Generalised mineral texture classes for rapid assessment and simple communication are supplied below.
```{r}
#| label: tbl-hr-simpletex
#| tbl-cap: "Generalised soil texture classes"
dat_hr_sandquals <-
tribble(~Code, ~Name, ~Description,
'C', 'Clayey', 'Clay content ≥ 35%, texture class C, LC or ZC',
'Z', 'Silty', 'Clay content < 35%, silt content ≥ 40%; texture class Z, LZ, ZL',
'L', 'Loamy', 'Clay content 8 - 35%, silt content < 40%; texture class SL, SC, CL',
'S', 'Sandy', 'Clay content < 8, silt content, < 40%, texture class S, LS',
'R', 'Rocky', 'Fine earth fraction < 15%, dominated by rock fragments > 2 mm')
tbl_hr_sandquals <- gt(dat_hr_sandquals) |>
tab_options(
column_labels.font.weight = 'bold',
heading.title.font.weight = 'bold',
table.align = 'center',
table.width = '85%'
) |>
tab_style(style = list(cell_text(color = 'red',
weight = 'bold',
align = 'center')),
locations = cells_body(columns = 1)) |>
cols_width(Code ~pct(10), Name ~ pct(20))
tbl_hr_sandquals
```
## Recording soil texture {#sec-tex-rec}
Soil texture is preferably assessed in the field but can also be assessed from representative bagged samples. Follow the procedure in \@fig-texturing. Record one texture code from @tbl-texture-tri per horizon. If desired, add modifiers as discussed below.
[\@fig-texturing goes here]{.diags}
### Sand modifiers {#sec-tex-sandmod}
Hand-texture classes can be accompanied by additional information about the sand fraction. These codes can be appended to a texture class as a prefix, e.g. [(K)LS]{.ceg} for coarse loamy sand.
Note that appreciable coarse sand in a sample leads to underestimates of clay content in hand texturing.
```{r}
#| label: tbl-hr-sandquals
#| tbl-cap: "Sand fraction qualifiers"
dat_hr_sandquals <-
tribble(~Code, ~Name, ~Description,
'K', 'Coarse', 'Sand is dominantly 2.0 - 0.6 mm',
'M', 'Medium', 'Sand is dominantly 0.6 - 0.2 mm',
'F', 'Fine', 'Sand is dominantly 0.2 - 0.06 mm')
tbl_hr_sandquals <- gt(dat_hr_sandquals) |>
tab_options(
column_labels.font.weight = 'bold',
heading.title.font.weight = 'bold',
table.align = 'center',
table.width = '85%'
) |>
tab_style(style = list(cell_text(color = 'red',
weight = 'bold',
align = 'center')),
locations = cells_body(columns = 1)) |>
cols_width(Code ~pct(10), Name ~ pct(20))
tbl_hr_sandquals
```
### Organic modifiers {#sec-tex-orgmod}
Hand-texture classes can also be modified to express the presence of elevated soil organic matter and its degree of decomposition (where it remains below the 50% cutoff for organic soil materials, see below). These codes can be appended to a texture class as a suffix, e.g. [SL(T)]{.ceg} for slightly organic sandy loam. If more detail is desired, organic material type and decomposition can also be appended using @tbl-hr-orgsmt and @tbl-hr-orgmdec, e.g. [SL(TRM)]{.ceg} for a sandy loam containing \~20% visible but degraded flax leaf fragments.
Either of the organic matter abundance qualifiers can be used to signify the 'peaty topsoil' NZSC diagnostic.
```{r}
#| label: tbl-hr-orgmquals
#| tbl-cap: "Organic matter qualifiers - amount"
dat_hr_orgmquals <-
tribble(~Code, ~Name, ~Description,
'T', 'Slightly organic', '17-30% organic matter',
'P', 'Moderately organic', '30-50% organic matter')
tbl_hr_orgmquals <- gt(dat_hr_orgmquals) |>
tab_options(
column_labels.font.weight = 'bold',
heading.title.font.weight = 'bold',
table.align = 'center',
table.width = '85%'
) |>
tab_style(style = list(cell_text(color = 'red',
weight = 'bold',
align = 'center')),
locations = cells_body(columns = 1)) |>
cols_width(Code ~pct(10), Name ~ pct(20))
tbl_hr_orgmquals
```
## Particle size estimate {#sec-tex-pse}
Estimating particle size in the field involves compensating for the influences described above and arriving at estimates of sand and clay content (silt can be determined by difference). Record estimated clay and sand to the nearest whole percent. Optionally, add a separate error estimate (± x%) as an expression of confidence.
Example: [(K)LS, 70 ± 5% sand, 3% clay]{.ceg} for a coarse loamy sand.
## Organic soil materials {#sec-tex-org}
Where a horizon is dominated by organic rather than mineral materials (\>50% organic matter), the coding system described above is replaced by first describing the organic material type encountered, according to @tbl-hr-orgsmt. Where the dominant species contributing to the organic materials can be identified with confidence, they may also be noted as free text.
```{r}
#| label: tbl-hr-orgsmt
#| tbl-cap: "Organic material types"
dat_hr_orgsmt <-
tribble(~Code, ~Name, ~Description,
'M', 'Moss', 'Organic materials dominantly derived from moss and/or herb species e.g. *Sphagnum spp.*',
'R', 'Reed', 'Organic materials dominantly derived from grasses, reeds, flaxes or similar e.g. *Phormium spp.*',
'T', 'Tree', 'Organic materials dominantly derived from woody shrubs and trees, e.g. Kānuka',
'U', 'Unknown', 'Origin of organic materials cannot be identified with confidence')
tbl_hr_orgsmt <- gt(dat_hr_orgsmt) |>
tab_options(
column_labels.font.weight = 'bold',
heading.title.font.weight = 'bold',
table.align = 'center',
table.width = '85%'
) |>
tab_style(style = list(cell_text(color = 'red',
weight = 'bold',
align = 'center')),
locations = cells_body(columns = 1)) |>
fmt_markdown(columns = 3) |>
cols_width(Code ~pct(10), Name ~ pct(20))
tbl_hr_orgsmt
```
### Decomposition modifiers {#sec-tex-decomp}
The degree of decomposition can be added to the material type using @tbl-hr-orgmdec, e.g. [RM]{.ceg} for a reed-dominated layer that is moderately decomposed.
```{r}
#| label: tbl-hr-orgmdec
#| tbl-cap: "Organic matter qualifiers - decomposition"
dat_hr_orgmdec <-
tribble(~Code, ~Name, ~Description,
'F', 'Fibric', 'Organic matter weakly decomposed and dominated by visible plant remains',
'M', 'Mesic', 'Organic matter moderately decomposed, some visible plant structures but mostly amorphous',
'H', 'Humic', 'Organic matter no longer identifiable, minimal fibre content')
tbl_hr_orgmdec <- gt(dat_hr_orgmdec) |>
tab_options(
column_labels.font.weight = 'bold',
heading.title.font.weight = 'bold',
table.align = 'center',
table.width = '85%'
) |>
tab_style(style = list(cell_text(color = 'red',
weight = 'bold',
align = 'center')),
locations = cells_body(columns = 1)) |>
cols_width(Code ~pct(10), Name ~ pct(20))
tbl_hr_orgmdec
```
::: {.content-visible when-format='docx'}
delete me
:::
::: {#nte-vpost .callout-note appearance="minimal" collapse="true" title="Use of the von Post scale"}
The 10-point von Post scale of organic matter decomposition [@vonpost1922] was previously recommended for assessing the degree of organic material decomposition. The scale is no longer recommended as it has been criticised as overly subjective, and has been found inadequate for some materials [@grover2013; @whittington2021; @beyer2000].
:::
### Mineral modifiers {#sec-tex-orgmin}
Where a mineral fraction among the organic materials is appreciable, the organic texture code can be further modified using the codes in @tbl-hr-simpletex, e.g. [RM(L)]{.ceg} for a mesic, reed-derived peat with some loamy material mixed in.