123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- \chapter[FIDE: Finite differences for PDEs]%
- {FIDE: Finite difference method for partial differential equations}
- \label{FIDE}
- \typeout{[FIDE: Finite differences for PDEs]}
- {\footnotesize
- \begin{center}
- Richard Liska \\
- Faculty of Nuclear Science and Physical Engineering \\
- Technical University of Prague \\
- Brehova 7, 115 19 Prague 1, Czech Republic \\[0.05in]
- e--mail: tjerl@aci.cvut.cz
- \end{center}
- }
- \ttindex{FIDE}
- The FIDE package performs automation of the process of numerical
- solving partial differential equations systems (PDES) by generating
- finite difference methods. In the process one can find several stages
- in which computer algebra can be used for performing routine
- analytical calculations, namely: transforming differential equations
- into different coordinate systems, discretisation of differential
- equations, analysis of difference schemes and generation of numerical
- programs. The FIDE package consists of the following modules:
- \begin{description}
- \item[EXPRES] for transforming PDES into any orthogonal coordinate system.
- \item[IIMET] for discretisation of PDES by integro-interpolation method.
- \item[APPROX] for determining the order of approximation of
- difference scheme.
- \item[CHARPOL] for calculation of amplification matrix and
- characteristic polynomial of difference scheme, which are needed in
- Fourier stability analysis.\
- \item[HURWP] for polynomial roots locating necessary in verifying the
- von Neumann stability condition.
- \item[LINBAND] for generating the block of FORTRAN code, which solves
- a system of linear algebraic equations with band matrix appearing
- quite often in difference schemes.
- \end{description}
- For more details on this package are given in the FIDE documentation,
- and in the examples. A flavour of its capabilities can be seen from
- the following simple example.
- \begin{verbatim}
- off exp;
- factor diff;
- on rat,eqfu;
- % Declare which indexes will be given to coordinates
- coordinates x,t into j,m;
- % Declares uniform grid in x coordinate
- grid uniform,x;
- % Declares dependencies of functions on coordinates
- dependence eta(t,x),v(t,x),eps(t,x),p(t,x);
- % Declares p as known function
- given p;
- same eta,v,p;
- iim a, eta,diff(eta,t)-eta*diff(v,x)=0,
- v,diff(v,t)+eta/ro*diff(p,x)=0,
- eps,diff(eps,t)+eta*p/ro*diff(v,x)=0;
- *****************************
- ***** Program ***** IIMET Ver 1.1.2
- *****************************
- Partial Differential Equations
- ==============================
- diff(eta,t) - diff(v,x)*eta = 0
- diff(p,x)*eta
- --------------- + diff(v,t) = 0
- ro
- diff(v,x)*eta*p
- diff(eps,t) + ----------------- = 0
- ro
- Backtracking needed in grid optimalization
- 0 interpolations are needed in x coordinate
- Equation for eta variable is integrated in half grid point
- Equation for v variable is integrated in half grid point
- Equation for eps variable is integrated in half grid point
- 0 interpolations are needed in t coordinate
- Equation for eta variable is integrated in half grid point
- Equation for v variable is integrated in half grid point
- Equation for eps variable is integrated in half grid point
- Equations after Discretization Using IIM :
- ==========================================
- (4*(eta(j,m + 1) - eta(j,m) - eta(j + 1,m)
- + eta(j + 1,m + 1))*hx - (
- (eta(j + 1,m + 1) + eta(j,m + 1))
- *(v(j + 1,m + 1) - v(j,m + 1))
- + (eta(j + 1,m) + eta(j,m))*(v(j + 1,m) - v(j,m)))
- *(ht(m + 1) + ht(m)))/(4*(ht(m + 1) + ht(m))*hx) = 0
- (4*(v(j,m + 1) - v(j,m) - v(j + 1,m) + v(j + 1,m + 1))*hx*ro
- + ((eta(j + 1,m + 1) + eta(j,m + 1))
- *(p(j + 1,m + 1) - p(j,m + 1))
- + (eta(j + 1,m) + eta(j,m))*(p(j + 1,m) - p(j,m)))
- *(ht(m + 1) + ht(m)))/(4*(ht(m + 1) + ht(m))*hx*ro) = 0
- (4*(eps(j,m + 1) - eps(j,m) - eps(j + 1,m)
- + eps(j + 1,m + 1))*hx*ro + ((
- eta(j + 1,m + 1)*p(j + 1,m + 1)
- + eta(j,m + 1)*p(j,m + 1))
- *(v(j + 1,m + 1) - v(j,m + 1)) +
- (eta(j + 1,m)*p(j + 1,m) + eta(j,m)*p(j,m))
- *(v(j + 1,m) - v(j,m)))*(ht(m + 1) + ht(m)))/(4
- *(ht(m + 1) + ht(m))*hx*ro) = 0
- clear a;
- clearsame;
- cleargiven;
- \end{verbatim}
|