<< Click to Display Table of Contents >> nonlinode |
{ NONLINODE.PDE
This example shows the application of FlexPDE to the solution of a
non-linear first-order differential equation.
A liquid flows into the top of a reactor vessel through an unrestricted
pipe and exits from the bottom through a choke value. This problem is
discussed in detail in Silebi and Schiesser.
This is a problem in viscous flow:
dH/dt = a - b*sqrt(H)
The analytic solution satisfies the relation
sqrt(H0) + (a/b)ln[a-b*sqrt(H0)]
- sqrt(H) - (a/b)ln[a-b*sqrt(H)] = (b/2)*t
which can be used as an accuracy check.
Since FlexPDE requires a spatial domain, we solve the equation on
a simple box with minimum mesh size.
}
title
"NONLINEAR FIRST ORDER ORDINARY DIFFERENTIAL EQUATION"
select
{ Since there is no spatial information required, use the minimum grid size }
ngrid=1
variables
{ declare Height to be the system variable }
Height(threshold=1)
definitions
{ define the equation parameters }
a = 2
b = 0.1
H0 = 100
{ define the accuracy check }
T0 = sqrt(H0) + (a/b)*ln(a-b*sqrt(H0))
Tcheck = sqrt(Height) + (a/b)*ln(a-b*sqrt(Height))
initial values
Height = H0
equations { The ODE }
Height : dt(Height) = a - b*sqrt(Height)
boundaries
{ define a fictitious spatial domain }
region 1
start (0,0)
line to (1,0) to (1,1) to (0,1) to close
{ define the time range }
time 0 to 1000
plots
for t=0, 1, 10 by 10 to endtime
{ Plot the solution: }
history(Height) at (0.5,0.5)
{ Plot the accuracy check: }
history((T0 - Tcheck - (b/2)*t)/((b/2)*t)) at (0.5,0.5)
as "Relative Error"
end