0% found this document useful (0 votes)
99 views21 pages

27.1 The Solution Can Be Assumed To Be T E: B A B A

This document presents solutions to several problems involving the numerical solution of ordinary differential equations using finite difference methods. Problem 27.1 solves a sample differential equation analytically to provide a solution for comparison. Problems 27.3, 27.5 and 27.7 solve the same or similar differential equations numerically using finite difference approximations and methods like the Thomas algorithm or Gauss-Seidel iteration. Problem 27.9 derives the eigenvalue problem for a general finite difference discretization. Problem 27.11 demonstrates the power iteration method for finding eigenvalues. Problem 27.13 provides VBA code implementing the shooting method to solve a two-point boundary value problem.

Uploaded by

recsa cahaya
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
99 views21 pages

27.1 The Solution Can Be Assumed To Be T E: B A B A

This document presents solutions to several problems involving the numerical solution of ordinary differential equations using finite difference methods. Problem 27.1 solves a sample differential equation analytically to provide a solution for comparison. Problems 27.3, 27.5 and 27.7 solve the same or similar differential equations numerically using finite difference approximations and methods like the Thomas algorithm or Gauss-Seidel iteration. Problem 27.9 derives the eigenvalue problem for a general finite difference discretization. Problem 27.11 demonstrates the power iteration method for finding eigenvalues. Problem 27.13 provides VBA code implementing the shooting method to solve a two-point boundary value problem.

Uploaded by

recsa cahaya
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 21

1

CHAPTER 27

27.1 The solution can be assumed to be T = ex. This, along with the second derivative T” = 2ex,
can be substituted into the differential equation to give

2e x  0.15e x  0

which can be used to solve for

2  0.15  0
   0.15

Therefore, the general solution is

T  Ae 0.15 x
 Be  0.15 x

The constants can be evaluated by substituting each of the boundary conditions to generate
two equations with two unknowns,

240  A  B
150  48.08563A  0.020796B

which can be solved for A = 3.016944 and B = 236.9831. The final solution is, therefore,

T  3.016944e 0.15 x
 236.9831e  0.15 x

which can be used to generate the values below:

x T
0 240
1 165.329
2 115.7689
3 83.79237
4 64.54254
5 55.09572
6 54.01709
7 61.1428
8 77.55515
9 105.7469
10 150
2

27.3 A centered finite difference can be substituted for the second derivative to give,

Ti 1  2Ti  Ti 1
 0.15Ti  0
h2

or for h = 1,

 Ti 1  2.15Ti  Ti 1  0

The first node would be

2.15T1  T2  240

and the last node would be

 T9  2.15T10  150

The tridiagonal system can be solved with the Thomas algorithm or Gauss-Seidel for (the
analytical solution is also included)

x T Analytical
0 240 240
1 165.7573 165.3290
2 116.3782 115.7689
3 84.4558 83.7924
4 65.2018 64.5425
5 55.7281 55.0957
6 54.6136 54.0171
7 61.6911 61.1428
8 78.0223 77.5552
9 106.0569 105.7469
10 150 150

The following plot of the results (with the analytical shown as filled circles) indicates close
agreement.
3

27.5 Centered finite differences can be substituted for the second and first derivatives to give,

y i 1  2 y i  y i 1 y i 1  y i 1
7 2  y i  xi  0
x 2
2x

or substituting x = 2 and collecting terms yields

 2.25 y i 1  4.5 y i  1.25 y i 1  xi

This equation can be written for each node and solved with methods such as the Tridiagonal
solver, the Gauss-Seidel method or LU Decomposition. The following solution was computed
using Excel’s Minverse and Mmult functions:

x y
0 5
2 4.199592
4 4.518531
6 5.507445
8 6.893447
10 8.503007
12 10.20262
14 11.82402
16 13.00176
18 12.7231
20 8
4

27.7 The second-order ODE can be linearized as in

d 2T
 1  10 7 (Tb  273) 4  4  10 7 (Tb  273) 3 (T  Tb )  4(150  T )  0
dx 2

Substituting Tb = 150 and collecting terms gives

d 2T
 34.27479T  1939.659  0
