07.08.2013 Views

skade eaction ffusion ne-dimensional System - ZIB

skade eaction ffusion ne-dimensional System - ZIB

skade eaction ffusion ne-dimensional System - ZIB

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Tehnicl Repot TR 9-9 (July 193)<br />

Jens Lang<br />

<strong>skade</strong> <strong>eaction</strong> <strong>ffusion</strong><br />

<strong>ne</strong>-<strong>dimensional</strong> <strong>System</strong>


Jens Lang<br />

KARDOS — KA<strong>skade</strong> R<strong>eaction</strong> Di<strong>ffusion</strong><br />

O<strong>ne</strong>-<strong>dimensional</strong> <strong>System</strong><br />

Abstract. A software package for the adaptive solution of time-dependent<br />

r<strong>eaction</strong>-di<strong>ffusion</strong> systems and i<strong>ne</strong>ar elliptic systems in o<strong>ne</strong> space dimenson<br />

is presented. The used algorithm is based on fundamental arguments in<br />

LANG/WALTER [4]. Here, only brief outli<strong>ne</strong>s of the algorithm are given.<br />

This software package is based on the KASKADE olbox [3]<br />

Key words: Rothe method, embedded Runge-Kutta method, adaptiv<br />

ultilevl Fnite Element method.


Contents<br />

Introducti<br />

efng a problem<br />

eading ri<br />

ommad lngua<br />

For programmers oly 10<br />

efining a tim problem 10<br />

efining a time ntegrator 11<br />

Time integration process<br />

id manageent 17<br />

exampl<br />

er funtions for a population ecology odl 18<br />

efining he <strong>ne</strong>w probl 22<br />

oviding two omon arse grids 22<br />

alog wih the sysem<br />

efereces 25


haper<br />

ntroduction<br />

Usng the program KARDOS, sysems of semli<strong>ne</strong>ar parabolic initial boundary<br />

value problems of the for<br />

