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 Dipack 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 Dipack 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 Dipack URL cited below.
Dipack 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 Dipack 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 Dipack 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 Dipack 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 dierential 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 Dipack 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 dierent parts of the software package can be easily deplugged and veri ed separately. Finally, the code should satisfy the dierent Dipack standards for programming, including the use of Dipack 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 dierential 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 diusion and/or pore-scale dispersion. In equations (2) and (3) K is the hydraulic conductivity (closely related to the permeability), n is the eective 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 aects the output quantities in the model. The important task of quantifying the eect 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 dierent 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 Dipack 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 Dipack simulator for solving deterministic partial dierential 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 Dipack 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 dierential 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 Dipack 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 dierent (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 dierences 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 dierential 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 dierent 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 Dipack 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 Dipack 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. Dipack tools for automatic generation of result reports. The Dipack Preprint Series #1996, SINTEF Applied Mathematics and University of Oslo, December 16, 1996. [2] Hans Petter Langtangen. Getting started with nite element programming in dipack. The Dipack Preprint Series #1996, SINTEF Applied Mathematics and University of Oslo, December 16, 1996. [3] Hans Petter Langtangen and Harald Osnes. Improving the eciency of dipack 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 dipack. Submitted to The Dipack 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.