dx 2

Substituting a centered-difference approximation of the second derivative gives

 Ti 1  ( 2  34.27479x 2 )Ti  Ti 1  1939.659x 2

We used the Gauss-Seidel method to solve these equations. The results for a few selected
points are:

x 0 0.1 0.2 0.3 0.4 0.5


T 200 138.8337 106.6616 92.14149 90.15448 100

A graph of the entire solution along with the nonlinear result from Prob. 27.7 is shown below:

250
200
150 Linear
100
50 Nonlinear

0
0 0.1 0.2 0.3 0.4 0.5

27.9 For 5 interior points (h = 3/6 = 0.5), the result is Eq. (27.19) with 2  0.25p2 on the diagonal.
Dividing by 0.25 gives,

8  p 2 4 
  4 8  p2 4 
 
  4 8  p2 4 0
 4 8 p 2
4 
 
  4 8  p2 

The determinant can be expanded (e.g., with Fadeev-Leverrier or the MATLAB poly
function) to give

0   p 10  40 p 8  576 p 6  3,584 p 4  8960 p 2  6,144


5

The roots of this polynomial can be determined as (e.g., with Bairstow’s methods or the
MATLAB roots function) p2 = 1.072, 4, 8, 12, 14.94. The square root of these roots yields p =
1.035, 2, 2.828, 3.464, and 3.864.

27.11 Although the following computation can be implemented on a pocket calculator, a


spreadsheet or with a program, we’ve used MATLAB.

>> a=[2 8 10;8 4 5;10 5 7]


a =
2 8 10
8 4 5
10 5 7
>> x=[1 1 1]'
x =
1
1
1

First iteration:
>> x=a*x
x =
20
17
22
>> e=max(x)
e =
22
>> x=x/e
x =
0.9091
0.7727
1.0000

Second iteration:
>> x=a*x
x =
18.0000
15.3636
19.9545
>> e=max(x)
e =
19.9545
>> x=x/e
x =
0.9021
0.7699
1.0000

Third iteration:
>> x=a*x
x =
17.9636
15.2961
19.8702
>> e=max(x)
e =
6

19.8702
>> x=x/e
x =
0.9040
0.7698
1.0000

Fourth iteration:
>> x=a*x
x =
17.9665
15.3116
19.8895
>> e=max(x)
e =
19.8895
>> x=x/e
x =
0.9033
0.7698
1.0000

Thus, after four iterations, the result is converging on a highest eigenvalue of 19.8842 with a
corresponding eigenvector of [0.9035 0.7698 1].

27.13 Here is VBA Code to implement the shooting method:

Option Explicit

Sub Shoot()
Dim n As Integer, m As Integer, i As Integer, j As Integer
Dim x0 As Double, xf As Double
Dim x As Double, y(2) As Double, h As Double, dx As Double, xend As Double
Dim xp(200) As Double, yp(2, 200) As Double, xout As Double
Dim z01 As Double, z02 As Double, T01 As Double, T02 As Double
Dim T0 As Double, Tf As Double
Dim Tf1 As Double, Tf2 As Double
'set parameters
n = 2
x0 = 0
T0 = 40
xf = 10
Tf = 200
dx = 2
xend = xf
xout = 2
'first shot
x = x0
y(1) = T0
y(2) = 10
Call RKsystems(x, y, n, dx, xf, xout, xp, yp, m)
z01 = yp(2, 0)
Tf1 = yp(1, m)
'second shot
x = x0
y(1) = T0
y(2) = 20
Call RKsystems(x, y, n, dx, xf, xout, xp, yp, m)
z02 = yp(2, 0)
Tf2 = yp(1, m)
'last shot
7

x = x0
y(1) = T0
'linear interpolation
y(2) = z01 + (z02 - z01) / (Tf2 - Tf1) * (Tf - Tf1)
Call RKsystems(x, y, n, dx, xf, xout, xp, yp, m)
'output results
Range("A4:C1004").ClearContents
Range("A4").Select
For j = 0 To m
ActiveCell.Value = xp(j)
For i = 1 To n
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = yp(i, j)
Next i
ActiveCell.Offset(1, -n).Select
Next j
Range("A4").Select
End Sub

