An Object-Oriented Design of a Simulator for ...

1 downloads 0 Views 297KB Size Report
The Di pack Preprint Series. Preprint. An Object-Oriented. Design of a Simulator for Stochastic. Groundwater Flow. Hans Petter Langtangen. Harald Osnes.
ISSN 0808-2839

The Di pack Preprint Series Preprint

An Object-Oriented Design of a Simulator for Stochastic Groundwater Flow Hans Petter Langtangen Harald Osnes

Applied Mathematics

This perprint is compatible with version 2.5.0 of the Di pack software. Since the contents of this preprint may be changed to re ect modi cations of the software, distribution of this document should preferrably be done electronically from the Di pack URL cited below.

Di pack Preprint

Revised

Title

An Object-Oriented Design of a Simulator for Stochastic Groundwater Flow Written by

Hans Petter Langtangen Harald Osnes Approved by

The development of Di pack is a cooperation between  SINTEF Applied Mathematics  Department of Mathematics, University of Oslo  Department of Informatics, University of Oslo The project is supported by the Research Council of Norway through the research program Numerical Computations in Applied Mathematics (110673/420). For updated information on the Di pack project, including current licensing conditions, see the web page at the following URL http://www.oslo.sintef.no/diffpack/

Copyright

c

SINTEF and University of Oslo March 5, 1997

Permission is granted to make and distribute verbatim copies of this report provided the copyright notice and this permission notice is preserved on all copies.

Contents

1 Introduction 2 Presentation of the problem 3 Class hierarchy for the pressure equation

1 2 3

3.1 Class Head : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 3 3.2 Class HeadStoch : : : : : : : : : : : : : : : : : : : : : : : : : 5 3.3 Class HeadStoch2 : : : : : : : : : : : : : : : : : : : : : : : : : 7

4 Class hierarchy for the advection-dispersion equation 4.1 4.2 4.3 4.4

Class AdvDisp : : : : Class AdvDispE : : Class AdvDispStoch Class AdvDispStoch2

: : : :

: : : :

: : : :

: : : :

: : : :

5 Combination of the hierarchies 6 Overview of the class structure 7 Summary and conclusion

i

: : : :

: : : :

: : : :

: : : :

: : : :

: : : :

: : : :

: : : :

: : : :

: : : :

: : : :

: : : :

: : : :

: : : :

: : : :

: : : :

: : : :

: : : :

7

7 9 10 11

11 13 13

This preprint should be referenced as shown in the following

Bib

TEX entry:

@techreport{DPpre , author = "Hans Petter Langtangen and Harald Osnes", title = "An Object-Oriented Design of a Simulator for Stochastic Groundwater Flow", institution = "SINTEF Applied Mathematics and University of Oslo", type = "The Diffpack Preprint Series", number = "\#{} ", year = " ", note = "(ISSN 0808-2839)" }

ii

An Object-Oriented Design of a Simulator for Stochastic Groundwater Flow Hans Petter Langtangen

Harald Osnes

Abstract The report is a documentation of Di pack software for the following mathematical model: @c @t

+ v  rc = r  (Drc) ; v = ? Kn r; r  (K r) = 0;

where the primary unknowns are c (solute concentration) and  (head). The conductivity K is a stochastic eld. Hence, this is a system of stochastic partial di erential equations. The equations are solved by a nite element method, with Monte Carlo simulation for the stochastic features of the problem.

1 Introduction The software to be discussed in the present report was developed as a part of the PhD thesis in stochastic mechanics of one of the authors [5]. It contains a collection of standard Di pack C++ classes for solving a system of partial differential equations by the nite element method. Before the implementation started several general criteria for the basic design were given. An objectoriented structure was a fundamental requirement, along with extensive use 1

Page 2

Stochastic Groundwater Flow

of inheritance and re-use of code. Also, the importance of modularity was stressed. This means that the di erent parts of the software package can be easily deplugged and veri ed separately. Finally, the code should satisfy the di erent Di pack standards for programming, including the use of Di pack menu interface. A broad range of problems regarding groundwater ow and transport of contamination can be considered by the present software. The program package deals with both deterministic and stochastic problems, but in the present version it is restricted stationary ow elds. However, the extensions required for dealing with time-dependent velocities are not very large. The software is available from the subdirectory simulator (relative to the directory of the present report) and from the World Wide Web (WWW) page http://www.math.uio.no/~hpl/dpdoc/StochGroundFlow/www/index.html

