Examples and Sample Problems

    The following describes execution of the FEHM code. Constructing an Input File discusses the construction of an input file. Code Execution illustrates the entire procedure for executing the FEHM code using terminal input. Example 1 describes the setup and results from a simple 2-D heat conduction simulation. The remaining sections provide more complex example problems and deal only with problem setup and expected results.

    Constructing an Input File

    FEHM is a very general simulation code. Thus it is preferable to discuss the construction of an input file from a problem oriented point of view. In what follows the needs of the physical problem (initial conditions, boundary conditions, etc.) will be addressed in terms of the macro statements.

    Initial conditions. These are needed for every problem, even if it is a steady state simulation. If the simulation is comprised of fully saturated water flow or heat conduction only, then the appropriate control statement would be init. The use of init also allows the specification of initial temperature and pressure (gravity) gradients. If two phase flow is prescribed (thermal or isothermal) then entering the initial conditions through the control statement pres is more convenient. Initial values for noncondensible gas are handled in the ngas control statement. It should be remembered that if a restart file is present, those values will have precedence over values input in control statement init but not over values input in control statement pres Solute initial conditions are prescribed through the control statement trac.

    Boundary conditions. Fluid and heat flow boundary conditions can be prescribed through control statements pres bound, flow, and hflx. Boundary conditions are entered with pres by specifying a negative phase state designation (the code will actually use the absolute value of the phase state designation). In this case the code will keep the variable values constant at whatever value was prescribed in pres. Flowing pressures are input with the boun or flow control statement. Solute boundary conditions are prescribed through the control statement trac

    Material and Energy Balance Equations. The choice of the coupled system equations is made in control statements sol, ngas, and air.

    Rock or Media Properties. These are found in the rock and perm control statements.

    Fluid Properties. These are found in control statement eos, which is optional. If eos is not invoked, then the properties of water and air included in the code are used. Relative permeabilities, depending on both the fluid and media type, are found in control statement rlp.

    Mesh Geometry and Nodal Coordinates. This geometry information is found in control statements coor and elem. This information is usually created with a mesh generation program.

    Simulation Time. The time stepping information including printout intervals and time step sizing is found in control statement time.

    Numerics. Convergence criteria, upwinding parameters, fill-in for the preconditioned conjugate gradient solver and geometry type (2-D, 3-D, radial) are entered with control statement ctrl.

    Advanced Iteration Control. Reduced degree of freedom methods are invoked with the iter control statement. One important quantity entered with this statement is the maximum time for the job to run on the computer.

    Sources and Sinks. These are input with the control statements boun or flow Care must be taken as the parameters have different meanings for different physical models.

    The following table shows required and optional macros listed by the type of problem being simulated. See the Alphabetic Macro List for all available macros and their definitions.

    Macro Control Statements by Problem Type

    Heat Conduction

    Required Macros Optional Macros
    title cont
    boun or flow or hflx finv
    cond flo2
    coor flxo or flxz
    ctrl iter
    elem node or nod2
    init or pres renu
    rock rflx
    sol text or comments (#)
    time user
    stop vcon
      zone or zonn

    Water / Water Vapor / Heat Equivalent Continuum, Dual Porosity,Dual Permeability

    Required Macros Optional Macros
    title cden
    boun or flow or hflx cont
    cond eos
    coor exrl
    ctrl finv
    elem flo2
    init or pres flxo or flxz
    perm fper
    rlp gdpm
    rock hflx
    sol iter
    time node or nod2
    stop ppor
      renu
    dual (* only) rflx
    dpdp (** only) rxn
      text or comments
    (#)
      trac
      user or userc
      vcon
      velo
      zone or zonn

    Air / Water / No Heat Equivalent Continuum, Dual Porosity, Dual Permeability

    Required Macros Optional Macros
    title adif
    boun or flow or hflx cden
    cond cont
    coor eos
    ctrl finv
    elem flo2
    init or pres flxo
    ngas fper
    perm gdpm
    rlp iter
    rock node or nod2
    sol ppor
    time renu
    stop rflx
      rxn
    dual *only szna
    dpdp **only text or comments (#)
      trac
      user or userc
      vapl
      vcon
      velo
      zone or zonn

    Air / Water / No Heat Equivalent Continuum, Dual Porosity, Dual Permeability

    Required Macros Optional Macros
    title bous
    airwater cont
    boun or flow eos
    coor exri
    ctrl finv
    elem [flo2(]../Macros/MacroFlo2.md)
    init or pres flxo
    node or nod2 fper
    perm gdpm
    rock head
    sol iter
    time ppor
    stop pres
      renu
    dual (*only) rlp
    dpdp (only) rxn
      text or comments
      trac
      user or userc
      vapl
      velo
      zone or zonn

    Code Execution

    To run FEHM, the program executable file name is entered at the system prompt:

    
       (PROMPT> xfehm_v2.30
    

    Note that executable names may vary depending on the system being used.

    The I/O file information is provided to the code from an input control file or the terminal. The default control file name is fehmn.files. If a control file with the default name is present in the directory from which the code is being executed, no terminal input is required. If the default control file is not present, input prompts are written to the screen. A short description of the I/O files used by FEHM precedes the initial prompt. The following assumes the default control file was not found in the execution directory (for this example /home/fehm/heat2d).

    After the command xfehm_v2.30 is given, the code queries the user regarding the input files, as follows:

    
       Enter name for iocntl -- default file name: not using
       [(name/na or not using), RETURN = DEFAULT]
    

    This query asks for a control file name. If a control file name is entered no further terminal input is required. The below example shows the control file that would produce the same results as the terminal responses discussed below and illustrated in TerminalQuery. Files that are not needed for output can be represented with a blank line. If names are not provided for the write file and/or the data check file, the code will use the following defaults: fehmn.fin and fehmn.chk. Following the file names is the flag that controls terminal output. The last line of the file is the user subroutine number. Omitting these values results in no terminal output and no user subroutine call. For now, we assume a carriage return (cr> is entered and a control file is not being used. The following query will appear:

    Input control file for heat conduction example

    
       /home/fehm/heat2d/input/heat2d.in
       /home/fehm/heat2d/input/heat2d.in
       /home/fehm/heat2d/input/heat2d.in
       /home/fehm/heat2d/output/heat2d.out
       /home/fehm/heat2d/output/heat2d.fin
       /home/fehm/heat2d/output/heat2d.his
       /home/fehm/heat2d/output/heat2d.chk
       some
    
    
       Enter name for inpt -- default file name: fehmn.dat
       [(name/na or not using), RETURN = DEFAULT]
    

    This query asks for an input file name. If a (cr> is given, the default fehmn.dat is used for the input file. We shall assume that the input file name entered is

    
       input/heat2d.in
    

    Note that a subdirectory containing the file is also given. If the file did not exist, the code would repeat the prompt for an input file. Next the code would query to determine if the prefix of the input file name (the portion of the name preceding the final “.” or first space) should be used for code generated file names.

    
       Do you want all file names of the form input/heat2d.* ? [(y/n), RETURN = y]
       *** Note: If "y" incoor and inzone will equal inpt ***
    

    A (cr> will produce files with identical prefixes, including the subdirectory. If the response is negative, the code will query for the names of all required files. Assume we enter n.

    
       Enter name for incoor -- default file name: input/heat2d.in
       [(name/na or not using), RETURN = DEFAULT]
    

    (See TerminalQuery for the remaining file name queries.)

    Next a query for terminal output appears.

    
       tty output -- show all reference nodes, selected reference nodes, or none:
       [(all/some/none), RETURN = none]
    

    An “all” reply prints out the primary node information to the terminal at every time step. A “some” reply prints a selected subset of the node information. A reply of “none” suppresses all tty output with the exception of error messages printed if code execution is terminated abnormally or when maximum number of iterations are exceeded. Assume we enter “some”.

    The next query concerns the subroutine USER. This subroutine is used for special purposes and is not available to the general user.

    
       user subroutine number (provided to subroutine USER before every time step):
       [RETURN = none]
    

    Assume a (cr> is entered.

    The code will then print a summary of the I/O files to be used.

    The final query regards the acceptance of the file set just created. A “yes” reply denotes that the user has accepted the file set and the code proceeds with calculations. A “no” reply starts the query sequence again so I/O file names may be reentered or modified. A “stop” reply stops the current computer job.

    
       If data is OK enter yes to continue, no to restart terminal input,
       or stop to end program: [(yes/no/stop), RETURN = yes]
    

    Screen output for this example execution using terminal input and a previous version of the code is shown below. The only difference in the output is that the code version identifier and date are updated for the current version. User responses are shown in italics.

    Terminal query for FEHM example run

    
       (PROMPT> xfehm_v2.30sun
       version FEHM V2.30sun 03-09-15 QA:QA 09/15/2003 11:08:14
       **** Default names for I/O files ****
       control file : fehmn.files
       input file : filen.*
       geometry data file : filen.*
       zone data file : filen.*
       output file : filen.out
       read file (if it exists) : filen.ini
       write file (if it exists) : filen.fin
       history plot file : filen.his
       tracer history plot file : filen.trc
       contour plot file : filen.con
       dual or dpdp contour plot file : filen.dp
       stiffness matrix data read/write file : filen.stor
       input check file : filen.chk
       **** where ****
       "filen.*" may be 100 characters maximum. If a name is not entered
       when prompted for, a default file name is used. "fehmn.dat" is the
       default used for the input file name.
       **** note ****
       A save file and input check file are always written. If you do not
       provide a name for these files, the following defaults will be used:
       fehmn.fin, fehmn.chk
       Enter name for iocntl -- default file name: not using
       [(name/na or not using), RETURN = DEFAULT]
       (cr>
       Enter name for inpt -- default file name: fehmn.dat
       [(name/na or not using), RETURN = DEFAULT]
       input/heat2d.in
       Do you want all file names of the form input/heat2d.* ? [(y/n), RETURN = y]
       *** Note: If "y" incoor and inzone will equal inpt ***
       n
       Enter name for incoor -- default file name: input/heat2d.in
       [(name/na or not using), RETURN = DEFAULT]
       (cr>
       Enter name for inzone -- default file name: input/heat2d.in
       [(name/na or not using), RETURN = DEFAULT]
       (cr>
       Enter name for iout -- default file name: input/heat2d.out
       [(name/na or not using), RETURN = DEFAULT]
       output/heat2d.out
       Enter name for iread -- default file name: input/heat2d.ini
       [(name/na or not using), RETURN = DEFAULT]
       na
       Enter name for isave -- default file name: input/heat2d.fin
       [(name/na or not using), RETURN = DEFAULT]
       output/heat2d.fin
       Enter name for ishis -- default file name: input/heat2d.his
       [(name/na or not using), RETURN = DEFAULT]
       output/heat2d.his
       Enter name for istrc -- default file name: input/heat2d.trc
       [(name/na or not using), RETURN = DEFAULT]
       na
       Enter name for iscon -- default file name: input/heat2d.con
       [(name/na or not using), RETURN = DEFAULT]
       na
       Enter name for iscon1 -- default file name: input/heat2d.dp
       [(name/na or not using), RETURN = DEFAULT]
       na
       Enter name for isstor -- default file name: input/heat2d.stor
       [(name/na or not using), RETURN = DEFAULT]
       na
       Enter name for ischk -- default file name: input/heat2d.chk
       [(name/na or not using), RETURN = DEFAULT]
       output/heat2d.chk
       tty output -- show all reference nodes, selected reference nodes, or none:
       [(all/some/none), RETURN = none]
       some
       user subroutine number (provided to subroutine USER before every time step):
       [RETURN = none]
       (cr>
       First reference output node will be written to tty
       File purpose - Variable - Unit number - File name
       control - iocntl - 0 - not using
       input - inpt - 11 - input/heat2d.in
       geometry - incoor - 11 - input/heat2d.in
       zone - inzone - 11 - input/heat2d.in
       output - iout - 14 - output/heat2d.out
       initial state - iread - 0 - not using
       final state - isave - 16 - output/heat2d.fin
       time history - ishis - 17 - output/heat2d.his
       time his.(tr) - istrc - 18 - not using
       contour plot - iscon - 19 - not using
       con plot (dp) - iscon1 - 20 - not using
       fe coef stor - isstor - 21 - not using
       input check - ischk - 22 - output/heat2d.chk
       Value provided to subroutine user: not using
       If data is OK enter yes to continue, no to restart terminal input,
       or stop to end program: [(yes/no/stop), RETURN = yes]
       (cr>
    

    Heat Conduction in a Square

    This simple 2-D problem is used to illustrate input file construction and basic output. Heat conduction in a 1 meter square with an initial temperature, \(T_0 = 200 ^{\circ}C\), is modeled after a surface temperature, \(T_s = 100 ^{\circ}C\), is imposed at time, \(t = 0\) (See Schematic diagram of 2-D heat conduction problem. The input parameters used for the heat conduction problem are defined in Input Parameters for the 2-D Heat Conduction Problem.The finite element mesh for this problem is shown in Finite element mesh used for 2-D heat conduction problem.. Only a quarter of the square needs to be modeled because of problem symmetry.

    Input Parameters for the 2-D Heat Conduction Problem

         
    Rock thermal conductivity \(\kappa r\) \(2.7 \frac{W}{m \cdot K}\)
    Rock density \(\rho_r\) \(2700 \frac{kg}{m^3}\)
    Rock specific heat \(Cr\) \(1000 \frac{J}{kg \cdot K}\)
    Width \(a\) \(0.5 m\)
    Length \(b\) \(0.5 m\)
    Initial temperature \(T_0\) \(200 ^{\circ}C\)
    Surface temperaturefor all x, y = 0.5 m \(T_s\) \(100 ^{\circ}C\)
    Rock thermal diffusivity \(\kappa = \frac{\kappa_r}{\rho_r C_r}\)  

    The input file (see FEHM input file for heat conduction example(heat2d.in). ) uses optional macro control statement node (output nodes) and the required macro control statements sol (solution specification - heat transfer only), init (initial value data), rock (rock properties), cond (thermal conductivities), perm (permeabilities), time (simulation timing data), ctrl (program control parameters), coor (node coordinates), elem (element node data), and stop. For this problem macro control statement flow is also used to set the temperature boundary conditions. A portion of the output file is reproduced in FEHM output from the 2-D heat conduction example..

    FEHM input file for heat conduction example (heat2d.in)

    
       ***** 2-D Heat Conduction Model (2X2 rectangles) *****node
       2
       7 5
       sol
       -1 -1
       init
       10. 0. 200. 0. 0. 200. 0. 0.
       rock
       1 9 1 2700. 1000. 0. 
       cond
       1 9 1 2.7e-00 2.7e-00 2.7e-00
       perm
       1 9 1 1.e-30 1.e-30 1.e-30
       flow
       1 3 1 10.00 -100.00 1.e03
       3 9 3 10.00 -100.00 1.e03
       time
       0.005 4.00 1000 10 1994 02
       ctrl
       40 1.e-04 08
       1 9 1 1
       1.0 0.0 1.0
       10 1.0 0.00005 0.005
       1 0
       coor Feb 23, 1994 11:39:40 
       	9
       	1 0. 0.50 0.
       	2 0.25 0.50 0.
       	3 0.50 0.50 0.
       	4 0. 0.25 0.
       	5 0.25 0.25 0.
       	6 0.50 0.25 0.
       	7 0. 0. 0.
       	8 0.25 0. 0.ß
       	9 0.50 0. 0.
       elem
       	4 4
       	1 4 5 2 1
       	2 5 6 3 2
       	3 7 8 5 4
       	4 8 9 6 5
       stop
    

    FEHM output from the 2-D heat conduction example

    
       FEHM V2.10 00-06-28 08/07/2000 13:25:08
       ***** 2-D Heat Conduction Model *****
       File purpose - Variable - Unit number - File name
       control - iocntl - 0- not using
       input - inpt - 11- heat2d.in
       geometry- incoor- 11- heat2d.in
       zone - inzone- 11- heat2d.in
       output - iout - 14- heat2d.out
       initial state- iread- 0- not using
       final state- isave- 16- fehmn.fin
       time history- ishis- 17- heat2d.his
       time his.(tr)- istrc- 0- not using
       contour plot- iscon- 0- not using
       con plot (dp)- iscon1- 0- not using
       fe coef stor- isstor- 0- not using
       input check- ischk- 22- fehmn.chk
       Value provided to subroutine user: not using
       **** input title : coor**** incoor = 11 ****
       **** input title : elem**** incoor = 11 ****
       **** input title : stop**** incoor = 11 ****
       **** input title : node**** inpt = 11 ****
       **** input title : sol**** inpt = 11 ****
       **** input title : init**** inpt = 11 ****
       **** input title : rock**** inpt = 11 ****
       **** input title : cond**** inpt = 11 ****
       **** input title : perm**** inpt = 11 ****
       **** input title : flow**** inpt = 11 ****
       **** input title : time**** inpt = 11 ****
       **** input title : ctrl**** inpt = 11 ****
       **** input title : stop**** inpt = 11 ****
       BC to BC connection(s) found(now set=0.0)
       BC to BC connection(s) found(now set=0.0)
       pressures and temperatures set by gradients
       >>>reading nop from file nop.temp.....
       >>>reading nop was succesful.....
       storage needed for ncon43 available 43
       storage needed for nop43 available 46
       storage needed for a matrix33 available 33
       storage needed for b matrix33 available 46
       storage needed for gmres81 available 81
       storage available for b matrix resized to 33((((((
       time for reading input, forming coefficients 0.204E-01
       **** analysis of input data on file fehmn.chk ****
       *********************************************************************
       Time Step 1
       Timing Information
       Years Days Step Size (Days)
       0.136893E-04 0.500000E-02 0.500000E-02
       Cpu Sec for Time Step = 0.8081E-03 Current Total = 0.2650E-02
       Equation Performance
       Number of N-R Iterations: 1
       Avg # of Linear Equation Solver Iterations: 3.0
       Number of Active Nodes: 9.
       Total Number of Newton-Raphson Iterations: 1 , Solver: 3
       Largest Residuals
       EQ1 R= 0.1660E-07 node= 5 x=0.2500 y=0.2500 z= 1.000
       Node Equation 1 Residual Equation 2 Residual
       7 0.111444E-07 0.185894E-01
       5 0.165983E-07 0.135450E+01
       Nodal Information (Water)
       source/sink source/sink
       Node p(MPa) e(MJ) l sat temp(c) (kg/s) (MJ/s)
       7 10.000 0.00 0.000 199.981 0. 0.
       5 10.000 0.00 0.000 198.645 0. 0.
       Global Mass & Energy Balances
       Total mass in system at this time:0.000000E+00 kg
       Total mass of steam in system at this time:0.000000E+00 kg
       Total enthalpy in system at this time:0.105123E+03 MJ
       Water discharge this time step:0.000000E+00 kg (0.000000E+00 kg/s)
       Water input this time step:0.000000E+00 kg (0.000000E+00 kg/s)
       Total water discharge:0.000000E+00 kg (0.000000E+00 kg/s)
       Total water input:0.000000E+00 kg (0.000000E+00 kg/s)
       Enthalpy discharge this time step:0.297800E+02 MJ (0.689352E-01 MJ/s)
       Enthalpy input this time step:0.000000E+00 MJ (0.000000E+00 MJ/s)
       Total enthalpy discharge:0.297800E+02 MJ (0.689352E-01 MJ/s)
       Total enthalpy input:0.297800E+02 MJ (0.689352E-01 MJ/s)
       Net kg water discharge (total out-total in):0.000000E+00
       Net MJ discharge (total out-total in):0.000000E+00
       Conservation Errors: 0.000000E+00 (mass), -0.100326E+01 (energy)
       *********************************************************************
       Time Step 11
       .
       .
       .
       *********************************************************************
       Time Step 801
       Timing Information
       Years Days Step Size (Days)
       0.109515E-01 0.400005E+01 0.500000E-04
       Cpu Sec for Time Step = 0. Current Total = 4.533
       Equation Performance
       Number of N-R Iterations: 1
       Avg # of Linear Equation Solver Iterations: 2.0
       Number of Active Nodes: 9.
       Total Number of Newton-Raphson Iterations: 801 , Solver: 2402
       Largest Residuals
       EQ1 R= 0.9774E-13 node= 7 x= 0.000 y= 0.000 z= 1.000
       Node Equation 1 Residual Equation 2 Residual
       7 0.977369E-13 0.186062E-04
       5 0.621566E-13 0.930309E-05
       Nodal Information (Water)
       source/sink source/sink
       Node p(MPa) e(MJ) l sat temp(c) (kg/s) (MJ/s)
       7 10.000 0.00 0.000 100.230 0. 0.
       5 10.000 0.00 0.000 100.115 0. 0.
       Global Mass & Energy Balances
       Total mass in system at this time:0.000000E+00 kg
       Total mass of steam in system at this time:0.000000E+00 kg
       Total enthalpy in system at this time:0.675565E+02 MJ
       Water discharge this time step:0.000000E+00 kg (0.000000E+00 kg/s)
       Water input this time step:0.000000E+00 kg (0.000000E+00 kg/s)
       Total water discharge:0.000000E+00 kg (0.000000E+00 kg/s)
       Total water input:0.000000E+00 kg (0.000000E+00 kg/s)
       Enthalpy discharge this time step:0.455636E-05 MJ (0.105471E-05 MJ/s)
       Enthalpy input this time step:0.000000E+00 MJ (0.000000E+00 MJ/s)
       Total enthalpy discharge:0.673463E+02 MJ (0.155894E+02 MJ/s)
       Total enthalpy input:0.673463E+02 MJ (0.155894E+02 MJ/s)
       Net kg water discharge (total out-total in):0.000000E+00
       Net MJ discharge (total out-total in):0.000000E+00
       Conservation Errors: 0.000000E+00 (mass), -0.100144E+01 (energy)
       simulation ended: days 4.00 timesteps 801
       total N-R iterations = 801
       total solver iterations = 2402
       total code time(timesteps) = 0.526277
       **** -------------------------------------------------------------- ****
       **** This program for ****
       **** Finite Element Heat and Mass Transfer in porous media****
       **** -------------------------------------------------------------- ****
       **** Version : FEHM V2.10 00-06-28 ****
       **** End Date : 08/07/2000 ****
       **** Time : 13:25:08 ****
       **** --------------------------------------------------------------****
    

    DOE Code Comparison Project, Problem 5, Case A

    This problem involves multiphase flow in a 2-D horizontal reservoir. The problem is characterized by a moving two-phase region, i.e., the fluid produced at the production well is replaced by cold water recharge over one of the outer boundaries. The problem parameters are given below and the geometry and boundary conditions are shown in the below schematic. Of particular note are the variable initial temperature field, provided to the code through a read file (see iread), and the prescribed pressure and temperature on the right boundary. A partial listing of the input file is provided in FEHM input file for DOE problem. In addition to the required macros, macro flow is used to specify the pressure and temperature boundary condition and the production flow rate. Macro rlp is used to set the residual liquid and gas saturations.

    Input Parameters for the DOE Code Comparison Project Problem

    Parameter Symbol Value
    Reservoir permeability \(k\) \(2.5 \cdot 10^{-14} m^2\)
    Reservoir porosity \(\phi\) \(0.35\)
    Rock thermal conductivity \(\kappa r\) \(1 \frac{W}{m \cdot K}\)
    Rock density \(\rho r\) \(2563 \frac{kg}{m^3}\)
    Rock specific heat \(C r\) \(1010 \frac{J}{kg \cdot K}\)
    Reservoir length \(x\) \(300 m\)
    Reservoir thickness \(y\) \(200 m\)
    Liquid residual saturation slr \(0.3\)
    Gas residual saturation sgr \(0.1\)
    Reservoir discharge qm \(0.05 \frac{kg}{m \cdot s}\)
    Initial Pressure \(P_0\) \(3.6 MPa\)
    Production well coordinates: \(x = 62.5 m\), \(y = 62.5 m\)  
    Observation well coordinates: \(x = 162.5 m\), \(y = 137.5 m\)  

    FEHM input file for DOE problem

    
       *** DOE Code Comparison Project, Problem 5, Case A ***
       node
       2
       50 88
       sol
       1 1
       init
       3.6 0. 240. 0. 0. 240. 0. 0.
       rlp
       2 0.3 0.1 0.0 0.0
       1 140 1 1
       rock
       1 140 1 2563. 1010. 0.35
       cond
       1 140 1 1.00e-00 1.00e-00 1.00e-00
       perm
       1 140 1 2.5e-14 2.5e-14 0.e-00
       flow
       88 88 1 0.050 -25.00 0.
       14 140 14 3.600 -160.00 1.
       time
       30.0 3650. 10000 1000 1994 03
       ctrl
       40 1.e-07 08
       1 140 1 1
       1.0 0.0 1.0
       40 1.2 0.1 60.
       1 0
       coor
       140
       ...
       elem
       4 117
       ... stop
    

    There is no analytical solution for this problem, but six researchers produced results for the DOE code comparison project (Molloy, 1980). The reader is referred to this reference for a more detailed discussion of this problem and the code comparison. Results from this problem are compared to those for the other codes, obtained from Molloy (1980), as a check on FEHM. The results for the outlet temperature, shown in Comparison of FEHM production well temperatures with results from other codes, are in excellent agreement with the other codes. The results for the outlet pressure and pressure at an observation well 125 m distant, Comparison of FEHM production and observation well pressure drops with results from other codes, are also in good agreement with the other codes. Contour plots of pressure and temperature at the end of the simulation were also generated for this problem and are shown in Contour plot of pressure at ten years for the DOE problem and Contour plot of temperature at ten years for the DOE problem.

    Reactive Transport Example

    This one-dimensional example demonstrates the use of the reactive transport module of FEHM. The application of this simulation is the transport of cobalt (Co) in groundwater. Radioactive cobalt is present in the subsurface at several DOE sites. Although its presence as a divalent cation implies that it should sorb strongly to most soils, its migration rate has been shown to be greater than expected due to complexation with EDTA, a decontaminating agent also found in the subsurface of these sites. Much experimental work has gone into studying the transport of Co as CoEDTA, a much less strongly sorbed species. The chemical reactions and equilibrium or rate constants used to perform this simulation are:

    Input Parameters for the Reactive Transport Test Problem

    Parameter Symbol Value
    Reactor Length \(L\) 10 m
    Node spacing \(\Delta l\) 0.1 m
    Fluid Density \(\rho_f\) \(1000\:kg/m^3\)
    Bulk Rock Density \(\rho_b\) \(1500\:kg/m^3\)
    Porosity \(\phi\) \(0.4\)
    Pore Water Velocity \(u\) \(1\:m/hr\)
    Dispersivity \(\alpha\) \(0.05 m\)
    Time step (tracer) \(\Delta t\) \(0.09 - 360 s\)
    Total elapsed time \(t\) 7.25 days
    Pressure \(P_0\) \(1.0\:MPa\)
    Co Inlet Concentration \(C_{in\:Co}\) \(3.1623 \cdot 10^{-5}\:M\)
    Fe Inlet Concentration \(C_{in\:Fe}\) \(0\:M\)
    EDTA Inlet Concentration \(C_{in\:EDTA}\) \(3.1623 \cdot 10^{-5}\:M\)
    Boundary conditions: At l = 0, u = 1 m/hr; At l = 1, P = 1 MPa    
    ‡Flow rate: \(q = 0.5556 kg/s\)    

    FEHM input file for reactive transport problem

    
       COMPARE FEHMN and PDREACT: Linear Sorption w/ Surface Exchange
       cond
       1 202 1 2.7 2.7 2.7
       ctrl
       50 1e-6 8
       1 202 1 2
       1 0 0.5
       25 2. 1.e-6 1.e-1
       1 0
       flow
       1 202 101 -0.05556 -25 0
       101 202 101 1. -25 -1
       init
       1. 25 25 0 1000 25 0 0
       node
       1
       202
       perm
       1 202 1 5.0e-13 5.0e-30 5.0e-30
       rock
       1 202 1 1500 1000 0.4
       sol
       1 -1
       time
       1.e-6 7.25 1000 10 92 11
       # solute 1: Total Cobalt Concentration
       # solute 2: Total Iron Concentration
       # solute 3: Total EDTA Concentration
       # solute 4: CoEDTA adsorbed concentration
       # solute 5: Co adsorbed concentration
       # solute 6: FeEDTA adsorbed concentration
       trac
       0.0 1.0 1.e-6 0.5
       1. 2000 1.0 2000
       5 5.0 1.e-6 4.1667e-3
       61
       1 0. 0. 1. 1.e-9 .05 1.e-34 1.e-34
       1 202 1 1
       1 202 1 0.
       1 202 101 3.1623e-5 1.0 4.16667
       1
       1 0. 0. 1. 1.e-9 .05 1.e-34 1.e-34
       1 202 1 1
       1 202 1 0.
       1 202 101 1.e-13 1.0 4.16667
       1
       1 0. 0. 1. 1.e-9 .05 1.e-34 1.e-34
       1 202 1 1
       1 202 1 0.
       1 202 101 3.1623e-5 1.0 4.16667
       0
       1 202 1 0.
       0
       1 202 1 0.
       0
       1 202 1 0.0
       rxn
       ** NCPLX, NUMRXN
       2,4
       ** Coupling of the aqueous components (dRi/dUj)
       2
       1 0 1
       0 1 0
       ** IDCPNT(IC),CPNTNAM(IC),IFXCONC(IC),CPNTPRT(IC) (comp,name,cond.; NCPNT
       rows)
       1 Cobalt[aq] 0 0 1.e-9
       2 Iron[aq] 0 0 1.e-9
       3 EDTA[aq] 0 0 1.e-9
       ** IDCPLX(IX), CPLXNAM(IX),CPLXPRT(IX) (ID # and name of complex, NCPLX rows)
       101 Co-EDTA[aq] 0
       102 Fe-EDTA[aq] 0
       ** IDIMM(IM), IMMNAM(IM),IMMPRT(IM)(ID # and name of immoblie spec, NIMM rows)
       1 Co-EDTA[s] 0
       2 Fe-EDTA[s] 0
       3 Cobalt[s] 0
       ** IDVAP(IV), VAPNAM(IM), VAPPRT(IV) (ID # and name of vapor spec, NVAP rows)
       ** Skip nodes
       0
       ** RSDMAX
       1.0e-10
       **** Chemical reaction information for equilibrium reactions ******
       ** LOGKEQ (=0 if stability constants are given as K, =1 if given as log(K))
       0
       ** CKEQ(IX) ,HEQ(IX) (Stability constants and Enthaplys, NCPLX rows)
       1.0e+18 0
       6.31e+27 0
       ** STOIC(IX,IC) (Stoichiometric coeff: NCPLX rows, NCPNT columns)
       1.0 0.0 1.0
       0.0 1.0 1.0
       ** LINEAR KINETIC REACTION (type 1) **
       1
       ** Where does the reaction take place? **
       1 0 0
       ** Aqueous Component/Complex #, Solid Component #
       101 1
       ** Distribution coeffienct (kg water/ kg rock) **
       0.533
       ** Mass transfer coefficient (1/hr) **
       1.0
       ** LINEAR KINETIC REACTION (type 1) **
       1
       ** Where does the reaction take place? **
       1 0 0
       ** Aqueous Component/Complex #, Solid Component #
       1 3
       ** Distribution coeffienct (kg rock/ kg water) **
       5.07
       ** Mass transfer coefficient (1/hr) **
       1.0
       ** LINEAR KINETIC REACTION (type 1) **
       1
       ** Where does the reaction take place? **
       1 0 0
       ** Aqueous Component/Complex #, Solid Component #
       102 2
       ** Distribution coeffienct (kg rock/ kg water) **
       0.427
       ** Mass transfer coefficient (1/hr) **
       1.0
       ** GENERAL EXCHANGE REACTION (type 3) **
       3
       ** Where does the reaction take place? **
       1 0 0
       ** # of solid, liquid and vapor species **
       3 0 0
       ** forward and reverse rate constants (1/hr) **
       1.26e-2 0
       ** Solid Species in reaction **
       1 2 3
       ** Stoichiometry **
       1.0 -1.0 -1.0
       coor n/a
       202
       1 0.000001.000000.00000
       2 0.100001.000000.00000
       3 0.200001.000000.00000
       ...
       2009.800000.000000.00000
       2019.900000.000000.00000
       20210.000000.000000.00000
       elem
       4 100
       1 10210321
       2 10310432
       3 10410543
       ...
       98 1992009998
       99 20020110099
       100201202101100
       stop
    

    FEHM results for this problem are compared to those of PDREACT (Valocchi et al., 1994), a two-dimensional, isothermal, saturated-zone flow and transport code in Comparison of FEHM and PDREACT for the breakthrough curves of aqueous species and Comparison of FEHM and PDREACT for the exit concentration versus time for solid species.