Sub RKsystems(x, y, n, dx, xf, xout, xp, yp, m)


Dim i As Integer
Dim xend As Double, h As Double
m = 0
For i = 1 To n
yp(i, m) = y(i)
Next i
Do
xend = x + xout
If xend > xf Then xend = xf
h = dx
Do
If xend - x < h Then h = xend - x
Call RK4(x, y, n, h)
If x >= xend Then Exit Do
Loop
m = m + 1
xp(m) = x
For i = 1 To n
yp(i, m) = y(i)
Next i
If x >= xf Then Exit Do
Loop
End Sub

Sub RK4(x, y, n, h)
Dim i
Dim ynew, dydx(10), ym(10), ye(10)
Dim k1(10), k2(10), k3(10), k4(10)
Dim slope(10)
Call Derivs(x, y, k1)
For i = 1 To n
ym(i) = y(i) + k1(i) * h / 2
Next i
Call Derivs(x + h / 2, ym, k2)
For i = 1 To n
ym(i) = y(i) + k2(i) * h / 2
Next i
Call Derivs(x + h / 2, ym, k3)
For i = 1 To n
ye(i) = y(i) + k3(i) * h
Next i
Call Derivs(x + h, ye, k4)
For i = 1 To n
8

slope(i) = (k1(i) + 2 * (k2(i) + k3(i)) + k4(i)) / 6


Next i
For i = 1 To n
y(i) = y(i) + slope(i) * h
Next i
x = x + h
End Sub

Sub Derivs(x, y, dydx)


dydx(1) = y(2)
dydx(2) = 0.01 * (y(1) - 20)
End Sub

27.15 A general formulation that describes Example 27.3 as well as Probs. 27.3 and 27.5 is

d2y dy
a 2
 b  cy  f ( x)  0
dx dx

Finite difference approximations can be substituted for the derivatives:

y i 1  2 y i  y i 1 y  y i 1
a  b i 1  cyi  f ( xi )  0
x 2
2x

Collecting terms

 
  a  0.5bx  y i 1  2a  cx 2 y i   a  0.5bx  y i 1  f ( x i )x 2

Dividing by x2,

     
 a / x 2  0.5b / x y i 1  2a / x 2  c y i  a / x 2  0.5b / x y i 1  f ( xi )

For Example 27.3, a = 1, b = 0, c = h and f(x) = hTa. The following VBA code implements
Example 27.3.

Public hp As Double
Option Explicit
Sub FDBoundaryValue()
Dim ns As Integer, i As Integer
Dim a As Double, b As Double, c As Double
9

Dim e(100) As Double, f(100) As Double, g(100) As Double, r(100) As Double,


y(100) As Double
Dim Lx As Double, xx As Double, x(100) As Double, dx As Double
Lx = 10
dx = 2
ns = Lx / dx
xx = 0
For i = 0 To ns
x(i) = xx
xx = xx + dx
Next i
hp = 0.01
a = 1
b = 0
c = -hp
y(0) = 40
y(ns) = 200
f(1) = 2 * a / dx ^ 2 - c
g(1) = -(a / dx ^ 2 + b / (2 * dx))
r(1) = ff(x(1)) + (a / dx ^ 2 - b / (2 * dx)) * y(0)
For i = 2 To ns - 2
e(i) = -(a / dx ^ 2 - b / (2 * dx))
f(i) = 2 * a / dx ^ 2 - c
g(i) = -(a / dx ^ 2 + b / (2 * dx))
r(i) = ff(x(i))
Next i
e(ns - 1) = -(a / dx ^ 2 - b / (2 * dx))
f(ns - 1) = 2 * a / dx ^ 2 - c
r(ns - 1) = ff(x(ns - 1)) + (a / dx ^ 2 + b / (2 * dx)) * y(ns)
Sheets("Sheet2").Select
Range("a5:d105").ClearContents
Range("a5").Select
For i = 1 To ns - 1
ActiveCell.Value = e(i)
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = f(i)
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = g(i)
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = r(i)
ActiveCell.Offset(1, -3).Select
Next i
Range("a5").Select
Call Tridiag(e, f, g, r, ns - 1, y)
Sheets("Sheet1").Select
Range("a5:b105").ClearContents
Range("a5").Select
For i = 0 To ns
ActiveCell.Value = x(i)
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = y(i)
ActiveCell.Offset(1, -1).Select
Next i
Range("a5").Select
End Sub