2 Presentation of the problem We study transport of passive (non-reactive) solute particles following the

ow of groundwater through porous media. The problem is governed by the following set of di erential equations @c + v  rc = r  (Drc) ; (1) @t K v = ? r; (2) n r  (K r) = 0: (3) Here, c is the solute concentration, v is the uid velocity and D is a dispersion coecient (tensor) modeling molecular di usion and/or pore-scale dispersion. In equations (2) and (3) K is the hydraulic conductivity (closely related to the permeability), n is the e ective porosity (assumed to be constant) and  = z + p= is the hydraulic head, where p is the water pressure, z is the vertical coordinate and is the volumetric weight of the water. It is seen that the solute concentration is governed by the advection-dispersion equation (1), where the advective velocity is given by Darcy's law (2). However, before computing the velocity, we have to know the hydraulic head, which may be obtained from the pressure equation (3). In order to solve the latter equation, knowledge of the hydraulic conductivity for the porous medium is required. Several eld experiments performed lately demonstrate large spatial variability of the conductivity. Therefore, in spite of the lack of detailed measurements in most real applications there is excessive uncertainty

3. Class hierarchy for the pressure equation

Page 3

regarding the actual behavior of the property. This uncertainty a ects the output quantities in the model. The important task of quantifying the e ect of the uncertainty in input parameters upon the response is most consistently dealt with in a stochastic framework. Thus, the conductivity is modeled as a random eld, leading to stochastic behavior of the output quantities (hydraulic head, uid velocity and solute concentration). In the present study we assume that the conductivity is lognormally distributed with prescribed expectation and covariance functions, but other distributions may be applied with minor modi cations. We want to determine di erent statistical properties of the response. The stochastic solution of the problem is obtained by the Monte Carlo simulation (MCS) method, where equations (1)-(3) are solved for a large number of realizations of K . From these solutions statistical moments of the head, the velocity and the concentration are obtained. In Di pack this problem is implemented in an object-oriented way by de ning two class hierarchies, one of which solves the pressure equation, while the other deals with the advection-dispersion equation. To solve the entire problem given by (1)-(3) we simply combine the two class hierarchies.

3 Class hierarchy for the pressure equation We start by discussing a hierarchy dealing with the pressure equation. The base class, denoted Head, solves the deterministic equation. Afterwards, we introduce the HeadStoch class for the more complicated stochastic problem. Neither of these classes knows anything about the advection-dispersion equation. However, to prepare for the solution procedure of the entire system, (1)-(3), we de ne the HeadStoch2 class.

3.1 Class Head

The Head class solves the pressure equation (3) where the hydraulic conductivity, K , is deterministic and isotropic. Only a few modi cations are required in order to deal with a complete conductivity tensor. The problem is solved by a standard nite element method on general geometries. When the hydraulic head, , is found the uid velocity is easily computed from Darcy's law (2). Below, we show the most important functionality and data for the Head class. class Head : public FEM, public MenuUDC { public: Handle(DegFreeFE) dof; // dealing with ,e.g., degrees of freedom

Page 4

Stochastic Groundwater Flow

Handle(GridFE) Handle(FieldFE) Handle(FieldFE) Handle(FieldsPiWisConst) Handle(FieldsFE) Handle(LinEqAdm) Handle(Store4Plotting) protected: real dirichlet_val_1; real dirichlet_val_2; real neumann_val_1; virtual virtual virtual virtual virtual virtual virtual virtual virtual virtual virtual

grid; head; cond; velocity;

// finite element grid. // pressure/hydraulic head field // conductivity field // fluid velocity in the medium, // constant on each element smoothed_velocity; // nodal representation of velocity lineq; // administrator for linear eq systems database; // save the results to file

// const value for Dirichlet bo.ind. 1 // const value for Dirichlet bo.ind. 2 // const value for Neumann bo. ind. 1. Have to be 0

BooLean ok () const; void print (Os os) const; void setIC(); void fillEssBC (); // convention: void solveStationaryProblem (); void saveResults (); void updateDataStructures () {} void computeDerivedQuantities (); void calcVelocity (); void integrands (ElmMatVec& elmat, real coeff (FiniteElement& fe); // //

3 specified bo.ind.

FiniteElement& fe); (cond/perm) coefficient in the PDE needed by integrands