{x)ut ~ {D{X)U) F(u X G 0 C R\ t G [t t<br />

Ci(, ^GTiCön<br />

un + a(x)u £2(^ x x £ T2 C df<br />

u(tx) = u0(x<br />

are solvable. Here, u = (u u2,... ur) is a vector function The matrix<br />

function P(x) may vanish on subset of ft. The discretizaton is do<strong>ne</strong> by<br />

the Rothe method. In contrast to he widespread method of li<strong>ne</strong>s, time is<br />

discretized first than space. The main advantage of this sequence is the<br />

possibility o compute the pace discretizaton optimal during the time integration<br />

b an adaptiv multileve finite element method. Therefore the<br />

KASKADE toolbox is modified to handle o<strong>ne</strong>-<strong>dimensional</strong> problems. In<br />

KARDOS a special embedded Runge-Kutta method of order 32) has bee<br />

implemented. This method keeps its accuracy even in the case of ifferenial<br />

algebraic equations (P(x) = 0 somewhere).<br />

The above differetial equations can be reformulated into an abstract Cauchy<br />

problem poibl of differenal-algebraic type in an appropriate Hilbrt<br />

pace H<br />

Pu f(u u G H ,t e[tt<br />

u(0) = u0<br />

Now, a three-stage embedded Rosenbroc ethod for his pure tim problem<br />

looks as follows:<br />

{P ~ 7" r /«(«o))A;8 = r/(u0 + Yl a<br />

1.<br />

) + T f{uo Y l i = 1 3<br />

3=1 J=<br />

Uo +<br />

u0 + Y<br />

3 =<br />

1.3)


Yet this frm not suited to be implemented straight-forward, becuse<br />

along with function evaluations there are still matrix*vector producs on the<br />

ighhand ide. The ransformation<br />

leads to the <strong>ne</strong>w ysem<br />

/ "fi * — A<br />

1 \<br />

P-fu(u0) {u0 + J2 a J2— « = 1<br />

r 7 i=1 j=1<br />

uo ^ r (1.<br />

In KARDOS a special set of parameters, which guarantees L-stabiity of the<br />

chosen method, is used. Setting 711 = 722 = 733 := 7 only two function<br />

valuations and o<strong>ne</strong> matrix inversion are <strong>ne</strong>eded on the righthand side. The<br />

corresponding method was given by ROCHE [], who gives further sateent<br />

about convergence and consisteny.<br />

efficent<br />

0 . 5 2 8 4<br />

704526589 9 3 9 4 1<br />

7309 0.940143465<br />

09140443903 0.<br />

1.99625219 0.874044410<br />

1.99625219 4797<br />

0. 223756213<br />

ue to the drence of the pproximaed ues of er 3 and<br />

timeError := ||u (1-<br />

we have a good estimator of the main error term descibing the ocal error<br />

of the econd order method. The proposal for the <strong>ne</strong>w te ize is<br />

timeTol \<br />

afeFa — — 1-<br />

timeError


The nom whih KARDOS uses s a weighted L-no, giv by<br />

whe<br />

it<br />

uAbsi<br />

uRelMxi<br />

\\ u<br />

r-<br />

||«<br />

||^||o < f ^ i<br />

uAfe, < ||u||o < uRelMxi<br />

uRelM ||u<br />

ReM RTOL o ,<br />

uA6s ATOL * (O) 1 /<br />

:i-7)<br />

Scaling can be tur<strong>ne</strong>d on or off. If the scaled error norm is used, the tolerances<br />

RTOLi and ATOLi have to be seleced very carefully to reflect accurately<br />

the scale of the problem. The tolra<strong>ne</strong> ATOLi should indicate the absolute<br />

value at which the i-th compo<strong>ne</strong>nt is essentially insignifican. O the other<br />

hand, the value RTOLi affects the relative accuracy of the i-th compo<strong>ne</strong>nt<br />

with respect to its maximal value in time. This control turns out to be quite<br />

efficient and robust for a wid lass of problems. Howeer, it is cear that i<br />

is not a univeral mthod.<br />

To implement o<strong>ne</strong> time step, o<strong>ne</strong> elliptic proble has to be solved at each<br />

tage of the Rosenbrock method. This is do<strong>ne</strong> by means of an adaptiv<br />

ultilevel finite element method elaborated in recent years, see DEUFLHARD<br />

et al. []. This method is an excellent tool to adapt the space discretization<br />

for the current solution in uch a way, that a prescribed tolerance spaceTol<br />

is achieved. KARDOS uses standard li<strong>ne</strong>ar elements con<strong>ne</strong>cted with local<br />

error estimator of BABUSKA-HEINBOLDT [1] yp. We get at each tage,<br />

discretizations of the form<br />

B T v ) = n(v) e SnVvn e S i = 3 1.8)<br />

where Sn denotes the space of al ntinuous, piecewise li<strong>ne</strong>ar functions on<br />

partition An of 0, satisfying the Dirichlet boundary conditions. In S% hey<br />

vanish on the Dirichlet boundary. The equations only differ in the respective<br />

righthand id and in the pecial boundary conditions taken in onsider<br />

ation.


To cntrol the pace dicretiztion, we restrict urselves to the firt stage of<br />

the Rosenbrock method which is exactly the semiimplicit Euler method applied<br />

to the system (1.2). According to a local principle, on each current grid<br />

an error estimation is computed. Therefore we consider the corresponding<br />

elliptic differental equation on each element, imposng the urrent solution<br />

of the Euler method UE as boundary conditions, and solve it approximately<br />

by a quadratic finite element method. The difference ek between the li<strong>ne</strong>ar<br />

and quadratic approximation over the kth elent satisfies<br />

(e


paceTol<br />

The final grid is used for solving the other elliptc problems too. Only o<strong>ne</strong><br />

grid is appled for all unknowns of the ystem<br />

Setting the parameter globTol, KARDOS ontrols the space and time is<br />

retization due t he special tolerances<br />

aceTol = globTol/3.0 , timeTol = globTol/0 .<br />

This specific splitting results from the chosen parameters of the method. O<br />

the other hand, the parameters spaceTol and timTol allow specal tuning,<br />

desired. For more details see LANG/WALTER [4,]<br />

In the case of inconsisent sarting values for differential-algebraic systems<br />

it is possible to use an implicit Euler method in the firt time step coupled<br />

with a damped Newton thod.<br />

As a program, which handles a very ge<strong>ne</strong>ral class of problems, KARDOS<br />

cannot succed for all problems. Experiments have hown, that the compuations<br />

have often been improved settng the paramters ery carefully. In<br />

reme cases the iterativ olver may fail


haper<br />

efining roblem<br />

At first the user has to check that in the main file kardos.c the static param<br />

eter time is set t o<strong>ne</strong>. Next the desired number of equations noEqn used in<br />

he funcions<br />

nitProblemO'kardos",100,noEqn,250,FULL)<br />

nitTimeProblem("kardos",100,noEqn)<br />

to prepare the memory has to be inserted. At the momnt the maximal<br />

number is 10. It can be changed easly in nods.h settng the fixed parameter<br />

MAX_NODE_GROUPS.<br />

The actual problem is defi<strong>ne</strong>d by the functions<br />

Parabolic<br />

Laplace<br />

onvection<br />

elmholtz<br />

ource<br />

acobian<br />

nitialFunc<br />

auchy<br />

irichlet<br />

P(x)<br />

di<strong>ffusion</strong> matrix D(x)<br />

not carried out! (IGNORE)<br />

put in the righhand id (IGNORE<br />

force term F(u)<br />

jacobian of the force te (u<br />

initial values u0(x)<br />

boundary values ^2(t}x)}o(x<br />

boundary values £(tx)<br />

The procedur SetTimeProblem announces the problem defi<strong>ne</strong>d that way to<br />

he KARDOS toolbox. According to the fact, that o<strong>ne</strong> example is better<br />

han thousand explanatons, the reader is referred to sud ntensively the<br />

ile stdtimeprob.c.<br />

nt: etting time=0 KARDOS can also be used o solv systems of li<strong>ne</strong>ar<br />

liptic partial dfferential equations i o<strong>ne</strong> spac imenson omarabl to<br />

LLKASK [3]


haper<br />

din id<br />

KARDOS requires two common starting grids, which first have to be read<br />

with the help of the command readtri. During the computation o<strong>ne</strong> grid concerns<br />

the starting values, on the other grid he urrent solution is computed<br />

adaptively.<br />

Beside a geometrical descripton of the coarse space discretization, the sor<br />

of boundary conditions has to be declared. For that, the parameters B, I, D<br />

and C, which stand for Boundary, Interor, Dirichlet and Cauchy, are avail<br />

able. Furthermore, it's possible to characterize different subdomains through<br />

lassparameter. A ge<strong>ne</strong>ral input reads as follows:<br />

grid name<br />

Dimension:(numbe of points,number of edges<br />

point index:x-coordinate,B or I to characterize<br />

he location of the point, I or D or C to characterize<br />

he boundary conditions for all compo<strong>ne</strong>nts, classparamete<br />

to characterize a specal propery onl on the boundar<br />

END<br />

edge index:(left point index,right point index), cassparameter<br />

to characterize a special propery of a subdomain<br />

END<br />

n example oncerning two compo<strong>ne</strong>nts with mixed boundary conditions on<br />

[0,1] and two different materials in [0,0.) and (051] looks lik the following<br />

input stream<br />

xamplel<br />

Dimension: 4,3)<br />

0:0.B,DC,<br />

0.1,11<br />

2:0.1,11<br />

3:1.B,CD1<br />

END<br />

0,<br />

1,,0<br />

1<br />

ND<br />

In<strong>ne</strong>r boundary points are available.


haper<br />

C o n d ng<br />

All specal commands which K ARD OS <strong>ne</strong>eds for the time integration are ex<br />

plai<strong>ne</strong>d n the following. A list of all commands can be found in kardos.def<br />

All other ommands not explai<strong>ne</strong>d here are used as in KASKADE.<br />

KARDOS reads at the start a file kardos.startup which contains a sequence<br />

of ommands and executes these commands. If no quit is incuded, more<br />

ommands are requesed from sandard input.<br />

timeproblem<br />

A tim probl is selected.<br />

inftimeproblem<br />

informs about the urrent tim probl<br />

seliterate<br />

For the time i<strong>ne</strong>gration the paramters ssortim and stabtime are avail<br />

abl<br />

selrefi<strong>ne</strong><br />

For different refi<strong>ne</strong>ent the paramete anval or extrapol are available.<br />

seltimeinteg<br />

A time integrator is sected. The parameters rodas and euler are available.<br />

The Euler method can be used only for the sarting tep.<br />

timestepping<br />

This command corresponds to the solve-command of KASKADE. The tim<br />

i<strong>ne</strong>graton is carried out. The following parameters can be used:


verboseP<br />

scaling<br />

masteps nt<br />

tstart eal<br />

tend eal<br />

timestep eal<br />

globtol<br />

spacetol eal<br />

timetol eal<br />

itertol eal<br />

itermasteps nt<br />

showsol nt<br />

atoli eal<br />

rtoli eal<br />

Important da prnted. A he momnt,<br />

always true.<br />

ep size control: 0 absolute,<br />

1 for relative. If scaling is set to be 1, so<br />

all corresponding parameters atoli, rtoli<br />

il,2,...,number of unknowns have to be et too.<br />

umber of maximal tim teps<br />

starting tim<br />

final time<br />

initial ime ep<br />

accuracy demanded for the integrator (internal<br />

pacetol and timetol ar et automatically)<br />

desred space accurac<br />

desired time accuracy (if spacetol<br />

and timetol are selected, hen internal globtol<br />

is set)<br />

desred relative accuracy of he ierativ<br />

olver for the li<strong>ne</strong>ar sysems<br />

standard is 0.0001<br />

maximal number of iterations, standard is 1000<br />

graphic is plotted every Int seps, standard is 1<br />

i=l,...,number of unknowns, <strong>ne</strong>cessary input for<br />

every unknown to control the time step size<br />

relatively (scaling 1). The tolerance atol should<br />

ndicate the absolute value at which the<br />

corresponding compo<strong>ne</strong>nt is essntiall<br />

insignificant. The tolerance rtol affects<br />

the relative accurac with respect to the<br />

maximal value in time.


haper<br />

r o g e r only<br />

This chapter gives some information to get a feeling for the internal structur<br />

of the program Of course, it cannot mention all details. Furthermore<br />

for a better understanding it is <strong>ne</strong>cessary o read al header and c-files of<br />

K ARD OS very carefully.<br />

5.1 Defining a time problem<br />

To include all data of a initial boundary value problem two <strong>ne</strong>w data struc<br />

ures are added.<br />

struct timeProblem<br />

char *name;<br />

int (*Parabolic)(...);<br />

int (*Laplace)(...);<br />

int (*onvection)(...);<br />

int (*elmholtz)(...);<br />

int (*ource)(...);<br />

int (*Jacobian)(...);<br />

real (*InitialFunc)(...);<br />

int (*auchy)(...);<br />

int (*irichlet)(...);<br />

int (*ol)(...);<br />

struct timeProblemType<br />

char *name;<br />

int maxNoOfTimeProblems;<br />

int noOfEquations;<br />

The access to these srucures is realized by he pointers<br />

timeProblem *actTimeProblem, *timeProblems;<br />

timeProblemType *theTimeProblem;<br />

Furthermore, there are some functions t announc ertain problms within<br />

he program<br />

int etTimeProblem(char *name, char **varames<br />

int *Parabolic,<br />

10


A tim probl is announced.<br />

int *Laplace,<br />

int *onvection,<br />

int *elmholtz<br />

int *ource,<br />

int *acobian,<br />

real *InitialFunc,<br />

int *auchy,<br />

int *irichlet,<br />

int *ol)<br />

int SetStdTimeProblemsO<br />

ome standard time problems are announced.<br />

void SetTimeProblemAddressesO<br />

Special addresses are set to sect time problems within the ommand language.<br />

int nitTimeProblem(char *name,<br />

int noOfTimeProblems,<br />

int noOfEquations)<br />

The current timeProblemTyp-sructure is built up<br />

5.2 Defining a time integrato<br />

To defi<strong>ne</strong> a time integrator the ructure timentegMethod is used. It oniss<br />

of the following elements:<br />

char *name<br />

ame of the im ntegrator<br />

int verboseP<br />

ontrol of the informaton output, sandard: true<br />

int scaling<br />

ontrol of the nor for the time error, 0: absolute, 1: relativ<br />

int showSol<br />

ontrol of the picture plot, standard: 1


int nonNegativity<br />

ontrol of the non<strong>ne</strong>gativi of the olution, unused<br />

int noOfTimeteps<br />

number of the urrent tim teps<br />

int maxSteps<br />

aximal number of time steps<br />

int noOfStepReductions<br />

number of the time step reducons within an integraton tep<br />

int maxStepReductions<br />

maximal allowed im ep redtions within an integraton tep<br />

tandard:<br />

int stepTypePar<br />

differeiation from the starting step<br />

STAR_STEP: starting step, LATER_STEP: later sep<br />

int backDepth<br />

grid depth, on which ever olution process is sarted again, sandard: 0<br />

real time<br />

local starting time<br />

real <strong>ne</strong>wTime<br />

local nal tim<br />

real tEnd<br />

global final time<br />

real timeStep<br />

length of the time step<br />

real <strong>ne</strong>wTimeStep<br />

<strong>ne</strong>w propoed im ep


eal tRest<br />

emai<strong>ne</strong>d global im<br />

real gammaStab<br />

tabili arameter of the mthod<br />

real timeTol<br />

allowed olra<strong>ne</strong> of the local time error<br />

real spaceTol<br />

allowed olra<strong>ne</strong> of the local space error<br />

real globTol<br />

allowed olra<strong>ne</strong> of the global error<br />

real timeError<br />

urren ocal time error<br />

real globError<br />

urrent global error<br />

real trueError<br />

rue error if solution known, unused<br />

real normSol<br />

nor of the solution<br />

real timeStepFactor<br />

factor by which the old time step is divided<br />

real rho<br />

imeTolglobTol, standard:<br />

real maxTimeStep<br />

aximal time step, standard: 0.<br />

real timeStepSafe<br />

afety factor for the onrol of the tim tep, sandard:


eal spaceTolFac<br />

paceTolglobTol, sandard: 1.<br />

TRIANULATION *compTrian<br />

urren omputation grid<br />

TRIANGULATON *resultTrian<br />

grid for the sartng values<br />

int *InitTimenteg<br />

inializes the tim ntegraton process<br />

int *Timente<br />

ealizes the im ntegration proces<br />

int *CloseTimeInteg<br />

oses the im ntegration proces<br />

int *AssRhsl<br />

omputes the righthand side of the firs tage<br />

int *AssRhs2<br />

omputes the righthand side of the second sage<br />

int *AssRhs3<br />

omputes the righthand side of the thid stage<br />

problem *firstStage<br />

iptic problem of he firt stage<br />

problem *secondtage<br />

iptic problem of he second stage<br />

problem *thirdStage<br />

iptic problem of he third sage<br />

The access to the dfferent tim ntegrators is do<strong>ne</strong> by he pointe<br />

timentegMethod *actTimentegtor, *timenteMethods;


To bui up im ntegr the fllowing funcions a avable<br />

int fTimentegMethod(char *name,<br />

int *InitTimeInteg,<br />

int *TimeInteg,<br />

int *CloseTimenteg,<br />

char *nameFirstStage,<br />

char *nameSecondStage,<br />

char *nameThirdtage,<br />

int *sshsl,<br />

int *sshs2,<br />

int *AssRhs3,<br />

real spaceTolFactor,<br />

real gammatability)<br />

announces time i<strong>ne</strong>grator. Beside a name, functions for the realiza<br />

ion of the method (initTimenteg, Timenteg, loseTimelnteg), the<br />

corresponding elliptic problems ("nameFirstStage" , "nameSecondStage" ,<br />

"nameThirdStage") the functons for the computation of the righthand<br />

ides ssRhsl, AssRhs2, AssRhs3), the parameter spaceTolFac and the<br />

tabilit parameter gammaStab have to be inserted,<br />

uch as DefTimeIntegMethod("rodas",InitIntegtep,R°dasStep,lose<br />

ntegStep,"rodasl", "rodas2","rodas3",AssRHSodasl,ssRHS<br />

odas2,ssRHSodasTHIRDDAS_GA) .<br />

int SetStageProblemsO<br />

The elliptc problems occurring in each stage of the method are annou<strong>ne</strong>d<br />

within ettageProblems by calling the funcon etProblem.<br />

5.3 ime interaion process<br />

Picture 1 shows the whole process of he time integration method. The program<br />

comes to an end when the final time or the maximal step number are<br />

eached or when the maximal number of sep ize reducions wihin o<strong>ne</strong> <strong>ne</strong>graton<br />

ep is exceeded.


espping<br />


5.4 Grid managent<br />

The program KASKADE supports work with several grids which are con<strong>ne</strong>cted<br />

to a list. A time integration requires to exchange values on differently<br />

efi<strong>ne</strong>d grids. This leads to cos eek algorihms. To be more efective here,<br />

he srucure EDG is enlarged he <strong>ne</strong>w elent<br />

*twin<br />

If the considered edge exists in he other triangulation, then this elemen<br />

points at he corresponding element, otherwise it is nil. In the structur<br />

TRIANGULATION the <strong>ne</strong>w element int twinRelation stands for the e<br />

istence of such a relation between two triangulations.<br />

To work wih tw grids the folowing funcons can be used:<br />

int SetTwinRelOnCoarseGrids(TRIANGULATI *t,RIUL *t)<br />

inializes the twirelaton of two arse grids.<br />

DG *FindBrotherEdge(real ,EDG *edFrom<br />

nds the edge of the other grid n which a given poin ies.<br />

real InterpolateInEdge(real E *edn,int var,int inde<br />

gives back an nterpolated value.<br />

17


haper<br />

le<br />

In this chapte how how to add a <strong>ne</strong>w problem to the list of predefi<strong>ne</strong>d<br />

problems:<br />

defi<strong>ne</strong> a s of functions to characerize the inial boundary value probem<br />

add the problem to the list of predefi<strong>ne</strong>d problems (call etProblem,<br />

using nitUserTime in user. of the kardos-directory,<br />

add tw ommon car grids in the grids-directory,<br />

use kardos . startup for an automatic ommand language dialog wi<br />

the sysem<br />

6.1 ser functions for opulation ecolo del<br />

Let us olve the folowing equatons<br />

- 0.<br />

+ 1-u<br />

in the domain 0 ) for t > 0, with the boundary condons<br />

and the initial condition<br />

= 0 for t > x = 0 and x =<br />

5 for<br />

4x + 1 for<br />

-4x + 11 for<br />

for<br />

10 for<br />

4x + for<br />

-4x + for<br />

for<br />

18


This system of nonli<strong>ne</strong>ar equations modls a cerain planktonit predator<br />

prey suations in which crowding is a facor. The KARDOS user defi<strong>ne</strong>s in<br />

user. he following funtions:<br />

static int EcoParabolic(real x, int classA, real t, real *fVals,<br />

int equation, int variable)<br />

if (equation!=variable) return F_IGN0RE;<br />

switch (variable)<br />

{<br />

case 0: fVals[0] = 1.0;<br />

break;<br />

case 1: fVals[0] = 1.0;<br />

break;<br />

return F_C0ISTAIT;<br />

static int EcoLaplace(real x, int classA, real t, real *fVals,<br />

int equation, int variable)<br />

if (equation!=variable) return F_IGN0RE;<br />

switch (variable)<br />

{ case 0: fVals[0] = 0.0125;<br />

break;<br />

case 1: fVals[0] = 1.0;<br />

break;<br />

return F_C0ISTAIT;<br />

static int EcoConvection(real x, int classA, real t, real *fVal,<br />

int equation, int variable)<br />

return F_IGI0RE;<br />

static int EcoHelmholtz(real x, int classA, real t, real *fVal,<br />

int equation, int variable)<br />

return F_IGI0RE;<br />

static int EcoSource(real x, int classA, real t, EDG* ed,


eal valO, vail;<br />

real *fVal, int equation,<br />

real (*Func)(real,EDG*,int,timeIntegMethod*))<br />

switch (equation)<br />

{<br />

case 0: valO = Func(x,ed,0,actTimeIntegtor);<br />

vail = Func(x,ed,l,actTimeIntegtor);<br />

fVal[0] = ((35.0+16.0*val0-val0*val0)/9.0-vall)*val0;<br />

break;<br />

case 1: valO = Func(x,ed,0,actTimeIntegtor);<br />

vail = Func(x,ed,l,actTimeIntegtor);<br />

fVal[0] = (val0-1.0-0.4*vall)*vall;<br />

break;<br />

return F_VARIABLE;<br />

static int EcoJacobian(real x, int classA, real t, EDG* ed, real *fVal,<br />

int equation, int variable,<br />

real (*Func)(real,EDG*,int,timeIntegMethod*))<br />

real valO, vail;<br />

switch (equation)<br />

{<br />

case 0: if (variable==0)<br />

{<br />

valO = Func(x,ed,0,actTimeIntegtor);<br />

vail = Func(x,ed,l,actTimeIntegtor);<br />

fVal[0] = (35.0+32.0*val0-3.0*val0*val0)/9.0-vall;<br />

else if (variable==l)<br />

{<br />

vail = Func(x,ed,l,actTimeIntegtor);<br />

fVal[0] = -vail;<br />

else <strong>ZIB</strong>StdOut("error in EcoJacobian\n");<br />

break;<br />

case 1: if (variable==0)<br />

{<br />

vail = Func(x,ed,l,actTimeIntegtor);<br />

fVal[0] = vail;


eturn F_VARIABLE;<br />

else if (variable==l)<br />

{<br />

valO = Func(x,ed,0,actTimeIntegtor);<br />

vail = Func(x,ed,l,actTimeIntegtor);<br />

fVal[0] = val0-1.0-0.*vall;<br />

else <strong>ZIB</strong>StdOut("error in EcoJacobian\n");<br />

break;<br />

static real EcoInitialFunc(real x, int classA, int variable)<br />

{<br />

real val = 0.0;<br />

switch (variable)<br />

{<br />

case 0: if ((0.0


fVals[l] = 0.0; /* */<br />

else <strong>ZIB</strong>StdOutCerror in EcoCauchy\n");<br />

break;<br />

case 1: i ((x==0.0)I I(x==2.5))<br />

fVals[0] =0.0; /* Sigma */<br />

fVals[l] = 0.0; /* i */<br />

return F_COISTAIT;<br />

eise <strong>ZIB</strong>StdOutC"error in EcoCauchy\n");<br />

break;<br />

6.2 Defining the <strong>ne</strong>w problem<br />

ext we def<strong>ne</strong> the <strong>ne</strong>w problem wih the help of the following procedure<br />

int InitUserTimeQ<br />

{<br />

f (!SetTimeProblem("example1",varName,<br />

EcoParabolic,<br />

EcoLaplace,<br />

EcoConvection,<br />

EcoHelmholtz,<br />

EcoSource,<br />

EcoJacobian,<br />

EcoInitialFunc,<br />

EcoCauchy,<br />

EcoDirichlet,<br />

(int(*)(real,int,real,real*,int))nil));<br />

return true;<br />

A call of nitTimeUser is carried out automatically from he main program<br />

6.3 roviding tw como coar rid<br />

Now we inser two arse grids n the grids-decory using the files ecologyl<br />

and cology2<br />

ecologyl ecology2<br />

Dimension:(11,10) Dimension:(11,0)<br />

22


0 0.0,B,CC 0 0.0,B,CC<br />

1:0.25,1,11 1:0.25,1,11<br />

2:0.5,1,11 2:0.5,1,11<br />

3:0.5,1,11 3:0.5,1,11<br />

4:1.0,1,11 4:1.0,1,11<br />

5:1.25,1,11 5:1.25,1,11<br />

6:1.5,1,11 6:1.5,1,11<br />

:1.5,1,11 1.5,1,11<br />

:2.0,1,11 :2.0,1,11<br />

9:2.25,1,11 9:2.25,1,11<br />

0:2.5,B,CC 10:2.5,B,CC<br />

EID EID<br />

0 (0,1) 0 (0,1)<br />

1 (1,2) 1 (1,2)<br />

2 (2,3) 2 (2,3)<br />

3 (3,4) 3 (3,4)<br />

4 (4,5) 4 (4,5)<br />

5 (5,6) 5 (5,6)<br />

6 (6, 6 (6,<br />

( (<br />

(9) (9)<br />

9 (9,0) 9 (9,10)<br />

EID EID<br />

6.4 ialo with the ste<br />

KARDOS reads at the tart a file kardos.startup which contains a sequenc<br />

of commands and executes these commands. That way we get an automat<br />

dialog wih the system. Of course, a step-by-step ialog is available to.<br />

deposit in kardos.starup the following omands:<br />

read ../grids/ecologyl.g<br />

read ../grids/ecology2.g<br />

timeproblem examplel<br />

seliterate pbicgstabtime<br />

selmatmul sparse<br />

selestimate babuska<br />

selrefi<strong>ne</strong> meanval<br />

seltimeinteg rodas<br />

window <strong>ne</strong>w automatic name solutionl<br />

graphic solution triangulation<br />

seldraw 0<br />

window <strong>ne</strong>w automatic name solution2<br />

graphic solution triangulation


seldraw 1<br />

timesteppin timestep 0.0001 maxsteps 200 globTol 0.02 tEnd 10.0<br />

ow we can start the program


ferences<br />

Babus, W.C. Rheinboldt: Error estimas for adptive fin et<br />

comutons. SIAM J. Numer. Anal 15 p. 7364 (1978)<br />

] P. Deuflhard, P. Lei<strong>ne</strong>n, H. Yserentant: Concepts an Adaptie Herarcal<br />

F e Elen Code. IMPACT, , p. 3-3 1989)<br />

3] B. Erdmann, J. Lang, R. Roitzsch: KASKADE - Manual. To appear as<br />

Technical Report TR 93-5, Konrad-Zus-Zentrum (<strong>ZIB</strong>) (1993)<br />

[4] J. Lang, A. Walter: A Fnie Eent Method Adaptive n Space and<br />

Tim for Nonli<strong>ne</strong>ar R<strong>eaction</strong>-Dffuson <strong>System</strong>s. IMPAC of Comput<br />

ing Scence and Engi<strong>ne</strong>erng, , p. 9-314 (199<br />

] J. Lang, A Walter: An Adaptive Rothe Method for Nonli<strong>ne</strong>ar Reacon-<br />

Diffuson Sstms. Appled Numerial Mathematics 13 p. 1 1 4<br />

1993)<br />

M. Roche: Rosenbrock Methods for ifferenal Albraic Equatons.<br />

umer Math. 52, p. 4 (1<br />

Acknowledgements. I acknowledge R. Roitzsch for inspiring disussions<br />

on the field of programming and for making available always he urrent<br />

version of KASKADE. I also thank U. Nowak for supplying me wih referen<br />

olutions obtai<strong>ne</strong>d y his finite dffere<strong>ne</strong> method.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!