Sub Tridiag(e, f, g, r, n, x)
Dim k As Integer
For k = 2 To n
e(k) = e(k) / f(k - 1)
f(k) = f(k) - e(k) * g(k - 1)
Next k
For k = 2 To n
10

r(k) = r(k) - e(k) * r(k - 1)


Next k
x(n) = r(n) / f(n)
For k = n - 1 To 1 Step -1
x(k) = (r(k) - g(k) * x(k + 1)) / f(k)
Next k
End Sub

Function ff(x)
ff = hp * 20
End Function

27.17 The following two codes can be used to solve this problem. The first is written in
VBA/Excel. The second is an M-file implemented in MATLAB.

VBA/Excel:

Option Explicit
Sub Power()
Dim n As Integer, i As Integer, iter As Integer
Dim aa As Double, bb As Double
Dim a(10, 10) As Double, c(10) As Double
Dim lam As Double, lamold As Double, v(10) As Double
Dim es As Double, ea As Double
es = 0.001
n = 3
aa = 2 / 0.5625
bb = -1 / 0.5625
a(1, 1) = aa
a(1, 2) = bb
For i = 2 To n - 1
a(i, i - 1) = bb
a(i, i) = aa
a(i, i + 1) = bb
Next i
a(i, i - 1) = bb
a(i, i) = aa
lam = 1
For i = 1 To n
v(i) = lam
Next i
Sheets("sheet1").Select
Range("a3:b1000").ClearContents
Range("a3").Select
Do
iter = iter + 1
Call Mmult(a, (v), v, n, n, 1)
11

lam = Abs(v(1))
For i = 2 To n
If Abs(v(i)) > lam Then lam = Abs(v(i))
Next i
ActiveCell.Value = "iteration: "
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = iter
ActiveCell.Offset(1, -1).Select
ActiveCell.Value = "eigenvalue: "
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = lam
ActiveCell.Offset(1, -1).Select
For i = 1 To n
v(i) = v(i) / lam
Next i
ActiveCell.Value = "eigenvector:"
ActiveCell.Offset(0, 1).Select
For i = 1 To n
ActiveCell.Value = v(i)
ActiveCell.Offset(1, 0).Select
Next i
ActiveCell.Offset(1, -1).Select
ea = Abs((lam - lamold) / lam) * 100
lamold = lam
If ea <= es Then Exit Do
Loop
End Sub

Sub Mmult(a, b, c, m, n, l)
Dim i As Integer, j As Integer, k As Integer
Dim sum As Double
For i = 1 To n
sum = 0
For k = 1 To m
sum = sum + a(i, k) * b(k)
Next k
c(i) = sum
Next i
End Sub
12



MATLAB:

function [e, v] = powmax(A)


% [e, v] = powmax(A):
% uses the power method to find the highest eigenvalue and
% the corresponding eigenvector
% input:
% A = matrix to be analyzed
% output:
% e = eigenvalue
% v = eigenvector

es = 0.0001;
maxit = 100;
n = size(A);
for i=1:n
v(i)=1;
end
v = v';
e = 1;
iter = 0;
while (1)
13

eold = e;
x = A*v;
[e,i] = max(abs(x));
e = sign(x(i))*e;
v = x/e;
iter = iter + 1;
ea = abs((e - eold)/e) * 100;
if ea <= es | iter >= maxit, break, end
end

Application to solve Example 27.7,

>> A=[3.556 -1.778 0;-1.778 3.556 -1.778;0 -1.778 3.556];


>> [e,v]=powmax(A)
e =
6.0705
v =
-0.7071
1.0000
-0.7071

27.19 This problem can be solved by recognizing that the solution corresponds to driving the
differential equation to zero. To do this, a finite difference approximation can be substituted
for the second derivative to give