public: Head (); virtual ~Head () {} virtual void virtual void BooLean BooLean BooLean

adm (MenuSystem& menu); define (MenuSystem& menu, int level = MAIN, sys_grid = dpFALSE, sys_lineq = dpFALSE, sys_database = dpFALSE);

virtual void initGrid (GridFE* grid_ = NULL); virtual void scan (LinEqAdm* lineq_ = NULL, Store4Plotting* database_ = NULL); virtual void solveProblem (); virtual void resultReport () {} };

The class is organized as a standard Di pack simulator for solving deterministic partial di erential equations. It is derived from the FEM and MenuUDC classes, which equip the present class with functionality for the nite element formulation and the menu interface, respectively. The Head class contains,

3. Class hierarchy for the pressure equation

Page 5

e.g., handles to a nite element grid (GridFE) and several nite element elds (Field(s)FE). Furthermore, there are various functions that deal with the menu items, the boundary conditions and the solution procedure of the problem. Most of the functions are self-explanatory. For readers not familiar with nite element solvers in Di pack we refer to the report [2].

3.2 Class HeadStoch

Now, we consider the stochastic pressure equation. The conductivity is assumed to be a random eld. Thus, also the head behaves stochastically, and the stochastic di erential equation is solved by the MCS method. Both the original equation (3) and the stochastic rst-order problem

r2 = ?rm  rY 0

(4)

0

can be solved. In the latter equation  =  ? m (m = E []) is the stochastic deviation from the mean head and Y = Y ? mY (Y = log K and mY = E [Y ](constant)) is the random perturbation from the mean of the log conductivity. The simpli ed problem is included (mainly) in order to provide numerical solutions for problems that can be solved analytically. When dealing with the rst-order equation (4) the stochastic velocity is obtained from the following simpli cation of Darcy's law: exp(mY ) (rm (1 + Y ) + r ) : v=? (5)  n Otherwise, the original Darcy's law (2) is applied. In order to solve the stochastic problems sketched above we introduce the HeadStoch class. The main content of the class is given below. 0

0

0

0

