Errata for Quantitative Modeling of Earth Surface Processes:
1) p. 3: Equation 1.1 is incorrect. The minus sign in front of kappa should be a plus sign.
2) p. 14: Equation 1.15 is incorrect. In the denominator of equation 1.15, rho_s should be
rho_a
3) p. 36: Equation 2.21 is incorrect. It should be "theta = 1 - h/h_0" instead of
"theta = h/h_0 - 1"
4) p. 60: Equation 2.79 is incorrect. The dh/dx term in the numerator on the right
side (outside the brackets) should be d^2h/dx^2. The correct equation is
dh/dt = kappa * (d^2h/dx^2)/(1-(|dh/dx|/S_c)^n) * [1 + n|dh/dx|^n/(S_c^n*(1-(|dh/dx|/S_c)^n))]
5) p. 113: This page states that a good estimate of the flexural parameter of the
Central Andes is alpha = 100 km. This statement is misleading, and more
explanation is needed regarding the values of alpha chosen in this chapter.
The values alpha = 50, 75, and 100 km are used in Chapter 5 simply to illustrate the
sensitivity of the flexural response of the crust beneath the Andes to variations in
the flexural parameter. Of these three values, 100 km is the most accurate value. However,
the values 50, 75, and 100 km are all lower than realistic estimates for the flexural
parameter in the central Andes in the immediate vicinity of the Bolivian Orocline.
A better estimate for this region is alpha = 150 km, as noted on p. 119.
6) A1.4, p. 229-232: In the example of the ADI method applied to 2D diffusion, there
are two errors. First, the variable "timestep" should be defined as a global variable
instead of being defined in the main section of the code as it is in the printed text.
Second, in the subroutine "hillslopediffusion" there are two sets of "for" loops that read
"for (i=1;i<=lattice_size_x;i++)
for (j=1;j<=lattice_size_y;j++)
topoold[i][j]=topo[i][j];"
Both of these loops should be removed from the code and one set should be placed
at the beginning of the subroutine (currently, both loops are within the while loop,
which is incorrect).
7) A1.5, p. 233: In the code that integrates the Bessel functions in A1.5, the last
line if the code should be "fclose(fp0);" instead of "fclose(fp2);"
8) A2.1&A2.2: In the programs for fillinpitsandflats and mfdrouting, lattice_size_x
and lattice_size_y should be initialized prior to calling "setupgridneighbors();". so,
the line "setupgridneighbors();" should be moved to immediately below "lattice_size_y=300;"
9) A2.3, p. 240: In the successive flow routing example, the subroutine call
"calculatechannelslope();" in the main program should be replaced with
"calculatealongchannelslope();"
10) A3.2, p. 244: In the example of the stream power model code, the value of
"fillincrement" defined in this code may need to be increased from 0.001 to 0.01. On some
machines, using the value of 0.001 will result in a termination of the program due to
insufficient memory (i.e. the recursive fillinpitsandflats subroutine calls itself
too many times). Also, in the code the variable idum was declared but not defined.
This does not cause the program to fail, but best results are obtained by assigning
a negative integer value to idum, which is used as the seed for the random number generator.
Different realizations of the model can then be obtained by varying the specific value
of idum, e.g. "idum=-789;" or "idum=-321;"
Finally, in the main code, the line
"if (K*sqrt(flow[i][j])>max) max=K*sqrt(flow[i][j]);"
should read
"if (K*sqrt(flow[i][j])*deltax>max) max=K*sqrt(flow[i][j])*deltax;"
11) A3.3, p. 251&252: In the code implementing the sediment flux driven model, the flexure
component of the code needs modification. In the subroutine "void computeflexure()",
each existing instance of delrho should be replaced with 1+delrho, a factor 4*delrho should
be placed in front of each instance of pow(..), and the final line should read
"{U[i][j]=load[2*(i-1)*lattice_size_y+2*j-1]
/(lattice_size_x*lattice_size_y);}"
Finally, in the main program, the line "if (capacity>X)" should be changed to
"if (capacity>1/X)".
12) A4.1, p. 256 and A4.3, p. 258: In the Fourier filtering programs provided for
solving the flexure equation, there are several inconsistencies. First, the comment
in the line "delrho=0.27; /* (rho_m-rho_c)/rho_m */" is incorrect. The value of
deltarho corresponds to the ratio (rho_m-rho_c)/rho_c, not (rho_m-rho_c)/rho_m.
The default value given is 0.27, which is a relatively high value for this parameter.
Values closer to 0.20 correspond more closely to typical values of mantle and
crustal density (i.e. rho_m = 3300 kg/m^3 and rho_c = 2750 kg/m^3).
Also, in the code, the value of alpha is defined slightly differently than in the
chapter, where it is defined as (4D/((rho_m-rho_c)*g))^(1/4).
To be consistent with the book chapter and the conventional definition for alpha,
a factor of 4*delrho must be placed in front of each instance of pow() in the Fourier
filtering terms in the code. Finally, the reader should realize that the units of
alpha differ in the 1D and 2D versions of the program. In the 1D version, alpha
is defined in units of km. In the 2D version, an alternative approach is used and alpha
is defined in terms of multiples of delta.
13) A6.3, In the code for Werner's dune model, three changes are needed.
First, in the main code, the line "if (mask[ijump][jjump]>0.1) p=1;" should be
"if (height[ijump][jjump]0.1))"
should be "while ((height[ijump][jjump]==0)||(mask[ijump][jjump]>height[ijump][jjump]))".
Third, in the subroutine avalancheup, the lines between the "else" statment and the and
of the subroutine should be replaced with
"i=1;
hshadow=height[i][minj];
count=0;
while (count<=2*lattice_size_x)
{count++;
if (height[i][minj]>hshadow) hshadow=height[i][minj];
mask[i][minj]=hshadow;
i=iup[i];hshadow-=0.5;}"
The integer variable "count" must be declared in the avalancheup subroutine after this code
is added.
14) A7.1, p. 275: In the 1D Fourier filtering program, the line "realft(precyear,length,1);"
should be "realft(precyear,2*length,1);" and the line
"realft(precyear,length,-1);" should be "realft(precyear,2*length,1);"
15) A7.2, p. 277: In the stochastic model of Pleistocene climate change, the variable
"timestep" is misspelled on the 12th line of the main program (it appears as "timstep").
My apologies to the reader for these errors. The errors in the codes were introduced when
the working versions of the codes used by the author were rewritten (but not adequately
debugged) to make them more understandable to the reader. These errors have been fixed in the
codes available in the online supplement and will be fixed in the second edition of the
book. Please send any additional errors or points needing clarification to
jdpellet@email.arizona.edu
Jon Pelletier