Ti 1  2Ti  Ti 1
R 2
 1  10 7 (Ti  273) 4  4(150  Ti )
(x)

where R = the residual, which is equal to zero when the equation is satisfied. Next, a
spreadsheet can be set up as below. Guesses for T can be entered in cells B11:B14. Then, the
residual equation can be written in cells C11:C14 and referenced to the temperatures in
column B. The square of the R’s can then be entered in column D and summed (D17).

= sum(D11:D14)

=(B10-2*B11+B12)/$B$7^2-$B$2*(B11+273)^4+$B$3*($B$4-B11)

Solver can then be invoked to drive cell D17 to zero by varying B11:B14.
14

The result is as shown in the spreadsheet along with a plot.

27.21 (a) First, the 2nd-order ODE can be reexpressed as the following system of 1st-order
ODE’s

dx
z
dt
dz
 8 z  1200 x
dt

Next, we create an M-file to hold the ODEs:

function dx=spring(t,y)
dx=[y(2);-8*y(2)-1200*y(1)]

Then we enter the following commands into MATLAB

[t,y]=ode45('spring',[0 .4],[0.5;0]);
plot(t,y(:,1));

The following plot results:


15

(b) The eigenvalues and eigenvectors can be determined with the following commands:

>> a=[0 -1;8 1200];


>> format short e
>> [v,d]=eig(a)
v =
-9.9998e-001 8.3334e-004
6.6666e-003 -1.0000e+000
d =
6.6667e-003 0
0 1.2000e+003

27.23 Boundary Value Problem

1. x-spacing

at x = 0, i = l; and at x = 2, i = n

20
x 
n 1

2. Finite Difference Equation

d 2u du
2
6 u 2
dx dx

Substitute finite difference approximations:

u i 1  2u i  u i 1 u i 1  u i 1
6  ui  2
x 2
2x

[1  3(x)]u i 1  [2  x 2 ]u i  [1  3(x )]u i 1  2x 2


16

Coefficients:
ai = 1 – 3x bi = –2 – x2 ci = 1 + 3x di = 2x2

3. End point equations

i = 2:
[1  3(x)]10  [2  x 2 ]u 2  [1  3(x)]u 3  2x 2

Coefficients:
a2 = 0 b2 = –2 – x2 c2 = 1 + 3x d2 = 2x2 – 10(1 – 3(x))

i = n – 1:
[1  3(x)]u n  2  [2  x 2 ]u n 1  [1  3(x )]1  2x 2

Coefficients:
a2 = 1 – 3x b2 = –2 – x2 c2 = 0 d2 = 2x2 – (1 – 3(x))

% Boundary Value Problem


% u[xx]+6u[x]-u=2
% BC: u(x=0)=10 u(x=2)=1
% i=spatial index from 1 to n
% numbering for points is i=l to i=21 for 20 dx spaces
% u(1)=10 and u(n)=1

n=41; xspan=2.0;

% Constants
dx=xspan/(n-1);
dx2=dx*dx;

% Sizing matrices
u=zeros(1,n); x=zeros(1,n);
a=zeros(1,n); b=zeros(1,n); c=zeros(1,n); d=zeros(1,n);
ba=zeros(1,n); ga=zeros(1,n);

% Coefficients and Boundary Conditions


x=0:dx:2;
u(1)=10; u(n)=1;
b(2)=-2-dx2;
c(2)=1+3*dx;
d(2)=2*dx2-(1-3*dx)*10;
for i=3:n-2
a(i)=1-3*dx;
b(i)=-2-dx2;
c(i)=1+3*dx;
d(i)=2*dx2;
end
a(n-1)=1-3*dx;
b(n-1)=-2-dx2;
d(n-1)=2*dx2-(1+3*dx);

% Solution by Thomas Algorithm


17

ba(2)=b(2);
ga(2)=d(2)/b(2);
for i=3:n-1
ba(i)=b(i)-a(i)*c(i-1)/ba(i-1);
ga(i)=(d(i)-a(i)*ga(i-1))/ba(i);
end
% back substitution
u(n-1)=ga(n-1);
for i=n-2:-1:2
u(i)=ga(i)-c(i)*u(i+1)/ba(i);
end