class HeadStoch : public Head, public StochasticPDE { public: Handle(FieldFE) head_expec; //For first order problems the (first order) // expectation is stored here. BooLean first_order_problem; protected: MomentsFieldFE moments; // for statistical moments of head Handle(Draw2D) method; // random field generator CorrAlongLine CorrAlongLine

transverse_covariance; streamline_covariance;

real chi_square_value; TestOfNormality testing;

// for head covariance // for head covariance

// normality test for the head

Page 6

Stochastic Groundwater Flow

Handle(FieldFE) normality_test_statistic; virtual void print (Os os) const; virtual BooLean ok () const; virtual void saveResults (); virtual void updateDataStructures (); virtual void integrands (ElmMatVec& elmat, FiniteElement& fe); virtual void calcVelocity (); public: HeadStoch (); virtual ~HeadStoch () {} virtual void BooLean BooLean BooLean

define (MenuSystem& menu, int level = MAIN, sys_grid = dpFALSE, sys_lineq = dpFALSE, sys_database = dpFALSE);

virtual void scan (LinEqAdm* lineq_ = NULL, Store4Plotting* database_ = NULL); virtual void solveProblem (); virtual void solveZeroOrderProblem ();

// for comp of zero-order expectation

// virtual functions required by StochasticPDE: virtual void initEstimators (); virtual void makeRealzOfInput (); virtual void solveDeterministicProblem (); virtual void updateEstimators (); virtual void dumpEstimatedSolution (); virtual void resultReport (); };

// for multiple runs, single compact output

The present class is derived from the Head and StochasticPDE classes, where functionality for the MCS method, i.e. ve pure virtual functions, is introduced by the latter class. A detailed description of the properties of the StochasticPDE class is available in the Di pack report [4]. Let us have a brief look at the HeadStoch class. In addition to some members introduced for the rst-order problem the class has a handle to an object of type Draw2D. This is a base class for di erent (2-D) methods generating realizations of (log) normally distributed random elds. There are also data for computing statistical properties of the head. All these features are explained in the report [4]. Furthermore, some comments should be made on the ve virtual functions (from the StochasticPDE class) that have to be implemented. The functions serve to initialize the statistical estimators, generate realizations of the input random eld, solve the deterministic problems, update the statistical

4. Class hierarchy for the advection-dispersion equation

Page 7

estimators and write the stochastic response properties to le. The class is also equipped with functionality for automatic generation of result reports.

3.3 Class HeadStoch2

Finally, from the HeadStoch class we derive the HeadStoch2 class. The class is introduced in order to prepare for the solution procedure for the system consisting of the pressure equation, Darcy's law and the advection-dispersion equation we introduce the HeadStoch2 class. The contents, i.e. a reference to the system administrator, can be seen below. class HeadStoch2 : public HeadStoch { public: HeadStoch2 (HeadAdvDispStochSystem& boss_) : boss(boss_) {} virtual ~HeadStoch2 () {} HeadAdvDispStochSystem& boss; };

// A reference to the system administrator

4 Class hierarchy for the advection-dispersion equation Now, we turn to time-dependent advection-dispersion equations. The class hierarchy introduced to solve such problems is based on the same principles as the class structure for the pressure equations. However, due to the timedependency and other di erences in the equations some modi cations appear in the implementation. These will be discussed brie y. We start by de ning a class dealing with deterministic equations.

4.1 Class AdvDisp

The AdvDisp class solves the deterministic advection-dispersion equation (1) by the nite element method. A large number of spatial discretization techniques is available, including several alternatives for the test functions and upwind weighting (Petrov-Galerkin) formulations. The time-discretization is de ned by the -scheme. The most important features of the class are shown below. class AdvDisp : public FEM, public MenuUDC {

Page 8

Stochastic Groundwater Flow

public: Handle(DegFreeFE) Handle(GridFE) Handle(FieldFE) Handle(FieldFE) Handle(FieldsFE)

dof; grid; u; u_prev; vel;

Handle(LinEqAdm) lineq; Handle(TimePrm) tip; Handle(Store4Plotting) database; protected: // coefficients in the equation: Ptv(real) velocity; Ptv(real) diffusion; real theta; // time integration rule ("theta"-rule) real beta; // 0 for stationary, coeff. for du/dt UpwindFE PG; int PG_method; virtual virtual virtual virtual virtual virtual virtual virtual virtual virtual virtual virtual virtual

void print (Os os) const; BooLean ok () const; void plotTimeSteps () { tip->plotTimeSteps (database->cplotfile); } void setIC(); void fillIC (); void fillEssBC (); void timeLoop (); void solveAtThisTimeStep (); void saveResults (); void updateDataStructures (); void computeDerivedQuantities () {} void integrands (ElmMatVec& elmat, FiniteElement& fe); void coeff (FiniteElement& fe); // coefficient in the pde // needed by integrands

public: AdvDisp (); virtual ~AdvDisp () {} virtual void adm (MenuSystem& menu); virtual void define (MenuSystem& menu, int level = MAIN, BooLean sys_grid = dpFALSE, BooLean sys_lineq = dpFALSE, BooLean sys_database = dpFALSE, BooLean sys_tip = dpFALSE); virtual void initGrid (GridFE* grid_ = NULL); virtual void scan (LinEqAdm* lineq_ = NULL, Store4Plotting* database_ = NULL, TimePrm* tip_ = NULL);

4. Class hierarchy for the advection-dispersion equation

Page 9

virtual void solveProblem (); virtual void resultReport () {} };

The main structure should be known from the discussion of the Head class in the section 3.1. We remark the handle to an object of type FieldsFE, holding the advective velocity of the equation. The handle can be bound to an external velocity object, or the velocity can be set by the class itself or read from le. It should also be stressed that due to the time-dependency of the present di erential equation there are some modi cations in the driver function. Instead of calling the function solveStationaryProblem it makes a call to the timeLoop function, where the loop for the time-integration is de ned and the nite element problem is assembled and solved for each time step. This is a relatively general procedure working for numbers of nonstationary equations. However, the present solution method is unreasonably inecient for advectiondispersion equations where the velocity and dispersion coecient are timeindependent. Then it is unnecessary to perform a complete nite element assembling and solution procedure for each time-step.

4.2 Class AdvDispE

The AdvDispEff class, which inherits the AdvDisp class, provides routines for ecient solutions of the deterministic advection-dispersion equation (1) where the velocity and dispersion coecient are time-independent, see, e.g., [3]. In this case the coecient matrix in the resulting algebraic equation system does not vary with time. Thus, it only has to be computed during the rst time-step. Furthermore, when the -scheme is applied, the right hand side vector is computed by multiplying a stationary matrix and the solution vector from the previous time-level. Due to the essential boundary conditions this vector has to be modi ed for each time-step. The present class takes advantage of the time-independent matrices, and the time-consuming process of obtaining the contribution from each nite element to the equation system is only included once. If the equation system is solved by (banded) Gaussian elimination, the LU-factorization is only performed during the rst time-step. The AdvDispEff class is de ned as follows. class AdvDispEff : public AdvDisp { protected: Handle(Matrix(real)) M_rhs; // right hand side vector of F. E. equations Vec(real) c; // source terms, Neumann conditions

Page 10 Vec(real) scratch; public: AdvDispEff (); virtual ~AdvDispEff () {}

Stochastic Groundwater Flow // used to compute the right hand side

virtual void makeSystem (DegFreeFE& dof,LinEqAdm& lineq,BooLean compute_A, BooLean compute_RHS, BooLean automatic_rule_adjustment = dpTRUE); };

The class contains members that store one matrix and two vectors for the right hand side of the algebraic equation system. Also, the virtual function makeSystem, which generates the equation system, is re-implemented for this ecient solution method. Now, we turn to the advection-dispersion equation with a stochastic velocity eld. In order to deal with this stochastic problem we introduce a new class in the AdvDisp hierarchy.

4.3 Class AdvDispStoch

From the AdvDispEff and StochasticPDE classes we derive a class AdvDispStoch that solves the transport equation (1) with a random varying velocity eld. The stochastic problem is solved by the MCS method. The extensions of the present class with respect to the AdvDisp and AdvDispEff classes are very similar to the corresponding situation from the Head hierarchy. Thus, the class structure should be easily understood. The main parts of the class are listed below. It should be remarked that the class does not know the Head hierarchy at all. class AdvDispStoch : public AdvDispEff, public StochasticPDE { protected: MomentsFieldFE conc_moments; TestOfNormality conc_normal_test; Handle(FieldFE) conc_normal_test_statistics; virtual void print (Os os) const; virtual void plotTimeSteps (); virtual BooLean ok () const; // saveResults() is overrided in order to avoid plotting of // the computed concentration profiles for each realization. virtual void saveResults (); virtual void updateDataStructures ();

5. Combination of the hierarchies

Page 11

public: AdvDispStoch (); virtual ~AdvDispStoch () {} virtual void define (MenuSystem& menu, int level = MAIN, BooLean sys_grid = dpFALSE, BooLean sys_lineq = dpFALSE, BooLean sys_database = dpFALSE, BooLean sys_tip = dpFALSE); virtual void scan (LinEqAdm* lineq_ = NULL, Store4Plotting* database_ = NULL, TimePrm* tip_ = NULL); virtual void solveProblem (); // The following functions from StochasticPDE have to be implemented here. virtual void initEstimators (); virtual void makeRealzOfInput (); virtual void solveDeterministicProblem (); virtual void updateEstimators (); virtual void dumpEstimatedSolution (); virtual void resultReport (); };

// for multiple runs, single compact output

4.4 Class AdvDispStoch2

Following the implementational strategies from the Head hierarchy we introduce the simple AdvDispStoch2 class, which purpose is to communicate with the class that administers the entire system. The class is de ned as follows: class AdvDispStoch2 : public AdvDispStoch { public: AdvDispStoch2 (HeadAdvDispStochSystem& boss_) : boss(boss_) {} virtual ~AdvDispStoch2 () {} HeadAdvDispStochSystem& boss; };

// A reference to the system administrator

5 Combination of the hierarchies Due to the object-oriented design of the solvers for the pressure and advectiondispersion equations the coupled stochastic problem (1)-(3) may be solved

Page 12

Stochastic Groundwater Flow

by de ning a class with a handle to each of the and classes. The new class is derived from the class, which introduces (pure) virtual functions required in the stochastic solution method and contains a handle to an object of type StochasticPDEvar. The latter class stores the current and total number of realizations in the MCS method. It should be remarked that the corresponding handles in the StochasticPDE classes introduced in the Head and AdvDisp hierarchies are bound to this object. The most important items of the HeadAdvDispStochSystem class are given below.

HeadAdvDispStochSystem HeadStoch2 AdvDispStoch2 StochasticPDE

class HeadAdvDispStochSystem : public MenuUDC, public StochasticPDE { protected: Handle(HeadStoch2) m_head; Handle(AdvDispStoch2) m_adv; Handle(GridFE) fe_grid; Handle(Store4Plotting) database; Handle(TimePrm) tip; virtual void print (Os ) const {} virtual BooLean ok (); virtual void resultReport (); // for multiple runs, single compact output public: HeadAdvDispStochSystem (); virtual ~HeadAdvDispStochSystem () {} virtual virtual virtual virtual

void void void void

adm (MenuSystem& menu); define (MenuSystem& menu, int level = MAIN); scan (); setUpCommunication ();

virtual void solveProblem (); // virtual functions from StochasticPDE virtual void solveDeterministicProblem (); virtual void makeRealzOfInput (); virtual void initEstimators (); virtual void dumpEstimatedSolution (); virtual void updateEstimators () {} };

We include a discussion on the main features of some important functions. After de ning the menu items, reading input values and initializing the di erent objects and elds properly, the setUpCommunication function

7. Summary and conclusion

Page 13

forces the velocity handle in the AdvDisp class to point to the velocity object in the Head class. The real solution algorithm begin by calling the sovleProblem function. Here, the loopMonteCarlo function (inherited from StochasticPDE) is called. The latter function administers the MCS procedure by calling the following functions. The initEstimator function makes calls to the corresponding functions in the HeadStoch and AdvDispStoch classes. In the makeRealzOfInput function a realization of the velocity eld is obtained by generating a conductivity eld, solving the pressure equation and computing the velocity. Because of the velocity handles described above the computed velocity realization is automatically available for the AdvDisp hierarchy. Then, a realization of the solute concentration is updated from the solveDeterministicProblem function, in which the corresponding function in the AdvDispStoch class is called. Finally, the statistical estimators are updated and the results are saved.

6 Overview of the class structure In the previous sections we have discussed how to organize a set of C++ classes in order to construct a simulator for a relatively complicated stochastic problem. The nal object-oriented design can be seen in gure 1.

7 Summary and conclusion In the present report we have focused on how to construct a Di pack simulator for solute transport in stochastic porous media. The elementary building blocks in the software package consist of ordinary C++ classes, which are grouped into two hierarchies dealing with equations for the hydraulic head and solute concentration, respectively. The hierarchies are organized as follows. We start by de ning base classes that deal with the relatively simple deterministic problems. The solutions of the more complicated stochastic equations are computed by introducing new classes derived from the bases. Finally, after de ning the classes HeadStoch2 and AdvDispStoch2, the complete problem is solved by combining the two class hierarchies. It should be noted that the class structure allows for separate testing and veri cation of the modules. In Di pack there are functionality for automatic generation of result reports, see [1]. This functionality is included in the source code les available from the subdirectory simulator and from the WWW page http://www.math.uio.no/~hpl/dpdoc/StochGroundFlow/www/index.html

Page 14

Stochastic Groundwater Flow

However, in order to make a clean presentation on the main structure of the simulator for the coupled stochastic problem we have not focused on these tools in the present report. AdvDisp

Head

StochasticPDE AdvDispEff StochasticPDE

HeadStoch

AdvDispStoch

StochasticPDEvar HeadStoch2 AdvDispStoch2

StochasticPDE

HeadAdvDispStochSystem

Figure 1: The object-oriented class structure. Solid lines indicate class derivation ("is-a" relationship), whereas dashed lines indicate data members ("has-a" relationship).

References [1] Are Magnus Bruaset. Di pack tools for automatic generation of result reports. The Di pack Preprint Series #1996, SINTEF Applied Mathematics and University of Oslo, December 16, 1996. [2] Hans Petter Langtangen. Getting started with nite element programming in di pack. The Di pack Preprint Series #1996, SINTEF Applied Mathematics and University of Oslo, December 16, 1996. [3] Hans Petter Langtangen and Harald Osnes. Improving the eciency of di pack simulators for pdes with time independent coecients. The Di -

REFERENCES

Page 15

pack Report Series #1996, SINTEF Applied Mathematics and University of Oslo, 1996. [4] Hans Petter Langtangen and Harald Osnes. Stochastic methods in di pack. Submitted to The Di pack Preprint Series #1997, SINTEF Applied Mathematics and University of Oslo, February 28, 1997. [5] Harald Osnes. Stochastic Analysis of Groundwater Flow. PhD thesis, Dept. of Mathematics, University of Oslo, Norway, 1996.

Suggest Documents