Breaking Ice with Air cushion Vehicle - Find minimum pressure with Newton-Raphson method
1. AIM : Determining minimum pressure to break ice using an air cushion ice breaker - Newton Raphson method.
2. OBJECTIVE :
- Use the newton raphson method to find out the value of pressure for h = 0.6.
- Find the optimal relaxation factor for this problem with the help of a suitable plot.
- Tabulate the results of p for h = [0.6,1.2,1.8,2.4,3,3.6,4.2] assuming a suitable relaxation factor.
3. THEORY : Ice sheet can be broken into small slabs with a heavy air-cushion vehicle (ACV) traveling on the float ice sheet at the critical speed. Ice-breaking with ACV is a new ice-breaking method in the inland river which has an important application in the prevention of ice jam flood in the Yellow River. Dependent on ice thickness, an ACV can readily break the ice in flexure by making depression and send cracks through the ice. Once a crack is made, the path of least resistance for the ACV's air curtain gets under the ice and reduces the supporting water under the ice. The ice then fails under its own weight. At speed, an ACV can setup a wave in the ice and send cracks through it. This would act similar to the dynamics of a transport truck on an ice road.
3.1 NEWTON RAPHSON METHOD : Newton's method, also called the Newton-Raphson method, is a root-finding algorithm that uses the first few terms of the Taylor series of a function f(x) in the vicinity of a suspected root. Newton's method is sometimes also known as Newton's iteration, although in this work the latter term is reserved for the application of Newton's method for computing square roots.
The Taylor series of f(x) about the point x=x0+ε is given by -
f(x0+ε) = f(x0) + f′(x0)ε + 12f''(x0)ε2 + ...... --------------(1)
Keeping terms only to first order,
f(x0+ε)≈f(x0)+f′(x0)ε. --------------(2)
Equation (2) is the equation of the tangent line to the curve at (x0,f(x0)), so (x1,0) is the place where that tangent line intersects the x-axis. A graph can, therefore, give a good intuitive idea of why Newton's method works at a well-chosen starting point and why it might diverge with a poorly-chosen starting point. This expression above can be used to estimate the amount of offset epsilon needed to land closer to the root starting from an initial guess x0. Setting f(x0+ε)=0 and solving (2) for ε=ε0 gives,
ε0=−f(x0)f′(x0) ---------------(3)
which is the first-order adjustment to the root's position. By letting x1=x0+ε0, calculating a new ε1 , and so on, the process can be repeated until it converges to a fixed point (which is precisely a root) using,
εn=−f(xn)f′(xn) ----------------(4)
Unfortunately, this procedure can be unstable near a horizontal asymptote or a local extremum. However, with a good initial choice of the root's position, the algorithm can be applied iteratively to obtain,
xn+1=xn−f(xn)f′(xn) ------------------(5)
for n=1, 2, 3,...... . An initial point x_0 that provides safe convergence of Newton's method is called an approximate zero.
GOVERNING EQUATION used :
`=>``f(x) = p^3(1−β^2) + p^2(0.4hβ^2 − σh^2r^2) + p(σ^2h^4*3r^4) − (σh^2*3r^2)^3`
`=>``f'(x) = 3p^2(1−β^2)+2p(0.4hβ^2−σh^2r^2)+σ^2(h^4)3r^4`
where,
p denotes the cushion pressure,
h the thickness of the ice field,
r the size of the air cushion,
`σ` the tensile strength of the ice and
`β` is related to the width of the ice wedge.
4. BODY OF CONTENT :
4.1 Solution Steps :-
- At first, necessary modules such as math, matplotlib, NumPy are imported and required inputs are given. For the first part of code, an array of h and an assumed value of α is considered according to the challenge statement.
- Two different functions named f(x) and f'(x) are defined according to the formula given, and an empty array of a number of interactions and pressure(in psi and psft) are created.
- For calculating minimum pressure for different values of ice thickness a for loop is executed taking an initial guessed value of pressure, tolerance, and a loop counter =1 which will increment after every iteration. Then a while loop is initiated inside the same for loop for checking whether all inputs in the formula if is greater than tolerance provided, a new value of pressure will be calculated according to the Newton Raphson method.
- The calculated values of pressure and number of iterations are stored in their respective arrays using 'append' command and necessary statements are printed in the command window.
- Graphs for pressure versus ice thickness are plotted using the calculated data set.
- For calculating optimal relaxation factor(α) for a given thickness of ice same steps as above are repeated for except that now an array of α from 0.1 to 1.9 is taken with 50 points in between them and h value is taken. Same for loop and while loop is again executed for checking whether all inputs in the formula if is greater than tolerance provided, a new value of pressure will be calculated according to the Newton Raphson method.
- The number of iterations calculated is stored as an array and a graph is plotted between the same and relaxation factors.
4.2 CODE in Python :
# A program to calculate pressure for given thickness of ice using Newton Raphson Method
import math
import numpy as np
import matplotlib.pyplot as plt
# Inputs
# beta is related to the width of the ice wedge
beta = 0.5
# r is the size of the air cushion (feet)
r = 40
# sigma the tensile strength of the ice (pounds per square inch (psi))
sigma = 150
# sigma the tensile strength of the ice (pounds per square foot)| 1foot = 12inches | 1 square feet = 12*12 square inches
sigma = 21600
# h the thickness of the ice field
h = [0.6, 1.2, 1.8, 2.4, 3.0, 3.6, 4.2]
# Relaxation factor assumed
alpha = 1.1
def f(p,h,r,beta,sigma):
term_1 = pow(p, 3)*(1-pow(beta, 2))
term_2a = 0.4*h*pow(beta, 2)
term_2b = (sigma*(pow(h,2))/pow(r,2))
term_3 = pow(sigma,2)*(pow(h,4))/(pow(r,4))
term_4 = (sigma/3)*(pow(h,2))/(pow(r,2))
return term_1 + (term_2a - term_2b)*pow(p,2) + term_3*(p/3) - pow(term_4, 3)
def fprime(p,h,r,beta,sigma):
term_5 = 3*pow(p,2)*(1-pow(beta, 2))
term_6a = 0.4*h*pow(beta, 2)
term_6b = (sigma*(pow(h,2))/pow(r,2))
term_7 = pow(sigma,2)*(pow(h,4))/(pow(r,4))
return term_5 + 2*(term_6a - term_6b)*p + term_7/3
# Null pressure array for storing calculated values after each iterations
pressure = [] # pound per square feet
pressure_0 =[] # pound per square inches(psi)
# Null array for storing the number of iterations in future
num = []
for i in h:
# Assuming initial pressure value
p_guess = 100
# Tolerance
tolerance = 1e-6
# Loop counter for incrementing the number of iterations
counter = 1
while(abs(f(p_guess, i, r, beta, sigma)) > tolerance):
p_guess = p_guess - alpha*(f(p_guess, i, r, beta, sigma)/fprime(p_guess, i, r, beta, sigma))
counter = counter+1
pressure.append(p_guess)
pressure_0.append(p_guess/144)
num.append(counter)
print('*Thickness of the Ice wedge :n',h)
print('*Cushion Pressure (pound per square feet) :n',pressure)
print('*Cushion Pressure (psi) :n',pressure_0)
print('*Number of iterations :n',num)
# Plotting graph
plt.figure(1)
plt.plot(h, pressure, marker = '.',color='black',markerfacecolor='red',markersize=10)
plt.title('Cushion pressure versus Ice field thickness')
plt.xlabel('Thickness of ice field (feet)')
plt.ylabel('Cushion Pressure (pound per square feet)')
plt.grid()
plt.show()
plt.figure(2)
plt.plot(h, pressure_0, marker = '.',color='black',markerfacecolor='green',markersize=10)
plt.title('Cushion pressure versus Ice field thickness')
plt.xlabel('Thickness of ice field (feet)')
plt.ylabel('Cushion Pressure (pound per square inches)')
plt.grid()
plt.show()
"""
Part 2 of the program to calculate optimal relaxation factor for given thickness of ice field
"""
# h_1 the thickness of the ice field
h_1 = 0.6
# Relaxation factor array assumed considering underrelaxing and overrelaxing values
alpha_array = np.linspace(0.1,1.9,50)
# Null array for storing the number of iterations in future
num_1 = []
for j in alpha_array:
# Assuming initial pressure value
p_guess = 100
# Tolerance
tolerance = 1e-6
# Loop counter for incrementing the number of iterations
counter = 1
while (abs(f(p_guess,h_1,r,beta,sigma)) > tolerance):
p_guess = p_guess - (j*f(p_guess,h_1,r,beta,sigma))/fprime(p_guess,h_1,r,beta,sigma)
counter = counter + 1
num_1.append(counter)
print(j)
# Plotting graph
plt.figure(3)
plt.plot(alpha_array,num_1,marker = '.',color='black',markerfacecolor='red',markersize=7.5)
plt.xlabel('Relaxation factor (alpha)')
plt.ylabel('No. of iterations')
plt.title('Iterations versus Relaxation factor')
plt.grid()
plt.show()
5. RESULTS :
Outputs: - The above program when executed yields pressure values for different ice thicknesses. From here it was observed that when ice thickness was 0.6, the pressure corresponding to it was 4.24 pounds per square feet or 0.0294 psi.
The variation of pressure with ice thickness is as follows -
figure(1)
figure(2)
For finding optimal relaxation factor, for giving ice field thickness; the following plot was observed -
figure(3)
6. CONCLUSION : The above program when executed yields pressure values for different ice thicknesses.