% Plot
plot(x,u)
title('u[xx]+6u[x]-u=2; u(x=0)=10, u(x=2)=1')
xlabel('x-Independent Variable Range 0 to 2');ylabel('u-Dependent
Variable')
grid

27.25 By summing forces on each mass and equating that to the mass times acceleration, the
resu1ting differential equations can be written

 k  k2  k 
x1   1  x1   2  x 2  0
 m1   m1 

k   k  k3  k 
x2   2  x1   2  x 2   3  x3  0
 m2   m2   m2 

k   k  k4 
x3   3  x 2   3  x3  0
 m3   m3 

In matrix form
18

 k1  k 2 k2 
  0 
 m1 m1 
 x1  k 3   x1  0
   k2 k2  k3
x2        x 2   0
m m m
 x3   2 2 2
  x3  0
 0 k k  k 4
 3 3
 m3 m3 

The k/m matrix becomes with: k1 = k4 = 15 N/m, k2 = k3 = 35 N/m, and m1 = m2 = m3 = 1.5 kg

 k   33.33333  23.33333 0 
 m    23.33333 46.66667  23.33333
   0  23.33333 33.33333 

Solve for the eigenva1ues/natural frequencies using MATLAB:

>> k1=15;k4=15;k2=35;k3=35;
>> m1=1.5;m2=1.5;m3=1.5;
>> a=[(k1+k2)/m1 -k2/m1 0;
-k2/m2 (k2+k3)/m2 -k3/m2;
0 -k3/m3 (k3+k4)/m3]

a =
33.3333 -23.3333 0
-23.3333 46.6667 -23.3333
0 -23.3333 33.3333

>> w2=eig(a)

w2 =
6.3350
33.3333
73.6650

>> w=sqrt(w2)

w =
2.5169
5.7735
8.5828

27.27 (a) The exact solution is

y  Ae 5t  t 2  0.4t  0.08

If the initial condition at t = 0 is 0.8, A = 0,

y  t 2  0.4t  0.08
19

Note that even though the choice of the initial condition removes the positive exponential
terms, it still lurks in the background. Very tiny round off errors in the numerical solutions
bring it to the fore. Hence all of the following solutions eventually diverge from the analytical
solution.

(b) 4th order RK. The plot shows the numerical solution (bold line) along with the exact
solution (fine line).

15

10

-5
0 1 2 3 4
-10

(c)
function yp=dy(t,y)
yp=5*(y-t^2);

>> tspan=[0,5];
>> y0=0.08;
>> [t,y]=ode45('dy1',tspan,y0);

(d)
>> [t,y]=ode23S('dy1',tspan,y0);

(e)
>> [t,y]=ode23TB('dy1',tspan,y0);

27.29 First, the 2nd-order ODE can be reexpressed as the following system of 1st-order ODE’s
20

dT
z
dx
dz
 (0.12 x 3  2.4 x 2  12 x)
dx

(a) Shooting method: These can be solved for two guesses for the initial condition of z. For
our cases we used –1 and 0.5. We solved the ODEs with the 4th-order RK method using a
step size of 0.125. The results are

z(0) 1 0.5
T(10) 570 565

These values can then be used to derive the correct initial condition,

 0 .5  1
z ( 0)   1  ( 200  ( 570))  76
 565  (570)

The resulting fit is displayed below:

(b) Finite difference: Centered finite differences can be substituted for the second and first
derivatives to give,

Ti 1  2Ti  Ti 1
2
 0.12 xi3  2.4 xi2  12 xi  0
x

or substituting x = 2 and collecting terms yields

 Ti 1  2Ti  Ti 1  x 2 (0.12 xi3  2.4 x i2  12 xi )

This equation can be written for each node with the result
21

 2  1 0 0  T1  101.44 
 1 2  1 0  T2    69.12 
 0  1 2  1 T3   46.08 
 0 0  1 2  T  215.36
 4
These equations can be solved with methods such as the tridiagonal solver, the Gauss-Seidel
method or LU Decomposition. The following solution was computed using Excel’s Minverse
and Mmult functions:

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy