- allow_imperfect_jacobiansFalsetrue to allow unimplemented property derivative terms to be set to zero for the AD API
Default:False
C++ Type:bool
Description:true to allow unimplemented property derivative terms to be set to zero for the AD API
- bulk_modulus2e+09Constant bulk modulus (Pa)
Default:2e+09
C++ Type:double
Description:Constant bulk modulus (Pa)
- cp4194Constant specific heat capacity at constant pressure (J/kg/K)
Default:4194
C++ Type:double
Description:Constant specific heat capacity at constant pressure (J/kg/K)
- cv4186Constant specific heat capacity at constant volume (J/kg/K)
Default:4186
C++ Type:double
Description:Constant specific heat capacity at constant volume (J/kg/K)
- density01000Density at zero pressure and zero temperature
Default:1000
C++ Type:double
Description:Density at zero pressure and zero temperature
- execute_onTIMESTEP_ENDThe list of flag(s) indicating when this object should be executed, the available options include NONE, INITIAL, LINEAR, NONLINEAR, TIMESTEP_END, TIMESTEP_BEGIN, FINAL, CUSTOM.
Default:TIMESTEP_END
C++ Type:ExecFlagEnum
Description:The list of flag(s) indicating when this object should be executed, the available options include NONE, INITIAL, LINEAR, NONLINEAR, TIMESTEP_END, TIMESTEP_BEGIN, FINAL, CUSTOM.
- fp_typesingle-phase-fpType of the fluid property object
Default:single-phase-fp
C++ Type:FPType
Description:Type of the fluid property object
- molar_mass0.018Constant molar mass of the fluid (kg/mol)
Default:0.018
C++ Type:double
Description:Constant molar mass of the fluid (kg/mol)
- porepressure_coefficient1The enthalpy is internal_energy + P / density * porepressure_coefficient. Physically this should be 1.0, but analytic solutions are simplified when it is zero
Default:1
C++ Type:double
Description:The enthalpy is internal_energy + P / density * porepressure_coefficient. Physically this should be 1.0, but analytic solutions are simplified when it is zero
- specific_entropy300Constant specific entropy (J/kg/K)
Default:300
C++ Type:double
Description:Constant specific entropy (J/kg/K)
- thermal_conductivity0.6Constant thermal conductivity (W/m/K)
Default:0.6
C++ Type:double
Description:Constant thermal conductivity (W/m/K)
- thermal_expansion0.000214Constant coefficient of thermal expansion (1/K)
Default:0.000214
C++ Type:double
Description:Constant coefficient of thermal expansion (1/K)
- viscosity0.001Constant dynamic viscosity (Pa.s)
Default:0.001
C++ Type:double
Description:Constant dynamic viscosity (Pa.s)
SimpleFluidProperties
Fluid properties for a simple fluid with a constant bulk density
This is a computationally simple fluid based on a constant bulk modulus density fluid, with density given by where (the bulk modulus) and (the thermal expansion coefficient) are constants.
In this formulation, viscosity and thermal conductivity are constant (with values specified in the input file), while internal energy and enthalpy are given by and respectively. Here is called the porepressure_coefficient
: usually it should be set to but many analytical studies assume .
Input Parameters
- allow_duplicate_execution_on_initialFalseIn the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
Default:False
C++ Type:bool
Options:
Description:In the case where this UserObject is depended upon by an initial condition, allow it to be executed twice during the initial setup (once before the IC and again after mesh adaptivity (if applicable).
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector
Options:
Description:Adds user-defined labels for accessing object parameters via control logic.
- enableTrueSet the enabled status of the MooseObject.
Default:True
C++ Type:bool
Options:
Description:Set the enabled status of the MooseObject.
- force_preauxFalseForces the GeneralUserObject to be executed in PREAUX
Default:False
C++ Type:bool
Options:
Description:Forces the GeneralUserObject to be executed in PREAUX
- use_displaced_meshFalseWhether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Default:False
C++ Type:bool
Options:
Description:Whether or not this object should use the displaced mesh for computation. Note that in the case this is true but no displacements are provided in the Mesh block the undisplaced mesh will still be used.
Advanced Parameters
Input Files
- modules/porous_flow/test/tests/flux_limited_TVD_pflow/except05.i
- modules/porous_flow/test/tests/basic_advection/2phase.i
- modules/porous_flow/test/tests/jacobian/line_sink03.i
- modules/porous_flow/test/tests/dirackernels/theis2.i
- modules/porous_flow/test/tests/jacobian/pls02.i
- modules/porous_flow/test/tests/dirackernels/bh_except03.i
- modules/porous_flow/test/tests/chemistry/except19.i
- modules/porous_flow/test/tests/jacobian/denergy04.i
- modules/porous_flow/test/tests/dirackernels/theis1.i
- modules/porous_flow/examples/flow_through_fractured_media/fine_thick_fracture_transient.i
- modules/porous_flow/examples/tutorial/06_KT.i
- modules/porous_flow/test/tests/poro_elasticity/terzaghi_basicthm.i
- modules/porous_flow/test/tests/dirackernels/pls01.i
- modules/porous_flow/test/tests/gravity/grav02e.i
- modules/porous_flow/test/tests/gravity/grav02g.i
- modules/porous_flow/test/tests/gravity/fully_saturated_grav01c.i
- modules/porous_flow/test/tests/jacobian/fflux10.i
- modules/porous_flow/test/tests/jacobian/mass10.i
- modules/porous_flow/test/tests/dirackernels/bh03.i
- modules/porous_flow/test/tests/mass_conservation/mass04.i
- modules/porous_flow/test/tests/mass_conservation/mass02.i
- modules/porous_flow/test/tests/heterogeneous_materials/constant_poroperm3.i
- modules/porous_flow/test/tests/jacobian/mass_vol_exp01.i
- modules/porous_flow/test/tests/sinks/s02.i
- modules/porous_flow/test/tests/energy_conservation/except01.i
- modules/porous_flow/test/tests/density/GravDensity01.i
- modules/porous_flow/test/tests/sinks/s03.i
- modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_2phasePSVG.i
- modules/porous_flow/test/tests/gravity/grav02f.i
- modules/porous_flow/test/tests/heat_advection/heat_advection_1d_KT.i
- modules/porous_flow/test/tests/flux_limited_TVD_pflow/pffltvd_1D.i
- modules/porous_flow/test/tests/jacobian/heat_advection01.i
- modules/porous_flow/test/tests/desorption/desorption01.i
- modules/porous_flow/test/tests/sinks/s09.i
- modules/porous_flow/examples/tutorial/01.i
- modules/porous_flow/test/tests/poro_elasticity/pp_generation_unconfined_fully_saturated_volume.i
- modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_fully_saturated_2.i
- modules/porous_flow/test/tests/mass_conservation/mass01.i
- modules/porous_flow/test/tests/heat_conduction/two_phase.i
- modules/porous_flow/test/tests/jacobian/mass04.i
- modules/porous_flow/test/tests/actions/addmaterials2.i
- modules/porous_flow/test/tests/jacobian/disp04.i
- modules/porous_flow/test/tests/poroperm/PermFromPoro05.i
- modules/porous_flow/test/tests/chemistry/except3.i
- modules/porous_flow/examples/tutorial/03.i
- modules/porous_flow/test/tests/jacobian/diff01.i
- modules/porous_flow/test/tests/chemistry/except7.i
- modules/porous_flow/test/tests/poro_elasticity/pp_generation_unconfined_constM.i
- modules/porous_flow/test/tests/sinks/s01.i
- modules/porous_flow/test/tests/flux_limited_TVD_pflow/jacobian_05.i
- modules/porous_flow/test/tests/dirackernels/bh_except15.i
- modules/porous_flow/test/tests/dirackernels/bh_except07.i
- modules/porous_flow/test/tests/numerical_diffusion/no_action.i
- modules/porous_flow/examples/tutorial/06.i
- modules/porous_flow/test/tests/mass_conservation/mass09.i
- modules/porous_flow/test/tests/actions/block_restricted_materials.i
- modules/porous_flow/test/tests/sinks/s09_fully_saturated.i
- modules/porous_flow/test/tests/jacobian/mass02.i
- modules/porous_flow/test/tests/heat_advection/heat_advection_1d_fully_saturated_action.i
- modules/porous_flow/test/tests/jacobian/mass06.i
- modules/porous_flow/test/tests/chemistry/except11.i
- modules/porous_flow/test/tests/poroperm/poro_thm.i
- modules/porous_flow/test/tests/heat_advection/heat_advection_1d_fully_saturated.i
- modules/porous_flow/test/tests/chemistry/except18.i
- modules/porous_flow/test/tests/chemistry/dissolution.i
- modules/porous_flow/test/tests/dirackernels/bh_except01.i
- modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_3comp_fully_saturated.i
- modules/porous_flow/test/tests/poro_elasticity/mandel_fully_saturated.i
- modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_adaptivity.i
- modules/porous_flow/test/tests/jacobian/heat_advection02.i
- modules/porous_flow/test/tests/poroperm/poro_tm.i
- modules/porous_flow/test/tests/infiltration_and_drainage/rd01.i
- modules/porous_flow/test/tests/jacobian/fflux04.i
- modules/porous_flow/test/tests/poroperm/PermTensorFromVar03.i
- modules/porous_flow/test/tests/dirackernels/pls02.i
- modules/porous_flow/test/tests/flux_limited_TVD_pflow/jacobian_02.i
- modules/porous_flow/examples/flow_through_fractured_media/fine_transient.i
- modules/porous_flow/test/tests/jacobian/desorped_mass01.i
- modules/porous_flow/test/tests/poro_elasticity/pp_generation_unconfined_basicthm.i
- modules/porous_flow/test/tests/fluids/simple_fluid.i
- modules/porous_flow/test/tests/chemistry/2species_equilibrium_2phase.i
- modules/porous_flow/test/tests/buckley_leverett/bl01.i
- modules/porous_flow/test/tests/basic_advection/except2.i
- modules/porous_flow/test/tests/dirackernels/bh_except09.i
- modules/porous_flow/test/tests/poro_elasticity/pp_generation.i
- modules/porous_flow/test/tests/poro_elasticity/pp_generation_fullysat_action.i
- modules/porous_flow/test/tests/poroperm/PermFromPoro04.i
- modules/porous_flow/test/tests/dispersion/diff01.i
- modules/porous_flow/test/tests/actions/basicthm_hm.i
- modules/porous_flow/test/tests/gravity/grav01a.i
- modules/porous_flow/examples/tidal/barometric_fully_confined.i
- modules/porous_flow/test/tests/thm_rehbinder/free_outer.i
- modules/porous_flow/test/tests/actions/basicthm_th.i
- modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_MD.i
- modules/porous_flow/test/tests/gravity/grav01c.i
- modules/porous_flow/test/tests/jacobian/fflux03.i
- modules/porous_flow/test/tests/flux_limited_TVD_pflow/jacobian_04.i
- modules/porous_flow/test/tests/fluids/simple_fluid_yr_MPa_C.i
- modules/porous_flow/test/tests/poroperm/except1.i
- modules/porous_flow/examples/coal_mining/fine_with_fluid.i
- modules/porous_flow/test/tests/jacobian/fflux05.i
- modules/porous_flow/test/tests/aux_kernels/darcy_velocity_lower.i
- modules/porous_flow/test/tests/energy_conservation/heat02.i
- modules/porous_flow/test/tests/jacobian/fflux07.i
- modules/porous_flow/test/tests/aux_kernels/darcy_velocity_lower_2D.i
- modules/porous_flow/test/tests/chemistry/2species_predis.i
- modules/porous_flow/test/tests/chemistry/except15.i
- modules/porous_flow/test/tests/energy_conservation/heat04_action.i
- modules/porous_flow/test/tests/dirackernels/bh04.i
- modules/porous_flow/test/tests/jacobian/fflux11.i
- modules/porous_flow/test/tests/dirackernels/theis_rz.i
- modules/porous_flow/test/tests/energy_conservation/heat04.i
- modules/porous_flow/test/tests/poro_elasticity/terzaghi_fully_saturated_volume.i
- modules/porous_flow/test/tests/radioactive_decay/radioactive_decay01.i
- modules/porous_flow/examples/flow_through_fractured_media/coarse_3D.i
- modules/porous_flow/test/tests/gravity/grav02d.i
- modules/porous_flow/test/tests/fluids/simple_fluid_yr.i
- modules/porous_flow/test/tests/chemistry/except10.i
- modules/porous_flow/test/tests/energy_conservation/heat05.i
- modules/porous_flow/test/tests/aux_kernels/properties.i
- modules/porous_flow/test/tests/chemistry/precipitation.i
- modules/porous_flow/test/tests/jacobian/pls03.i
- modules/porous_flow/test/tests/jacobian/chem14.i
- modules/porous_flow/test/tests/gravity/grav02b.i
- modules/porous_flow/test/tests/dirackernels/bh_except10.i
- modules/porous_flow/test/tests/chemistry/except6.i
- modules/porous_flow/test/tests/dirackernels/injection_production.i
- modules/porous_flow/test/tests/jacobian/mass01_fully_saturated.i
- modules/porous_flow/test/tests/numerical_diffusion/fully_saturated_action.i
- modules/porous_flow/examples/tutorial/13.i
- modules/porous_flow/test/tests/jacobian/fflux12.i
- modules/porous_flow/test/tests/poroperm/PermFromPoro03.i
- modules/porous_flow/test/tests/jacobian/mass01.i
- modules/porous_flow/test/tests/dirackernels/theis3.i
- modules/porous_flow/test/tests/dirackernels/bh02.i
- modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_fully_saturated.i
- modules/porous_flow/test/tests/jacobian/mass07.i
- modules/porous_flow/test/tests/jacobian/fflux06.i
- modules/porous_flow/test/tests/jacobian/heat_advection01_fully_saturated.i
- modules/porous_flow/test/tests/flux_limited_TVD_pflow/except03.i
- modules/porous_flow/test/tests/gravity/grav01b.i
- modules/porous_flow/test/tests/chemistry/except21.i
- modules/porous_flow/test/tests/thm_rehbinder/fixed_outer.i
- modules/porous_flow/test/tests/jacobian/fflux09.i
- modules/porous_flow/examples/flow_through_fractured_media/coarse.i
- modules/porous_flow/test/tests/poro_elasticity/mandel.i
- modules/porous_flow/test/tests/flux_limited_TVD_pflow/jacobian_01.i
- modules/porous_flow/test/tests/recover/pffltvd.i
- modules/porous_flow/test/tests/chemistry/except20.i
- modules/porous_flow/test/tests/poroperm/except2.i
- modules/porous_flow/test/tests/jacobian/desorped_mass_vol_exp01.i
- modules/porous_flow/examples/tutorial/04.i
- modules/porous_flow/test/tests/dirackernels/bh_except08.i
- modules/porous_flow/examples/flow_through_fractured_media/fine_steady.i
- modules/porous_flow/examples/tutorial/08.i
- modules/porous_flow/test/tests/poro_elasticity/pp_generation_unconfined.i
- modules/porous_flow/test/tests/poro_elasticity/terzaghi_constM.i
- modules/porous_flow/test/tests/poro_elasticity/mandel_fully_saturated_volume.i
- modules/porous_flow/test/tests/dirackernels/bh_except11.i
- modules/porous_flow/examples/tutorial/08_KT.i
- modules/porous_flow/test/tests/dirackernels/squarepulse1.i
- modules/porous_flow/test/tests/flux_limited_TVD_pflow/pffltvd_2D_angle.i
- modules/porous_flow/test/tests/gravity/grav02c.i
- modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d.i
- modules/porous_flow/test/tests/poroperm/PermTensorFromVar01.i
- modules/porous_flow/test/tests/gravity/grav01d.i
- modules/porous_flow/test/tests/flux_limited_TVD_pflow/pffltvd_2D_trimesh.i
- modules/porous_flow/test/tests/dirackernels/bh_except13.i
- modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_2phasePS_KT.i
- modules/porous_flow/test/tests/mass_conservation/mass07.i
- modules/porous_flow/test/tests/jacobian/mass09.i
- modules/porous_flow/test/tests/mass_conservation/mass05.i
- modules/porous_flow/test/tests/gravity/fully_saturated_grav01a.i
- modules/porous_flow/test/tests/dirackernels/bh07.i
- modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_2phase.i
- modules/porous_flow/test/tests/jacobian/mass08.i
- modules/porous_flow/test/tests/numerical_diffusion/pffltvd.i
- modules/porous_flow/examples/tidal/atm_tides.i
- modules/porous_flow/test/tests/poro_elasticity/pp_generation_unconfined_fully_saturated.i
- modules/porous_flow/test/tests/dirackernels/bh_except04.i
- modules/porous_flow/test/tests/jacobian/mass_vol_exp02.i
- modules/porous_flow/test/tests/dirackernels/pls03_action.i
- modules/porous_flow/test/tests/jacobian/fflux01.i
- modules/porous_flow/test/tests/aux_kernels/darcy_velocity.i
- modules/porous_flow/test/tests/jacobian/denergy02.i
- modules/porous_flow/test/tests/newton_cooling/nc02.i
- modules/porous_flow/test/tests/flux_limited_TVD_pflow/except02.i
- modules/porous_flow/test/tests/chemistry/except17.i
- modules/porous_flow/test/tests/chemistry/except1.i
- modules/porous_flow/test/tests/sinks/s10.i
- modules/porous_flow/test/tests/jacobian/pls04.i
- modules/porous_flow/test/tests/heterogeneous_materials/constant_poroperm.i
- modules/porous_flow/test/tests/dirackernels/bh05.i
- modules/porous_flow/test/tests/aux_kernels/darcy_velocity_lower_except.i
- modules/porous_flow/test/tests/poro_elasticity/undrained_oedometer.i
- modules/porous_flow/test/tests/dispersion/disp01.i
- modules/porous_flow/test/tests/jacobian/basic_advection3.i
- modules/porous_flow/test/tests/dirackernels/injection_with_plasticity.i
- modules/porous_flow/test/tests/actions/basicthm_h.i
- modules/porous_flow/test/tests/jacobian/fflux02.i
- modules/porous_flow/test/tests/flux_limited_TVD_pflow/pffltvd_3D.i
- modules/porous_flow/test/tests/poro_elasticity/mandel_basicthm.i
- modules/porous_flow/test/tests/mass_conservation/mass08.i
- modules/porous_flow/test/tests/infiltration_and_drainage/wli02.i
- modules/porous_flow/test/tests/jacobian/diff03.i
- modules/porous_flow/test/tests/poroperm/PermFromPoro02.i
- modules/porous_flow/test/tests/heat_advection/heat_advection_1d.i
- modules/porous_flow/test/tests/infiltration_and_drainage/rd03.i
- modules/porous_flow/test/tests/energy_conservation/except02.i
- modules/porous_flow/test/tests/chemistry/except2.i
- modules/porous_flow/test/tests/mass_conservation/mass10.i
- modules/porous_flow/test/tests/dirackernels/bh_except14.i
- modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_2phasePS.i
- modules/porous_flow/test/tests/flux_limited_TVD_pflow/except01.i
- modules/porous_flow/test/tests/infiltration_and_drainage/wli01.i
- modules/porous_flow/test/tests/jacobian/heat_vol_exp01.i
- modules/porous_flow/test/tests/infiltration_and_drainage/bw01.i
- modules/porous_flow/test/tests/chemistry/except9.i
- modules/porous_flow/test/tests/sinks/s07.i
- modules/porous_flow/test/tests/chemistry/precipitation_2phase.i
- modules/porous_flow/test/tests/infiltration_and_drainage/rsc01.i
- modules/porous_flow/test/tests/newton_cooling/nc01.i
- modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_3comp.i
- modules/porous_flow/examples/tidal/earth_tide_fullsat.i
- modules/porous_flow/test/tests/dirackernels/bh_except12.i
- modules/porous_flow/test/tests/fluids/simple_fluid_hr.i
- modules/porous_flow/test/tests/gravity/grav02a.i
- modules/porous_flow/test/tests/jacobian/fflux01_fully_saturated.i
- modules/porous_flow/test/tests/mass_conservation/mass03.i
- modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_steady.i
- modules/porous_flow/test/tests/infiltration_and_drainage/rd02.i
- modules/porous_flow/test/tests/dispersion/diff01_action.i
- modules/porous_flow/test/tests/infiltration_and_drainage/rsc02.i
- modules/porous_flow/test/tests/energy_conservation/heat03.i
- modules/porous_flow/test/tests/basic_advection/except1.i
- modules/porous_flow/test/tests/basic_advection/1phase.i
- modules/porous_flow/test/tests/poroperm/PermTensorFromVar02.i
- modules/porous_flow/test/tests/newton_cooling/nc06.i
- modules/porous_flow/test/tests/jacobian/chem15.i
- modules/porous_flow/test/tests/chemistry/dissolution_limited.i
- modules/porous_flow/test/tests/jacobian/mass03.i
- modules/porous_flow/test/tests/thermal_conductivity/ThermalCondPorosity01.i
- modules/porous_flow/test/tests/gravity/fully_saturated_grav01b.i
- modules/porous_flow/test/tests/chemistry/except5.i
- modules/porous_flow/test/tests/gravity/grav01c_action.i
- modules/porous_flow/test/tests/chemistry/except12.i
- modules/porous_flow/test/tests/poroperm/PermFromPoro01.i
- modules/porous_flow/test/tests/flux_limited_TVD_pflow/except04.i
- modules/porous_flow/test/tests/dirackernels/bh_except06.i
- modules/porous_flow/test/tests/infiltration_and_drainage/bw02.i
- modules/porous_flow/test/tests/dispersion/disp01_heavy.i
- modules/porous_flow/test/tests/flux_limited_TVD_pflow/pffltvd_2D.i
- modules/porous_flow/test/tests/jacobian/basic_advection5.i
- modules/porous_flow/test/tests/dirackernels/bh_except05.i
- modules/porous_flow/test/tests/actions/addmaterials.i
- modules/porous_flow/test/tests/jacobian/diff02.i
- modules/porous_flow/test/tests/jacobian/hgs01.i
- modules/porous_flow/test/tests/sinks/s06.i
- modules/porous_flow/test/tests/desorption/desorption02.i
- modules/porous_flow/test/tests/energy_conservation/heat04_fullysat_action.i
- modules/porous_flow/test/tests/jacobian/basic_advection6.i
- modules/porous_flow/test/tests/energy_conservation/heat04_action_KT.i
- modules/porous_flow/test/tests/jacobian/basic_advection2.i
- modules/porous_flow/test/tests/dirackernels/bh_except16.i
- modules/porous_flow/test/tests/dirackernels/bh_except02.i
- modules/porous_flow/test/tests/dirackernels/pls03.i
- modules/porous_flow/test/tests/sinks/s04.i
- modules/porous_flow/test/tests/flux_limited_TVD_pflow/jacobian_03.i
- modules/porous_flow/test/tests/jacobian/basic_advection1.i
- modules/porous_flow/test/tests/sinks/s08.i
- modules/porous_flow/examples/tidal/atm_tides_open_hole.i
- modules/porous_flow/test/tests/chemistry/except22.i
- modules/porous_flow/test/tests/jacobian/line_sink01.i
- modules/porous_flow/examples/flow_through_fractured_media/fine_thick_fracture_steady.i
- modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_2phasePSVG2.i
- modules/porous_flow/test/tests/fluids/simple_fluid_dy.i
- modules/porous_flow/examples/tutorial/10.i
- modules/porous_flow/test/tests/sinks/PorousFlowPiecewiseLinearSink_BC_eg1.i
- modules/porous_flow/examples/tutorial/07.i
- modules/porous_flow/test/tests/jacobian/line_sink04.i
- modules/porous_flow/test/tests/chemistry/except14.i
- modules/porous_flow/test/tests/jacobian/disp02.i
- modules/porous_flow/test/tests/poro_elasticity/pp_generation_action.i
- modules/porous_flow/test/tests/jacobian/pls01.i
- modules/porous_flow/test/tests/jacobian/denergy05.i
- modules/porous_flow/test/tests/actions/addjoiner.i
- modules/porous_flow/test/tests/flux_limited_TVD_pflow/pffltvd_1D_adaptivity.i
- modules/porous_flow/test/tests/jacobian/hcs01.i
- modules/porous_flow/test/tests/jacobian/fflux08.i
- modules/porous_flow/examples/coal_mining/coarse_with_fluid.i
- modules/porous_flow/test/tests/poro_elasticity/mandel_constM.i
- modules/porous_flow/test/tests/heterogeneous_materials/constant_poroperm2.i
- modules/porous_flow/test/tests/poroperm/poro_hm.i
- modules/porous_flow/test/tests/chemistry/except8.i
- modules/porous_flow/test/tests/chemistry/precipitation_porosity_change.i
- modules/porous_flow/test/tests/mass_conservation/mass06.i
- modules/porous_flow/test/tests/sinks/s05.i
- modules/porous_flow/examples/thm_example/2D.i
- modules/porous_flow/test/tests/chemistry/dissolution_limited_2phase.i
- modules/porous_flow/test/tests/jacobian/mass05.i
- modules/porous_flow/test/tests/poro_elasticity/terzaghi.i
- modules/porous_flow/test/tests/jacobian/disp03.i
- modules/porous_flow/test/tests/chemistry/2species_equilibrium.i
- modules/porous_flow/test/tests/thm_rehbinder/fixed_outer_rz.i
- modules/porous_flow/test/tests/jacobian/disp01.i
- modules/porous_flow/test/tests/jacobian/denergy03.i
- modules/porous_flow/test/tests/jacobian/line_sink02.i
- modules/porous_flow/test/tests/fluids/simple_fluid_MPa.i
- modules/porous_flow/test/tests/actions/basicthm_thm.i
- modules/porous_flow/test/tests/chemistry/except13.i
- modules/porous_flow/test/tests/chemistry/except16.i
- modules/porous_flow/test/tests/jacobian/fflux13.i
- modules/porous_flow/test/tests/numerical_diffusion/pffltvd_action.i
modules/porous_flow/test/tests/flux_limited_TVD_pflow/except05.i
# Exception test: Dictator cannot determine the FEType and it is not properly specified in the AdvectiveFluxCalculator
[Mesh]
type = GeneratedMesh
dim = 1
[]
[GlobalParams]
gravity = '1 2 3'
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./tracer]
[../]
[./cm]
family = Monomial
order = constant
[../]
[]
[Kernels]
[./cm]
type = Diffusion
variable = cm
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[PorousFlowUnsaturated]
porepressure = pp
mass_fraction_vars = tracer
fp = the_simple_fluid
[]
[UserObjects]
[./dummy_dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp cm'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[./advective_flux_calculator]
type = PorousFlowAdvectiveFluxCalculatorSaturated
PorousFlowDictator = dummy_dictator
[../]
[]
[Materials]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
modules/porous_flow/test/tests/basic_advection/2phase.i
# Basic advection of u in a 2-phase situation
#
# grad(P) = -2
# density * gravity = 4 * 0.25
# grad(P) - density * gravity = -3
# permeability = 10
# relative permeability = 0.5
# viscosity = 150
# so Darcy velocity = 0.1
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./u]
[../]
[]
[AuxVariables]
[./P0]
[../]
[./P1]
[../]
[]
[ICs]
[./P0]
type = FunctionIC
variable = P0
function = '0'
[../]
[./P1]
type = FunctionIC
variable = P1
function = '2*(1-x)'
[../]
[./u]
type = FunctionIC
variable = u
function = 'if(x<0.1,1,0)'
[../]
[]
[Kernels]
[./u_dot]
type = TimeDerivative
variable = u
[../]
[./u_advection]
type = PorousFlowBasicAdvection
variable = u
phase = 1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = ''
number_fluid_phases = 2
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
density0 = 32
viscosity = 123
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 4
thermal_expansion = 0
viscosity = 150.0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = P0
phase1_porepressure = P1
capillary_pressure = pc
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '10 0 0 0 10 0 0 0 10'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityConst
kr = 0.5
phase = 1
[../]
[./darcy_velocity]
type = PorousFlowDarcyVelocityMaterial
gravity = '0.25 0 0'
[../]
[]
[BCs]
[./left]
type = DirichletBC
boundary = left
value = 1
variable = u
[../]
[./right]
type = DirichletBC
boundary = right
value = 0
variable = u
[../]
[]
[Preconditioning]
[./basic]
type = SMP
full = true
petsc_options_iname = '-pc_type -snes_rtol'
petsc_options_value = ' lu 1E-10'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 5
[]
[Outputs]
exodus = true
print_linear_residuals = false
[]
modules/porous_flow/test/tests/jacobian/line_sink03.i
# PorousFlowPeacemanBorehole with 2-phase, 3-components, with enthalpy, internal_energy, and thermal_conductivity
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[./massfrac_ph0_sp0]
[../]
[./massfrac_ph0_sp1]
[../]
[./massfrac_ph1_sp0]
[../]
[./massfrac_ph1_sp1]
[../]
[./temp]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp ppwater ppgas massfrac_ph0_sp0 massfrac_ph0_sp1 massfrac_ph1_sp0 massfrac_ph1_sp1'
number_fluid_phases = 2
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[./dummy_outflow0]
type = PorousFlowSumQuantity
[../]
[./dummy_outflow1]
type = PorousFlowSumQuantity
[../]
[./dummy_outflow2]
type = PorousFlowSumQuantity
[../]
[./dummy_outflow3]
type = PorousFlowSumQuantity
[../]
[./dummy_outflow4]
type = PorousFlowSumQuantity
[../]
[./dummy_outflow5]
type = PorousFlowSumQuantity
[../]
[./dummy_outflow6]
type = PorousFlowSumQuantity
[../]
[./dummy_outflow7]
type = PorousFlowSumQuantity
[../]
[]
[ICs]
[./temp]
type = RandomIC
variable = temp
min = 1
max = 2
[../]
[./ppwater]
type = RandomIC
variable = ppwater
min = -1
max = 0
[../]
[./ppgas]
type = RandomIC
variable = ppgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 1
[../]
[./massfrac_ph0_sp1]
type = RandomIC
variable = massfrac_ph0_sp1
min = 0
max = 1
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 1
[../]
[./massfrac_ph1_sp1]
type = RandomIC
variable = massfrac_ph1_sp1
min = 0
max = 1
[../]
[]
[Kernels]
[./dummy_temp]
type = TimeDerivative
variable = temp
[../]
[./dummy_ppwater]
type = TimeDerivative
variable = ppwater
[../]
[./dummy_ppgas]
type = TimeDerivative
variable = ppgas
[../]
[./dummy_m00]
type = TimeDerivative
variable = massfrac_ph0_sp0
[../]
[./dummy_m01]
type = TimeDerivative
variable = massfrac_ph0_sp1
[../]
[./dummy_m10]
type = TimeDerivative
variable = massfrac_ph1_sp0
[../]
[./dummy_m11]
type = TimeDerivative
variable = massfrac_ph1_sp1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
cv = 1.1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
viscosity = 1.4
cv = 1.8
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph0_sp1 massfrac_ph1_sp0 massfrac_ph1_sp1'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '0.1 0.02 0.03 0.02 0.0 0.01 0.03 0.01 0.3'
[../]
[]
[DiracKernels]
#active = 'dirac6 dirac2' # incorrect jacobian for ny=2
#active = 'dirac0 dirac1 dirac2 dirac3 dirac4 dirac5' # correct jacobian for ny=2
#active = 'dirac0 dirac1 dirac2 dirac3 dirac4 dirac5 dirac6' # incorrect jacobian for ny=2
#active = 'dirac0 dirac1 dirac2 dirac3 dirac4 dirac5 dirac7' # correct jacobian in dbg, but not in opt, for ny=2
#active = 'dirac0 dirac1 dirac2 dirac3 dirac4 dirac5 dirac6' # incorrect jacobian in dbg, but correct for opt, for ny=1
#active = 'dirac0 dirac1 dirac2 dirac3 dirac4 dirac5' # correct jacobian, for ny=1
#active = 'dirac0 dirac1 dirac2 dirac3 dirac4 dirac5 dirac6' # incorrect jacobian in dbg, but correct for opt, for ny=1. row24, col 21 and 22 are wrong. row24=node3, 21=ppwater, 22=ppgas, 24=massfrac_ph0_sp1 (all at node3)
[./dirac0]
type = PorousFlowPeacemanBorehole
fluid_phase = 0
variable = ppwater
point_file = one_point.bh
line_length = 1
SumQuantityUO = dummy_outflow0
character = 1
bottom_p_or_t = -10
unit_weight = '1 2 3'
re_constant = 0.123
[../]
[./dirac1]
type = PorousFlowPeacemanBorehole
fluid_phase = 1
variable = ppgas
line_length = 1
line_direction = '-1 -1 -1'
use_relative_permeability = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow1
character = -0.5
bottom_p_or_t = 10
unit_weight = '1 2 -3'
re_constant = 0.3
[../]
[./dirac2]
type = PorousFlowPeacemanBorehole
fluid_phase = 0
variable = massfrac_ph0_sp0
line_length = 1.3
line_direction = '1 0 1'
use_mobility = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow2
character = 0.6
bottom_p_or_t = -4
unit_weight = '-1 -2 -3'
re_constant = 0.4
[../]
[./dirac3]
type = PorousFlowPeacemanBorehole
fluid_phase = 0
variable = massfrac_ph0_sp1
line_length = 1.3
line_direction = '1 1 1'
use_enthalpy = true
mass_fraction_component = 0
point_file = one_point.bh
SumQuantityUO = dummy_outflow3
character = -1
bottom_p_or_t = 3
unit_weight = '0.1 0.2 0.3'
re_constant = 0.5
[../]
[./dirac4]
type = PorousFlowPeacemanBorehole
fluid_phase = 1
variable = massfrac_ph1_sp0
function_of = temperature
line_length = 0.9
line_direction = '1 1 1'
mass_fraction_component = 1
use_internal_energy = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow4
character = 1.1
bottom_p_or_t = -7
unit_weight = '-1 2 3'
re_constant = 0.6
[../]
[./dirac5]
type = PorousFlowPeacemanBorehole
fluid_phase = 1
variable = temp
line_length = 0.9
function_of = temperature
line_direction = '1 2 3'
mass_fraction_component = 2
use_internal_energy = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow5
character = 0.9
bottom_p_or_t = -8
unit_weight = '1 2 1'
re_constant = 0.7
[../]
[./dirac6]
type = PorousFlowPeacemanBorehole
fluid_phase = 0
variable = ppwater
point_file = nine_points.bh
SumQuantityUO = dummy_outflow6
character = 0
bottom_p_or_t = 10
unit_weight = '0.0 0.0 0.0'
[../]
[./dirac7]
type = PorousFlowPeacemanBorehole
fluid_phase = 1
variable = massfrac_ph0_sp0
use_mobility = true
mass_fraction_component = 1
use_relative_permeability = true
use_internal_energy = true
point_file = ten_points.bh
SumQuantityUO = dummy_outflow7
character = -1
bottom_p_or_t = 10
unit_weight = '0.1 0.2 0.3'
[../]
[]
[Preconditioning]
[./check]
type = SMP
full = true
#petsc_options = '-snes_test_display'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
file_base = line_sink03
[]
modules/porous_flow/test/tests/dirackernels/theis2.i
# Theis problem: Flow to single sink
# Constant rate injection between 200 and 1000 s.
# Cartesian mesh with logarithmic distribution in x and y.
[Mesh]
type = GeneratedMesh
dim = 2
nx = 20
ny = 20
bias_x = 1.1
bias_y = 1.1
ymax = 100
xmax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
compute_enthalpy = false
compute_internal_energy = false
[]
[Variables]
[./pp]
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./flux]
type = PorousFlowAdvectiveFlux
variable = pp
gravity = '0 0 0'
fluid_component = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
viscosity = 0.001
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.2
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0
phase = 0
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 200
end_time = 1000
nl_abs_tol = 1e-10
[]
[Outputs]
perf_graph = true
file_base = theis2
[./csv]
type = CSV
execute_on = final
[../]
[]
[ICs]
[./PressureIC]
variable = pp
type = ConstantIC
value = 20e6
[../]
[]
[DiracKernels]
[./sink]
type = PorousFlowSquarePulsePointSource
start_time = 200
end_time = 1000
point = '0 0 0'
mass_flux = -0.04
variable = pp
[../]
[]
[BCs]
[./right]
type = DirichletBC
variable = pp
value = 20e6
boundary = right
[../]
[./top]
type = DirichletBC
variable = pp
value = 20e6
boundary = top
[../]
[]
[VectorPostprocessors]
[./pressure]
type = SideValueSampler
variable = pp
sort_by = x
execute_on = timestep_end
boundary = bottom
[../]
[]
modules/porous_flow/test/tests/jacobian/pls02.i
# PorousFlowPiecewiseLinearSink with 2-phase, 2-components
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 3
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[./massfrac_ph0_sp0]
[../]
[./massfrac_ph1_sp0]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas massfrac_ph0_sp0 massfrac_ph1_sp0'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[ICs]
[./ppwater]
type = RandomIC
variable = ppwater
min = -1
max = 0
[../]
[./ppgas]
type = RandomIC
variable = ppgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 1
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 1
[../]
[]
[Kernels]
[./dummy_ppwater]
type = TimeDerivative
variable = ppwater
[../]
[./dummy_ppgas]
type = TimeDerivative
variable = ppgas
[../]
[./dummy_m00]
type = TimeDerivative
variable = massfrac_ph0_sp0
[../]
[./dummy_m10]
type = TimeDerivative
variable = massfrac_ph1_sp0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
viscosity = 1.4
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[]
[BCs]
[./flux_w]
type = PorousFlowPiecewiseLinearSink
boundary = 'left'
pt_vals = '-1 -0.5 0'
multipliers = '1 2 4'
variable = ppwater
mass_fraction_component = 0
fluid_phase = 0
use_relperm = true
use_mobility = true
flux_function = 'x*y'
[../]
[./flux_g]
type = PorousFlowPiecewiseLinearSink
boundary = 'top'
pt_vals = '0 0.5 1'
multipliers = '1 -2 4'
mass_fraction_component = 0
variable = ppgas
fluid_phase = 1
use_relperm = true
use_mobility = true
flux_function = '-x*y'
[../]
[./flux_1]
type = PorousFlowPiecewiseLinearSink
boundary = 'right'
pt_vals = '0 0.5 1'
multipliers = '1 3 4'
mass_fraction_component = 1
variable = massfrac_ph0_sp0
fluid_phase = 0
use_relperm = true
use_mobility = true
[../]
[./flux_2]
type = PorousFlowPiecewiseLinearSink
boundary = 'back top'
pt_vals = '0 0.5 1'
multipliers = '0 1 -3'
mass_fraction_component = 1
variable = massfrac_ph1_sp0
fluid_phase = 1
use_relperm = true
use_mobility = true
flux_function = '0.5*x*y'
[../]
[]
[Preconditioning]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 2
[]
[Outputs]
file_base = pls02
[]
modules/porous_flow/test/tests/dirackernels/bh_except03.i
# PorousFlowPeacemanBorehole exception test
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = TimeDerivative
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
at_nodes = true # Needed to force expected error
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
bottom_p_or_t = 0
fluid_phase = 0
point_file = bh02.bh
SumQuantityUO = borehole_total_outflow_mass
variable = pp
unit_weight = '0 0 0'
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
modules/porous_flow/test/tests/chemistry/except19.i
# Exception test
# No initial_mineral_concentrations
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./dummy]
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 0.5
[../]
[./a]
initial_condition = 0.5
[../]
[./ini_mineral_conc]
initial_condition = 0.2
[../]
[./mineral]
family = MONOMIAL
order = CONSTANT
[../]
[./porosity]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./mineral]
type = PorousFlowPropertyAux
property = mineral_concentration
mineral_species = 0
variable = mineral
[../]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./dummy]
type = Diffusion
variable = dummy
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = dummy
number_fluid_phases = 1
number_fluid_components = 2
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./temperature_qp]
type = PorousFlowTemperature
temperature = 1
[../]
[./predis_qp]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = a
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = 2
reactions = 1
specific_reactive_surface_area = 0.5
kinetic_rate_constant = 0.6065306597126334
activation_energy = 3
molar_volume = 2
gas_constant = 6
reference_temperature = 0.5
[../]
[./mineral_conc_qp]
type = PorousFlowAqueousPreDisMineral
initial_concentrations = ini_mineral_conc
[../]
[./porosity]
type = PorousFlowPorosity
chemical = true
porosity_zero = 0.6
reference_chemistry = ini_mineral_conc
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
nl_abs_tol = 1E-10
dt = 0.1
end_time = 0.4
[]
[Postprocessors]
[./porosity]
type = PointValue
point = '0 0 0'
variable = porosity
[../]
[./c]
type = PointValue
point = '0 0 0'
variable = mineral
[../]
[]
[Outputs]
csv = true
perf_graph = true
[]
modules/porous_flow/test/tests/jacobian/denergy04.i
# 2phase, 1 component, with solid displacements, time derivative of energy-density, THM porosity
[Mesh]
type = GeneratedMesh
dim = 3
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./pgas]
[../]
[./pwater]
[../]
[./temp]
[../]
[]
[ICs]
[./disp_x]
type = RandomIC
variable = disp_x
min = -0.1
max = 0.1
[../]
[./disp_y]
type = RandomIC
variable = disp_y
min = -0.1
max = 0.1
[../]
[./disp_z]
type = RandomIC
variable = disp_z
min = -0.1
max = 0.1
[../]
[./pgas]
type = RandomIC
variable = pgas
max = 1.0
min = 0.0
[../]
[./pwater]
type = RandomIC
variable = pwater
max = 0.0
min = -1.0
[../]
[./temp]
type = RandomIC
variable = temp
max = 1.0
min = 0.0
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./dummy_pgas]
type = Diffusion
variable = pgas
[../]
[./dummy_pwater]
type = Diffusion
variable = pwater
[../]
[./energy_dot]
type = PorousFlowEnergyTimeDerivative
variable = temp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pgas temp pwater disp_x disp_y disp_z'
number_fluid_phases = 2
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
cv = 1.3
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
cv = 0.7
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '0.5 0.75'
# bulk modulus is lambda + 2*mu/3 = 0.5 + 2*0.75/3 = 1
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
thermal = true
ensure_positive = false
porosity_zero = 0.7
thermal_expansion_coeff = 0.7
biot_coefficient = 0.9
solid_bulk = 1
[../]
[./p_eff]
type = PorousFlowEffectiveFluidPressure
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 1.1
density = 0.5
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = pwater
phase1_porepressure = pgas
capillary_pressure = pc
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/dirackernels/theis1.i
# Theis problem: Flow to single sink
# SinglePhase
# Cartesian mesh with logarithmic distribution in x and y.
[Mesh]
type = GeneratedMesh
dim = 2
nx = 20
ny = 20
bias_x = 1.1
bias_y = 1.1
ymax = 100
xmax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
compute_enthalpy = false
compute_internal_energy = false
[]
[Variables]
[./pp]
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./flux]
type = PorousFlowAdvectiveFlux
variable = pp
gravity = '0 0 0'
fluid_component = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
viscosity = 0.001
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.2
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0
phase = 0
[../]
[]
[Postprocessors]
[./porepressure]
type = PointValue
point = '0 0 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./total_mass]
type = PorousFlowFluidMass
execute_on = 'initial timestep_end'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 200
end_time = 1E3
nl_abs_tol = 1e-10
[]
[Outputs]
perf_graph = true
file_base = theis1
[./csv]
type = CSV
execute_on = final
[../]
[]
[ICs]
[./PressureIC]
variable = pp
type = ConstantIC
value = 20e6
[../]
[]
[DiracKernels]
[./sink]
type = PorousFlowSquarePulsePointSource
end_time = 1000
point = '0 0 0'
mass_flux = -0.04
variable = pp
[../]
[]
[BCs]
[./right]
type = DirichletBC
variable = pp
value = 20e6
boundary = right
[../]
[./top]
type = DirichletBC
variable = pp
value = 20e6
boundary = top
[../]
[]
[VectorPostprocessors]
[./pressure]
type = SideValueSampler
variable = pp
sort_by = x
execute_on = timestep_end
boundary = bottom
[../]
[]
modules/porous_flow/examples/flow_through_fractured_media/fine_thick_fracture_transient.i
# Using a single-dimensional mesh
# Transient flow and solute transport along a fracture in a porous matrix
# advective dominated flow in the fracture and diffusion into the porous matrix
#
# Note that fine_thick_fracture_steady.i must be run to initialise the porepressure properly
[Mesh]
file = 'gold/fine_thick_fracture_steady_out.e'
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./pp]
initial_from_file_var = pp
initial_from_file_timestep = 1
[../]
[./massfrac0]
[../]
[]
[AuxVariables]
[./velocity_x]
family = MONOMIAL
order = CONSTANT
block = fracture
[../]
[./velocity_y]
family = MONOMIAL
order = CONSTANT
block = fracture
[../]
[]
[AuxKernels]
[./velocity_x]
type = PorousFlowDarcyVelocityComponent
variable = velocity_x
component = x
[../]
[./velocity_y]
type = PorousFlowDarcyVelocityComponent
variable = velocity_y
component = y
[../]
[]
[ICs]
[./massfrac0]
type = ConstantIC
variable = massfrac0
value = 0
[../]
[]
[BCs]
[./top]
type = DirichletBC
value = 0
variable = massfrac0
boundary = top
[../]
[./bottom]
type = DirichletBC
value = 1
variable = massfrac0
boundary = bottom
[../]
[./ptop]
type = DirichletBC
variable = pp
boundary = top
value = 1e6
[../]
[./pbottom]
type = DirichletBC
variable = pp
boundary = bottom
value = 1.002e6
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./adv0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
[../]
[./diff0]
type = PorousFlowDispersiveFlux
fluid_component = 0
variable = pp
disp_trans = 0
disp_long = 0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = massfrac0
[../]
[./adv1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = massfrac0
[../]
[./diff1]
type = PorousFlowDispersiveFlux
fluid_component = 1
variable = massfrac0
disp_trans = 0
disp_long = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = massfrac0
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./poro_fracture]
type = PorousFlowPorosityConst
porosity = 1.0 # this is the true porosity of the fracture
block = 'fracture'
[../]
[./poro_matrix]
type = PorousFlowPorosityConst
porosity = 0.1
block = 'matrix1 matrix2'
[../]
[./diff1]
type = PorousFlowDiffusivityConst
diffusion_coeff = '1e-9 1e-9'
tortuosity = 1.0
block = 'fracture'
[../]
[./diff2]
type = PorousFlowDiffusivityConst
diffusion_coeff = '1e-9 1e-9'
tortuosity = 0.1
block = 'matrix1 matrix2'
[../]
[./relp]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./permeability1]
type = PorousFlowPermeabilityConst
permeability = '3e-8 0 0 0 3e-8 0 0 0 3e-8' # this is the true permeability of the fracture
block = 'fracture'
[../]
[./permeability2]
type = PorousFlowPermeabilityConst
permeability = '1e-20 0 0 0 1e-20 0 0 0 1e-20'
block = 'matrix1 matrix2'
[../]
[]
[Functions]
[./dt_controller]
type = PiecewiseConstant
x = '0 30 40 100 200 83200'
y = '0.01 0.1 1 10 100 32'
[../]
[]
[Preconditioning]
active = basic
[./mumps_is_best_for_parallel_jobs]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[./basic]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu NONZERO 2 '
[../]
[]
[Executioner]
type = Transient
solve_type = NEWTON
end_time = 86400
#dt = 0.01
[./TimeStepper]
type = FunctionDT
function = dt_controller
[../]
# controls for nonlinear iterations
nl_max_its = 15
nl_rel_tol = 1e-14
nl_abs_tol = 1e-9
[]
[VectorPostprocessors]
[./xmass]
type = LineValueSampler
start_point = '0.4 0 0'
end_point = '0.5 0 0'
sort_by = x
num_points = 167
variable = massfrac0
[../]
[]
[Outputs]
perf_graph = true
console = true
csv = true
exodus = true
[]
modules/porous_flow/examples/tutorial/06_KT.i
# Darcy flow with a tracer
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[./make3D]
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
input = annular
[../]
[./shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[../]
[./aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[../]
[./injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomain_ids = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[../]
[./rename]
type = RenameBlockGenerator
old_block_id = '0 1'
new_block_name = 'caps aquifer'
input = 'injection_area'
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./porepressure]
[../]
[./tracer_concentration]
[../]
[]
[ICs]
[./tracer_concentration]
type = FunctionIC
function = '0.5*if(x*x+y*y<1.01,1,0)'
variable = tracer_concentration
[../]
[]
[PorousFlowFullySaturated]
porepressure = porepressure
coupling_type = Hydro
gravity = '0 0 0'
fp = the_simple_fluid
mass_fraction_vars = tracer_concentration
stabilization = KT
flux_limiter_type = superbee
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1E6
boundary = injection_area
[../]
[./constant_outer_porepressure]
type = DirichletBC
variable = porepressure
value = 0
boundary = rmax
[../]
[./injected_tracer]
type = DirichletBC
variable = tracer_concentration
value = 0.5
boundary = injection_area
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[../]
[./permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_rel_tol = 1E-14
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/poro_elasticity/terzaghi_basicthm.i
# Using a BasicTHM action
# Terzaghi's problem of consolodation of a drained medium
# The FullySaturated Kernels are used, with multiply_by_density = false
# so that this becomes a linear problem with constant Biot Modulus
# Also, since the FullySaturated Kernels are used, we have to
# use consistent_with_displaced_mesh = false in the calculation of volumetric strain
#
# A saturated soil sample sits in a bath of water.
# It is constrained on its sides, and bottom.
# Its sides and bottom are also impermeable.
# Initially it is unstressed.
# A normal stress, q, is applied to the soil's top.
# The soil then slowly compresses as water is squeezed
# out from the sample from its top (the top BC for
# the porepressure is porepressure = 0).
#
# See, for example. Section 2.2 of the online manuscript
# Arnold Verruijt "Theory and Problems of Poroelasticity" Delft University of Technology 2013
# but note that the "sigma" in that paper is the negative
# of the stress in TensorMechanics
#
# Here are the problem's parameters, and their values:
# Soil height. h = 10
# Soil's Lame lambda. la = 2
# Soil's Lame mu, which is also the Soil's shear modulus. mu = 3
# Soil bulk modulus. K = la + 2*mu/3 = 4
# Soil confined compressibility. m = 1/(K + 4mu/3) = 0.125
# Soil bulk compliance. 1/K = 0.25
# Fluid bulk modulus. Kf = 8
# Fluid bulk compliance. 1/Kf = 0.125
# Fluid mobility (soil permeability/fluid viscosity). k = 1.5
# Soil initial porosity. phi0 = 0.1
# Biot coefficient. alpha = 0.6
# Soil initial storativity, which is the reciprocal of the initial Biot modulus. S = phi0/Kf + (alpha - phi0)(1 - alpha)/K = 0.0625
# Consolidation coefficient. c = k/(S + alpha^2 m) = 13.95348837
# Normal stress on top. q = 1
# Initial porepressure, resulting from instantaneous application of q, assuming corresponding instantaneous increase of porepressure (Note that this is calculated by MOOSE: we only need it for the analytical solution). p0 = alpha*m*q/(S + alpha^2 m) = 0.69767442
# Initial vertical displacement (down is positive), resulting from instantaneous application of q (Note this is calculated by MOOSE: we only need it for the analytical solution). uz0 = q*m*h*S/(S + alpha^2 m)
# Final vertical displacement (down in positive) (Note this is calculated by MOOSE: we only need it for the analytical solution). uzinf = q*m*h
#
# The solution for porepressure is
# P = 4*p0/\pi \sum_{k=1}^{\infty} \frac{(-1)^{k-1}}{2k-1} \cos ((2k-1)\pi z/(2h)) \exp(-(2k-1)^2 \pi^2 ct/(4 h^2))
# This series converges very slowly for ct/h^2 small, so in that domain
# P = p0 erf( (1-(z/h))/(2 \sqrt(ct/h^2)) )
#
# The degree of consolidation is defined as
# U = (uz - uz0)/(uzinf - uz0)
# where uz0 and uzinf are defined above, and
# uz = the vertical displacement of the top (down is positive)
# U = 1 - (8/\pi^2)\sum_{k=1}^{\infty} \frac{1}{(2k-1)^2} \exp(-(2k-1)^2 \pi^2 ct/(4 h^2))
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 10
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = 0
zmax = 10
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./basefixed]
type = DirichletBC
variable = disp_z
value = 0
boundary = back
[../]
[./topdrained]
type = DirichletBC
variable = porepressure
value = 0
boundary = front
[../]
[./topload]
type = NeumannBC
variable = disp_z
value = -1
boundary = front
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.0
bulk_modulus = 8.0
viscosity = 0.96
density0 = 1.0
[../]
[../]
[]
[PorousFlowBasicTHM]
coupling_type = HydroMechanical
displacements = 'disp_x disp_y disp_z'
multiply_by_density = false
porepressure = porepressure
biot_coefficient = 0.6
gravity = '0 0 0'
fp = the_simple_fluid
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '2 3'
# bulk modulus is lambda + 2*mu/3 = 2 + 2*3/3 = 4
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./porosity]
type = PorousFlowPorosityConst # only the initial value of this is used
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.6
fluid_bulk_modulus = 8
solid_bulk_compliance = 0.25
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.5 0 0 0 1.5 0 0 0 1.5'
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = csv
point = '0 0 0'
variable = porepressure
use_displaced_mesh = false
[../]
[./p1]
type = PointValue
outputs = csv
point = '0 0 1'
variable = porepressure
use_displaced_mesh = false
[../]
[./p2]
type = PointValue
outputs = csv
point = '0 0 2'
variable = porepressure
use_displaced_mesh = false
[../]
[./p3]
type = PointValue
outputs = csv
point = '0 0 3'
variable = porepressure
use_displaced_mesh = false
[../]
[./p4]
type = PointValue
outputs = csv
point = '0 0 4'
variable = porepressure
use_displaced_mesh = false
[../]
[./p5]
type = PointValue
outputs = csv
point = '0 0 5'
variable = porepressure
use_displaced_mesh = false
[../]
[./p6]
type = PointValue
outputs = csv
point = '0 0 6'
variable = porepressure
use_displaced_mesh = false
[../]
[./p7]
type = PointValue
outputs = csv
point = '0 0 7'
variable = porepressure
use_displaced_mesh = false
[../]
[./p8]
type = PointValue
outputs = csv
point = '0 0 8'
variable = porepressure
use_displaced_mesh = false
[../]
[./p9]
type = PointValue
outputs = csv
point = '0 0 9'
variable = porepressure
use_displaced_mesh = false
[../]
[./p99]
type = PointValue
outputs = csv
point = '0 0 10'
variable = porepressure
use_displaced_mesh = false
[../]
[./zdisp]
type = PointValue
outputs = csv
point = '0 0 10'
variable = disp_z
use_displaced_mesh = false
[../]
[./dt]
type = FunctionValuePostprocessor
outputs = console
function = if(0.5*t<0.1,0.5*t,0.1)
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 10
[./TimeStepper]
type = PostprocessorDT
postprocessor = dt
dt = 0.0001
[../]
[]
[Outputs]
execute_on = 'timestep_end'
file_base = terzaghi_basicthm
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/dirackernels/pls01.i
# fully-saturated situation with a poly-line sink at one
# of the nodes. Because there is no fluid flow, the
# other nodes should not experience any change in
# porepressure.
# The poly-line sink has length=2 and weight=0.1, and
# extracts fluid at a constant rate of 1 kg.m^-1.s^-1.
# Therefore, in 1 second it will have extracted a total
# of 0.2 kg.
# The porosity is 0.1, and the elemental volume is 2,
# so the fluid mass at the node in question = 0.2 * density / 4,
# where the 4 is the number of nodes in the element.
# In this simulation density = dens0 * exp(P / bulk), with
# dens0 = 100, and bulk = 20 MPa.
# The initial porepressure P0 = 10 MPa, so the final (after
# 1 second of simulation) is
# P(t=1) = 0.950879 MPa
#
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1
ny = 1
xmin = 0
xmax = 2
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pls_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e7
density0 = 100
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[DiracKernels]
[./pls]
type = PorousFlowPolyLineSink
fluid_phase = 0
point_file = pls01_21.bh
line_length = 2
SumQuantityUO = pls_total_outflow_mass
variable = pp
p_or_t_vals = '0 1E7'
fluxes = '1 1'
[../]
[]
[Postprocessors]
[./pls_report]
type = PorousFlowPlotQuantity
uo = pls_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p00]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[./p01]
type = PointValue
variable = pp
point = '0 1 0'
execute_on = timestep_end
[../]
[./p20]
type = PointValue
variable = pp
point = '2 0 0'
execute_on = timestep_end
[../]
[./p21]
type = PointValue
variable = pp
point = '2 1 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 pls_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 1
dt = 1
solve_type = NEWTON
[]
[Outputs]
file_base = pls01
exodus = false
csv = true
execute_on = timestep_end
[]
modules/porous_flow/test/tests/gravity/grav02e.i
# Checking that gravity head is established in the transient situation when 0<=saturation<=1 (note the less-than-or-equal-to).
# 2phase (PS), 2components, constant capillary pressure, constant fluid bulk-moduli for each phase, constant viscosity,
# constant permeability, Corey relative permeabilities with no residual saturation
[Mesh]
type = GeneratedMesh
dim = 2
ny = 10
ymax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 -10 0'
[]
[Variables]
[./ppwater]
initial_condition = 1.5e6
[../]
[./sgas]
initial_condition = 0.3
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[./ppgas]
family = MONOMIAL
order = FIRST
[../]
[./swater]
family = MONOMIAL
order = FIRST
[../]
[./relpermwater]
family = MONOMIAL
order = FIRST
[../]
[./relpermgas]
family = MONOMIAL
order = FIRST
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = ppwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = ppwater
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sgas
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = sgas
[../]
[]
[AuxKernels]
[./ppgas]
type = PorousFlowPropertyAux
property = pressure
phase = 1
variable = ppgas
[../]
[./swater]
type = PorousFlowPropertyAux
property = saturation
phase = 0
variable = swater
[../]
[./relpermwater]
type = PorousFlowPropertyAux
property = relperm
phase = 0
variable = relpermwater
[../]
[./relpermgas]
type = PorousFlowPropertyAux
property = relperm
phase = 1
variable = relpermgas
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater sgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
pc = 1e5
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
viscosity = 1e-3
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 10
viscosity = 1e-5
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = ppwater
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1e-11 0 0 0 1e-11 0 0 0 1e-11'
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm_gas]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 1
[../]
[]
[Postprocessors]
[./mass_ph0]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'initial timestep_end'
[../]
[./mass_ph1]
type = PorousFlowFluidMass
fluid_component = 1
execute_on = 'initial timestep_end'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol'
petsc_options_value = 'bcgs bjacobi 1E-12 1E-10'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1e5
[./TimeStepper]
type = IterationAdaptiveDT
dt = 1e4
[../]
[]
[Outputs]
execute_on = 'initial timestep_end'
file_base = grav02e
exodus = true
perf_graph = true
csv = false
[]
modules/porous_flow/test/tests/gravity/grav02g.i
# Checking that gravity head is established in the transient situation when 0<=saturation<=1 (note the less-than-or-equal-to).
# 2phase (PS), 2components, Brooks-Corey capillary pressure, constant fluid bulk-moduli for each phase, constant viscosity,
# constant permeability, Brooks-Corey relative permeabilities with residual saturation
[Mesh]
type = GeneratedMesh
dim = 2
ny = 10
ymax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 -10 0'
[]
[Variables]
[./ppwater]
initial_condition = 1.5e6
[../]
[./sgas]
initial_condition = 0.3
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[./ppgas]
family = MONOMIAL
order = CONSTANT
[../]
[./swater]
family = MONOMIAL
order = CONSTANT
[../]
[./relpermwater]
family = MONOMIAL
order = CONSTANT
[../]
[./relpermgas]
family = MONOMIAL
order = CONSTANT
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = ppwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = ppwater
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sgas
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = sgas
[../]
[]
[AuxKernels]
[./ppgas]
type = PorousFlowPropertyAux
property = pressure
phase = 1
variable = ppgas
[../]
[./swater]
type = PorousFlowPropertyAux
property = saturation
phase = 0
variable = swater
[../]
[./relpermwater]
type = MaterialStdVectorAux
property = PorousFlow_relative_permeability_qp
index = 0
variable = relpermwater
[../]
[./relpermgas]
type = PorousFlowPropertyAux
property = relperm
phase = 1
variable = relpermgas
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater sgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureBC
lambda = 2
pe = 1e4
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
viscosity = 1e-3
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 10
viscosity = 1e-5
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = ppwater
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1e-11 0 0 0 1e-11 0 0 0 1e-11'
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityBC
lambda = 2
phase = 0
s_res = 0.25
sum_s_res = 0.35
[../]
[./relperm_gas]
type = PorousFlowRelativePermeabilityBC
lambda = 2
phase = 1
s_res = 0.1
sum_s_res = 0.35
nw_phase = true
[../]
[]
[Postprocessors]
[./mass_ph0]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'initial timestep_end'
[../]
[./mass_ph1]
type = PorousFlowFluidMass
fluid_component = 1
execute_on = 'initial timestep_end'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_stol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-13 15'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1e5
[./TimeStepper]
type = IterationAdaptiveDT
dt = 5e3
[../]
[]
[Outputs]
execute_on = 'initial timestep_end'
file_base = grav02g
exodus = true
perf_graph = true
csv = false
[]
modules/porous_flow/test/tests/gravity/fully_saturated_grav01c.i
# Checking that gravity head is established
# 1phase, 2-component, constant fluid-bulk, constant viscosity, constant permeability
# fully saturated with fully-saturated Kernel
# For better agreement with the analytical solution (ana_pp), just increase nx
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmin = -1
xmax = 0
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[./InitialCondition]
type = RandomIC
min = 0
max = 1
[../]
[../]
[./frac]
[./InitialCondition]
type = RandomIC
min = 0
max = 1
[../]
[../]
[]
[Kernels]
[./flux1]
type = PorousFlowFullySaturatedDarcyFlow
variable = pp
fluid_component = 0
gravity = '-1 0 0'
[../]
[./flux0]
type = PorousFlowFullySaturatedDarcyFlow
variable = frac
fluid_component = 1
gravity = '-1 0 0'
[../]
[]
[Functions]
[./ana_pp]
type = ParsedFunction
vars = 'g B p0 rho0'
vals = '1 1.2 0 1'
value = '-B*log(exp(-p0/B)+g*rho0*x/B)' # expected pp at base
[../]
[]
[BCs]
[./z]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp frac'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.2
density0 = 1
viscosity = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = frac
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[]
[Postprocessors]
[./pp_base]
type = PointValue
variable = pp
point = '-1 0 0'
[../]
[./pp_analytical]
type = FunctionValuePostprocessor
function = ana_pp
point = '-1 0 0'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
execute_on = 'timestep_end'
file_base = fully_saturated_grav01c
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/jacobian/fflux10.i
# 1phase, 3components, constant viscosity, constant insitu permeability
# density with constant bulk, BW relative perm, nonzero gravity, unsaturated with BW
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./massfrac0]
[../]
[./massfrac1]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = -0.7+x+y
[../]
[./massfrac0]
type = RandomIC
variable = massfrac0
min = 0
max = 0.3
[../]
[./massfrac1]
type = RandomIC
variable = massfrac1
min = 0
max = 0.4
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
gravity = '-1 -0.1 0'
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = massfrac0
gravity = '-1 -0.1 0'
[../]
[./flux2]
type = PorousFlowAdvectiveFlux
fluid_component = 2
variable = massfrac1
gravity = '-1 -0.1 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0 massfrac1'
number_fluid_phases = 1
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureBW
Sn = 0.05
Ss = 0.9
las = 2.2
C = 1.5
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac0 massfrac1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityBW
Sn = 0.05
Ss = 0.9
Kn = 0.02
Ks = 0.95
C = 1.5
phase = 0
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/jacobian/mass10.i
# 1phase
# vanGenuchten, constant-bulk density, HM porosity, 1component, unsaturated
[Mesh]
type = GeneratedMesh
dim = 3
xmin = -1
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./pp]
[../]
[]
[ICs]
[./disp_x]
type = RandomIC
variable = disp_x
min = -0.1
max = 0.1
[../]
[./disp_y]
type = RandomIC
variable = disp_y
min = -0.1
max = 0.1
[../]
[./disp_z]
type = RandomIC
variable = disp_z
min = -0.1
max = 0.1
[../]
[./pp]
type = RandomIC
variable = pp
min = -1
max = 1
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
strain_at_nearest_qp = true
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '0.5 0.75'
# bulk modulus is lambda + 2*mu/3 = 0.5 + 2*0.75/3 = 1
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
porosity_zero = 0.1
biot_coefficient = 0.5
solid_bulk = 1
strain_at_nearest_qp = true
[../]
[./nearest_qp]
type = PorousFlowNearestQp
[../]
[./p_eff]
type = PorousFlowEffectiveFluidPressure
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/dirackernels/bh03.i
# fully-saturated
# injection
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 0
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
variable = pp
SumQuantityUO = borehole_total_outflow_mass
point_file = bh03.bh
function_of = pressure
fluid_phase = 0
bottom_p_or_t = 1E7
unit_weight = '0 0 0'
use_mobility = true
character = -1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
[Outputs]
file_base = bh03
exodus = false
csv = true
execute_on = timestep_end
[]
modules/porous_flow/test/tests/mass_conservation/mass04.i
# The sample is a single unit element, with roller BCs on the sides
# and bottom. A constant displacement is applied to the top: disp_z = -0.01*t.
# There is no fluid flow.
# Fluid mass conservation is checked.
#
# Under these conditions
# porepressure = porepressure(t=0) - (Fluid bulk modulus)*log(1 - 0.01*t)
# stress_xx = (bulk - 2*shear/3)*disp_z/L (remember this is effective stress)
# stress_zz = (bulk + 4*shear/3)*disp_z/L (remember this is effective stress)
# where L is the height of the sample (L=1 in this test)
#
# Parameters:
# Bulk modulus = 2
# Shear modulus = 1.5
# fluid bulk modulus = 0.5
# initial porepressure = 0.1
#
# Desired output:
# zdisp = -0.01*t
# p0 = 0.1 - 0.5*log(1-0.01*t)
# stress_xx = stress_yy = -0.01*t
# stress_zz = -0.04*t
#
# Regarding the "log" - it comes from preserving fluid mass
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
initial_condition = 0.1
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./basefixed]
type = DirichletBC
variable = disp_z
value = 0
boundary = back
[../]
[./top_velocity]
type = FunctionDirichletBC
variable = disp_z
function = -0.01*t
boundary = front
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
component = 2
variable = disp_z
[../]
[./poro_vol_exp]
type = PorousFlowMassVolumetricExpansion
variable = porepressure
fluid_component = 0
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = porepressure
[../]
[]
[AuxVariables]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
[../]
[./stress_xz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xz
index_i = 0
index_j = 2
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '1 1.5'
# bulk modulus is lambda + 2*mu/3 = 1 + 2*1.5/3 = 2
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '0.5 0 0 0 0.5 0 0 0 0.5'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = 'console csv'
execute_on = 'initial timestep_end'
point = '0 0 0'
variable = porepressure
[../]
[./zdisp]
type = PointValue
outputs = csv
point = '0 0 0.5'
use_displaced_mesh = false
variable = disp_z
[../]
[./stress_xx]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_xx
[../]
[./stress_yy]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_yy
[../]
[./stress_zz]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_zz
[../]
[./fluid_mass]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'initial timestep_end'
use_displaced_mesh = true
outputs = 'console csv'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-14 1E-8 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 10
dt = 2
[]
[Outputs]
execute_on = 'initial timestep_end'
file_base = mass04
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/mass_conservation/mass02.i
# checking that the mass postprocessor correctly calculates the mass
# 1phase, 2component, constant porosity
[Mesh]
type = GeneratedMesh
dim = 1
nx = 3
xmin = -1
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./mass_frac_comp0]
[../]
[]
[ICs]
[./pinit]
type = FunctionIC
function = x
variable = pp
[../]
[./minit]
type = FunctionIC
function = 'x*x'
variable = mass_frac_comp0
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = mass_frac_comp0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp mass_frac_comp0'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'mass_frac_comp0'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Postprocessors]
[./total_mass_0]
type = PorousFlowFluidMass
[../]
[./total_mass_1]
type = PorousFlowFluidMass
fluid_component = 1
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1 1 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = mass02
csv = true
[]
modules/porous_flow/test/tests/heterogeneous_materials/constant_poroperm3.i
# Assign porosity and permeability variables from constant AuxVariables read from the mesh
# to create a heterogeneous model
[Mesh]
type = FileMesh
file = 'gold/constant_poroperm2_out.e'
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 -10'
[]
[Variables]
[./ppwater]
initial_condition = 1e6
[../]
[]
[AuxVariables]
[./poro]
family = MONOMIAL
order = CONSTANT
initial_from_file_var = poro
[../]
[./permxx]
family = MONOMIAL
order = CONSTANT
initial_from_file_var = permxx
[../]
[./permxy]
family = MONOMIAL
order = CONSTANT
initial_from_file_var = permxy
[../]
[./permxz]
family = MONOMIAL
order = CONSTANT
initial_from_file_var = permxz
[../]
[./permyx]
family = MONOMIAL
order = CONSTANT
initial_from_file_var = permyx
[../]
[./permyy]
family = MONOMIAL
order = CONSTANT
initial_from_file_var = permyy
[../]
[./permyz]
family = MONOMIAL
order = CONSTANT
initial_from_file_var = permyz
[../]
[./permzx]
family = MONOMIAL
order = CONSTANT
initial_from_file_var = permzx
[../]
[./permzy]
family = MONOMIAL
order = CONSTANT
initial_from_file_var = permzy
[../]
[./permzz]
family = MONOMIAL
order = CONSTANT
initial_from_file_var = permzz
[../]
[./poromat]
family = MONOMIAL
order = CONSTANT
[../]
[./permxxmat]
family = MONOMIAL
order = CONSTANT
[../]
[./permxymat]
family = MONOMIAL
order = CONSTANT
[../]
[./permxzmat]
family = MONOMIAL
order = CONSTANT
[../]
[./permyxmat]
family = MONOMIAL
order = CONSTANT
[../]
[./permyymat]
family = MONOMIAL
order = CONSTANT
[../]
[./permyzmat]
family = MONOMIAL
order = CONSTANT
[../]
[./permzxmat]
family = MONOMIAL
order = CONSTANT
[../]
[./permzymat]
family = MONOMIAL
order = CONSTANT
[../]
[./permzzmat]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./poromat]
type = PorousFlowPropertyAux
property = porosity
variable = poromat
[../]
[./permxxmat]
type = PorousFlowPropertyAux
property = permeability
variable = permxxmat
column = 0
row = 0
[../]
[./permxymat]
type = PorousFlowPropertyAux
property = permeability
variable = permxymat
column = 1
row = 0
[../]
[./permxzmat]
type = PorousFlowPropertyAux
property = permeability
variable = permxzmat
column = 2
row = 0
[../]
[./permyxmat]
type = PorousFlowPropertyAux
property = permeability
variable = permyxmat
column = 0
row = 1
[../]
[./permyymat]
type = PorousFlowPropertyAux
property = permeability
variable = permyymat
column = 1
row = 1
[../]
[./permyzmat]
type = PorousFlowPropertyAux
property = permeability
variable = permyzmat
column = 2
row = 1
[../]
[./permzxmat]
type = PorousFlowPropertyAux
property = permeability
variable = permzxmat
column = 0
row = 2
[../]
[./permzymat]
type = PorousFlowPropertyAux
property = permeability
variable = permzymat
column = 1
row = 2
[../]
[./permzzmat]
type = PorousFlowPropertyAux
property = permeability
variable = permzzmat
column = 2
row = 2
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
variable = ppwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
variable = ppwater
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
viscosity = 1e-3
thermal_expansion = 0
cv = 2
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = ppwater
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = poro
[../]
[./permeability]
type = PorousFlowPermeabilityConstFromVar
perm_xx = permxx
perm_xy = permxy
perm_xz = permxz
perm_yx = permyx
perm_yy = permyy
perm_yz = permyz
perm_zx = permzx
perm_zy = permzy
perm_zz = permzz
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[Postprocessors]
[./mass_ph0]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'initial timestep_end'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol'
petsc_options_value = 'bcgs bjacobi 1E-12 1E-10'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 100
dt = 100
[]
[Outputs]
execute_on = 'initial timestep_end'
exodus = true
perf_graph = true
file_base = constant_poroperm2_out
[]
modules/porous_flow/test/tests/jacobian/mass_vol_exp01.i
# Tests the PorousFlowMassVolumetricExpansion kernel
# Fluid with constant bulk modulus, van-Genuchten capillary, constant porosity
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
block = 0
PorousFlowDictator = dictator
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[ICs]
[./disp_x]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_x
[../]
[./disp_y]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_y
[../]
[./disp_z]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_z
[../]
[./p]
type = RandomIC
min = -1
max = 1
variable = porepressure
[../]
[]
[BCs]
# necessary otherwise volumetric strain rate will be zero
[./disp_x]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./disp_y]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'left right'
[../]
[./disp_z]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'left right'
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
displacements = 'disp_x disp_y disp_z'
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
displacements = 'disp_x disp_y disp_z'
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
displacements = 'disp_x disp_y disp_z'
component = 2
[../]
[./poro]
type = PorousFlowMassVolumetricExpansion
fluid_component = 0
variable = porepressure
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./simple1]
type = TensorMechanicsPlasticSimpleTester
a = 0
b = 1
strength = 1E20
yield_function_tolerance = 1.0E-9
internal_constraint_tolerance = 1.0E-9
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '2 3'
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E-5
[]
[Outputs]
execute_on = 'timestep_end'
file_base = jacobian2
exodus = false
[]
modules/porous_flow/test/tests/sinks/s02.i
# apply a sink flux with use_mobility=true and observe the correct behavior
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0
xmax = 1
ymin = 0
ymax = 1
zmin = 0
zmax = 2
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = y+1
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.3
density0 = 1.1
thermal_expansion = 0
viscosity = 1.1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '0.2 0 0 0 0.1 0 0 0 0.1'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[AuxVariables]
[./flux_out]
[../]
[./xval]
[../]
[./yval]
[../]
[]
[ICs]
[./xval]
type = FunctionIC
variable = xval
function = x
[../]
[./yval]
type = FunctionIC
variable = yval
function = y
[../]
[]
[Functions]
[./mass00]
type = ParsedFunction
value = 'vol*por*dens0*exp(pp/bulk)'
vars = 'vol por dens0 pp bulk'
vals = '0.25 0.1 1.1 p00 1.3'
[../]
[./mass01]
type = ParsedFunction
value = 'vol*por*dens0*exp(pp/bulk)'
vars = 'vol por dens0 pp bulk'
vals = '0.25 0.1 1.1 p01 1.3'
[../]
[./expected_mass_change00]
type = ParsedFunction
value = 'fcn*perm*dens0*exp(pp/bulk)/visc*area*dt'
vars = 'fcn perm dens0 pp bulk visc area dt'
vals = '6 0.2 1.1 p00 1.3 1.1 0.5 1E-3'
[../]
[./expected_mass_change01]
type = ParsedFunction
value = 'fcn*perm*dens0*exp(pp/bulk)/visc*area*dt'
vars = 'fcn perm dens0 pp bulk visc area dt'
vals = '6 0.2 1.1 p01 1.3 1.1 0.5 1E-3'
[../]
[./mass00_expect]
type = ParsedFunction
value = 'mass_prev-mass_change'
vars = 'mass_prev mass_change'
vals = 'm00_prev del_m00'
[../]
[./mass01_expect]
type = ParsedFunction
value = 'mass_prev-mass_change'
vars = 'mass_prev mass_change'
vals = 'm01_prev del_m01'
[../]
[]
[Postprocessors]
[./p00]
type = PointValue
point = '0 0 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./m00]
type = FunctionValuePostprocessor
function = mass00
execute_on = 'initial timestep_end'
[../]
[./m00_prev]
type = FunctionValuePostprocessor
function = mass00
execute_on = 'timestep_begin'
outputs = 'console'
[../]
[./del_m00]
type = FunctionValuePostprocessor
function = expected_mass_change00
execute_on = 'timestep_end'
outputs = 'console'
[../]
[./m00_expect]
type = FunctionValuePostprocessor
function = mass00_expect
execute_on = 'timestep_end'
[../]
[./p10]
type = PointValue
point = '1 0 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./p01]
type = PointValue
point = '0 1 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./m01]
type = FunctionValuePostprocessor
function = mass01
execute_on = 'initial timestep_end'
[../]
[./m01_prev]
type = FunctionValuePostprocessor
function = mass01
execute_on = 'timestep_begin'
outputs = 'console'
[../]
[./del_m01]
type = FunctionValuePostprocessor
function = expected_mass_change01
execute_on = 'timestep_end'
outputs = 'console'
[../]
[./m01_expect]
type = FunctionValuePostprocessor
function = mass01_expect
execute_on = 'timestep_end'
[../]
[./p11]
type = PointValue
point = '1 1 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[]
[BCs]
[./flux]
type = PorousFlowSink
boundary = 'left'
variable = pp
use_mobility = true
use_relperm = true
fluid_phase = 0
flux_function = 6
save_in = flux_out
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_max_it -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu 10000 NONZERO 2'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E-3
end_time = 0.03
nl_rel_tol = 1E-12
nl_abs_tol = 1E-12
[]
[Outputs]
file_base = s02
[./console]
type = Console
execute_on = 'nonlinear linear'
interval = 30
[../]
[./csv]
type = CSV
execute_on = 'timestep_end'
interval = 3
[../]
[]
modules/porous_flow/test/tests/energy_conservation/except01.i
# checking that the heat-energy postprocessor throws the correct error if the phase number is entered incorrectly
[Mesh]
type = GeneratedMesh
dim = 1
nx = 3
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./temp]
[../]
[]
[ICs]
[./tinit]
type = FunctionIC
function = '100*x'
variable = temp
[../]
[./pinit]
type = FunctionIC
function = x
variable = pp
[../]
[]
[Kernels]
[./dummyt]
type = TimeDerivative
variable = temp
[../]
[./dummyp]
type = TimeDerivative
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 1
viscosity = 0.001
thermal_expansion = 0
cv = 1.3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 2.2
density = 0.5
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Postprocessors]
[./total_heat]
type = PorousFlowHeatEnergy
phase = 1
[../]
[./rock_heat]
type = PorousFlowHeatEnergy
[../]
[./fluid_heat]
type = PorousFlowHeatEnergy
include_porous_skeleton = false
phase = 0
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1 1 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = except01
csv = true
[]
modules/porous_flow/test/tests/density/GravDensity01.i
# Trivial test of PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity
# Porosity = 0.1
# Solid density = 3
# Fluid density = 2
# Fluid bulk modulus = 4
# Fluid pressure = 0
# Bulk density: rho = 3 * (1 - 0.1) + 2 * 0.1 = 2.9
# Derivative wrt fluid pressure: d_rho / d_pp = d_rho / d_rho_f * d_rho_f / d_pp
# = phi * rho_f / B
# where rho_f = rho_0 * exp(pp / B) is fluid density, pp is fluid pressure, phi is
# porosity and B is fluid bulk modulus
# With pp = 0, d_rho / d_pp = phi * rho_0 / B = 0.1 * 2 / 4 = 0.05
[Mesh]
type = GeneratedMesh
dim = 3
xmin = 0
xmax = 1
ymin = 0
ymax = 1
zmin = -1
zmax = 0
nx = 1
ny = 1
nz = 1
# This test uses ElementalVariableValue postprocessors on specific
# elements, so element numbering needs to stay unchanged
allow_renumbering = false
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0
bulk_modulus = 4
density0 = 2
[../]
[../]
[]
[Variables]
[./pp]
[./InitialCondition]
type = ConstantIC
value = 0
[../]
[../]
[]
[Kernels]
[./dummy]
type = Diffusion
variable = pp
[../]
[]
[BCs]
[./p]
type = DirichletBC
variable = pp
boundary = 'front back'
value = 0
[../]
[]
[AuxVariables]
[./density]
order = CONSTANT
family = MONOMIAL
[../]
[./ddensity_dpp]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./density]
type = MaterialRealAux
property = density
variable = density
[../]
[./ddensity_dpp]
type = MaterialStdVectorAux
property = ddensity_dvar
variable = ddensity_dpp
index = 0
[../]
[]
[Postprocessors]
[./density]
type = ElementalVariableValue
elementid = 0
variable = density
execute_on = 'timestep_end'
[../]
[./ddensity_dpp]
type = ElementalVariableValue
elementid = 0
variable = ddensity_dpp
execute_on = 'timestep_end'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss_qp]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./density]
type = PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity
rho_s = 3
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
solve_type = Newton
type = Steady
[]
[Outputs]
file_base = GravDensity01
csv = true
execute_on = 'timestep_end'
[]
modules/porous_flow/test/tests/sinks/s03.i
# apply a sink flux with use_relperm=true and observe the correct behavior
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0
xmax = 1
ymin = 0
ymax = 1
zmin = 0
zmax = 2
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1.1
[../]
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = -y
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.3
density0 = 1.1
thermal_expansion = 0
viscosity = 1.1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '0.2 0 0 0 0.1 0 0 0 0.1'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[AuxVariables]
[./flux_out]
[../]
[./xval]
[../]
[./yval]
[../]
[]
[ICs]
[./xval]
type = FunctionIC
variable = xval
function = x
[../]
[./yval]
type = FunctionIC
variable = yval
function = y
[../]
[]
[Functions]
[./mass00]
type = ParsedFunction
value = 'vol*por*dens0*exp(pp/bulk)*pow(1+pow(-al*pp,1.0/(1-m)),-m)'
vars = 'vol por dens0 pp bulk al m'
vals = '0.25 0.1 1.1 p00 1.3 1.1 0.5'
[../]
[./sat00]
type = ParsedFunction
value = 'pow(1+pow(-al*pp,1.0/(1-m)),-m)'
vars = 'pp al m'
vals = 'p00 1.1 0.5'
[../]
[./mass01]
type = ParsedFunction
value = 'vol*por*dens0*exp(pp/bulk)*pow(1+pow(-al*pp,1.0/(1-m)),-m)'
vars = 'vol por dens0 pp bulk al m'
vals = '0.25 0.1 1.1 p01 1.3 1.1 0.5'
[../]
[./expected_mass_change00]
type = ParsedFunction
value = 'fcn*pow(pow(1+pow(-al*pp,1.0/(1-m)),-m),2)*area*dt'
vars = 'fcn perm dens0 pp bulk visc area dt al m'
vals = '6 0.2 1.1 p00 1.3 1.1 0.5 1E-3 1.1 0.5'
[../]
[./expected_mass_change01]
type = ParsedFunction
value = 'fcn*pow(pow(1+pow(-al*pp,1.0/(1-m)),-m),2)*area*dt'
vars = 'fcn perm dens0 pp bulk visc area dt al m'
vals = '6 0.2 1.1 p01 1.3 1.1 0.5 1E-3 1.1 0.5'
[../]
[./mass00_expect]
type = ParsedFunction
value = 'mass_prev-mass_change'
vars = 'mass_prev mass_change'
vals = 'm00_prev del_m00'
[../]
[./mass01_expect]
type = ParsedFunction
value = 'mass_prev-mass_change'
vars = 'mass_prev mass_change'
vals = 'm01_prev del_m01'
[../]
[./sat01]
type = ParsedFunction
value = 'pow(1+pow(-al*pp,1.0/(1-m)),-m)'
vars = 'pp al m'
vals = 'p01 1.1 0.5'
[../]
[./expected_mass_change_rate]
type = ParsedFunction
value = 'fcn*pow(pow(1+pow(-al*pp,1.0/(1-m)),-m),2)*area'
vars = 'fcn perm dens0 pp bulk visc area dt al m'
vals = '6 0.2 1.1 p00 1.3 1.1 0.5 1E-3 1.1 0.5'
[../]
[]
[Postprocessors]
[./p00]
type = PointValue
point = '0 0 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./m00]
type = FunctionValuePostprocessor
function = mass00
execute_on = 'initial timestep_end'
[../]
[./m00_prev]
type = FunctionValuePostprocessor
function = mass00
execute_on = 'timestep_begin'
outputs = 'console'
[../]
[./del_m00]
type = FunctionValuePostprocessor
function = expected_mass_change00
execute_on = 'timestep_end'
outputs = 'console'
[../]
[./m00_expect]
type = FunctionValuePostprocessor
function = mass00_expect
execute_on = 'timestep_end'
[../]
[./p10]
type = PointValue
point = '1 0 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./p01]
type = PointValue
point = '0 1 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./m01]
type = FunctionValuePostprocessor
function = mass01
execute_on = 'initial timestep_end'
[../]
[./m01_prev]
type = FunctionValuePostprocessor
function = mass01
execute_on = 'timestep_begin'
outputs = 'console'
[../]
[./del_m01]
type = FunctionValuePostprocessor
function = expected_mass_change01
execute_on = 'timestep_end'
outputs = 'console'
[../]
[./m01_expect]
type = FunctionValuePostprocessor
function = mass01_expect
execute_on = 'timestep_end'
[../]
[./p11]
type = PointValue
point = '1 1 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./s00]
type = FunctionValuePostprocessor
function = sat00
execute_on = 'initial timestep_end'
[../]
[./mass00_rate]
type = FunctionValuePostprocessor
function = expected_mass_change_rate
execute_on = 'initial timestep_end'
[../]
[]
[BCs]
[./flux]
type = PorousFlowSink
boundary = 'left'
variable = pp
use_mobility = false
use_relperm = true
fluid_phase = 0
flux_function = 6
save_in = flux_out
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_max_it -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu 10 NONZERO 2'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E-3
end_time = 0.018
nl_rel_tol = 1E-12
nl_abs_tol = 1E-12
[]
[Outputs]
file_base = s03
[./console]
type = Console
execute_on = 'nonlinear linear'
interval = 5
[../]
[./csv]
type = CSV
execute_on = 'timestep_end'
interval = 2
[../]
[]
modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_2phasePSVG.i
# Pressure pulse in 1D with 2 phases, 2components - transient
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./ppwater]
initial_condition = 2e6
[../]
[./sgas]
initial_condition = 0.3
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[./ppgas]
family = MONOMIAL
order = FIRST
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = ppwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
variable = ppwater
fluid_component = 0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sgas
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
variable = sgas
fluid_component = 1
[../]
[]
[AuxKernels]
[./ppgas]
type = PorousFlowPropertyAux
property = pressure
phase = 1
variable = ppgas
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater sgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-4
sat_lr = 0.3
pc_max = 1e6
log_extension = false
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 2e7
density0 = 1
thermal_expansion = 0
viscosity = 1e-5
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = ppwater
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1e-15 0 0 0 1e-15 0 0 0 1e-15'
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 0
[../]
[./relperm_gas]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 1
[../]
[]
[BCs]
[./leftwater]
type = DirichletBC
boundary = left
value = 3e6
variable = ppwater
[../]
[./rightwater]
type = DirichletBC
boundary = right
value = 2e6
variable = ppwater
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-20 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1e3
end_time = 1e4
[]
[VectorPostprocessors]
[./pp]
type = LineValueSampler
sort_by = x
variable = 'ppwater ppgas'
start_point = '0 0 0'
end_point = '100 0 0'
num_points = 11
[../]
[]
[Outputs]
file_base = pressure_pulse_1d_2phasePSVG
print_linear_residuals = false
[./csv]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/gravity/grav02f.i
# Checking that gravity head is established in the transient situation when 0<=saturation<=1 (note the less-than-or-equal-to).
# 2phase (PS), 2components, van Genuchten capillary pressure, constant fluid bulk-moduli for each phase, constant viscosity,
# constant permeability, Corey relative permeabilities with residual saturation
[Mesh]
type = GeneratedMesh
dim = 2
ny = 10
ymax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 -10 0'
[]
[Variables]
[./ppwater]
initial_condition = 1.5e6
[../]
[./sgas]
initial_condition = 0.3
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[./ppgas]
family = MONOMIAL
order = CONSTANT
[../]
[./swater]
family = MONOMIAL
order = CONSTANT
[../]
[./relpermwater]
family = MONOMIAL
order = CONSTANT
[../]
[./relpermgas]
family = MONOMIAL
order = CONSTANT
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = ppwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = ppwater
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sgas
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = sgas
[../]
[]
[AuxKernels]
[./ppgas]
type = PorousFlowPropertyAux
property = pressure
phase = 1
variable = ppgas
[../]
[./swater]
type = PorousFlowPropertyAux
property = saturation
phase = 0
variable = swater
[../]
[./relpermwater]
type = MaterialStdVectorAux
property = PorousFlow_relative_permeability_qp
index = 0
variable = relpermwater
[../]
[./relpermgas]
type = PorousFlowPropertyAux
property = relperm
phase = 1
variable = relpermgas
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater sgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-4
pc_max = 2e5
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
viscosity = 1e-3
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 10
viscosity = 1e-5
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = ppwater
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1e-11 0 0 0 1e-11 0 0 0 1e-11'
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
s_res = 0.25
sum_s_res = 0.35
[../]
[./relperm_gas]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 1
s_res = 0.1
sum_s_res = 0.35
[../]
[]
[Postprocessors]
[./mass_ph0]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'initial timestep_end'
[../]
[./mass_ph1]
type = PorousFlowFluidMass
fluid_component = 1
execute_on = 'initial timestep_end'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_stol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-13 15'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1e5
[./TimeStepper]
type = IterationAdaptiveDT
dt = 1e4
[../]
[]
[Outputs]
execute_on = 'initial timestep_end'
file_base = grav02f
exodus = true
perf_graph = true
csv = false
[]
modules/porous_flow/test/tests/heat_advection/heat_advection_1d_KT.i
# 1phase, heat advecting with a moving fluid
# Using the Kuzmin-Turek stabilization scheme
[Mesh]
type = GeneratedMesh
dim = 1
nx = 50
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./temp]
initial_condition = 200
[../]
[./pp]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = '1-x'
[../]
[]
[BCs]
[./pp0]
type = DirichletBC
variable = pp
boundary = left
value = 1
[../]
[./pp1]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[./spit_heat]
type = DirichletBC
variable = temp
boundary = left
value = 300
[../]
[./suck_heat]
type = DirichletBC
variable = temp
boundary = right
value = 200
[../]
[]
[Kernels]
[./mass_dot]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./fluid_advection]
type = PorousFlowFluxLimitedTVDAdvection
variable = pp
advective_flux_calculator = fluid_advective_flux
[../]
[./energy_dot]
type = PorousFlowEnergyTimeDerivative
variable = temp
[../]
[./heat_advection]
type = PorousFlowFluxLimitedTVDAdvection
variable = temp
advective_flux_calculator = heat_advective_flux
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.6
alpha = 1.3
[../]
[./fluid_advective_flux]
type = PorousFlowAdvectiveFluxCalculatorSaturated
flux_limiter_type = superbee
[../]
[./heat_advective_flux]
type = PorousFlowAdvectiveFluxCalculatorSaturatedHeat
flux_limiter_type = superbee
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 100
density0 = 1000
viscosity = 4.4
thermal_expansion = 0
cv = 2
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.2
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 1.0
density = 125
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./PS]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres bjacobi 1E-15 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 0.01
end_time = 0.6
[]
[VectorPostprocessors]
[./T]
type = LineValueSampler
start_point = '0 0 0'
end_point = '1 0 0'
num_points = 51
sort_by = x
variable = temp
[../]
[]
[Outputs]
file_base = heat_advection_1d_KT
[./csv]
type = CSV
sync_times = '0.1 0.6'
sync_only = true
[../]
[]
modules/porous_flow/test/tests/flux_limited_TVD_pflow/pffltvd_1D.i
# Using flux-limited TVD advection ala Kuzmin and Turek, mploying PorousFlow Kernels and UserObjects, with superbee flux-limiter
# 1D version
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./porepressure]
[../]
[./tracer]
[../]
[]
[ICs]
[./porepressure]
type = FunctionIC
variable = porepressure
function = '1 - x'
[../]
[./tracer]
type = FunctionIC
variable = tracer
function = 'if(x<0.1,0,if(x>0.3,0,1))'
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = tracer
[../]
[./flux0]
type = PorousFlowFluxLimitedTVDAdvection
variable = tracer
advective_flux_calculator = advective_flux_calculator_0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = porepressure
[../]
[./flux1]
type = PorousFlowFluxLimitedTVDAdvection
variable = porepressure
advective_flux_calculator = advective_flux_calculator_1
[../]
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1
boundary = left
[../]
[./no_tracer_on_left]
type = DirichletBC
variable = tracer
value = 0
boundary = left
[../]
[./remove_component_1]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 1
use_mobility = true
flux_function = 1E3
[../]
[./remove_component_0]
type = PorousFlowPiecewiseLinearSink
variable = tracer
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 0
use_mobility = true
flux_function = 1E3
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
thermal_expansion = 0
viscosity = 1.0
density0 = 1000.0
[../]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure tracer'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[./advective_flux_calculator_0]
type = PorousFlowAdvectiveFluxCalculatorSaturatedMultiComponent
flux_limiter_type = superbee
fluid_component = 0
[../]
[./advective_flux_calculator_1]
type = PorousFlowAdvectiveFluxCalculatorSaturatedMultiComponent
flux_limiter_type = superbee
fluid_component = 1
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = tracer
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = the_simple_fluid
phase = 0
[../]
[./relperm]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-2 0 0 0 1E-2 0 0 0 1E-2'
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[VectorPostprocessors]
[./tracer]
type = LineValueSampler
start_point = '0 0 0'
end_point = '1 0 0'
num_points = 11
sort_by = x
variable = tracer
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 6
dt = 6E-2
nl_abs_tol = 1E-8
timestep_tolerance = 1E-3
[]
[Outputs]
[./out]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/jacobian/heat_advection01.i
# 1phase, unsaturated, heat advection
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./temp]
[../]
[./pp]
[../]
[]
[ICs]
[./temp]
type = RandomIC
variable = temp
max = 1.0
min = 0.0
[../]
[./pp]
type = RandomIC
variable = pp
max = 0.0
min = -1.0
[../]
[]
[Kernels]
[./pp]
type = TimeDerivative
variable = pp
[../]
[./heat_advection]
type = PorousFlowHeatAdvection
variable = temp
gravity = '1 2 3'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.6
alpha = 1.3
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 1.1
thermal_expansion = 0
viscosity = 1
cv = 1.1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./PS]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/desorption/desorption01.i
# Illustrates desorption works as planned.
#
# A mesh contains 3 elements in arranged in a line.
# The central element contains desorped fluid.
# This desorps to the nodes of that element.
#
# In the central element, of volume V, the following occurs.
# The initial porepressure=1, and concentration=1.
# The initial mass of fluid is
# V * (2 * porosity * density + (1 - porosity) * concentration)
# = V * 1.289547
# Notice the factor of "2" in the porespace contribution:
# it is because the porepressure is evaluated at nodes, so
# the nodes on the exterior of the centre_block have
# nodal-volume contributions from the elements not in centre_block.
#
# The mass-conservation equation reads
# 2 * porosity * density + (1 - porosity) * concentration = 1.289547
# and the desorption equation reads
# d( (1-porosity)C )/dt = - (1/tau)(C - dens_L * P / (P_L + P))
# where C = concentration, P = porepressure, P_L = Langmuir pressure
# dens_L = Langmuir density, tau = time constant.
# Using the mass-conservation equation in the desorption equation
# yields a nonlinear equation of P. For dt=1, and the numerical values
# given below this yields
# P = 1.83697
# and
# C = 0.676616
# The desired result is achieved by MOOSE
[Mesh]
type = FileMesh
file = three_eles.e
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./conc]
family = MONOMIAL
order = CONSTANT
block = centre_block
[../]
[]
[ICs]
[./p_ic]
type = ConstantIC
variable = pp
value = 1.0
[../]
[./conc_ic]
type = ConstantIC
variable = conc
value = 1.0
block = centre_block
[../]
[]
[Kernels]
[./porespace_mass_dot]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./desorped_mass_dot]
type = PorousFlowDesorpedMassTimeDerivative
block = centre_block
conc_var = conc
variable = pp
[../]
[./desorped_mass_dot_conc_var]
type = PorousFlowDesorpedMassTimeDerivative
block = centre_block
conc_var = conc
variable = conc
[../]
[./flow_from_matrix]
type = DesorptionFromMatrix
block = centre_block
variable = conc
pressure_var = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp conc'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
viscosity = 1
density0 = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./lang_stuff]
type = LangmuirMaterial
block = centre_block
one_over_adsorption_time_const = 10.0
one_over_desorption_time_const = 10.0
langmuir_density = 1
langmuir_pressure = 1
pressure_var = pp
conc_var = conc
[../]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/sinks/s09.i
# Apply a piecewise-linear sink flux to the right-hand side and watch fluid flow to it
#
# This test has a single phase with two components. The test initialises with
# the porous material fully filled with component=1. The left-hand side is fixed
# at porepressure=1 and mass-fraction of the zeroth component being unity.
# The right-hand side has a very strong piecewise-linear flux that keeps the
# porepressure~0 at that side. Fluid mass is extracted by this flux in proportion
# to the fluid component mass fraction.
#
# Therefore, the zeroth fluid component will flow from left to right (down the
# pressure gradient).
#
# The important DE is
# porosity * dc/dt = (perm / visc) * grad(P) * grad(c)
# which is true for c = mass-fraction, and very large bulk modulus of the fluid.
# For grad(P) constant in time and space (as in this example) this is just the
# advection equation for c, with velocity = perm / visc / porosity. The parameters
# are chosen to velocity = 1 m/s.
# In the numerical world, and especially with full upwinding, the advection equation
# suffers from diffusion. In this example, the diffusion is obvious when plotting
# the mass-fraction along the line, but the average velocity of the front is still
# correct at 1 m/s.
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp frac'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Variables]
[./pp]
[../]
[./frac]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = 1-x
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = frac
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = pp
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
gravity = '0 0 0'
variable = frac
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
gravity = '0 0 0'
variable = pp
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1e10 # need large in order for constant-velocity advection
density0 = 1 # almost irrelevant, except that the ability of the right BC to keep P fixed at zero is related to density_P0
thermal_expansion = 0
viscosity = 11
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = frac
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.1 0 0 0 1.1 0 0 0 1.1'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2 # irrelevant in this fully-saturated situation
phase = 0
[../]
[]
[BCs]
[./lhs_fixed_a]
type = DirichletBC
boundary = 'left'
variable = frac
value = 1
[../]
[./lhs_fixed_b]
type = DirichletBC
boundary = 'left'
variable = pp
value = 1
[../]
[./flux0]
type = PorousFlowPiecewiseLinearSink
boundary = 'right'
pt_vals = '-100 100'
multipliers = '-1 1'
variable = frac # the zeroth comonent
mass_fraction_component = 0
use_mobility = false
use_relperm = false
fluid_phase = 0
flux_function = 1E4
[../]
[./flux1]
type = PorousFlowPiecewiseLinearSink
boundary = 'right'
pt_vals = '-100 100'
multipliers = '-1 1'
variable = pp # comonent 1
mass_fraction_component = 1
use_mobility = false
use_relperm = false
fluid_phase = 0
flux_function = 1E4
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_max_it -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu 10000 NONZERO 2'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E-2
end_time = 1
nl_rel_tol = 1E-12
nl_abs_tol = 1E-12
[]
[VectorPostprocessors]
[./mf]
type = LineValueSampler
start_point = '0 0 0'
end_point = '1 0 0'
num_points = 100
sort_by = x
variable = frac
[../]
[]
[Outputs]
file_base = s09
[./console]
type = Console
execute_on = 'nonlinear linear'
[../]
[./csv]
type = CSV
sync_times = '0.1 0.5 1'
sync_only = true
[../]
interval = 10
[]
modules/porous_flow/examples/tutorial/01.i
# Darcy flow
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[./make3D]
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
input = annular
[../]
[./shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[../]
[./aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[../]
[./injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomain_ids = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[../]
[./rename]
type = RenameBlockGenerator
old_block_id = '0 1'
new_block_name = 'caps aquifer'
input = 'injection_area'
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./porepressure]
[../]
[]
[PorousFlowBasicTHM]
porepressure = porepressure
coupling_type = Hydro
gravity = '0 0 0'
fp = the_simple_fluid
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1E6
boundary = injection_area
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.8
solid_bulk_compliance = 2E-7
fluid_bulk_modulus = 1E7
[../]
[./permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[../]
[./permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_abs_tol = 1E-13
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/poro_elasticity/pp_generation_unconfined_fully_saturated_volume.i
# A sample is constrained on all sides, except its top
# and its boundaries are
# also impermeable. Fluid is pumped into the sample via a
# volumetric source (ie m^3/second per cubic meter), and the
# rise in the top surface, porepressure, and stress are observed.
#
# In the standard poromechanics scenario, the Biot Modulus is held
# fixed and the source has units 1/s. Then the expected result
# is
# strain_zz = disp_z = BiotCoefficient*BiotModulus*s*t/((bulk + 4*shear/3) + BiotCoefficient^2*BiotModulus)
# porepressure = BiotModulus*(s*t - BiotCoefficient*strain_zz)
# stress_xx = (bulk - 2*shear/3)*strain_zz (remember this is effective stress)
# stress_zz = (bulk + 4*shear/3)*strain_zz (remember this is effective stress)
#
# In standard porous_flow, everything is based on mass, eg the source has
# units kg/s/m^3. This is discussed in the other pp_generation_unconfined
# models. In this test, we use the FullySaturated Kernel and set
# multiply_by_density = false
# meaning the fluid Kernel has units of volume, and the source, s, has units 1/time
#
# The ratios are:
# stress_xx/strain_zz = (bulk - 2*shear/3) = 1 (for the parameters used here)
# stress_zz/strain_zz = (bulk + 4*shear/3) = 4 (for the parameters used here)
# porepressure/strain_zz = 13.3333333 (for the parameters used here)
#
# Expect
# disp_z = 0.3*10*s*t/((2 + 4*1.5/3) + 0.3^2*10) = 0.612245*s*t
# porepressure = 10*(s*t - 0.3*0.612245*s*t) = 8.163265*s*t
# stress_xx = (2 - 2*1.5/3)*0.612245*s*t = 0.612245*s*t
# stress_zz = (2 + 4*shear/3)*0.612245*s*t = 2.44898*s*t
#
# Finally, note that the volumetric strain has
# consistent_with_displaced_mesh = false
# which is needed when using the FullySaturated version of the Kernels
# in order to generate the above results
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./confinez]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back'
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
component = 2
variable = disp_z
[../]
[./mass0]
type = PorousFlowFullySaturatedMassTimeDerivative
variable = porepressure
multiply_by_density = false
coupling_type = HydroMechanical
biot_coefficient = 0.3
[../]
[./source]
type = BodyForce
function = 0.1
variable = porepressure
[../]
[]
[AuxVariables]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
[../]
[./stress_xz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xz
index_i = 0
index_j = 2
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 3.3333333333
density0 = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature_qp]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '1 1.5'
# bulk modulus is lambda + 2*mu/3 = 1 + 2*1.5/3 = 2
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
displacements = 'disp_x disp_y disp_z'
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
consistent_with_displaced_mesh = false
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = porepressure
[../]
[./simple_fluid_qp]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst # the "const" is irrelevant here: all that uses Porosity is the BiotModulus, which just uses the initial value of porosity
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.3
fluid_bulk_modulus = 3.3333333333
solid_bulk_compliance = 0.5
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = csv
point = '0 0 0'
variable = porepressure
[../]
[./zdisp]
type = PointValue
outputs = csv
point = '0 0 0.5'
variable = disp_z
[../]
[./stress_xx]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_xx
[../]
[./stress_yy]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_yy
[../]
[./stress_zz]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_zz
[../]
[./stress_xx_over_strain]
type = FunctionValuePostprocessor
function = stress_xx_over_strain_fcn
outputs = csv
[../]
[./stress_zz_over_strain]
type = FunctionValuePostprocessor
function = stress_zz_over_strain_fcn
outputs = csv
[../]
[./p_over_strain]
type = FunctionValuePostprocessor
function = p_over_strain_fcn
outputs = csv
[../]
[]
[Functions]
[./stress_xx_over_strain_fcn]
type = ParsedFunction
value = a/b
vars = 'a b'
vals = 'stress_xx zdisp'
[../]
[./stress_zz_over_strain_fcn]
type = ParsedFunction
value = a/b
vars = 'a b'
vals = 'stress_zz zdisp'
[../]
[./p_over_strain_fcn]
type = ParsedFunction
value = a/b
vars = 'a b'
vals = 'p0 zdisp'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-14 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 10
dt = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = pp_generation_unconfined_fully_saturated_volume
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_fully_saturated_2.i
# Pressure pulse in 1D with 1 phase - transient
# using the PorousFlowFullySaturatedDarcyBase Kernel
# and the PorousFlowFullySaturatedMassTimeDerivative Kernel
[Mesh]
type = GeneratedMesh
dim = 1
nx = 20
xmin = 0
xmax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 2E6
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowFullySaturatedMassTimeDerivative
variable = pp
[../]
[./flux]
type = PorousFlowFullySaturatedDarcyBase
variable = pp
gravity = '0 0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature_qp]
type = PorousFlowTemperature
[../]
[./ppss_qp]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid_qp]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
fluid_bulk_modulus = 2E9
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-15'
[../]
[]
[BCs]
[./left]
type = DirichletBC
boundary = left
value = 3E6
variable = pp
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-20 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E3
end_time = 1E4
[]
[Postprocessors]
[./p005]
type = PointValue
variable = pp
point = '5 0 0'
execute_on = 'initial timestep_end'
[../]
[./p015]
type = PointValue
variable = pp
point = '15 0 0'
execute_on = 'initial timestep_end'
[../]
[./p025]
type = PointValue
variable = pp
point = '25 0 0'
execute_on = 'initial timestep_end'
[../]
[./p035]
type = PointValue
variable = pp
point = '35 0 0'
execute_on = 'initial timestep_end'
[../]
[./p045]
type = PointValue
variable = pp
point = '45 0 0'
execute_on = 'initial timestep_end'
[../]
[./p055]
type = PointValue
variable = pp
point = '55 0 0'
execute_on = 'initial timestep_end'
[../]
[./p065]
type = PointValue
variable = pp
point = '65 0 0'
execute_on = 'initial timestep_end'
[../]
[./p075]
type = PointValue
variable = pp
point = '75 0 0'
execute_on = 'initial timestep_end'
[../]
[./p085]
type = PointValue
variable = pp
point = '85 0 0'
execute_on = 'initial timestep_end'
[../]
[./p095]
type = PointValue
variable = pp
point = '95 0 0'
execute_on = 'initial timestep_end'
[../]
[]
[Outputs]
file_base = pressure_pulse_1d_fully_saturated_2
print_linear_residuals = false
csv = true
[]
modules/porous_flow/test/tests/mass_conservation/mass01.i
# checking that the mass postprocessor correctly calculates the mass
# 1phase, 1component, constant porosity
[Mesh]
type = GeneratedMesh
dim = 1
nx = 3
xmin = -1
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pinit]
type = FunctionIC
function = x
variable = pp
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Postprocessors]
[./total_mass]
type = PorousFlowFluidMass
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1 1 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = mass01
csv = true
[]
modules/porous_flow/test/tests/heat_conduction/two_phase.i
# 2phase heat conduction, with saturation fixed at 0.5
# apply a boundary condition of T=300 to a bar that
# is initially at T=200, and observe the expected
# error-function response
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./phase0_porepressure]
initial_condition = 0
[../]
[./phase1_saturation]
initial_condition = 0.5
[../]
[./temp]
initial_condition = 200
[../]
[]
[Kernels]
[./dummy_p0]
type = TimeDerivative
variable = phase0_porepressure
[../]
[./dummy_s1]
type = TimeDerivative
variable = phase1_saturation
[../]
[./energy_dot]
type = PorousFlowEnergyTimeDerivative
variable = temp
[../]
[./heat_conduction]
type = PorousFlowHeatConduction
variable = temp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp phase0_porepressure phase1_saturation'
number_fluid_phases = 2
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
pc = 0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 0.4
thermal_expansion = 0
cv = 1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.3
thermal_expansion = 0
cv = 2
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '0.3 0 0 0 0 0 0 0 0'
wet_thermal_conductivity = '1.7 0 0 0 0 0 0 0 0'
exponent = 1.0
aqueous_phase_number = 1
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = phase0_porepressure
phase1_saturation = phase1_saturation
capillary_pressure = pc
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.8
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 1.0
density = 0.25
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[]
[BCs]
[./left]
type = DirichletBC
boundary = left
value = 300
variable = temp
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E1
end_time = 1E2
[]
[Postprocessors]
[./t000]
type = PointValue
variable = temp
point = '0 0 0'
execute_on = 'initial timestep_end'
[../]
[./t010]
type = PointValue
variable = temp
point = '10 0 0'
execute_on = 'initial timestep_end'
[../]
[./t020]
type = PointValue
variable = temp
point = '20 0 0'
execute_on = 'initial timestep_end'
[../]
[./t030]
type = PointValue
variable = temp
point = '30 0 0'
execute_on = 'initial timestep_end'
[../]
[./t040]
type = PointValue
variable = temp
point = '40 0 0'
execute_on = 'initial timestep_end'
[../]
[./t050]
type = PointValue
variable = temp
point = '50 0 0'
execute_on = 'initial timestep_end'
[../]
[./t060]
type = PointValue
variable = temp
point = '60 0 0'
execute_on = 'initial timestep_end'
[../]
[./t070]
type = PointValue
variable = temp
point = '70 0 0'
execute_on = 'initial timestep_end'
[../]
[./t080]
type = PointValue
variable = temp
point = '80 0 0'
execute_on = 'initial timestep_end'
[../]
[./t090]
type = PointValue
variable = temp
point = '90 0 0'
execute_on = 'initial timestep_end'
[../]
[./t100]
type = PointValue
variable = temp
point = '100 0 0'
execute_on = 'initial timestep_end'
[../]
[]
[Outputs]
file_base = two_phase
[./csv]
type = CSV
[../]
exodus = false
[]
modules/porous_flow/test/tests/jacobian/mass04.i
# 2phase (PP)
# vanGenuchten, constant-bulk density for each phase, constant porosity, 2components (that exist in both phases)
# unsaturated
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1
ny = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
[../]
[./massfrac_ph1_sp0]
[../]
[]
[ICs]
[./ppwater]
type = RandomIC
variable = ppwater
min = -1
max = 0
[../]
[./ppgas]
type = RandomIC
variable = ppgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 1
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 1
[../]
[]
[Kernels]
[./mass_sp0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = ppwater
[../]
[./mass_sp1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = ppgas
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/actions/addmaterials2.i
# Test that the PorousFlowAddMaterialAction correctly handles the case where
# the at_nodes parameter isn't provided. In this case, only a single material
# is given, and the action must correctly identify if materials should be added
# at the nodes, qps, or even both
[Mesh]
type = GeneratedMesh
dim = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./pwater]
initial_condition = 1e6
[../]
[./sgas]
initial_condition = 0.3
[../]
[./temperature]
initial_condition = 50
[../]
[]
[AuxVariables]
[./x0]
initial_condition = 0.1
[../]
[./x1]
initial_condition = 0.5
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pwater
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sgas
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pwater
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = sgas
[../]
[./energy_dot]
type = PorousFlowEnergyTimeDerivative
variable = temperature
[../]
[./heat_advection]
type = PorousFlowHeatAdvection
variable = temperature
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pwater sgas temperature'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-5
pc_max = 1e7
sat_lr = 0.1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
cv = 2
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 1e9
viscosity = 1e-4
density0 = 20
thermal_expansion = 0
cv = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = 50
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = pwater
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'x0 x1'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1e-12 0 0 0 1e-12 0 0 0 1e-12'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
s_res = 0.1
sum_s_res = 0.11
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
s_res = 0.01
sum_s_res = 0.11
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 1.0
density = 125
[../]
[./unused]
type = GenericConstantMaterial
prop_names = unused
prop_values = 0
[../]
[]
[Executioner]
type = Transient
end_time = 1
nl_abs_tol = 1e-14
[]
modules/porous_flow/test/tests/jacobian/disp04.i
# Test the Jacobian of the PorousFlowDisperiveFlux kernel
[Mesh]
type = GeneratedMesh
dim = 2
nx = 3
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./massfrac0]
[../]
[]
[ICs]
[./pp]
type = RandomIC
variable = pp
max = 2e1
min = 1e1
[../]
[./massfrac0]
type = RandomIC
variable = massfrac0
min = 0
max = 1
[../]
[]
[Kernels]
[./diff0]
type = PorousFlowDispersiveFlux
fluid_component = 0
variable = pp
gravity = '1 0 0'
disp_long = 0.2
disp_trans = 0.1
[../]
[./diff1]
type = PorousFlowDispersiveFlux
fluid_component = 1
variable = massfrac0
gravity = '1 0 0'
disp_long = 0.2
disp_trans = 0.1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1e7
density0 = 10
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temp]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac0'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./poro]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./diff]
type = PorousFlowDiffusivityConst
diffusion_coeff = '1e-2 1e-1'
tortuosity = '0.1'
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[]
[Preconditioning]
active = smp
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/poroperm/PermFromPoro05.i
# Testing permeability from porosity
# Trivial test, checking calculated permeability is correct
# k = k_anisotropic * k
# with ln k = A * phi + B
[Mesh]
type = GeneratedMesh
dim = 1
nx = 3
xmin = 0
xmax = 3
[]
[GlobalParams]
block = 0
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[./InitialCondition]
type = ConstantIC
value = 0
[../]
[../]
[]
[Kernels]
[./flux]
type = PorousFlowAdvectiveFlux
gravity = '0 0 0'
variable = pp
[../]
[]
[BCs]
[./ptop]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[./pbase]
type = DirichletBC
variable = pp
boundary = left
value = 1
[../]
[]
[AuxVariables]
[./poro]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_x]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_y]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_z]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./poro]
type = PorousFlowPropertyAux
property = porosity
variable = poro
[../]
[./perm_x]
type = PorousFlowPropertyAux
property = permeability
variable = perm_x
row = 0
column = 0
[../]
[./perm_y]
type = PorousFlowPropertyAux
property = permeability
variable = perm_y
row = 1
column = 1
[../]
[./perm_z]
type = PorousFlowPropertyAux
property = permeability
variable = perm_z
row = 2
column = 2
[../]
[]
[Postprocessors]
[./perm_x_bottom]
type = PointValue
variable = perm_x
point = '0 0 0'
[../]
[./perm_y_bottom]
type = PointValue
variable = perm_y
point = '0 0 0'
[../]
[./perm_z_bottom]
type = PointValue
variable = perm_z
point = '0 0 0'
[../]
[./perm_x_top]
type = PointValue
variable = perm_x
point = '3 0 0'
[../]
[./perm_y_top]
type = PointValue
variable = perm_y
point = '3 0 0'
[../]
[./perm_z_top]
type = PointValue
variable = perm_z
point = '3 0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
# unimportant in this fully-saturated test
m = 0.8
alpha = 1e-4
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2.2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityExponential
k_anisotropy = '1 0 0 0 2 0 0 0 0.1'
poroperm_function = ln_k
A = 10.0
B = -18.420681
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0 # unimportant in this fully-saturated situation
phase = 0
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
solve_type = Newton
type = Steady
l_tol = 1E-5
nl_abs_tol = 1E-3
nl_rel_tol = 1E-8
l_max_its = 200
nl_max_its = 400
petsc_options_iname = '-pc_type -pc_asm_overlap -sub_pc_type -ksp_type -ksp_gmres_restart'
petsc_options_value = ' asm 2 lu gmres 200'
[]
[Outputs]
csv = true
execute_on = 'timestep_end'
[]
modules/porous_flow/test/tests/chemistry/except3.i
# Exception test.
# Incorrect number of mass-fractions
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = Diffusion
variable = a
[../]
[./b]
type = Diffusion
variable = b
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 2
number_aqueous_equilibrium = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./eqm_k0]
initial_condition = 1E2
[../]
[./eqm_k1]
initial_condition = 1E-2
[../]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFractionAqueousEquilibriumChemistry
mass_fraction_vars = 'a b'
num_reactions = 2
equilibrium_constants = 'eqm_k0 eqm_k1'
primary_activity_coefficients = '1 1'
secondary_activity_coefficients = '1 1'
reactions = '2 0
1 1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/examples/tutorial/03.i
# Darcy flow with heat advection and conduction
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[./make3D]
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
input = annular
[../]
[./shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[../]
[./aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[../]
[./injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomain_ids = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[../]
[./rename]
type = RenameBlockGenerator
old_block_id = '0 1'
new_block_name = 'caps aquifer'
input = 'injection_area'
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./porepressure]
[../]
[./temperature]
initial_condition = 293
scaling = 1E-8
[../]
[]
[PorousFlowBasicTHM]
porepressure = porepressure
temperature = temperature
coupling_type = ThermoHydro
gravity = '0 0 0'
fp = the_simple_fluid
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1E6
boundary = injection_area
[../]
[./constant_injection_temperature]
type = DirichletBC
variable = temperature
value = 313
boundary = injection_area
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
thermal_expansion = 0.0002
cp = 4194
cv = 4186
porepressure_coefficient = 0
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.8
solid_bulk_compliance = 2E-7
fluid_bulk_modulus = 1E7
[../]
[./permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[../]
[./permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[../]
[./thermal_expansion]
type = PorousFlowConstantThermalExpansionCoefficient
biot_coefficient = 0.8
drained_coefficient = 0.003
fluid_coefficient = 0.0002
[../]
[./rock_internal_energy]
type = PorousFlowMatrixInternalEnergy
density = 2500.0
specific_heat_capacity = 1200.0
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '10 0 0 0 10 0 0 0 10'
block = 'caps aquifer'
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_abs_tol = 1E-10
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/jacobian/diff01.i
# Test the Jacobian of the diffusive component of the PorousFlowDisperiveFlux kernel.
# By setting disp_long and disp_trans to zero, the purely diffusive component of the flux
# can be isolated.
[Mesh]
type = GeneratedMesh
dim = 2
nx = 3
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./massfrac0]
[../]
[]
[ICs]
[./pp]
type = RandomIC
variable = pp
max = 2e1
min = 1e1
[../]
[./massfrac0]
type = RandomIC
variable = massfrac0
min = 0
max = 1
[../]
[]
[Kernels]
[./diff0]
type = PorousFlowDispersiveFlux
fluid_component = 0
variable = pp
gravity = '1 0 0'
disp_long = 0
disp_trans = 0
[../]
[./diff1]
type = PorousFlowDispersiveFlux
fluid_component = 1
variable = massfrac0
gravity = '1 0 0'
disp_long = 0
disp_trans = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1e7
density0 = 10
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temp]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac0'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./poro]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./diff]
type = PorousFlowDiffusivityConst
diffusion_coeff = '1e-2 1e-1'
tortuosity = '0.1'
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[]
[Preconditioning]
active = smp
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/chemistry/except7.i
# Exception test.
# Incorrect number of stoichiometric coefficients
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = Diffusion
variable = a
[../]
[./b]
type = Diffusion
variable = b
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_equilibrium = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./eqm_k0]
initial_condition = 1E2
[../]
[./eqm_k1]
initial_condition = 1E-2
[../]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFractionAqueousEquilibriumChemistry
mass_fraction_vars = 'a b'
num_reactions = 2
equilibrium_constants = 'eqm_k0 eqm_k1'
primary_activity_coefficients = '1 1'
secondary_activity_coefficients = '1 1'
reactions = '2 0'
[../]
[./simple_fluid_qp]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/poro_elasticity/pp_generation_unconfined_constM.i
# A sample is constrained on all sides, except its top
# and its boundaries are
# also impermeable. Fluid is pumped into the sample via a
# volumetric source (ie kg/second per cubic meter), and the
# rise in the top surface, porepressure, and stress are observed.
#
# In the standard poromechanics scenario, the Biot Modulus is held
# fixed and the source, s, has units m^3/second/m^3. Then the expected result
# is
# strain_zz = disp_z = BiotCoefficient*BiotModulus*s*t/((bulk + 4*shear/3) + BiotCoefficient^2*BiotModulus)
# porepressure = BiotModulus*(s*t - BiotCoefficient*strain_zz)
# stress_xx = (bulk - 2*shear/3)*strain_zz (remember this is effective stress)
# stress_zz = (bulk + 4*shear/3)*strain_zz (remember this is effective stress)
#
# In porous_flow, however, the source has units kg/second/m^3. The ratios remain
# fixed:
# stress_xx/strain_zz = (bulk - 2*shear/3) = 1 (for the parameters used here)
# stress_zz/strain_zz = (bulk + 4*shear/3) = 4 (for the parameters used here)
# porepressure/strain_zz = 13.3333333 (for the parameters used here)
#
# Expect
# disp_z = 0.3*10*s*t/((2 + 4*1.5/3) + 0.3^2*10) = 0.612245*s*t
# porepressure = 10*(s*t - 0.3*0.612245*s*t) = 8.163265*s*t
# stress_xx = (2 - 2*1.5/3)*0.612245*s*t = 0.612245*s*t
# stress_zz = (2 + 4*shear/3)*0.612245*s*t = 2.44898*s*t
# The relationship between the constant poroelastic source
# s (m^3/second/m^3) and the PorousFlow source, S (kg/second/m^3) is
# S = fluid_density * s = s * exp(porepressure/fluid_bulk)
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.8
alpha = 1e-5
[../]
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./confinez]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back'
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
component = 2
variable = disp_z
[../]
[./poro_vol_exp]
type = PorousFlowMassVolumetricExpansion
variable = porepressure
fluid_component = 0
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = porepressure
[../]
[./flux]
type = PorousFlowAdvectiveFlux
variable = porepressure
gravity = '0 0 0'
fluid_component = 0
[../]
[./source]
type = BodyForce
function = '0.1*exp(8.163265306*0.1*t/3.3333333333)'
variable = porepressure
[../]
[]
[AuxVariables]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
[../]
[./stress_xz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xz
index_i = 0
index_j = 2
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 3.3333333333
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '1 1.5'
# bulk modulus is lambda + 2*mu/3 = 1 + 2*1.5/3 = 2
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
displacements = 'disp_x disp_y disp_z'
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityHMBiotModulus
porosity_zero = 0.1
biot_coefficient = 0.3
solid_bulk = 2
constant_fluid_bulk_modulus = 3.3333333333
constant_biot_modulus = 10.0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 1 0 0 0 1' # unimportant
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0 # unimportant in this fully-saturated situation
phase = 0
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = csv
point = '0 0 0'
variable = porepressure
[../]
[./zdisp]
type = PointValue
outputs = csv
point = '0 0 0.5'
variable = disp_z
[../]
[./stress_xx]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_xx
[../]
[./stress_yy]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_yy
[../]
[./stress_zz]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_zz
[../]
[]
[Functions]
[./stress_xx_over_strain_fcn]
type = ParsedFunction
value = a/b
vars = 'a b'
vals = 'stress_xx zdisp'
[../]
[./stress_zz_over_strain_fcn]
type = ParsedFunction
value = a/b
vars = 'a b'
vals = 'stress_zz zdisp'
[../]
[./p_over_strain_fcn]
type = ParsedFunction
value = a/b
vars = 'a b'
vals = 'p0 zdisp'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-14 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 10
dt = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = pp_generation_unconfined_constM
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/sinks/s01.i
# apply a sink flux and observe the correct behavior
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0
xmax = 1
ymin = 0
ymax = 1
zmin = 0
zmax = 2
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = y+1
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.3
density0 = 1.1
thermal_expansion = 0
viscosity = 1.1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-5 0 0 0 1E-5 0 0 0 1E-5'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[AuxVariables]
[./flux_out]
[../]
[./xval]
[../]
[./yval]
[../]
[]
[ICs]
[./xval]
type = FunctionIC
variable = xval
function = x
[../]
[./yval]
type = FunctionIC
variable = yval
function = y
[../]
[]
[Functions]
[./mass00]
type = ParsedFunction
value = 'vol*por*dens0*exp(pp/bulk)'
vars = 'vol por dens0 pp bulk'
vals = '0.25 0.1 1.1 p00 1.3'
[../]
[./mass01]
type = ParsedFunction
value = 'vol*por*dens0*exp(pp/bulk)'
vars = 'vol por dens0 pp bulk'
vals = '0.25 0.1 1.1 p01 1.3'
[../]
[./expected_mass_change00]
type = ParsedFunction
value = 'fcn*perm*dens0*exp(pp/bulk)/visc*area*dt'
vars = 'fcn perm dens0 pp bulk visc area dt'
vals = '6 1 1 0 1.3 1 0.5 1E-3'
[../]
[]
[Postprocessors]
[./p00]
type = PointValue
point = '0 0 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./m00]
type = FunctionValuePostprocessor
function = mass00
execute_on = 'initial timestep_end'
[../]
[./del_m00]
type = FunctionValuePostprocessor
function = expected_mass_change00
execute_on = 'timestep_end'
[../]
[./p10]
type = PointValue
point = '1 0 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./p01]
type = PointValue
point = '0 1 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./m01]
type = FunctionValuePostprocessor
function = mass01
execute_on = 'initial timestep_end'
[../]
[./p11]
type = PointValue
point = '1 1 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[]
[BCs]
[./flux]
type = PorousFlowSink
boundary = 'left'
variable = pp
use_mobility = false
use_relperm = true
fluid_phase = 0
flux_function = 6
save_in = flux_out
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_max_it -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu 10000 NONZERO 2'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E-3
end_time = 1E-2
nl_rel_tol = 1E-12
nl_abs_tol = 1E-12
[]
[Outputs]
file_base = s01
[./console]
type = Console
execute_on = 'nonlinear linear'
[../]
[./csv]
type = CSV
execute_on = 'initial timestep_end'
[../]
[]
modules/porous_flow/test/tests/flux_limited_TVD_pflow/jacobian_05.i
# Checking the Jacobian of Flux-Limited TVD Advection, 2 phases, 2 components, using flux_limiter_type != None
#
# Here we use snes_check_jacobian instead of snes_type=test. The former just checks the Jacobian for the
# random initial conditions, while the latter checks for u=1 and u=-1
#
# The Jacobian is correct for u=1 and u=-1, but the finite-difference scheme used by snes_type=test gives the
# wrong answer.
# For u=constant, the Kuzmin-Turek scheme adds as much antidiffusion as possible, resulting in a central-difference
# version of advection (flux_limiter = 1). This is correct, and the Jacobian is calculated correctly.
# However, when computing the Jacobian using finite differences, u is increased or decreased at a node.
# This results in that node being at a maximum or minimum, which means no antidiffusion should be added
# (flux_limiter = 0). This corresponds to a full-upwind scheme. So the finite-difference computes the
# Jacobian in the full-upwind scenario, which is incorrect (the original residual = 0, after finite-differencing
# the residual comes from the full-upwind scenario).
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 5
[]
[GlobalParams]
gravity = '1.1 2 -0.5'
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[./massfrac_ph0_sp0]
[../]
[./massfrac_ph1_sp0]
[../]
[]
[ICs]
[./ppwater]
type = FunctionIC
variable = ppwater
function = 'if(x<1,0,if(x<4,sin(x-1),1))'
[../]
[./ppgas]
type = FunctionIC
variable = ppgas
function = 'x*(6-x)/6'
[../]
[./massfrac_ph0_sp0]
type = FunctionIC
variable = massfrac_ph0_sp0
function = 'x/6'
[../]
[./massfrac_ph1_sp0]
type = FunctionIC
variable = massfrac_ph1_sp0
function = '1-x/7'
[../]
[]
[Kernels]
[./flux_ph0_sp0]
type = PorousFlowFluxLimitedTVDAdvection
variable = ppwater
advective_flux_calculator = advective_flux_calculator_ph0_sp0
[../]
[./flux_ph0_sp1]
type = PorousFlowFluxLimitedTVDAdvection
variable = ppgas
advective_flux_calculator = advective_flux_calculator_ph0_sp1
[../]
[./flux_ph1_sp0]
type = PorousFlowFluxLimitedTVDAdvection
variable = massfrac_ph0_sp0
advective_flux_calculator = advective_flux_calculator_ph1_sp0
[../]
[./flux_ph1_sp1]
type = PorousFlowFluxLimitedTVDAdvection
variable = massfrac_ph1_sp0
advective_flux_calculator = advective_flux_calculator_ph1_sp1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
viscosity = 1.4
[../]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas massfrac_ph0_sp0 massfrac_ph1_sp0'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
alpha = 1
m = 0.5
[../]
[./advective_flux_calculator_ph0_sp0]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
flux_limiter_type = minmod
phase = 0
fluid_component = 0
[../]
[./advective_flux_calculator_ph0_sp1]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
flux_limiter_type = vanleer
phase = 0
fluid_component = 1
[../]
[./advective_flux_calculator_ph1_sp0]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
flux_limiter_type = mc
phase = 1
fluid_component = 0
[../]
[./advective_flux_calculator_ph1_sp1]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
flux_limiter_type = superbee
phase = 1
fluid_component = 1
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.21 0 0 0 1.5 0 0 0 0.8'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options = '-snes_check_jacobian'
[../]
[]
[Executioner]
type = Transient
solve_type = Linear # this is to force convergence even though the nonlinear residual is high: we just care about the Jacobian in this test
end_time = 1
num_steps = 1
dt = 1
[]
modules/porous_flow/test/tests/dirackernels/bh_except15.i
# fully-saturated
# production
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
bottom_p_or_t = 0
fluid_phase = 0
point_file = bh02.bh
SumQuantityUO = borehole_total_outflow_mass
variable = pp
unit_weight = '0 0 0'
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
modules/porous_flow/test/tests/dirackernels/bh_except07.i
# PorousFlowPeacemanBorehole exception test
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = TimeDerivative
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
bottom_p_or_t = 0
fluid_phase = 0
point_file = bh02.bh
use_mobility = true
SumQuantityUO = borehole_total_outflow_mass
variable = pp
unit_weight = '0 0 0'
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
modules/porous_flow/test/tests/numerical_diffusion/no_action.i
# Using upwinded and mass-lumped PorousFlow Kernels
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./porepressure]
[../]
[./tracer]
[../]
[]
[ICs]
[./porepressure]
type = FunctionIC
variable = porepressure
function = '1 - x'
[../]
[./tracer]
type = FunctionIC
variable = tracer
function = 'if(x<0.1,0,if(x>0.3,0,1))'
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = tracer
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = tracer
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = porepressure
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = porepressure
[../]
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1
boundary = left
[../]
[./no_tracer_on_left]
type = DirichletBC
variable = tracer
value = 0
boundary = left
[../]
[./remove_component_1]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 1
use_mobility = true
flux_function = 1E3
[../]
[./remove_component_0]
type = PorousFlowPiecewiseLinearSink
variable = tracer
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 0
use_mobility = true
flux_function = 1E3
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
thermal_expansion = 0
viscosity = 1.0
density0 = 1000.0
[../]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure tracer'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = tracer
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = the_simple_fluid
phase = 0
[../]
[./relperm]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-2 0 0 0 1E-2 0 0 0 1E-2'
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[VectorPostprocessors]
[./tracer]
type = LineValueSampler
start_point = '0 0 0'
end_point = '1 0 0'
num_points = 101
sort_by = x
variable = tracer
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 6
dt = 6E-1
nl_abs_tol = 1E-8
timestep_tolerance = 1E-3
[]
[Outputs]
[./out]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/examples/tutorial/06.i
# Darcy flow with a tracer
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[./make3D]
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
input = annular
[../]
[./shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[../]
[./aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[../]
[./injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomain_ids = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[../]
[./rename]
type = RenameBlockGenerator
old_block_id = '0 1'
new_block_name = 'caps aquifer'
input = 'injection_area'
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./porepressure]
[../]
[./tracer_concentration]
[../]
[]
[ICs]
[./tracer_concentration]
type = FunctionIC
function = '0.5*if(x*x+y*y<1.01,1,0)'
variable = tracer_concentration
[../]
[]
[PorousFlowFullySaturated]
porepressure = porepressure
coupling_type = Hydro
gravity = '0 0 0'
fp = the_simple_fluid
mass_fraction_vars = tracer_concentration
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1E6
boundary = injection_area
[../]
[./constant_outer_porepressure]
type = DirichletBC
variable = porepressure
value = 0
boundary = rmax
[../]
[./injected_tracer]
type = DirichletBC
variable = tracer_concentration
value = 0.5
boundary = injection_area
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[../]
[./permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_rel_tol = 1E-14
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/mass_conservation/mass09.i
# Checking that the mass postprocessor throws the correct error when more than a single
# phase index is given when using the saturation_threshold parameter
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./sat]
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[]
[ICs]
[./pinit]
type = ConstantIC
value = 1
variable = pp
[../]
[./satinit]
type = FunctionIC
function = 1-x
variable = sat
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sat
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp sat'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 1
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 0.1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = pp
phase1_saturation = sat
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Postprocessors]
[./comp1_total_mass]
type = PorousFlowFluidMass
fluid_component = 1
saturation_threshold = 0.5
phase = '0 1'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
modules/porous_flow/test/tests/actions/block_restricted_materials.i
# Tests that the actions to automatically add PorousFlowJoiner's and the correct
# qp or nodal version of each material work as expected when a material is block
# restricted. Tests both phase dependent properties (like relative permeability)
# as well as phase-independent materials (like porosity)
[GlobalParams]
PorousFlowDictator = dictator
[]
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 2
ny = 2
[]
[./subdomain0]
input = gen
type = SubdomainBoundingBoxGenerator
bottom_left = '0 0 0'
top_right = '1 0.5 0'
block_id = 0
[../]
[./subdomain1]
input = subdomain0
type = SubdomainBoundingBoxGenerator
bottom_left = '0 0.5 0'
top_right = '1 1 0'
block_id = 1
[../]
[]
[Variables]
[./p0]
initial_condition = 1
[../]
[./p1]
initial_condition = 1.1
[../]
[]
[AuxVariables]
[./porosity]
family = MONOMIAL
order = CONSTANT
[../]
[./kl]
family = MONOMIAL
order = CONSTANT
[../]
[./kg]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
[../]
[./kl]
type = PorousFlowPropertyAux
property = relperm
variable = kl
phase = 0
[../]
[./kg]
type = PorousFlowPropertyAux
property = relperm
variable = kg
phase = 1
[../]
[]
[Kernels]
[./p0]
type = PorousFlowMassTimeDerivative
variable = p0
[../]
[./p1]
type = PorousFlowAdvectiveFlux
gravity = '0 0 0'
variable = p1
[../]
[]
[Modules]
[./FluidProperties]
[./fluid0]
type = SimpleFluidProperties
[../]
[./fluid1]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = p0
phase1_porepressure = p1
capillary_pressure = pc
[../]
[./krl0]
type = PorousFlowRelativePermeabilityConst
kr = 0.7
phase = 0
block = 0
[../]
[./krg0]
type = PorousFlowRelativePermeabilityConst
kr = 0.8
phase = 1
block = 0
[../]
[./krl1]
type = PorousFlowRelativePermeabilityConst
kr = 0.5
phase = 0
block = 1
[../]
[./krg1]
type = PorousFlowRelativePermeabilityConst
kr = 0.4
phase = 1
block = 1
[../]
[./perm]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 1 0 0 0 1'
[../]
[./fluid0]
type = PorousFlowSingleComponentFluid
fp = fluid0
phase = 0
[../]
[./fluid1]
type = PorousFlowSingleComponentFluid
fp = fluid1
phase = 1
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./porosity0]
type = PorousFlowPorosityConst
porosity = 0.1
block = 0
[../]
[./porosity1]
type = PorousFlowPorosityConst
porosity = 0.2
block = 1
[../]
[]
[Executioner]
type = Transient
end_time = 1
nl_abs_tol = 1e-10
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'p0 p1'
number_fluid_phases = 2
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
pc = 0
[../]
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/sinks/s09_fully_saturated.i
# Apply a piecewise-linear sink flux to the right-hand side and watch fluid flow to it
#
# This test has a single phase with two components. The test initialises with
# the porous material fully filled with component=1. The left-hand side is fixed
# at porepressure=1 and mass-fraction of the zeroth component being unity.
# The right-hand side has a very strong piecewise-linear flux that keeps the
# porepressure~0 at that side. Fluid mass is extracted by this flux in proportion
# to the fluid component mass fraction.
#
# Therefore, the zeroth fluid component will flow from left to right (down the
# pressure gradient).
#
# The important DE is
# porosity * dc/dt = (perm / visc) * grad(P) * grad(c)
# which is true for c = mass-fraction, and very large bulk modulus of the fluid.
# For grad(P) constant in time and space (as in this example) this is just the
# advection equation for c, with velocity = perm / visc / porosity. The parameters
# are chosen to velocity = 1 m/s.
# In the numerical world, and especially with full upwinding, the advection equation
# suffers from diffusion. In this example, the diffusion is obvious when plotting
# the mass-fraction along the line, but the average velocity of the front is still
# correct at 1 m/s.
# This test uses the FullySaturated version of the flow Kernel. This does not
# suffer from as much numerical diffusion as the standard PorousFlow Kernel since
# it does not employ any upwinding.
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp frac'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Variables]
[./pp]
[../]
[./frac]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = 1-x
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = frac
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = pp
[../]
[./flux0]
type = PorousFlowFullySaturatedDarcyFlow
fluid_component = 0
gravity = '0 0 0'
variable = frac
[../]
[./flux1]
type = PorousFlowFullySaturatedDarcyFlow
fluid_component = 1
gravity = '0 0 0'
variable = pp
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1e10 # need large in order for constant-velocity advection
density0 = 1 # almost irrelevant, except that the ability of the right BC to keep P fixed at zero is related to density_P0
thermal_expansion = 0
viscosity = 11
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = frac
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.1 0 0 0 1.1 0 0 0 1.1'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2 # irrelevant in this fully-saturated situation
phase = 0
[../]
[]
[BCs]
[./lhs_fixed_a]
type = DirichletBC
boundary = 'left'
variable = frac
value = 1
[../]
[./lhs_fixed_b]
type = DirichletBC
boundary = 'left'
variable = pp
value = 1
[../]
[./flux0]
type = PorousFlowPiecewiseLinearSink
boundary = 'right'
pt_vals = '-100 100'
multipliers = '-1 1'
variable = frac # the zeroth comonent
mass_fraction_component = 0
use_mobility = false
use_relperm = false
fluid_phase = 0
flux_function = 1E4
[../]
[./flux1]
type = PorousFlowPiecewiseLinearSink
boundary = 'right'
pt_vals = '-100 100'
multipliers = '-1 1'
variable = pp # comonent 1
mass_fraction_component = 1
use_mobility = false
use_relperm = false
fluid_phase = 0
flux_function = 1E4
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_max_it -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu 10000 NONZERO 2'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E-2
end_time = 1
nl_rel_tol = 1E-11
nl_abs_tol = 1E-11
[]
[VectorPostprocessors]
[./mf]
type = LineValueSampler
start_point = '0 0 0'
end_point = '1 0 0'
num_points = 100
sort_by = x
variable = frac
[../]
[]
[Outputs]
file_base = s09_fully_saturated
[./console]
type = Console
execute_on = 'nonlinear linear'
[../]
[./csv]
type = CSV
sync_times = '0.1 0.5 1'
sync_only = true
[../]
interval = 10
[]
modules/porous_flow/test/tests/jacobian/mass02.i
# 1phase
# vanGenuchten, constant-bulk density, constant porosity, 1component
# unsaturated
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1
ny = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = -1
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options = '-snes_test_display'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 2
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/heat_advection/heat_advection_1d_fully_saturated_action.i
# 1phase, heat advecting with a moving fluid
# Using the PorousFlowFullySaturated Action with KT stabilization
# This should produce an identical result to heat_advection_1D_KT
[Mesh]
type = GeneratedMesh
dim = 1
nx = 50
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./temp]
initial_condition = 200
[../]
[./pp]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = '1-x'
[../]
[]
[BCs]
[./pp0]
type = DirichletBC
variable = pp
boundary = left
value = 1
[../]
[./pp1]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[./spit_heat]
type = DirichletBC
variable = temp
boundary = left
value = 300
[../]
[./suck_heat]
type = DirichletBC
variable = temp
boundary = right
value = 200
[../]
[]
[PorousFlowFullySaturated]
porepressure = pp
temperature = temp
coupling_type = ThermoHydro
fp = simple_fluid
add_darcy_aux = false
stabilization = KT
flux_limiter_type = superbee
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 100
density0 = 1000
viscosity = 4.4
thermal_expansion = 0
cv = 2
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.2
[../]
[./zero_thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '0 0 0 0 0 0 0 0 0'
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 1.0
density = 125
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.1 0 0 0 2 0 0 0 3'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 0.01
end_time = 0.6
[]
[VectorPostprocessors]
[./T]
type = LineValueSampler
start_point = '0 0 0'
end_point = '1 0 0'
num_points = 51
sort_by = x
variable = temp
[../]
[]
[Outputs]
file_base = heat_advection_1d_fully_saturation_action
[./csv]
type = CSV
sync_times = '0.1 0.6'
sync_only = true
[../]
[]
modules/porous_flow/test/tests/jacobian/mass06.i
# 1phase with MD_Gaussian (var = log(mass-density) with Gaussian capillary) formulation
# constant-bulk density, constant porosity, 1component
# fully saturated
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1
ny = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./md]
[../]
[]
[ICs]
[./md]
type = RandomIC
min = 0
max = 1
variable = md
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = md
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'md'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 0.8
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseMD_Gaussian
mass_density = md
al = 1.1
density_P0 = 0.8
bulk_modulus = 1.5
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options = '-snes_test_display'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/chemistry/except11.i
# Exception test.
# Incorrect number of molar volumes
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = Diffusion
variable = a
[../]
[./b]
type = Diffusion
variable = b
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 1E-6
[../]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'a b'
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = 'a b'
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = '1 1'
reactions = '1 1'
specific_reactive_surface_area = 1.0
kinetic_rate_constant = 1.0e-8
activation_energy = 1.5e4
molar_volume = '1 1'
[../]
[./mineral]
type = PorousFlowAqueousPreDisMineral
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/poroperm/poro_thm.i
# Test that porosity is correctly calculated.
# Porosity = biot + (phi0 - biot) * exp(-vol_strain + (biot - 1) / solid_bulk * (porepressure - ref_pressure) + thermal_exp_coeff * (temperature - ref_temperature))
# The parameters used are:
# biot = 0.7
# phi0 = 0.5
# vol_strain = 0.5
# solid_bulk = 0.3
# porepressure = 2
# ref_pressure = 3
# thermal_exp_coeff = 0.5
# temperature = 4
# ref_temperature = 3.5
# which yield porosity = 0.276599996677
[Mesh]
type = GeneratedMesh
dim = 3
[]
[GlobalParams]
PorousFlowDictator = dictator
displacements = 'disp_x disp_y disp_z'
biot_coefficient = 0.7
[]
[Variables]
[./porepressure]
initial_condition = 2
[../]
[./temperature]
initial_condition = 4
[../]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[ICs]
[./disp_x]
type = FunctionIC
function = '0.5 * x'
variable = disp_x
[../]
[]
[Kernels]
[./dummy_p]
type = TimeDerivative
variable = porepressure
[../]
[./dummy_t]
type = TimeDerivative
variable = temperature
[../]
[./dummy_x]
type = TimeDerivative
variable = disp_x
[../]
[./dummy_y]
type = TimeDerivative
variable = disp_y
[../]
[./dummy_z]
type = TimeDerivative
variable = disp_z
[../]
[]
[AuxVariables]
[./porosity]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
[../]
[]
[Postprocessors]
[./porosity]
type = PointValue
variable = porosity
point = '0 0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure temperature'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temperature
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./porosity]
type = PorousFlowPorosity
mechanical = true
fluid = true
thermal = true
ensure_positive = false
porosity_zero = 0.5
solid_bulk = 0.3
thermal_expansion_coeff = 0.5
reference_porepressure = 3
reference_temperature = 3.5
[../]
[]
[Executioner]
solve_type = Newton
type = Transient
num_steps = 1
[]
[Outputs]
csv = true
[]
modules/porous_flow/test/tests/heat_advection/heat_advection_1d_fully_saturated.i
# 1phase, heat advecting with a moving fluid
# Using the FullySaturated Kernel
[Mesh]
type = GeneratedMesh
dim = 1
nx = 50
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./temp]
initial_condition = 200
[../]
[./pp]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = '1-x'
[../]
[]
[BCs]
[./pp0]
type = DirichletBC
variable = pp
boundary = left
value = 1
[../]
[./pp1]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[./spit_heat]
type = DirichletBC
variable = temp
boundary = left
value = 300
[../]
[./suck_heat]
type = DirichletBC
variable = temp
boundary = right
value = 200
[../]
[]
[Kernels]
[./mass_dot]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./advection]
type = PorousFlowFullySaturatedDarcyBase
variable = pp
[../]
[./energy_dot]
type = PorousFlowEnergyTimeDerivative
variable = temp
[../]
[./convection]
type = PorousFlowFullySaturatedHeatAdvection
variable = temp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 100
density0 = 1000
viscosity = 4.4
thermal_expansion = 0
cv = 2
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.2
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 1.0
density = 125
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.1 0 0 0 2 0 0 0 3'
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./PS]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres bjacobi 1E-15 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 0.01
end_time = 0.6
[]
[VectorPostprocessors]
[./T]
type = LineValueSampler
start_point = '0 0 0'
end_point = '1 0 0'
num_points = 51
sort_by = x
variable = temp
[../]
[]
[Outputs]
file_base = heat_advection_1d_fully_saturated
[./csv]
type = CSV
sync_times = '0.1 0.6'
sync_only = true
[../]
[]
modules/porous_flow/test/tests/chemistry/except18.i
# Exception test
# Incorrect number of kinetic in dictator
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = Diffusion
variable = a
[../]
[./b]
type = Diffusion
variable = b
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_equilibrium = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 1E-6
[../]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'a b'
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = 'a b'
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = '1 1'
reactions = '2 3'
specific_reactive_surface_area = 1.0
kinetic_rate_constant = 1.0e-8
activation_energy = 1.5e4
molar_volume = 1
[../]
[./mineral]
type = PorousFlowAqueousPreDisMineral
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/chemistry/dissolution.i
# The dissolution reaction
#
# a <==> mineral
#
# produces "mineral". Using mineral_density = fluid_density, theta = 1 = eta, the DE is
#
# a' = -(mineral / porosity)' = rate * surf_area * molar_vol (1 - (1 / eqm_const) * (act_coeff * a)^stoi)
#
# The following parameters are used
#
# T_ref = 0.5 K
# T = 1 K
# activation_energy = 3 J/mol
# gas_constant = 6 J/(mol K)
# kinetic_rate_at_ref_T = 0.60653 mol/(m^2 s)
# These give rate = 0.60653 * exp(1/2) = 1 mol/(m^2 s)
#
# surf_area = 0.5 m^2/L
# molar_volume = 2 L/mol
# These give rate * surf_area * molar_vol = 1 s^-1
#
# equilibrium_constant = 0.5 (dimensionless)
# primary_activity_coefficient = 2 (dimensionless)
# stoichiometry = 1 (dimensionless)
# This means that 1 - (1 / eqm_const) * (act_coeff * a)^stoi = 1 - 4 a, which is positive for a < 0.25, ie dissolution for a(t=0) < 0.25
#
# The solution of the DE is
# a = eqm_const / act_coeff + (a(t=0) - eqm_const / act_coeff) exp(-rate * surf_area * molar_vol * act_coeff * t / eqm_const)
# = 0.25 + (a(t=0) - 0.25) exp(-4 * t)
# c = c(t=0) - (a - a(t=0)) * porosity
#
# This test checks that (a + c / porosity) is time-independent, and that a follows the above solution
#
# Aside:
# The exponential curve is not followed exactly because moose actually solves
# (a - a_old)/dt = rate * surf_area * molar_vol (1 - (1 / eqm_const) * (act_coeff * a)^stoi)
# which does not give an exponential exactly, except in the limit dt->0
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
initial_condition = 0.05
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 0.5
[../]
[./pressure]
[../]
[./ini_mineral_conc]
initial_condition = 0.3
[../]
[./mineral]
family = MONOMIAL
order = CONSTANT
[../]
[./should_be_static]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./mineral]
type = PorousFlowPropertyAux
property = mineral_concentration
mineral_species = 0
variable = mineral
[../]
[./should_be_static]
type = ParsedAux
args = 'mineral a'
function = 'a + mineral / 0.1'
variable = should_be_static
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./mass_a]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = a
[../]
[./pre_dis]
type = PorousFlowPreDis
variable = a
mineral_density = 1000
stoichiometry = 1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = a
number_fluid_phases = 1
number_fluid_components = 2
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9 # huge, so mimic chemical_reactions
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = 1
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./mass_frac]
type = PorousFlowMassFraction
mass_fraction_vars = a
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = a
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = 2
reactions = 1
specific_reactive_surface_area = 0.5
kinetic_rate_constant = 0.6065306597126334
activation_energy = 3
molar_volume = 2
gas_constant = 6
reference_temperature = 0.5
[../]
[./mineral_conc]
type = PorousFlowAqueousPreDisMineral
initial_concentrations = ini_mineral_conc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
nl_abs_tol = 1E-10
dt = 0.01
end_time = 1
[]
[Postprocessors]
[./a]
type = PointValue
point = '0 0 0'
variable = a
[../]
[./should_be_static]
type = PointValue
point = '0 0 0'
variable = should_be_static
[../]
[]
[Outputs]
interval = 10
csv = true
perf_graph = true
[]
modules/porous_flow/test/tests/dirackernels/bh_except01.i
# PorousFlowPeacemanBorehole exception test
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = TimeDerivative
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
bottom_p_or_t = 0
fluid_phase = 1
point_file = bh02.bh
SumQuantityUO = borehole_total_outflow_mass
variable = pp
unit_weight = '0 0 0'
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_3comp_fully_saturated.i
# Pressure pulse in 1D with 1 phase, 3 component - transient
# using the PorousFlowFullySaturatedDarcyFlow Kernel
[Mesh]
type = GeneratedMesh
dim = 1
nx = 20
xmin = 0
xmax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 2E6
[../]
[./f0]
initial_condition = 0
[../]
[./f1]
initial_condition = 0.2
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./flux0]
type = PorousFlowFullySaturatedDarcyFlow
variable = pp
gravity = '0 0 0'
fluid_component = 0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = f0
[../]
[./flux1]
type = PorousFlowFullySaturatedDarcyFlow
variable = f0
gravity = '0 0 0'
fluid_component = 1
[../]
[./mass2]
type = PorousFlowMassTimeDerivative
fluid_component = 2
variable = f1
[../]
[./flux2]
type = PorousFlowFullySaturatedDarcyFlow
variable = f1
gravity = '0 0 0'
fluid_component = 2
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp f0 f1'
number_fluid_phases = 1
number_fluid_components = 3
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac_nodes]
type = PorousFlowMassFraction
mass_fraction_vars = 'f0 f1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-15'
[../]
[]
[BCs]
[./left]
type = DirichletBC
boundary = left
preset = false
value = 3E6
variable = pp
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -pc_factor_shift_type'
petsc_options_value = 'bcgs lu 1E-15 1E-10 10000 NONZERO'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E3
end_time = 1E4
[]
[Postprocessors]
[./p005]
type = PointValue
variable = pp
point = '5 0 0'
execute_on = 'initial timestep_end'
[../]
[./p015]
type = PointValue
variable = pp
point = '15 0 0'
execute_on = 'initial timestep_end'
[../]
[./p025]
type = PointValue
variable = pp
point = '25 0 0'
execute_on = 'initial timestep_end'
[../]
[./p035]
type = PointValue
variable = pp
point = '35 0 0'
execute_on = 'initial timestep_end'
[../]
[./p045]
type = PointValue
variable = pp
point = '45 0 0'
execute_on = 'initial timestep_end'
[../]
[./p055]
type = PointValue
variable = pp
point = '55 0 0'
execute_on = 'initial timestep_end'
[../]
[./p065]
type = PointValue
variable = pp
point = '65 0 0'
execute_on = 'initial timestep_end'
[../]
[./p075]
type = PointValue
variable = pp
point = '75 0 0'
execute_on = 'initial timestep_end'
[../]
[./p085]
type = PointValue
variable = pp
point = '85 0 0'
execute_on = 'initial timestep_end'
[../]
[./p095]
type = PointValue
variable = pp
point = '95 0 0'
execute_on = 'initial timestep_end'
[../]
[]
[Outputs]
file_base = pressure_pulse_1d_3comp_fully_saturated
print_linear_residuals = false
csv = true
[]
modules/porous_flow/test/tests/poro_elasticity/mandel_fully_saturated.i
# Mandel's problem of consolodation of a drained medium
# Using the FullySaturatedDarcyBase and FullySaturatedMassTimeDerivative kernels
# Note the use of consistent_with_displaced_mesh = false in the calculation of volumetric strain
#
# A sample is in plane strain.
# -a <= x <= a
# -b <= y <= b
# It is squashed with constant force by impermeable, frictionless plattens on its top and bottom surfaces (at y=+/-b)
# Fluid is allowed to leak out from its sides (at x=+/-a)
# The porepressure within the sample is monitored.
#
# As is common in the literature, this is simulated by
# considering the quarter-sample, 0<=x<=a and 0<=y<=b, with
# impermeable, roller BCs at x=0 and y=0 and y=b.
# Porepressure is fixed at zero on x=a.
# Porepressure and displacement are initialised to zero.
# Then the top (y=b) is moved downwards with prescribed velocity,
# so that the total force that is inducing this downwards velocity
# is fixed. The velocity is worked out by solving Mandel's problem
# analytically, and the total force is monitored in the simulation
# to check that it indeed remains constant.
#
# Here are the problem's parameters, and their values:
# Soil width. a = 1
# Soil height. b = 0.1
# Soil's Lame lambda. la = 0.5
# Soil's Lame mu, which is also the Soil's shear modulus. mu = G = 0.75
# Soil bulk modulus. K = la + 2*mu/3 = 1
# Drained Poisson ratio. nu = (3K - 2G)/(6K + 2G) = 0.2
# Soil bulk compliance. 1/K = 1
# Fluid bulk modulus. Kf = 8
# Fluid bulk compliance. 1/Kf = 0.125
# Soil initial porosity. phi0 = 0.1
# Biot coefficient. alpha = 0.6
# Biot modulus. M = 1/(phi0/Kf + (alpha - phi0)(1 - alpha)/K) = 4.705882
# Undrained bulk modulus. Ku = K + alpha^2*M = 2.694118
# Undrained Poisson ratio. nuu = (3Ku - 2G)/(6Ku + 2G) = 0.372627
# Skempton coefficient. B = alpha*M/Ku = 1.048035
# Fluid mobility (soil permeability/fluid viscosity). k = 1.5
# Consolidation coefficient. c = 2*k*B^2*G*(1-nu)*(1+nuu)^2/9/(1-nuu)/(nuu-nu) = 3.821656
# Normal stress on top. F = 1
#
# The solution for porepressure and displacements is given in
# AHD Cheng and E Detournay "A direct boundary element method for plane strain poroelasticity" International Journal of Numerical and Analytical Methods in Geomechanics 12 (1988) 551-572.
# The solution involves complicated infinite series, so I shall not write it here
[Mesh]
type = GeneratedMesh
dim = 3
nx = 10
ny = 1
nz = 1
xmin = 0
xmax = 1
ymin = 0
ymax = 0.1
zmin = 0
zmax = 1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./roller_xmin]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left'
[../]
[./roller_ymin]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom'
[../]
[./plane_strain]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back front'
[../]
[./xmax_drained]
type = DirichletBC
variable = porepressure
value = 0
boundary = right
[../]
[./top_velocity]
type = FunctionDirichletBC
variable = disp_y
function = top_velocity
boundary = top
[../]
[]
[Functions]
[./top_velocity]
type = PiecewiseLinear
x = '0 0.002 0.006 0.014 0.03 0.046 0.062 0.078 0.094 0.11 0.126 0.142 0.158 0.174 0.19 0.206 0.222 0.238 0.254 0.27 0.286 0.302 0.318 0.334 0.35 0.366 0.382 0.398 0.414 0.43 0.446 0.462 0.478 0.494 0.51 0.526 0.542 0.558 0.574 0.59 0.606 0.622 0.638 0.654 0.67 0.686 0.702'
y = '-0.041824842 -0.042730269 -0.043412712 -0.04428867 -0.045509181 -0.04645965 -0.047268246 -0.047974749 -0.048597109 -0.0491467 -0.049632388 -0.050061697 -0.050441198 -0.050776675 -0.051073238 -0.0513354 -0.051567152 -0.051772022 -0.051953128 -0.052113227 -0.052254754 -0.052379865 -0.052490464 -0.052588233 -0.052674662 -0.052751065 -0.052818606 -0.052878312 -0.052931093 -0.052977751 -0.053018997 -0.053055459 -0.053087691 -0.053116185 -0.053141373 -0.05316364 -0.053183324 -0.053200724 -0.053216106 -0.053229704 -0.053241725 -0.053252351 -0.053261745 -0.053270049 -0.053277389 -0.053283879 -0.053289615'
[../]
[]
[AuxVariables]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./tot_force]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[../]
[./tot_force]
type = ParsedAux
args = 'stress_yy porepressure'
execute_on = timestep_end
variable = tot_force
function = '-stress_yy+0.6*porepressure'
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
component = 2
variable = disp_z
[../]
[./mass0]
type = PorousFlowFullySaturatedMassTimeDerivative
biot_coefficient = 0.6
coupling_type = HydroMechanical
variable = porepressure
[../]
[./flux]
type = PorousFlowFullySaturatedDarcyBase
variable = porepressure
gravity = '0 0 0'
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 8
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '0.5 0.75'
# bulk modulus is lambda + 2*mu/3 = 0.5 + 2*0.75/3 = 1
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./eff_fluid_pressure_qp]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
consistent_with_displaced_mesh = false
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = porepressure
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid_qp]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst # only the initial value of this is ever used
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.6
solid_bulk_compliance = 1
fluid_bulk_modulus = 8
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.5 0 0 0 1.5 0 0 0 1.5'
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = csv
point = '0.0 0 0'
variable = porepressure
[../]
[./p1]
type = PointValue
outputs = csv
point = '0.1 0 0'
variable = porepressure
[../]
[./p2]
type = PointValue
outputs = csv
point = '0.2 0 0'
variable = porepressure
[../]
[./p3]
type = PointValue
outputs = csv
point = '0.3 0 0'
variable = porepressure
[../]
[./p4]
type = PointValue
outputs = csv
point = '0.4 0 0'
variable = porepressure
[../]
[./p5]
type = PointValue
outputs = csv
point = '0.5 0 0'
variable = porepressure
[../]
[./p6]
type = PointValue
outputs = csv
point = '0.6 0 0'
variable = porepressure
[../]
[./p7]
type = PointValue
outputs = csv
point = '0.7 0 0'
variable = porepressure
[../]
[./p8]
type = PointValue
outputs = csv
point = '0.8 0 0'
variable = porepressure
[../]
[./p9]
type = PointValue
outputs = csv
point = '0.9 0 0'
variable = porepressure
[../]
[./p99]
type = PointValue
outputs = csv
point = '1 0 0'
variable = porepressure
[../]
[./xdisp]
type = PointValue
outputs = csv
point = '1 0.1 0'
variable = disp_x
[../]
[./ydisp]
type = PointValue
outputs = csv
point = '1 0.1 0'
variable = disp_y
[../]
[./total_downwards_force]
type = ElementAverageValue
outputs = csv
variable = tot_force
[../]
[./dt]
type = FunctionValuePostprocessor
outputs = console
function = if(0.15*t<0.01,0.15*t,0.01)
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu 1E-14 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 0.7
[./TimeStepper]
type = PostprocessorDT
postprocessor = dt
dt = 0.001
[../]
[]
[Outputs]
execute_on = 'timestep_end'
file_base = mandel_fully_saturated
[./csv]
interval = 3
type = CSV
[../]
[]
modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_adaptivity.i
# Pressure pulse in 1D with 1 phase - transient simulation with a constant
# PorousFlowPorosity and mesh adaptivity with an indicator
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 100
[]
[Adaptivity]
marker = marker
[./Markers]
[./marker]
type = ErrorFractionMarker
indicator = front
refine = 0.5
coarsen = 0.2
[../]
[../]
[./Indicators]
[./front]
type = GradientJumpIndicator
variable = pp
[../]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 2E6
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./flux]
type = PorousFlowAdvectiveFlux
variable = pp
gravity = '0 0 0'
fluid_component = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-15'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0
phase = 0
[../]
[]
[BCs]
[./left]
type = DirichletBC
boundary = left
preset = false
value = 3E6
variable = pp
[../]
[./right]
type = PorousFlowPiecewiseLinearSink
variable = pp
boundary = right
fluid_phase = 0
pt_vals = '0 1E9'
multipliers = '0 1E9'
mass_fraction_component = 0
use_mobility = true
flux_function = 1E-6
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1e3
end_time = 5e3
[]
[Postprocessors]
[./p000]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = 'initial timestep_end'
[../]
[./p010]
type = PointValue
variable = pp
point = '10 0 0'
execute_on = 'initial timestep_end'
[../]
[./p020]
type = PointValue
variable = pp
point = '20 0 0'
execute_on = 'initial timestep_end'
[../]
[./p030]
type = PointValue
variable = pp
point = '30 0 0'
execute_on = 'initial timestep_end'
[../]
[./p040]
type = PointValue
variable = pp
point = '40 0 0'
execute_on = 'initial timestep_end'
[../]
[./p050]
type = PointValue
variable = pp
point = '50 0 0'
execute_on = 'initial timestep_end'
[../]
[./p060]
type = PointValue
variable = pp
point = '60 0 0'
execute_on = 'initial timestep_end'
[../]
[./p070]
type = PointValue
variable = pp
point = '70 0 0'
execute_on = 'initial timestep_end'
[../]
[./p080]
type = PointValue
variable = pp
point = '80 0 0'
execute_on = 'initial timestep_end'
[../]
[./p090]
type = PointValue
variable = pp
point = '90 0 0'
execute_on = 'initial timestep_end'
[../]
[./p100]
type = PointValue
variable = pp
point = '100 0 0'
execute_on = 'initial timestep_end'
[../]
[]
[Outputs]
print_linear_residuals = false
csv = true
[]
modules/porous_flow/test/tests/jacobian/heat_advection02.i
# 2phase, unsaturated, heat advection
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./temp]
[../]
[./pgas]
[../]
[./pwater]
[../]
[]
[ICs]
[./pgas]
type = RandomIC
variable = pgas
max = 1.0
min = 0.0
[../]
[./pwater]
type = RandomIC
variable = pwater
max = 0.0
min = -1.0
[../]
[./temp]
type = RandomIC
variable = temp
max = 1.0
min = 0.0
[../]
[]
[Kernels]
[./dummy_pgas]
type = Diffusion
variable = pgas
[../]
[./dummy_pwater]
type = Diffusion
variable = pwater
[../]
[./heat_advection]
type = PorousFlowHeatAdvection
variable = temp
gravity = '1 2 3'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp pgas pwater'
number_fluid_phases = 2
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 1
thermal_expansion = 0
viscosity = 1
cv = 1.1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.8
density0 = 0.7
thermal_expansion = 0
viscosity = 1.3
cv = 1.6
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = pwater
phase1_porepressure = pgas
capillary_pressure = pc
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/poroperm/poro_tm.i
# Test that porosity is correctly calculated.
# Porosity = 1 + (phi0 - 1) * exp(-vol_strain + thermal_exp_coeff * (temperature - ref_temperature))
# The parameters used are:
# phi0 = 0.5
# vol_strain = 0.5
# thermal_exp_coeff = 0.5
# temperature = 4
# ref_temperature = 3.5
# which yield porosity = 0.610599608464
[Mesh]
type = GeneratedMesh
dim = 3
[]
[GlobalParams]
PorousFlowDictator = dictator
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./porepressure]
initial_condition = 2
[../]
[./temperature]
initial_condition = 4
[../]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[ICs]
[./disp_x]
type = FunctionIC
function = '0.5 * x'
variable = disp_x
[../]
[]
[Kernels]
[./dummy_p]
type = TimeDerivative
variable = porepressure
[../]
[./dummy_t]
type = TimeDerivative
variable = temperature
[../]
[./dummy_x]
type = TimeDerivative
variable = disp_x
[../]
[./dummy_y]
type = TimeDerivative
variable = disp_y
[../]
[./dummy_z]
type = TimeDerivative
variable = disp_z
[../]
[]
[AuxVariables]
[./porosity]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
[../]
[]
[Postprocessors]
[./porosity]
type = PointValue
variable = porosity
point = '0 0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure temperature'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temperature
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./porosity]
type = PorousFlowPorosity
mechanical = true
thermal = true
ensure_positive = false
porosity_zero = 0.5
thermal_expansion_coeff = 0.5
reference_temperature = 3.5
[../]
[]
[Executioner]
solve_type = Newton
type = Transient
num_steps = 1
[]
[Outputs]
csv = true
[]
modules/porous_flow/test/tests/infiltration_and_drainage/rd01.i
[Mesh]
type = GeneratedMesh
dim = 2
nx = 120
ny = 1
xmin = 0
xmax = 6
ymin = 0
ymax = 0.05
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Functions]
[./dts]
type = PiecewiseLinear
y = '1E-2 1 10 500 5000 5000'
x = '0 10 100 1000 10000 100000'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = pressure
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.336
alpha = 1.43e-4
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e7
viscosity = 1.01e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./temperature]
type = PorousFlowTemperature
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pressure
capillary_pressure = pc
[../]
[./relperm]
type = PorousFlowRelativePermeabilityVG
m = 0.336
seff_turnover = 0.99
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.33
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '0.295E-12 0 0 0 0.295E-12 0 0 0 0.295E-12'
[../]
[]
[Variables]
[./pressure]
initial_condition = -72620.4
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pressure
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pressure
gravity = '-10 0 0'
[../]
[]
[AuxVariables]
[./SWater]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./SWater]
type = MaterialStdVectorAux
property = PorousFlow_saturation_qp
index = 0
variable = SWater
[../]
[]
[BCs]
[./base]
type = PorousFlowSink
boundary = right
flux_function = -2.315E-3
variable = pressure
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options = '-snes_converged_reason -ksp_diagonal_scale -ksp_diagonal_scale_fix -ksp_gmres_modifiedgramschmidt -snes_linesearch_monitor'
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu NONZERO 2 1E-10 1E-10 10'
[../]
[]
[VectorPostprocessors]
[./swater]
type = LineValueSampler
variable = SWater
start_point = '0 0 0'
end_point = '6 0 0'
sort_by = x
num_points = 121
execute_on = timestep_end
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
petsc_options = '-snes_converged_reason'
end_time = 359424
[./TimeStepper]
type = FunctionDT
function = dts
[../]
[]
[Outputs]
file_base = rd01
[./exodus]
type = Exodus
execute_on = 'initial final'
[../]
[./along_line]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/jacobian/fflux04.i
# 2phase (PP), 3components (that exist in both phases), constant viscosity, constant insitu permeability
# density with constant bulk, Corey relative perm, nonzero gravity, unsaturated with vanGenuchten
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[./massfrac_ph0_sp0]
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp1]
[../]
[./massfrac_ph1_sp0]
[../]
[./massfrac_ph1_sp1]
[../]
[]
[ICs]
[./ppwater]
type = RandomIC
variable = ppwater
min = -1
max = 0
[../]
[./ppgas]
type = RandomIC
variable = ppgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 0.4
[../]
[./massfrac_ph0_sp1]
type = RandomIC
variable = massfrac_ph0_sp1
min = 0
max = 0.4
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 0.4
[../]
[./massfrac_ph1_sp1]
type = RandomIC
variable = massfrac_ph1_sp1
min = 0
max = 0.4
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = ppwater
gravity = '-1 -0.1 0'
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = ppgas
gravity = '-1 -0.1 0'
[../]
[./flux2]
type = PorousFlowAdvectiveFlux
fluid_component = 2
variable = massfrac_ph0_sp0
gravity = '-1 -0.1 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas massfrac_ph0_sp0'
number_fluid_phases = 2
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph0_sp1 massfrac_ph1_sp0 massfrac_ph1_sp1'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/poroperm/PermTensorFromVar03.i
# Testing permeability calculated from scalar and tensor
# Trivial test, checking calculated permeability is correct
# when k_anisotropy is not specified.
# k = k_anisotropy * perm
[Mesh]
type = GeneratedMesh
dim = 1
nx = 3
xmin = 0
xmax = 3
[]
[GlobalParams]
block = 0
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[./InitialCondition]
type = ConstantIC
value = 0
[../]
[../]
[]
[Kernels]
[./flux]
type = PorousFlowAdvectiveFlux
gravity = '0 0 0'
variable = pp
[../]
[]
[BCs]
[./ptop]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[./pbase]
type = DirichletBC
variable = pp
boundary = left
value = 1
[../]
[]
[AuxVariables]
[./perm_var]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_x]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_y]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_z]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./perm_var]
type = ConstantAux
value = 2
variable = perm_var
[../]
[./perm_x]
type = PorousFlowPropertyAux
property = permeability
variable = perm_x
row = 0
column = 0
[../]
[./perm_y]
type = PorousFlowPropertyAux
property = permeability
variable = perm_y
row = 1
column = 1
[../]
[./perm_z]
type = PorousFlowPropertyAux
property = permeability
variable = perm_z
row = 2
column = 2
[../]
[]
[Postprocessors]
[./perm_x_left]
type = PointValue
variable = perm_x
point = '0.5 0 0'
[../]
[./perm_y_left]
type = PointValue
variable = perm_y
point = '0.5 0 0'
[../]
[./perm_z_left]
type = PointValue
variable = perm_z
point = '0.5 0 0'
[../]
[./perm_x_right]
type = PointValue
variable = perm_x
point = '2.5 0 0'
[../]
[./perm_y_right]
type = PointValue
variable = perm_y
point = '2.5 0 0'
[../]
[./perm_z_right]
type = PointValue
variable = perm_z
point = '2.5 0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
# unimportant in this fully-saturated test
m = 0.8
alpha = 1e-4
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./permeability]
type = PorousFlowPermeabilityTensorFromVar
perm = perm_var
[../]
[./temperature]
type = PorousFlowTemperature
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0 # unimportant in this fully-saturated situation
phase = 0
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
solve_type = Newton
type = Steady
l_tol = 1E-5
nl_abs_tol = 1E-3
nl_rel_tol = 1E-8
l_max_its = 200
nl_max_its = 400
petsc_options_iname = '-pc_type -pc_asm_overlap -sub_pc_type -ksp_type -ksp_gmres_restart'
petsc_options_value = ' asm 2 lu gmres 200'
[]
[Outputs]
csv = true
execute_on = 'timestep_end'
[]
modules/porous_flow/test/tests/dirackernels/pls02.i
# fully-saturated situation with a poly-line sink with use_mobility=true
# The poly-line consists of 2 points, and has a length
# of 0.5. Each point is weighted with a weight of 0.1
# The PorousFlowPolyLineSink has
# p_or_t_vals = 0 1E7
# fluxes = 0 1
# so that for 0<=porepressure<=1E7
# base flux = porepressure * 1E-6 * mobility (measured in kg.m^-1.s^-1),
# and when multiplied by the poly-line length, and
# the weighting of each point, the mass flux is
# flux = porepressure * 0.5*E-8 * mobility (kg.s^-1).
#
# The fluid and matrix properties are:
# porosity = 0.1
# element volume = 8 m^3
# density = dens0 * exp(P / bulk), with bulk = 2E7
# initial porepressure P0 = 1E7
# viscosity = 0.2
# So, fluid mass = 0.8 * density (kg)
#
# The equation to solve is
# d(Mass)/dt = - porepressure * 0.5*E-8 * density / viscosity
#
# PorousFlow discretises time to conserve mass, so to march
# forward in time, we must solve
# Mass(dt) = Mass(0) - P * 0.5E-8 * density / viscosity * dt
# or
# 0.8 * dens0 * exp(P/bulk) = 0.8 * dens0 * exp(P0/bulk) - P * 0.5E-8 * density / viscosity * dt
# For the numbers written above this gives
# P(t=1) = 6.36947 MPa
# which is given precisely by MOOSE
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./pls_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e7
viscosity = 0.2
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[DiracKernels]
[./pls]
# This defines a sink that has strength
# f = L(P) * relperm * L_seg
# where
# L(P) is a piecewise-linear function of porepressure
# that is zero at pp=0 and 1 at pp=1E7
# relperm is the relative permeability of the fluid
# L_seg is the line-segment length associated with
# the Dirac points defined in the file pls02.bh
type = PorousFlowPolyLineSink
# Because the Variable for this Sink is pp, and pp is associated
# with the fluid-mass conservation equation, this sink is extracting
# fluid mass (and not heat energy or something else)
variable = pp
# The following specfies that the total fluid mass coming out of
# the porespace via this sink in this timestep should be recorded
# in the pls_total_outflow_mass UserObject
SumQuantityUO = pls_total_outflow_mass
# The following file defines the polyline geometry
# which is just two points in this particular example
point_file = pls02.bh
# Now define the piecewise-linear function, L
# First, we want L to be a function of porepressure (and not
# temperature or something else). The following means that
# p_or_t_vals should be intepreted by MOOSE as the zeroth-phase
# porepressure
function_of = pressure
fluid_phase = 0
# Second, define the piecewise-linear function, L
# The following means
# flux=0 when pp=0 (and also pp<0)
# flux=1 when pp=1E7 (and also pp>1E7)
# flux=linearly intepolated between pp=0 and pp=1E7
# When flux>0 this means a sink, while flux<0 means a source
p_or_t_vals = '0 1E7'
fluxes = '0 1'
# Finally, in this case we want to always multiply
# L by the fluid mobility (of the zeroth phase) and
# use that in the sink strength instead of the bare L
# computed above
use_mobility = true
[../]
[]
[Postprocessors]
[./pls_report]
type = PorousFlowPlotQuantity
uo = pls_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 pls_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 1
dt = 1
solve_type = NEWTON
[]
[Outputs]
file_base = pls02
exodus = false
csv = true
execute_on = timestep_end
[]
modules/porous_flow/test/tests/flux_limited_TVD_pflow/jacobian_02.i
# Checking the Jacobian of Flux-Limited TVD Advection, 1 phase, 3 components, unsaturated, using flux_limiter_type = none
[Mesh]
type = GeneratedMesh
dim = 3
nx = 3
xmin = 0
xmax = 1
ny = 1
ymin = -1
ymax = 2
[]
[GlobalParams]
gravity = '1 2 -0.5'
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./tracer0]
[../]
[./tracer1]
[../]
[]
[ICs]
[./pp]
variable = pp
type = RandomIC
min = -1
max = 0
[../]
[./tracer0]
variable = tracer0
type = RandomIC
min = 0
max = 1
[../]
[./tracer1]
variable = tracer1
type = RandomIC
min = 0
max = 1
[../]
[]
[Kernels]
[./fluxpp]
type = PorousFlowFluxLimitedTVDAdvection
variable = pp
advective_flux_calculator = advective_flux_calculator_0
[../]
[./flux0]
type = PorousFlowFluxLimitedTVDAdvection
variable = tracer0
advective_flux_calculator = advective_flux_calculator_1
[../]
[./flux1]
type = PorousFlowFluxLimitedTVDAdvection
variable = tracer1
advective_flux_calculator = advective_flux_calculator_2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 0.4
viscosity = 1.1
[../]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp tracer0 tracer1'
number_fluid_phases = 1
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
alpha = 1
m = 0.5
[../]
[./advective_flux_calculator_0]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
flux_limiter_type = None
fluid_component = 0
[../]
[./advective_flux_calculator_1]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
flux_limiter_type = None
fluid_component = 1
[../]
[./advective_flux_calculator_2]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
flux_limiter_type = None
fluid_component = 2
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'tracer0 tracer1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
phase = 0
n = 2
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.21 0 0 0 1.5 0 0 0 0.8'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-snes_type'
petsc_options_value = 'test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
num_steps = 1
dt = 1
[]
modules/porous_flow/examples/flow_through_fractured_media/fine_transient.i
# Using a mixed-dimensional mesh
# Transient flow and solute transport along a fracture in a porous matrix
# advective dominated flow in the fracture and diffusion into the porous matrix
#
# Note that fine_steady.i must be run to initialise the porepressure properly
[Mesh]
file = 'gold/fine_steady_out.e'
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./pp]
initial_from_file_var = pp
initial_from_file_timestep = 1
[../]
[./massfrac0]
[../]
[]
[AuxVariables]
[./velocity_x]
family = MONOMIAL
order = CONSTANT
block = fracture
[../]
[./velocity_y]
family = MONOMIAL
order = CONSTANT
block = fracture
[../]
[]
[AuxKernels]
[./velocity_x]
type = PorousFlowDarcyVelocityComponentLowerDimensional
variable = velocity_x
component = x
aperture = 6E-4
[../]
[./velocity_y]
type = PorousFlowDarcyVelocityComponentLowerDimensional
variable = velocity_y
component = y
aperture = 6E-4
[../]
[]
[ICs]
[./massfrac0]
type = ConstantIC
variable = massfrac0
value = 0
[../]
[]
[BCs]
[./top]
type = DirichletBC
value = 0
variable = massfrac0
boundary = top
[../]
[./bottom]
type = DirichletBC
value = 1
variable = massfrac0
boundary = bottom
[../]
[./ptop]
type = DirichletBC
variable = pp
boundary = top
value = 1e6
[../]
[./pbottom]
type = DirichletBC
variable = pp
boundary = bottom
value = 1.002e6
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./adv0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
[../]
[./diff0]
type = PorousFlowDispersiveFlux
fluid_component = 0
variable = pp
disp_trans = 0
disp_long = 0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = massfrac0
[../]
[./adv1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = massfrac0
[../]
[./diff1]
type = PorousFlowDispersiveFlux
fluid_component = 1
variable = massfrac0
disp_trans = 0
disp_long = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = massfrac0
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./poro_fracture]
type = PorousFlowPorosityConst
porosity = 6e-4 # = a * phif
block = 'fracture'
[../]
[./poro_matrix]
type = PorousFlowPorosityConst
porosity = 0.1
block = 'matrix1 matrix2'
[../]
[./diff1]
type = PorousFlowDiffusivityConst
diffusion_coeff = '1e-9 1e-9'
tortuosity = 1.0
block = 'fracture'
[../]
[./diff2]
type = PorousFlowDiffusivityConst
diffusion_coeff = '1e-9 1e-9'
tortuosity = 0.1
block = 'matrix1 matrix2'
[../]
[./relp]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./permeability_fracture]
type = PorousFlowPermeabilityConst
permeability = '1.8e-11 0 0 0 1.8e-11 0 0 0 1.8e-11' # kf=3e-8, a=6e-4m. 1.8e-11 = kf * a
block = 'fracture'
[../]
[./permeability_matrix]
type = PorousFlowPermeabilityConst
permeability = '1e-20 0 0 0 1e-20 0 0 0 1e-20'
block = 'matrix1 matrix2'
[../]
[]
[Functions]
[./dt_controller]
type = PiecewiseConstant
x = '0 30 40 100 200 83200'
y = '0.01 0.1 1 10 100 32'
[../]
[]
[Preconditioning]
active = basic
[./mumps_is_best_for_parallel_jobs]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[./basic]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu NONZERO 2 '
[../]
[]
[Executioner]
type = Transient
solve_type = NEWTON
end_time = 86400
[./TimeStepper]
type = FunctionDT
function = dt_controller
[../]
# controls for nonlinear iterations
nl_max_its = 15
nl_rel_tol = 1e-14
nl_abs_tol = 1e-9
[]
[VectorPostprocessors]
[./xmass]
type = LineValueSampler
start_point = '0.4 0 0'
end_point = '0.5 0 0'
sort_by = x
num_points = 167
variable = massfrac0
[../]
[]
[Outputs]
perf_graph = true
console = true
csv = true
exodus = true
[]
modules/porous_flow/test/tests/jacobian/desorped_mass01.i
# 1phase
# vanGenuchten, constant-bulk density, HM porosity, 1component, unsaturated
[Mesh]
type = GeneratedMesh
dim = 3
xmin = -1
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./pp]
[../]
[./conc]
family = MONOMIAL
order = CONSTANT
[../]
[]
[ICs]
[./disp_x]
type = RandomIC
variable = disp_x
min = -0.1
max = 0.1
[../]
[./disp_y]
type = RandomIC
variable = disp_y
min = -0.1
max = 0.1
[../]
[./disp_z]
type = RandomIC
variable = disp_z
min = -0.1
max = 0.1
[../]
[./pp]
type = RandomIC
variable = pp
min = -1
max = 1
[../]
[./conc]
type = RandomIC
variable = conc
min = 0
max = 1
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./conc]
type = PorousFlowDesorpedMassTimeDerivative
conc_var = conc
variable = conc
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp disp_x disp_y disp_z conc'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '0.5 0.75'
# bulk modulus is lambda + 2*mu/3 = 0.5 + 2*0.75/3 = 1
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
porosity_zero = 0.1
biot_coefficient = 0.5
solid_bulk = 1
[../]
[./p_eff]
type = PorousFlowEffectiveFluidPressure
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/poro_elasticity/pp_generation_unconfined_basicthm.i
# Identical to pp_generation_unconfined_fullysat_volume.i but using an Action
#
# A sample is constrained on all sides, except its top
# and its boundaries are
# also impermeable. Fluid is pumped into the sample via a
# volumetric source (ie m^3/second per cubic meter), and the
# rise in the top surface, porepressure, and stress are observed.
#
# In the standard poromechanics scenario, the Biot Modulus is held
# fixed and the source has units 1/s. Then the expected result
# is
# strain_zz = disp_z = BiotCoefficient*BiotModulus*s*t/((bulk + 4*shear/3) + BiotCoefficient^2*BiotModulus)
# porepressure = BiotModulus*(s*t - BiotCoefficient*strain_zz)
# stress_xx = (bulk - 2*shear/3)*strain_zz (remember this is effective stress)
# stress_zz = (bulk + 4*shear/3)*strain_zz (remember this is effective stress)
#
# In standard porous_flow, everything is based on mass, eg the source has
# units kg/s/m^3. This is discussed in the other pp_generation_unconfined
# models. In this test, we use the FullySaturated Kernel and set
# multiply_by_density = false
# meaning the fluid Kernel has units of volume, and the source, s, has units 1/time
#
# The ratios are:
# stress_xx/strain_zz = (bulk - 2*shear/3) = 1 (for the parameters used here)
# stress_zz/strain_zz = (bulk + 4*shear/3) = 4 (for the parameters used here)
# porepressure/strain_zz = 13.3333333 (for the parameters used here)
#
# Expect
# disp_z = 0.3*10*s*t/((2 + 4*1.5/3) + 0.3^2*10) = 0.612245*s*t
# porepressure = 10*(s*t - 0.3*0.612245*s*t) = 8.163265*s*t
# stress_xx = (2 - 2*1.5/3)*0.612245*s*t = 0.612245*s*t
# stress_zz = (2 + 4*shear/3)*0.612245*s*t = 2.44898*s*t
#
# Finally, note that the volumetric strain has
# consistent_with_displaced_mesh = false
# which is needed when using the FullySaturated version of the Kernels
# in order to generate the above results
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./confinez]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back'
[../]
[]
[Kernels]
[./source]
type = BodyForce
function = 0.1
variable = porepressure
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.0
bulk_modulus = 3.3333333333
viscosity = 1.0
density0 = 1.0
[../]
[../]
[]
[PorousFlowBasicTHM]
coupling_type = HydroMechanical
displacements = 'disp_x disp_y disp_z'
multiply_by_density = false
porepressure = porepressure
biot_coefficient = 0.3
gravity = '0 0 0'
fp = the_simple_fluid
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '1 1.5'
# bulk modulus is lambda + 2*mu/3 = 1 + 2*1.5/3 = 2
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
displacements = 'disp_x disp_y disp_z'
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./porosity]
type = PorousFlowPorosityConst # the "const" is irrelevant here: all that uses Porosity is the BiotModulus, which just uses the initial value of porosity
porosity = 0.1
PorousFlowDictator = dictator
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
PorousFlowDictator = dictator
biot_coefficient = 0.3
fluid_bulk_modulus = 3.3333333333
solid_bulk_compliance = 0.5
[../]
[./permeability_irrelevant]
type = PorousFlowPermeabilityConst
PorousFlowDictator = dictator
permeability = '1.5 0 0 0 1.5 0 0 0 1.5'
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = csv
point = '0 0 0'
variable = porepressure
[../]
[./zdisp]
type = PointValue
outputs = csv
point = '0 0 0.5'
variable = disp_z
[../]
[./stress_xx]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_xx
[../]
[./stress_yy]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_yy
[../]
[./stress_zz]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_zz
[../]
[./stress_xx_over_strain]
type = FunctionValuePostprocessor
function = stress_xx_over_strain_fcn
outputs = csv
[../]
[./stress_zz_over_strain]
type = FunctionValuePostprocessor
function = stress_zz_over_strain_fcn
outputs = csv
[../]
[./p_over_strain]
type = FunctionValuePostprocessor
function = p_over_strain_fcn
outputs = csv
[../]
[]
[Functions]
[./stress_xx_over_strain_fcn]
type = ParsedFunction
value = a/b
vars = 'a b'
vals = 'stress_xx zdisp'
[../]
[./stress_zz_over_strain_fcn]
type = ParsedFunction
value = a/b
vars = 'a b'
vals = 'stress_zz zdisp'
[../]
[./p_over_strain_fcn]
type = ParsedFunction
value = a/b
vars = 'a b'
vals = 'p0 zdisp'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-14 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 10
dt = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = pp_generation_unconfined_basicthm
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/fluids/simple_fluid.i
# Test the properties calculated by the simple fluid Material
# Pressure 10 MPa
# Temperature = 300 K (temperature unit = K)
# Density should equal 1500*exp(1E7/1E9-2E-4*300)=1426.844 kg/m^3
# Viscosity should equal 1.1E-3 Pa.s
# Energy density should equal 4000 * 300 = 1.2E6 J/kg
# Specific enthalpy should equal 4000 * 300 + 10e6 / 1426.844 = 1.207008E6 J/kg
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 2.0E-4
cv = 4000.0
cp = 5000.0
bulk_modulus = 1.0E9
thermal_conductivity = 1.0
viscosity = 1.1E-3
density0 = 1500.0
[../]
[../]
[]
[Mesh]
type = GeneratedMesh
dim = 1
nx = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp T'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Variables]
[./pp]
initial_condition = 10e6
[../]
[./T]
initial_condition = 300.0
[../]
[]
[Kernels]
[./dummy_p]
type = Diffusion
variable = pp
[../]
[./dummy_T]
type = Diffusion
variable = T
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = T
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
temperature_unit = Kelvin
fp = the_simple_fluid
phase = 0
[../]
[]
[Postprocessors]
[./pressure]
type = ElementIntegralVariablePostprocessor
variable = pp
[../]
[./temperature]
type = ElementIntegralVariablePostprocessor
variable = T
[../]
[./density]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_density_qp0'
[../]
[./viscosity]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_viscosity_qp0'
[../]
[./internal_energy]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_internal_energy_qp0'
[../]
[./enthalpy]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_enthalpy_qp0'
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
execute_on = 'timestep_end'
file_base = simple_fluid
csv = true
[]
modules/porous_flow/test/tests/chemistry/2species_equilibrium_2phase.i
# Using a two-phase system (see 2species_equilibrium for the single-phase)
# The saturations, porosity, mass fractions, tortuosity and diffusion coefficients are chosen so that the results are identical to 2species_equilibrium
#
# PorousFlow analogy of chemical_reactions/test/tests/aqueous_equilibrium/2species.i
#
# Simple equilibrium reaction example to illustrate the use of PorousFlowMassFractionAqueousEquilibriumChemistry
#
# In this example, two primary species a and b are transported by diffusion and convection
# from the left of the porous medium, reacting to form two equilibrium species pa2 and pab
# according to the equilibrium reaction:
#
# reactions = '2a = pa2 rate = 10^2
# a + b = pab rate = 10^-2'
#
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
[]
[Variables]
[./a]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = BoundingBoxIC
x1 = 0.0
y1 = 0.0
x2 = 1.0e-10
y2 = 1
inside = 1.0e-2
outside = 1.0e-10
[../]
[../]
[./b]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = BoundingBoxIC
x1 = 0.0
y1 = 0.0
x2 = 1.0e-10
y2 = 1
inside = 1.0e-2
outside = 1.0e-10
[../]
[../]
[]
[AuxVariables]
[./eqm_k0]
initial_condition = 1E2
[../]
[./eqm_k1]
initial_condition = 1E-2
[../]
[./pressure0]
[../]
[./saturation1]
initial_condition = 0.25
[../]
[./a_in_phase0]
initial_condition = 0.0
[../]
[./b_in_phase0]
initial_condition = 0.0
[../]
[./pa2]
family = MONOMIAL
order = CONSTANT
[../]
[./pab]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./pa2]
type = PorousFlowPropertyAux
property = secondary_concentration
secondary_species = 0
variable = pa2
[../]
[./pab]
type = PorousFlowPropertyAux
property = secondary_concentration
secondary_species = 1
variable = pab
[../]
[]
[ICs]
[./pressure0]
type = FunctionIC
variable = pressure0
function = 2-x
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Kernels]
[./mass_a]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = a
[../]
[./flux_a]
type = PorousFlowAdvectiveFlux
variable = a
fluid_component = 0
[../]
[./diff_a]
type = PorousFlowDispersiveFlux
variable = a
fluid_component = 0
disp_trans = '0 0'
disp_long = '0 0'
[../]
[./mass_b]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = b
[../]
[./flux_b]
type = PorousFlowAdvectiveFlux
variable = b
fluid_component = 1
[../]
[./diff_b]
type = PorousFlowDispersiveFlux
variable = b
fluid_component = 1
disp_trans = '0 0'
disp_long = '0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 2
number_fluid_components = 3
number_aqueous_equilibrium = 2
aqueous_phase_number = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9 # huge, so mimic chemical_reactions
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
capillary_pressure = pc
phase0_porepressure = pressure0
phase1_saturation = saturation1
[../]
[./massfrac]
type = PorousFlowMassFractionAqueousEquilibriumChemistry
mass_fraction_vars = 'a_in_phase0 b_in_phase0 a b'
num_reactions = 2
equilibrium_constants = 'eqm_k0 eqm_k1'
primary_activity_coefficients = '1 1'
secondary_activity_coefficients = '1 1'
reactions = '2 0
1 1'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.8
[../]
[./permeability]
type = PorousFlowPermeabilityConst
# porous_flow permeability / porous_flow viscosity = chemical_reactions conductivity = 1E-4
permeability = '1E-7 0 0 0 1E-7 0 0 0 1E-7'
[../]
[./relp0]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./relp1]
type = PorousFlowRelativePermeabilityConst
phase = 1
[../]
[./diff]
type = PorousFlowDiffusivityConst
# porous_flow diffusion_coeff * tortuousity * porosity = chemical_reactions diffusivity = 1E-4
diffusion_coeff = '5E-4 5E-4 5E-4
5E-4 5E-4 5E-4'
tortuosity = '0.25 0.25'
[../]
[]
[BCs]
[./a_left]
type = DirichletBC
variable = a
boundary = left
value = 1.0e-2
[../]
[./b_left]
type = DirichletBC
variable = b
boundary = left
value = 1.0e-2
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 10
end_time = 100
[]
[Outputs]
print_linear_residuals = true
exodus = true
perf_graph = true
[]
modules/porous_flow/test/tests/buckley_leverett/bl01.i
# Buckley-Leverett 1-phase.
# The front starts at (around) x=5, and at t=50 it should
# have moved to x=9.6. The version below has a nonzero
# suction function, and at t=50, the front sits between
# (about) x=9.6 and x=9.9. Changing the van-Genuchten
# al parameter to 1E-4 softens the front so it sits between
# (about) x=9.7 and x=10.4, and the simulation runs much faster.
# With al=1E-2 and nx=600, the front sits between x=9.6 and x=9.8,
# but takes about 100 times longer to run.
[Mesh]
type = GeneratedMesh
dim = 1
nx = 150
xmin = 0
xmax = 15
[]
[GlobalParams]
PorousFlowDictator = dictator
compute_enthalpy = false
compute_internal_energy = false
[]
[Variables]
[./pp]
[./InitialCondition]
type = FunctionIC
function = 'max((1000000-x/5*1000000)-20000,-20000)'
[../]
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
gravity = '0 0 0'
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = pp
boundary = left
value = 980000
[../]
[]
[AuxVariables]
[./sat]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./sat]
type = MaterialStdVectorAux
variable = sat
execute_on = timestep_end
index = 0
property = PorousFlow_saturation_qp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.8
alpha = 1e-3
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e6
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-10 0 0 0 1E-10 0 0 0 1E-10'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.15
[../]
[]
[Preconditioning]
active = andy
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres bjacobi 1E-10 1E-10 20'
[../]
[]
[Functions]
[./timestepper]
type = PiecewiseLinear
x = '0 0.01 0.1 1 1.5 2 20 30 40 50'
y = '0.01 0.1 0.2 0.3 0.1 0.3 0.3 0.4 0.4 0.5'
[../]
[]
[Executioner]
type = Transient
end_time = 50
[./TimeStepper]
type = FunctionDT
function = timestepper
[../]
[]
[VectorPostprocessors]
[./pp]
type = LineValueSampler
start_point = '0 0 0'
end_point = '15 0 0'
num_points = 150
sort_by = x
variable = pp
[../]
[./sat]
type = LineValueSampler
start_point = '0 0 0'
end_point = '15 0 0'
num_points = 150
sort_by = x
variable = sat
[../]
[]
[Outputs]
file_base = bl01
[./csv]
type = CSV
sync_only = true
sync_times = '0.01 50'
[../]
[./exodus]
type = Exodus
execute_on = 'initial final'
[../]
[]
modules/porous_flow/test/tests/basic_advection/except2.i
# PorousFlowDarcyVelocityMaterial attempts to have at_nodes = true
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./u]
[../]
[]
[AuxVariables]
[./P]
[../]
[]
[ICs]
[./P]
type = FunctionIC
variable = P
function = '2*(1-x)'
[../]
[./u]
type = FunctionIC
variable = u
function = 'if(x<0.1,1,0)'
[../]
[]
[Kernels]
[./u_dot]
type = TimeDerivative
variable = u
[../]
[./u_advection]
type = PorousFlowBasicAdvection
variable = u
phase = 1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = ''
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 4
thermal_expansion = 0
viscosity = 150.0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = P
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '5 0 0 0 5 0 0 0 5'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0
phase = 0
[../]
[./darcy_velocity]
type = PorousFlowDarcyVelocityMaterial
gravity = '0.25 0 0'
at_nodes = true
[../]
[]
[BCs]
[./left]
type = DirichletBC
boundary = left
value = 1
variable = u
[../]
[./right]
type = DirichletBC
boundary = right
value = 0
variable = u
[../]
[]
[Preconditioning]
[./basic]
type = SMP
full = true
petsc_options_iname = '-pc_type -snes_rtol'
petsc_options_value = ' lu 1E-10'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 5
[]
[Outputs]
exodus = true
print_linear_residuals = false
[]
modules/porous_flow/test/tests/dirackernels/bh_except09.i
# PorousFlowPeacemanBorehole exception test
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = TimeDerivative
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
compute_enthalpy = false
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
bottom_p_or_t = 0
fluid_phase = 0
point_file = bh02.bh
use_mobility = true
use_enthalpy = true
SumQuantityUO = borehole_total_outflow_mass
variable = pp
unit_weight = '0 0 0'
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
modules/porous_flow/test/tests/poro_elasticity/pp_generation.i
# A sample is constrained on all sides and its boundaries are
# also impermeable. Fluid is pumped into the sample via a
# volumetric source (ie kg/second per cubic meter), and the
# rise in porepressure is observed.
#
# Source = s (units = kg/m^3/second)
#
# Expect:
# fluid_mass = mass0 + s*t
# stress = 0 (remember this is effective stress)
# Porepressure = fluid_bulk*log(fluid_mass_density/density_P0), where fluid_mass_density = fluid_mass*porosity
# porosity = biot+(phi0-biot)*exp(pp(biot-1)/solid_bulk)
#
# Parameters:
# Biot coefficient = 0.3
# Phi0 = 0.1
# Solid Bulk modulus = 2
# fluid_bulk = 13
# density_P0 = 1
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./confinez]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back front'
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
component = 2
variable = disp_z
[../]
[./poro_vol_exp]
type = PorousFlowMassVolumetricExpansion
variable = porepressure
fluid_component = 0
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = porepressure
[../]
[./flux]
type = PorousFlowAdvectiveFlux
variable = porepressure
gravity = '0 0 0'
fluid_component = 0
[../]
[./source]
type = BodyForce
function = 0.1
variable = porepressure
[../]
[]
[AuxVariables]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./porosity]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
[../]
[./stress_xz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xz
index_i = 0
index_j = 2
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[../]
[./porosity]
type = PorousFlowPropertyAux
variable = porosity
property = porosity
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 13
density0 = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '1 1.5'
# bulk modulus is lambda + 2*mu/3 = 1 + 2*1.5/3 = 2
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = porepressure
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
porosity_zero = 0.1
biot_coefficient = 0.3
solid_bulk = 2
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 1 0 0 0 1' # unimportant
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0 # unimportant in this fully-saturated situation
phase = 0
[../]
[]
[Functions]
[./porosity_analytic]
type = ParsedFunction
value = 'biot+(phi0-biot)*exp(pp*(biot-1)/bulk)'
vars = 'biot phi0 pp bulk'
vals = '0.3 0.1 p0 2'
[../]
[]
[Postprocessors]
[./fluid_mass]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'initial timestep_end'
use_displaced_mesh = true
[../]
[./porosity]
type = PointValue
outputs = 'console csv'
point = '0 0 0'
variable = porosity
[../]
[./p0]
type = PointValue
outputs = csv
point = '0 0 0'
variable = porepressure
[../]
[./porosity_analytic]
type = FunctionValuePostprocessor
function = porosity_analytic
[../]
[./zdisp]
type = PointValue
outputs = csv
point = '0 0 0.5'
variable = disp_z
[../]
[./stress_xx]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_xx
[../]
[./stress_yy]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_yy
[../]
[./stress_zz]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_zz
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_max_it -snes_stol'
petsc_options_value = 'bcgs bjacobi 10000 1E-11'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 10
dt = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = pp_generation
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/poro_elasticity/pp_generation_fullysat_action.i
# Same as pp_generation.i, but using an Action
#
# A sample is constrained on all sides and its boundaries are
# also impermeable. Fluid is pumped into the sample via a
# volumetric source (ie kg/second per cubic meter), and the
# rise in porepressure is observed.
#
# Source = s (units = kg/m^3/second)
#
# Expect:
# fluid_mass = mass0 + s*t
# stress = 0 (remember this is effective stress)
# Porepressure = fluid_bulk*log(fluid_mass_density/density_P0), where fluid_mass_density = fluid_mass*porosity
# porosity = biot+(phi0-biot)*exp(pp(biot-1)/solid_bulk)
#
# Parameters:
# Biot coefficient = 0.3
# Phi0 = 0.1
# Solid Bulk modulus = 2
# fluid_bulk = 13
# density_P0 = 1
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.0
bulk_modulus = 13.0
viscosity = 1.0
density0 = 1.0
[../]
[../]
[]
[PorousFlowFullySaturated]
coupling_type = HydroMechanical
displacements = 'disp_x disp_y disp_z'
porepressure = porepressure
biot_coefficient = 0.3
gravity = '0 0 0'
fp = the_simple_fluid
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./confinez]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back front'
[../]
[]
[Kernels]
[./source]
type = BodyForce
function = 0.1
variable = porepressure
[../]
[]
[AuxVariables]
[./porosity]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./porosity]
type = PorousFlowPropertyAux
variable = porosity
property = porosity
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '1 1.5'
# bulk modulus is lambda + 2*mu/3 = 1 + 2*1.5/3 = 2
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
porosity_zero = 0.1
biot_coefficient = 0.3
solid_bulk = 2
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 1 0 0 0 1' # unimportant
[../]
[]
[Functions]
[./porosity_analytic]
type = ParsedFunction
value = 'biot+(phi0-biot)*exp(pp*(biot-1)/bulk)'
vars = 'biot phi0 pp bulk'
vals = '0.3 0.1 p0 2'
[../]
[]
[Postprocessors]
[./fluid_mass]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'initial timestep_end'
use_displaced_mesh = true
[../]
[./porosity]
type = PointValue
outputs = 'console csv'
point = '0 0 0'
variable = porosity
[../]
[./p0]
type = PointValue
outputs = csv
point = '0 0 0'
variable = porepressure
[../]
[./porosity_analytic]
type = FunctionValuePostprocessor
function = porosity_analytic
[../]
[./zdisp]
type = PointValue
outputs = csv
point = '0 0 0.5'
variable = disp_z
[../]
[./stress_xx]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_xx
[../]
[./stress_yy]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_yy
[../]
[./stress_zz]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_zz
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-14 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 10
dt = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = pp_generation_fullysat_action
csv = true
[]
modules/porous_flow/test/tests/poroperm/PermFromPoro04.i
# Testing permeability from porosity
# Trivial test, checking calculated permeability is correct
# k = k_anisotropic * k
# with log k = A * phi + B
[Mesh]
type = GeneratedMesh
dim = 1
nx = 3
xmin = 0
xmax = 3
[]
[GlobalParams]
block = 0
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[./InitialCondition]
type = ConstantIC
value = 0
[../]
[../]
[]
[Kernels]
[./flux]
type = PorousFlowAdvectiveFlux
gravity = '0 0 0'
variable = pp
[../]
[]
[BCs]
[./ptop]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[./pbase]
type = DirichletBC
variable = pp
boundary = left
value = 1
[../]
[]
[AuxVariables]
[./poro]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_x]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_y]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_z]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./poro]
type = PorousFlowPropertyAux
property = porosity
variable = poro
[../]
[./perm_x]
type = PorousFlowPropertyAux
property = permeability
variable = perm_x
row = 0
column = 0
[../]
[./perm_y]
type = PorousFlowPropertyAux
property = permeability
variable = perm_y
row = 1
column = 1
[../]
[./perm_z]
type = PorousFlowPropertyAux
property = permeability
variable = perm_z
row = 2
column = 2
[../]
[]
[Postprocessors]
[./perm_x_bottom]
type = PointValue
variable = perm_x
point = '0 0 0'
[../]
[./perm_y_bottom]
type = PointValue
variable = perm_y
point = '0 0 0'
[../]
[./perm_z_bottom]
type = PointValue
variable = perm_z
point = '0 0 0'
[../]
[./perm_x_top]
type = PointValue
variable = perm_x
point = '3 0 0'
[../]
[./perm_y_top]
type = PointValue
variable = perm_y
point = '3 0 0'
[../]
[./perm_z_top]
type = PointValue
variable = perm_z
point = '3 0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
# unimportant in this fully-saturated test
m = 0.8
alpha = 1e-4
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2.2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0 # unimportant in this fully-saturated situation
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityExponential
k_anisotropy = '1 0 0 0 2 0 0 0 0.1'
poroperm_function = log_k
A = 4.342945
B = -8
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
solve_type = Newton
type = Steady
l_tol = 1E-5
nl_abs_tol = 1E-3
nl_rel_tol = 1E-8
l_max_its = 200
nl_max_its = 400
petsc_options_iname = '-pc_type -pc_asm_overlap -sub_pc_type -ksp_type -ksp_gmres_restart'
petsc_options_value = ' asm 2 lu gmres 200'
[]
[Outputs]
csv = true
execute_on = 'timestep_end'
[]
modules/porous_flow/test/tests/dispersion/diff01.i
# Test diffusive part of PorousFlowDispersiveFlux kernel by setting dispersion
# coefficients to zero. Pressure is held constant over the mesh, and gravity is
# set to zero so that no advective transport of mass takes place.
# Mass fraction is set to 1 on the left hand side and 0 on the right hand side.
[Mesh]
type = GeneratedMesh
dim = 1
nx = 20
xmax = 10
bias_x = 1.1
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./pp]
[../]
[./massfrac0]
[../]
[]
[AuxVariables]
[./velocity]
family = MONOMIAL
order = FIRST
[../]
[]
[AuxKernels]
[./velocity]
type = PorousFlowDarcyVelocityComponent
variable = velocity
component = x
[../]
[]
[ICs]
[./pp]
type = ConstantIC
variable = pp
value = 1e5
[../]
[./massfrac0]
type = ConstantIC
variable = massfrac0
value = 0
[../]
[]
[BCs]
[./left]
type = DirichletBC
value = 1
variable = massfrac0
boundary = left
[../]
[./right]
type = DirichletBC
value = 0
variable = massfrac0
boundary = right
[../]
[./pright]
type = DirichletBC
variable = pp
boundary = right
value = 1e5
[../]
[./pleft]
type = DirichletBC
variable = pp
boundary = left
value = 1e5
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./adv0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
[../]
[./diff0]
type = PorousFlowDispersiveFlux
fluid_component = 0
variable = pp
disp_trans = 0
disp_long = 0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = massfrac0
[../]
[./adv1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = massfrac0
[../]
[./diff1]
type = PorousFlowDispersiveFlux
fluid_component = 1
variable = massfrac0
disp_trans = 0
disp_long = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1e7
density0 = 1000
viscosity = 0.001
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = massfrac0
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./poro]
type = PorousFlowPorosityConst
porosity = 0.3
[../]
[./diff]
type = PorousFlowDiffusivityConst
diffusion_coeff = '1 1'
tortuosity = 0.1
[../]
[./relp]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1e-9 0 0 0 1e-9 0 0 0 1e-9'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu NONZERO 2 '
[../]
[]
[Executioner]
type = Transient
solve_type = NEWTON
dt = 1
end_time = 20
[]
[VectorPostprocessors]
[./xmass]
type = NodalValueSampler
sort_by = id
variable = massfrac0
[../]
[]
[Outputs]
[./out]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/actions/basicthm_hm.i
# PorousFlowBasicTHM action with coupling_type = HydroMechanicalGenerator
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 10
ny = 3
xmax = 10
ymax = 3
[]
[./aquifer]
input = gen
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 1 0'
top_right = '10 2 0'
[../]
[./injection_area]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'injection_area'
normal = '-1 0 0'
input = 'aquifer'
[../]
[./outflow_area]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'outflow_area'
normal = '1 0 0'
input = 'injection_area'
[../]
[./rename]
type = RenameBlockGenerator
old_block_id = '0 1'
new_block_name = 'caprock aquifer'
input = 'outflow_area'
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
displacements = 'disp_x disp_y'
biot_coefficient = 1.0
[]
[Variables]
[./porepressure]
initial_condition = 1e6
[../]
[./disp_x]
scaling = 1e-10
[../]
[./disp_y]
scaling = 1e-10
[../]
[]
[AuxVariables]
[./temperature]
initial_condition = 293
[../]
[]
[PorousFlowBasicTHM]
porepressure = porepressure
temperature = temperature
coupling_type = HydroMechanical
gravity = '0 0 0'
fp = simple_fluid
use_displaced_mesh = false
add_stress_aux = false
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1.5e6
boundary = injection_area
[../]
[./constant_outflow_porepressure]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
boundary = outflow_area
pt_vals = '0 1e9'
multipliers = '0 1e9'
flux_function = 1e-6
PT_shift = 1e6
[../]
[./top_bottom]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'top bottom'
[../]
[./right]
type = DirichletBC
variable = disp_x
value = 0
boundary = right
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
solid_bulk_compliance = 2e-7
fluid_bulk_modulus = 1e7
[../]
[./permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1e-13 0 0 0 1e-13 0 0 0 1e-13'
[../]
[./permeability_caprock]
type = PorousFlowPermeabilityConst
block = caprock
permeability = '1e-15 0 0 0 1e-15 0 0 0 1e-15'
[../]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 5e9
poissons_ratio = 0.0
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[]
[Preconditioning]
[./basic]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1e4
dt = 1e3
nl_abs_tol = 1e-14
nl_rel_tol = 1e-14
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/gravity/grav01a.i
# Checking that gravity head is established
# 1phase, vanGenuchten, constant fluid-bulk, constant viscosity, constant permeability, Corey relative perm
# fully saturated
# For better agreement with the analytical solution (ana_pp), just increase nx
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmin = -1
xmax = 0
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[./InitialCondition]
type = RandomIC
min = 0
max = 1
[../]
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
gravity = '-1 0 0'
[../]
[]
[Functions]
[./ana_pp]
type = ParsedFunction
vars = 'g B p0 rho0'
vals = '1 1.2 0 1'
value = '-B*log(exp(-p0/B)+g*rho0*x/B)' # expected pp at base
[../]
[]
[BCs]
[./z]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.2
density0 = 1
viscosity = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 0
[../]
[]
[Postprocessors]
[./pp_base]
type = PointValue
variable = pp
point = '-1 0 0'
[../]
[./pp_analytical]
type = FunctionValuePostprocessor
function = ana_pp
point = '-1 0 0'
[../]
[./pp_00]
type = PointValue
variable = pp
point = '0 0 0'
[../]
[./pp_01]
type = PointValue
variable = pp
point = '-0.1 0 0'
[../]
[./pp_02]
type = PointValue
variable = pp
point = '-0.2 0 0'
[../]
[./pp_03]
type = PointValue
variable = pp
point = '-0.3 0 0'
[../]
[./pp_04]
type = PointValue
variable = pp
point = '-0.4 0 0'
[../]
[./pp_05]
type = PointValue
variable = pp
point = '-0.5 0 0'
[../]
[./pp_06]
type = PointValue
variable = pp
point = '-0.6 0 0'
[../]
[./pp_07]
type = PointValue
variable = pp
point = '-0.7 0 0'
[../]
[./pp_08]
type = PointValue
variable = pp
point = '-0.8 0 0'
[../]
[./pp_09]
type = PointValue
variable = pp
point = '-0.9 0 0'
[../]
[./pp_10]
type = PointValue
variable = pp
point = '-1 0 0'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
execute_on = 'timestep_end'
file_base = grav01a
[./csv]
type = CSV
[../]
[]
modules/porous_flow/examples/tidal/barometric_fully_confined.i
# A fully-confined aquifer is fully saturated with water
# Barometric loading is applied to the aquifer.
# Because the aquifer is assumed to be sandwiched between
# impermeable aquitards, the barometric pressure is not felt
# directly by the porepressure. Instead, the porepressure changes
# only because the barometric loading applies a total stress to
# the top surface of the aquifer.
#
# To replicate standard poroelasticity exactly:
# (1) the PorousFlowBasicTHM Action is used;
# (2) multiply_by_density = false;
# (3) PorousFlowConstantBiotModulus is used
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0
xmax = 1
ymin = 0
ymax = 1
zmin = 0
zmax = 1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
biot_coefficient = 0.6
multiply_by_density = false
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./fix_x]
type = DirichletBC
variable = disp_x
value = 0.0
boundary = 'left right'
[../]
[./fix_y]
type = DirichletBC
variable = disp_y
value = 0.0
boundary = 'bottom top'
[../]
[./fix_z_bottom]
type = DirichletBC
variable = disp_z
value = 0.0
boundary = back
[../]
[./barometric_loading]
type = FunctionNeumannBC
variable = disp_z
function = -1000.0 # atmospheric pressure increase of 1kPa
boundary = front
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
[../]
[../]
[]
[PorousFlowBasicTHM]
coupling_type = HydroMechanical
displacements = 'disp_x disp_y disp_z'
porepressure = porepressure
gravity = '0 0 0'
fp = the_simple_fluid
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
bulk_modulus = 10.0E9 # drained bulk modulus
poissons_ratio = 0.25
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./porosity]
type = PorousFlowPorosityConst # only the initial value of this is ever used
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
solid_bulk_compliance = 1E-10
fluid_bulk_modulus = 2E9
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[]
[Postprocessors]
[./pp]
type = PointValue
point = '0.5 0.5 0.5'
variable = porepressure
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
console = true
csv = true
[]
modules/porous_flow/test/tests/thm_rehbinder/free_outer.i
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 40
nt = 16
rmin = 0.1
rmax = 1
dmin = 0.0
dmax = 90
growth_r = 1.1
[]
[./make3D]
input = annular
type = MeshExtruderGenerator
bottom_sideset = bottom
top_sideset = top
extrusion_vector = '0 0 1'
num_layers = 1
[../]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
biot_coefficient = 1.0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[./temperature]
[../]
[]
[BCs]
# sideset 1 = outer
# sideset 2 = cavity
# sideset 3 = ymin
# sideset 4 = xmin
[./plane_strain]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'top bottom'
[../]
[./ymin]
type = DirichletBC
variable = disp_y
value = 0
boundary = dmin
[../]
[./xmin]
type = DirichletBC
variable = disp_x
value = 0
boundary = dmax
[../]
[./cavity_temperature]
type = DirichletBC
variable = temperature
value = 1000
boundary = rmin
[../]
[./cavity_porepressure]
type = DirichletBC
variable = porepressure
value = 1E6
boundary = rmin
[../]
[./cavity_zero_effective_stress_x]
type = Pressure
component = 0
variable = disp_x
function = 1E6
boundary = rmin
use_displaced_mesh = false
[../]
[./cavity_zero_effective_stress_y]
type = Pressure
component = 1
variable = disp_y
function = 1E6
boundary = rmin
use_displaced_mesh = false
[../]
[./outer_temperature]
type = DirichletBC
variable = temperature
value = 0
boundary = rmax
[../]
[./outer_pressure]
type = DirichletBC
variable = porepressure
value = 0
boundary = rmax
[../]
[]
[AuxVariables]
[./stress_rr]
family = MONOMIAL
order = CONSTANT
[../]
[./stress_pp]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./stress_rr]
type = RankTwoScalarAux
rank_two_tensor = stress
variable = stress_rr
scalar_type = RadialStress
point1 = '0 0 0'
point2 = '0 0 1'
[../]
[./stress_pp]
type = RankTwoScalarAux
rank_two_tensor = stress
variable = stress_pp
scalar_type = HoopStress
point1 = '0 0 0'
point2 = '0 0 1'
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.0
bulk_modulus = 1E12
viscosity = 1.0E-3
density0 = 1000.0
cv = 1000.0
cp = 1000.0
porepressure_coefficient = 0.0
[../]
[../]
[]
[PorousFlowBasicTHM]
coupling_type = ThermoHydroMechanical
multiply_by_density = false
add_stress_aux = true
porepressure = porepressure
temperature = temperature
thermal_eigenstrain_name = thermal_contribution
gravity = '0 0 0'
fp = the_simple_fluid
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1E10
poissons_ratio = 0.2
[../]
[./strain]
type = ComputeSmallStrain
eigenstrain_names = thermal_contribution
[../]
[./thermal_contribution]
type = ComputeThermalExpansionEigenstrain
temperature = temperature
thermal_expansion_coeff = 1E-6
eigenstrain_name = thermal_contribution
stress_free_temperature = 0.0
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./porosity]
type = PorousFlowPorosityConst # only the initial value of this is ever used
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
solid_bulk_compliance = 1E-10
fluid_bulk_modulus = 1E12
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./thermal_expansion]
type = PorousFlowConstantThermalExpansionCoefficient
fluid_coefficient = 1E-6
drained_coefficient = 1E-6
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '1E6 0 0 0 1E6 0 0 0 1E6'
[../]
[]
[VectorPostprocessors]
[./P]
type = LineValueSampler
start_point = '0.1 0 0'
end_point = '1.0 0 0'
num_points = 10
sort_by = x
variable = porepressure
[../]
[./T]
type = LineValueSampler
start_point = '0.1 0 0'
end_point = '1.0 0 0'
num_points = 10
sort_by = x
variable = temperature
[../]
[./U]
type = LineValueSampler
start_point = '0.1 0 0'
end_point = '1.0 0 0'
num_points = 10
sort_by = x
variable = disp_x
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_rtol'
petsc_options_value = 'gmres asm lu 1E-8'
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
file_base = free_outer
execute_on = timestep_end
csv = true
[]
modules/porous_flow/test/tests/actions/basicthm_th.i
# PorousFlowBasicTHM action with coupling_type = ThermoHydroGenerator
# (no mechanical effects)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 10
ny = 3
xmax = 10
ymax = 3
[]
[./aquifer]
input = gen
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 1 0'
top_right = '10 2 0'
[../]
[./injection_area]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'injection_area'
normal = '-1 0 0'
input = 'aquifer'
[../]
[./outflow_area]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'outflow_area'
normal = '1 0 0'
input = 'injection_area'
[../]
[./rename]
type = RenameBlockGenerator
old_block_id = '0 1'
new_block_name = 'caprock aquifer'
input = 'outflow_area'
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./porepressure]
initial_condition = 1e6
[../]
[./temperature]
initial_condition = 293
scaling = 1e-6
[../]
[]
[PorousFlowBasicTHM]
porepressure = porepressure
temperature = temperature
coupling_type = ThermoHydro
gravity = '0 0 0'
fp = simple_fluid
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1.5e6
boundary = injection_area
[../]
[./constant_injection_temperature]
type = DirichletBC
variable = temperature
value = 313
boundary = injection_area
[../]
[./constant_outflow_porepressure]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
boundary = outflow_area
pt_vals = '0 1e9'
multipliers = '0 1e9'
flux_function = 1e-6
PT_shift = 1e6
[../]
[./constant_outflow_temperature]
type = DirichletBC
variable = temperature
value = 293
boundary = outflow_area
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.8
solid_bulk_compliance = 2e-7
fluid_bulk_modulus = 1e7
[../]
[./permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1e-13 0 0 0 1e-13 0 0 0 1e-13'
[../]
[./permeability_caprock]
type = PorousFlowPermeabilityConst
block = caprock
permeability = '1e-15 0 0 0 1e-15 0 0 0 1e-15'
[../]
[./thermal_expansion]
type = PorousFlowConstantThermalExpansionCoefficient
biot_coefficient = 0.8
drained_coefficient = 0.003
fluid_coefficient = 0.0002
[../]
[./rock_internal_energy]
type = PorousFlowMatrixInternalEnergy
density = 2500.0
specific_heat_capacity = 1200.0
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '10 0 0 0 10 0 0 0 10'
block = 'caprock aquifer'
[../]
[]
[Preconditioning]
[./basic]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1e4
dt = 1e3
nl_abs_tol = 1e-15
nl_rel_tol = 1e-14
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_MD.i
# Pressure pulse in 1D with 1 phase - transient
# Using the "MD" formulation (where primary variable is log(mass-density
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./md]
# initial porepressure = 2E6
# so initial md = log(density_P0) + porepressure/bulk_modulus =
initial_condition = 6.90875527898214
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = md
[../]
[./flux]
type = PorousFlowAdvectiveFlux
variable = md
gravity = '0 0 0'
fluid_component = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'md'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseMD_Gaussian
mass_density = md
al = 1E-6 # this is irrelevant in this example
density_P0 = 1000
bulk_modulus = 2E9
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-15'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0
phase = 0
[../]
[]
[BCs]
[./left]
type = DirichletBC
boundary = left
# BC porepressure = 3E6
# so boundary md = log(density_P0) + porepressure/bulk_modulus =
value = 6.90925527898214
variable = md
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E3
end_time = 1E4
[]
[AuxVariables]
[./pp]
[../]
[]
[AuxKernels]
[./pp]
type = ParsedAux
function = '(md-6.9077552789821)*2.0E9'
args = 'md'
variable = pp
[../]
[]
[Postprocessors]
[./p000]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = 'initial timestep_end'
[../]
[./p010]
type = PointValue
variable = pp
point = '10 0 0'
execute_on = 'initial timestep_end'
[../]
[./p020]
type = PointValue
variable = pp
point = '20 0 0'
execute_on = 'initial timestep_end'
[../]
[./p030]
type = PointValue
variable = pp
point = '30 0 0'
execute_on = 'initial timestep_end'
[../]
[./p040]
type = PointValue
variable = pp
point = '40 0 0'
execute_on = 'initial timestep_end'
[../]
[./p050]
type = PointValue
variable = pp
point = '50 0 0'
execute_on = 'initial timestep_end'
[../]
[./p060]
type = PointValue
variable = pp
point = '60 0 0'
execute_on = 'initial timestep_end'
[../]
[./p070]
type = PointValue
variable = pp
point = '70 0 0'
execute_on = 'initial timestep_end'
[../]
[./p080]
type = PointValue
variable = pp
point = '80 0 0'
execute_on = 'initial timestep_end'
[../]
[./p090]
type = PointValue
variable = pp
point = '90 0 0'
execute_on = 'initial timestep_end'
[../]
[./p100]
type = PointValue
variable = pp
point = '100 0 0'
execute_on = 'initial timestep_end'
[../]
[]
[Outputs]
file_base = pressure_pulse_1d_MD
print_linear_residuals = false
csv = true
[]
modules/porous_flow/test/tests/gravity/grav01c.i
# Checking that gravity head is established
# 1phase, vanGenuchten, constant fluid-bulk, constant viscosity, constant permeability, Corey relative perm
# unsaturated
# For better agreement with the analytical solution (ana_pp), just increase nx
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmin = -1
xmax = 0
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[./InitialCondition]
type = RandomIC
min = -1
max = 1
[../]
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
gravity = '-1 0 0'
[../]
[]
[Functions]
[./ana_pp]
type = ParsedFunction
vars = 'g B p0 rho0'
vals = '1 2 -1 1'
value = '-B*log(exp(-p0/B)+g*rho0*x/B)' # expected pp at base
[../]
[]
[BCs]
[./z]
type = DirichletBC
variable = pp
boundary = right
value = -1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2
density0 = 1
viscosity = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 0
[../]
[]
[Postprocessors]
[./pp_base]
type = PointValue
variable = pp
point = '-1 0 0'
[../]
[./pp_analytical]
type = FunctionValuePostprocessor
function = ana_pp
point = '-1 0 0'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
execute_on = 'timestep_end'
file_base = grav01c
exodus = true
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/jacobian/fflux03.i
# 2phase (PP), 2components (that exist in both phases), constant viscosity, constant insitu permeability
# density with constant bulk, Corey relative perm, nonzero gravity, unsaturated with vanGenuchten
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
[../]
[./massfrac_ph1_sp0]
[../]
[]
[ICs]
[./ppwater]
type = RandomIC
variable = ppwater
min = -1
max = 0
[../]
[./ppgas]
type = RandomIC
variable = ppgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 1
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 1
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = ppwater
gravity = '-1 -0.1 0'
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = ppgas
gravity = '-1 -0.1 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/flux_limited_TVD_pflow/jacobian_04.i
# Checking the Jacobian of Flux-Limited TVD Advection, 1 phase, 1 component, unsaturated, using flux_limiter_type != none
# This is quite a heavy test, but we need a fairly big mesh to check the flux-limiting+TVD is happening correctly
#
# Here we use snes_check_jacobian instead of snes_type=test. The former just checks the Jacobian for the
# random initial conditions, while the latter checks for u=1 and u=-1
#
# The Jacobian is correct for u=1 and u=-1, but the finite-difference scheme used by snes_type=test gives the
# wrong answer.
# For u=constant, the Kuzmin-Turek scheme adds as much antidiffusion as possible, resulting in a central-difference
# version of advection (flux_limiter = 1). This is correct, and the Jacobian is calculated correctly.
# However, when computing the Jacobian using finite differences, u is increased or decreased at a node.
# This results in that node being at a maximum or minimum, which means no antidiffusion should be added
# (flux_limiter = 0). This corresponds to a full-upwind scheme. So the finite-difference computes the
# Jacobian in the full-upwind scenario, which is incorrect (the original residual = 0, after finite-differencing
# the residual comes from the full-upwind scenario).
[Mesh]
type = GeneratedMesh
dim = 3
nx = 3
xmin = 0
xmax = 1
ny = 4
ymin = -1
ymax = 2
bias_y = 1.5
nz = 4
zmin = 1
zmax = 2
bias_z = 0.8
[]
[GlobalParams]
gravity = '1 2 -0.5'
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pp]
variable = pp
type = RandomIC
min = -1
max = 0
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowFluxLimitedTVDAdvection
variable = pp
advective_flux_calculator = advective_flux_calculator
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 0.4
viscosity = 1.1
[../]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
alpha = 1
m = 0.5
[../]
[./advective_flux_calculator]
type = PorousFlowAdvectiveFluxCalculatorUnsaturated
flux_limiter_type = minmod
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
phase = 0
n = 2
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.21 0 0 0 1.5 0 0 0 0.8'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options = '-snes_check_jacobian'
[../]
[]
[Executioner]
type = Transient
solve_type = Linear # this is to force convergence even though the nonlinear residual is high: we just care about the Jacobian in this test
end_time = 1
num_steps = 1
dt = 1
[]
modules/porous_flow/test/tests/fluids/simple_fluid_yr_MPa_C.i
# Test the properties calculated by the simple fluid Material
# Pressure unit is chosen to be MPa
# Time unit is chosen to be years
# Temperature unit is chosen to be Celsius
# Pressure 10 MPa
# Temperature = 26.85 C
# Density should equal 1500*exp(1E7/1E9-2E-4*300)=1426.844 kg/m^3
# Viscosity should equal 3.49E-17 MPa.yr
# Energy density should equal 4000 * 300 = 1.2E6 J/kg
# Specific enthalpy should equal 4000 * 300 + 10e6 / 1426.844 = 1.207008E6 J/kg
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 2.0E-4
cv = 4000.0
cp = 5000.0
bulk_modulus = 1.0E9
thermal_conductivity = 1.0
viscosity = 1.1E-3
density0 = 1500.0
[../]
[../]
[]
[Mesh]
type = GeneratedMesh
dim = 1
nx = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp T'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Variables]
[./pp]
initial_condition = 10
[../]
[./T]
initial_condition = 26.85
[../]
[]
[Kernels]
[./dummy_p]
type = Diffusion
variable = pp
[../]
[./dummy_T]
type = Diffusion
variable = T
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = T
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
temperature_unit = Celsius
pressure_unit = MPa
time_unit = years
fp = the_simple_fluid
phase = 0
[../]
[]
[Postprocessors]
[./pressure]
type = ElementIntegralVariablePostprocessor
variable = pp
[../]
[./temperature]
type = ElementIntegralVariablePostprocessor
variable = T
[../]
[./density]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_density_qp0'
[../]
[./viscosity]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_viscosity_qp0'
[../]
[./internal_energy]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_internal_energy_qp0'
[../]
[./enthalpy]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_enthalpy_qp0'
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
execute_on = 'timestep_end'
csv = true
[]
modules/porous_flow/test/tests/poroperm/except1.i
# Exception test: thermal=true but no thermal_expansion_coeff provided
[Mesh]
type = GeneratedMesh
dim = 3
[]
[GlobalParams]
PorousFlowDictator = dictator
displacements = 'disp_x disp_y disp_z'
biot_coefficient = 0.7
[]
[Variables]
[./porepressure]
initial_condition = 2
[../]
[./temperature]
initial_condition = 4
[../]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[ICs]
[./disp_x]
type = FunctionIC
function = '0.5 * x'
variable = disp_x
[../]
[]
[Kernels]
[./dummy_p]
type = TimeDerivative
variable = porepressure
[../]
[./dummy_t]
type = TimeDerivative
variable = temperature
[../]
[./dummy_x]
type = TimeDerivative
variable = disp_x
[../]
[./dummy_y]
type = TimeDerivative
variable = disp_y
[../]
[./dummy_z]
type = TimeDerivative
variable = disp_z
[../]
[]
[AuxVariables]
[./porosity]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
[../]
[]
[Postprocessors]
[./porosity]
type = PointValue
variable = porosity
point = '0 0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure temperature'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temperature
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./porosity]
type = PorousFlowPorosity
mechanical = true
fluid = true
thermal = true
ensure_positive = false
porosity_zero = 0.5
solid_bulk = 0.3
reference_porepressure = 3
reference_temperature = 3.5
[../]
[]
[Executioner]
solve_type = Newton
type = Transient
num_steps = 1
[]
[Outputs]
csv = true
[]
modules/porous_flow/examples/coal_mining/fine_with_fluid.i
#################################################################
#
# NOTE:
# The mesh for this model is too large for the MOOSE repository
# so is kept in the the large_media submodule
#
#################################################################
#
# Strata deformation and fluid flow aaround a coal mine - 3D model
#
# A "half model" is used. The mine is 400m deep and
# just the roof is studied (-400<=z<=0). The mining panel
# sits between 0<=x<=150, and 0<=y<=1000, so this simulates
# a coal panel that is 300m wide and 1000m long. The outer boundaries
# are 1km from the excavation boundaries.
#
# The excavation takes 0.5 years.
#
# The boundary conditions for this simulation are:
# - disp_x = 0 at x=0 and x=1150
# - disp_y = 0 at y=-1000 and y=1000
# - disp_z = 0 at z=-400, but there is a time-dependent
# Young modulus that simulates excavation
# - wc_x = 0 at y=-1000 and y=1000
# - wc_y = 0 at x=0 and x=1150
# - no flow at x=0, z=-400 and z=0
# - fixed porepressure at y=-1000, y=1000 and x=1150
# That is, rollers on the sides, free at top,
# and prescribed at bottom in the unexcavated portion.
#
# A single-phase unsaturated fluid is used.
#
# The small strain formulation is used.
#
# All stresses are measured in MPa, and time units are measured in years.
#
# The initial porepressure is hydrostatic with P=0 at z=0, so
# Porepressure ~ - 0.01*z MPa, where the fluid has density 1E3 kg/m^3 and
# gravity = = 10 m.s^-2 = 1E-5 MPa m^2/kg.
# To be more accurate, i use
# Porepressure = -bulk * log(1 + g*rho0*z/bulk)
# where bulk=2E3 MPa and rho0=1Ee kg/m^3.
# The initial stress is consistent with the weight force from undrained
# density 2500 kg/m^3, and fluid porepressure, and a Biot coefficient of 0.7, ie,
# stress_zz^effective = 0.025*z + 0.7 * initial_porepressure
# The maximum and minimum principal horizontal effective stresses are
# assumed to be equal to 0.8*stress_zz.
#
# Material properties:
# Young's modulus = 8 GPa
# Poisson's ratio = 0.25
# Cosserat layer thickness = 1 m
# Cosserat-joint normal stiffness = large
# Cosserat-joint shear stiffness = 1 GPa
# MC cohesion = 2 MPa
# MC friction angle = 35 deg
# MC dilation angle = 8 deg
# MC tensile strength = 1 MPa
# MC compressive strength = 100 MPa
# WeakPlane cohesion = 0.1 MPa
# WeakPlane friction angle = 30 deg
# WeakPlane dilation angle = 10 deg
# WeakPlane tensile strength = 0.1 MPa
# WeakPlane compressive strength = 100 MPa softening to 1 MPa at strain = 1
# Fluid density at zero porepressure = 1E3 kg/m^3
# Fluid bulk modulus = 2E3 MPa
# Fluid viscosity = 1.1E-3 Pa.s = 1.1E-9 MPa.s = 3.5E-17 MPa.year
#
[GlobalParams]
perform_finite_strain_rotations = false
displacements = 'disp_x disp_y disp_z'
Cosserat_rotations = 'wc_x wc_y wc_z'
PorousFlowDictator = dictator
biot_coefficient = 0.7
[]
[Mesh]
[file]
type = FileMeshGenerator
file = fine.e
[]
[./xmin]
type = SideSetsAroundSubdomainGenerator
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30'
new_boundary = xmin
normal = '-1 0 0'
input = file
[../]
[./xmax]
type = SideSetsAroundSubdomainGenerator
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30'
new_boundary = xmax
normal = '1 0 0'
input = xmin
[../]
[./ymin]
type = SideSetsAroundSubdomainGenerator
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30'
new_boundary = ymin
normal = '0 -1 0'
input = xmax
[../]
[./ymax]
type = SideSetsAroundSubdomainGenerator
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30'
new_boundary = ymax
normal = '0 1 0'
input = ymin
[../]
[./zmax]
type = SideSetsAroundSubdomainGenerator
block = 30
new_boundary = zmax
normal = '0 0 1'
input = ymax
[../]
[./zmin]
type = SideSetsAroundSubdomainGenerator
block = 2
new_boundary = zmin
normal = '0 0 -1'
input = zmax
[../]
[./excav]
type = SubdomainBoundingBoxGenerator
input = zmin
block_id = 1
bottom_left = '0 0 -400'
top_right = '150 1000 -397'
[../]
[./roof]
type = SideSetsBetweenSubdomainsGenerator
master_block = 3
paired_block = 1
input = excav
new_boundary = roof
[../]
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./wc_x]
[../]
[./wc_y]
[../]
[./porepressure]
scaling = 1E-5
[../]
[]
[ICs]
[./porepressure]
type = FunctionIC
variable = porepressure
function = ini_pp
[../]
[]
[Kernels]
[./cx_elastic]
type = CosseratStressDivergenceTensors
use_displaced_mesh = false
variable = disp_x
component = 0
[../]
[./cy_elastic]
type = CosseratStressDivergenceTensors
use_displaced_mesh = false
variable = disp_y
component = 1
[../]
[./cz_elastic]
type = CosseratStressDivergenceTensors
use_displaced_mesh = false
variable = disp_z
component = 2
[../]
[./x_couple]
type = StressDivergenceTensors
use_displaced_mesh = false
variable = wc_x
displacements = 'wc_x wc_y wc_z'
component = 0
base_name = couple
[../]
[./y_couple]
type = StressDivergenceTensors
use_displaced_mesh = false
variable = wc_y
displacements = 'wc_x wc_y wc_z'
component = 1
base_name = couple
[../]
[./x_moment]
type = MomentBalancing
use_displaced_mesh = false
variable = wc_x
component = 0
[../]
[./y_moment]
type = MomentBalancing
use_displaced_mesh = false
variable = wc_y
component = 1
[../]
[./gravity]
type = Gravity
use_displaced_mesh = false
variable = disp_z
value = -10E-6 # remember this is in MPa
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
use_displaced_mesh = false
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
use_displaced_mesh = false
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
use_displaced_mesh = false
component = 2
variable = disp_z
[../]
[./poro_vol_exp]
type = PorousFlowMassVolumetricExpansion
use_displaced_mesh = false
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30'
variable = porepressure
fluid_component = 0
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
use_displaced_mesh = false
fluid_component = 0
variable = porepressure
[../]
[./flux]
type = PorousFlowAdvectiveFlux
use_displaced_mesh = false
variable = porepressure
gravity = '0 0 -10E-6'
fluid_component = 0
[../]
[]
[AuxVariables]
[./saturation]
order = CONSTANT
family = MONOMIAL
[../]
[./darcy_x]
order = CONSTANT
family = MONOMIAL
[../]
[./darcy_y]
order = CONSTANT
family = MONOMIAL
[../]
[./darcy_z]
order = CONSTANT
family = MONOMIAL
[../]
[./porosity]
order = CONSTANT
family = MONOMIAL
[../]
[./wc_z]
[../]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_xz]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_yx]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_zx]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_zy]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./mc_shear]
order = CONSTANT
family = MONOMIAL
[../]
[./mc_tensile]
order = CONSTANT
family = MONOMIAL
[../]
[./wp_shear]
order = CONSTANT
family = MONOMIAL
[../]
[./wp_tensile]
order = CONSTANT
family = MONOMIAL
[../]
[./wp_shear_f]
order = CONSTANT
family = MONOMIAL
[../]
[./wp_tensile_f]
order = CONSTANT
family = MONOMIAL
[../]
[./mc_shear_f]
order = CONSTANT
family = MONOMIAL
[../]
[./mc_tensile_f]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./saturation_water]
type = PorousFlowPropertyAux
variable = saturation
property = saturation
phase = 0
execute_on = timestep_end
[../]
[./darcy_x]
type = PorousFlowDarcyVelocityComponent
variable = darcy_x
gravity = '0 0 -10E-6'
component = x
[../]
[./darcy_y]
type = PorousFlowDarcyVelocityComponent
variable = darcy_y
gravity = '0 0 -10E-6'
component = y
[../]
[./darcy_z]
type = PorousFlowDarcyVelocityComponent
variable = darcy_z
gravity = '0 0 -10E-6'
component = z
[../]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
execute_on = timestep_end
[../]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
execute_on = timestep_end
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
execute_on = timestep_end
[../]
[./stress_xz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xz
index_i = 0
index_j = 2
execute_on = timestep_end
[../]
[./stress_yx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yx
index_i = 1
index_j = 0
execute_on = timestep_end
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
execute_on = timestep_end
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
execute_on = timestep_end
[../]
[./stress_zx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zx
index_i = 2
index_j = 0
execute_on = timestep_end
[../]
[./stress_zy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zy
index_i = 2
index_j = 1
execute_on = timestep_end
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
execute_on = timestep_end
[../]
[./total_strain_xx]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_xx
index_i = 0
index_j = 0
execute_on = timestep_end
[../]
[./total_strain_xy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_xy
index_i = 0
index_j = 1
execute_on = timestep_end
[../]
[./total_strain_xz]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_xz
index_i = 0
index_j = 2
execute_on = timestep_end
[../]
[./total_strain_yx]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_yx
index_i = 1
index_j = 0
execute_on = timestep_end
[../]
[./total_strain_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_yy
index_i = 1
index_j = 1
execute_on = timestep_end
[../]
[./total_strain_yz]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_yz
index_i = 1
index_j = 2
execute_on = timestep_end
[../]
[./total_strain_zx]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_zx
index_i = 2
index_j = 0
execute_on = timestep_end
[../]
[./total_strain_zy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_zy
index_i = 2
index_j = 1
execute_on = timestep_end
[../]
[./total_strain_zz]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_zz
index_i = 2
index_j = 2
execute_on = timestep_end
[../]
[./perm_xx]
type = PorousFlowPropertyAux
property = permeability
variable = perm_xx
row = 0
column = 0
execute_on = timestep_end
[../]
[./perm_yy]
type = PorousFlowPropertyAux
property = permeability
variable = perm_yy
row = 1
column = 1
execute_on = timestep_end
[../]
[./perm_zz]
type = PorousFlowPropertyAux
property = permeability
variable = perm_zz
row = 2
column = 2
execute_on = timestep_end
[../]
[./mc_shear]
type = MaterialStdVectorAux
index = 0
property = mc_plastic_internal_parameter
variable = mc_shear
execute_on = timestep_end
[../]
[./mc_tensile]
type = MaterialStdVectorAux
index = 1
property = mc_plastic_internal_parameter
variable = mc_tensile
execute_on = timestep_end
[../]
[./wp_shear]
type = MaterialStdVectorAux
index = 0
property = wp_plastic_internal_parameter
variable = wp_shear
execute_on = timestep_end
[../]
[./wp_tensile]
type = MaterialStdVectorAux
index = 1
property = wp_plastic_internal_parameter
variable = wp_tensile
execute_on = timestep_end
[../]
[./mc_shear_f]
type = MaterialStdVectorAux
index = 6
property = mc_plastic_yield_function
variable = mc_shear_f
execute_on = timestep_end
[../]
[./mc_tensile_f]
type = MaterialStdVectorAux
index = 0
property = mc_plastic_yield_function
variable = mc_tensile_f
execute_on = timestep_end
[../]
[./wp_shear_f]
type = MaterialStdVectorAux
index = 0
property = wp_plastic_yield_function
variable = wp_shear_f
execute_on = timestep_end
[../]
[./wp_tensile_f]
type = MaterialStdVectorAux
index = 1
property = wp_plastic_yield_function
variable = wp_tensile_f
execute_on = timestep_end
[../]
[]
[BCs]
[./no_x]
type = DirichletBC
variable = disp_x
boundary = 'xmin xmax'
value = 0.0
[../]
[./no_y]
type = DirichletBC
variable = disp_y
boundary = 'ymin ymax'
value = 0.0
[../]
[./no_z]
type = DirichletBC
variable = disp_z
boundary = zmin
value = 0.0
[../]
[./no_wc_x]
type = DirichletBC
variable = wc_x
boundary = 'ymin ymax'
value = 0.0
[../]
[./no_wc_y]
type = DirichletBC
variable = wc_y
boundary = 'xmin xmax'
value = 0.0
[../]
[./fix_porepressure]
type = FunctionDirichletBC
variable = porepressure
boundary = 'ymin ymax xmax'
function = ini_pp
[../]
[./roof_porepressure]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
pt_vals = '-1E3 1E3'
multipliers = '-1 1'
fluid_phase = 0
flux_function = roof_conductance
boundary = roof
[../]
[./roof]
type = StickyBC
variable = disp_z
min_value = -3.0
boundary = roof
[../]
[]
[Functions]
[./ini_pp]
type = ParsedFunction
vars = 'bulk p0 g rho0'
vals = '2E3 0.0 1E-5 1E3'
value = '-bulk*log(exp(-p0/bulk)+g*rho0*z/bulk)'
[../]
[./ini_xx]
type = ParsedFunction
vars = 'bulk p0 g rho0 biot'
vals = '2E3 0.0 1E-5 1E3 0.7'
value = '0.8*(2500*10E-6*z+biot*(-bulk*log(exp(-p0/bulk)+g*rho0*z/bulk)))'
[../]
[./ini_zz]
type = ParsedFunction
vars = 'bulk p0 g rho0 biot'
vals = '2E3 0.0 1E-5 1E3 0.7'
value = '2500*10E-6*z+biot*(-bulk*log(exp(-p0/bulk)+g*rho0*z/bulk))'
[../]
[./excav_sideways]
type = ParsedFunction
vars = 'end_t ymin ymax minval maxval slope'
vals = '0.5 0 1000.0 1E-9 1 10'
# excavation face at ymin+(ymax-ymin)*min(t/end_t,1)
# slope is the distance over which the modulus reduces from maxval to minval
value = 'if(y<ymin+(ymax-ymin)*min(t/end_t,1),minval,if(y<ymin+(ymax-ymin)*min(t/end_t,1)+slope,minval+(maxval-minval)*(y-(ymin+(ymax-ymin)*min(t/end_t,1)))/slope,maxval))'
[../]
[./density_sideways]
type = ParsedFunction
vars = 'end_t ymin ymax minval maxval'
vals = '0.5 0 1000.0 0 2500'
value = 'if(y<ymin+(ymax-ymin)*min(t/end_t,1),minval,maxval)'
[../]
[./roof_conductance]
type = ParsedFunction
vars = 'end_t ymin ymax maxval minval'
vals = '0.5 0 1000.0 1E7 0'
value = 'if(y<ymin+(ymax-ymin)*min(t/end_t,1),maxval,minval)'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1 # MPa^-1
[../]
[./mc_coh_strong_harden]
type = TensorMechanicsHardeningExponential
value_0 = 1.99 # MPa
value_residual = 2.01 # MPa
rate = 1.0
[../]
[./mc_fric]
type = TensorMechanicsHardeningConstant
value = 0.61 # 35deg
[../]
[./mc_dil]
type = TensorMechanicsHardeningConstant
value = 0.15 # 8deg
[../]
[./mc_tensile_str_strong_harden]
type = TensorMechanicsHardeningExponential
value_0 = 1.0 # MPa
value_residual = 1.0 # MPa
rate = 1.0
[../]
[./mc_compressive_str]
type = TensorMechanicsHardeningCubic
value_0 = 100 # Large!
value_residual = 100
internal_limit = 0.1
[../]
[./wp_coh_harden]
type = TensorMechanicsHardeningCubic
value_0 = 0.05
value_residual = 0.05
internal_limit = 10
[../]
[./wp_tan_fric]
type = TensorMechanicsHardeningConstant
value = 0.26 # 15deg
[../]
[./wp_tan_dil]
type = TensorMechanicsHardeningConstant
value = 0.18 # 10deg
[../]
[./wp_tensile_str_harden]
type = TensorMechanicsHardeningCubic
value_0 = 0.05
value_residual = 0.05
internal_limit = 10
[../]
[./wp_compressive_str_soften]
type = TensorMechanicsHardeningCubic
value_0 = 100
value_residual = 1
internal_limit = 1.0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E3
density0 = 1000
thermal_expansion = 0
viscosity = 3.5E-17
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity_for_aux]
type = PorousFlowPorosity
at_nodes = false
fluid = true
mechanical = true
ensure_positive = true
porosity_zero = 0.02
solid_bulk = 5.3333E3
[../]
[./porosity_bulk]
type = PorousFlowPorosity
fluid = true
mechanical = true
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30'
ensure_positive = true
porosity_zero = 0.02
solid_bulk = 5.3333E3
[../]
[./porosity_excav]
type = PorousFlowPorosityConst
block = 1
porosity = 1.0
[../]
[./permeability_bulk]
type = PorousFlowPermeabilityKozenyCarman
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30'
poroperm_function = kozeny_carman_phi0
k0 = 1E-15
phi0 = 0.02
n = 2
m = 2
[../]
[./permeability_excav]
type = PorousFlowPermeabilityConst
block = 1
permeability = '0 0 0 0 0 0 0 0 0'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 4
s_res = 0.4
sum_s_res = 0.4
phase = 0
[../]
[./elasticity_tensor_0]
type = ComputeLayeredCosseratElasticityTensor
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30'
young = 8E3 # MPa
poisson = 0.25
layer_thickness = 1.0
joint_normal_stiffness = 1E9 # huge
joint_shear_stiffness = 1E3 # MPa
[../]
[./elasticity_tensor_1]
type = ComputeLayeredCosseratElasticityTensor
block = 1
young = 8E3 # MPa
poisson = 0.25
layer_thickness = 1.0
joint_normal_stiffness = 1E9 # huge
joint_shear_stiffness = 1E3 # MPa
elasticity_tensor_prefactor = excav_sideways
[../]
[./strain]
type = ComputeCosseratIncrementalSmallStrain
eigenstrain_names = ini_stress
[../]
[./ini_stress]
type = ComputeEigenstrainFromInitialStress
eigenstrain_name = ini_stress
initial_stress = 'ini_xx 0 0 0 ini_xx 0 0 0 ini_zz'
[../]
[./stress_0]
type = ComputeMultipleInelasticCosseratStress
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30'
inelastic_models = 'mc wp'
cycle_models = true
relative_tolerance = 2.0
absolute_tolerance = 1E6
max_iterations = 1
tangent_operator = nonlinear
perform_finite_strain_rotations = false
[../]
[./stress_1]
type = ComputeMultipleInelasticCosseratStress
block = 1
inelastic_models = ''
relative_tolerance = 2.0
absolute_tolerance = 1E6
max_iterations = 1
tangent_operator = nonlinear
perform_finite_strain_rotations = false
[../]
[./mc]
type = CappedMohrCoulombCosseratStressUpdate
warn_about_precision_loss = false
host_youngs_modulus = 8E3
host_poissons_ratio = 0.25
base_name = mc
tensile_strength = mc_tensile_str_strong_harden
compressive_strength = mc_compressive_str
cohesion = mc_coh_strong_harden
friction_angle = mc_fric
dilation_angle = mc_dil
max_NR_iterations = 100000
smoothing_tol = 0.1 # MPa # Must be linked to cohesion
yield_function_tol = 1E-9 # MPa. this is essentially the lowest possible without lots of precision loss
perfect_guess = true
min_step_size = 1.0
[../]
[./wp]
type = CappedWeakPlaneCosseratStressUpdate
warn_about_precision_loss = false
base_name = wp
cohesion = wp_coh_harden
tan_friction_angle = wp_tan_fric
tan_dilation_angle = wp_tan_dil
tensile_strength = wp_tensile_str_harden
compressive_strength = wp_compressive_str_soften
max_NR_iterations = 10000
tip_smoother = 0.05
smoothing_tol = 0.05 # MPa # Note, this must be tied to cohesion, otherwise get no possible return at cone apex
yield_function_tol = 1E-11 # MPa. this is essentially the lowest possible without lots of precision loss
perfect_guess = true
min_step_size = 1.0E-3
[../]
[./undrained_density_0]
type = GenericConstantMaterial
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30'
prop_names = density
prop_values = 2500
[../]
[./undrained_density_1]
type = GenericFunctionMaterial
block = 1
prop_names = density
prop_values = density_sideways
[../]
[]
[Preconditioning]
[./SMP]
type = SMP
full = true
[]
[]
[Postprocessors]
[./min_roof_disp]
type = NodalExtremeValue
boundary = roof
value_type = min
variable = disp_z
[../]
[./min_roof_pp]
type = NodalExtremeValue
boundary = roof
value_type = min
variable = porepressure
[../]
[./min_surface_disp]
type = NodalExtremeValue
boundary = zmax
value_type = min
variable = disp_z
[../]
[./min_surface_pp]
type = NodalExtremeValue
boundary = zmax
value_type = min
variable = porepressure
[../]
[./max_perm_zz]
type = ElementExtremeValue
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30'
variable = perm_zz
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
petsc_options = '-snes_converged_reason'
# best overall
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
# best if you don't have mumps:
#petsc_options_iname = '-pc_type -pc_asm_overlap -sub_pc_type -ksp_type -ksp_gmres_restart'
#petsc_options_value = ' asm 2 lu gmres 200'
# very basic:
#petsc_options_iname = '-pc_type -ksp_type -ksp_gmres_restart'
#petsc_options_value = ' bjacobi gmres 200'
line_search = bt
nl_abs_tol = 1e-3
nl_rel_tol = 1e-5
l_max_its = 200
nl_max_its = 30
start_time = 0.0
dt = 0.0025
end_time = 0.5
[]
[Outputs]
interval = 1
print_linear_residuals = true
exodus = true
csv = true
console = true
[]
modules/porous_flow/test/tests/jacobian/fflux05.i
# 1phase with MD_Gaussian (var = log(mass-density) with Gaussian capillary) formulation
# constant viscosity, constant insitu permeability
# density with constant bulk, Corey relative perm, nonzero gravity
# fully saturated
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./md]
[../]
[]
[ICs]
[./md]
type = RandomIC
min = 0
max = 1 # unsaturated for md<log(density_P0=0.8)=-0.223
variable = md
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = md
gravity = '-1 -0.1 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'md'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseMD_Gaussian
mass_density = md
al = 1.1
density_P0 = 0.8
bulk_modulus = 1.5
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/aux_kernels/darcy_velocity_lower.i
# checking that the PorousFlowDarcyVelocityComponentLowerDimensional AuxKernel works as expected
# for the fully-saturated case (relative-permeability = 1)
# The fractured_block.e has size = 10x10x10, and a fracturing running through its
# centre, with normal = (0, -sin(20deg), cos(20deg))
# Porepressure is initialised to grad(P) = (0, 0, 1)
# Fluid_density = 2
# viscosity = 10
# relative_permeability = 1
# permeability = (5, 5, 5) (in the bulk)
# permeability = (10, 10, 10) (in the fracture)
# aperture = 1
# gravity = (1, 0.5, 0.2)
# So Darcy velocity in the bulk = (1, 0.5, -0.3)
# in the fracture grad(P) = (0, 0.3213938, 0.11697778)
# In the fracture the projected gravity vector is
# tangential_gravity = (1, 0.5057899, 0.18409245)
# So the Darcy velocity in the fracture = (2, 0.690186, 0.251207)
[Mesh]
type = FileMesh
file = fractured_block.e
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '1 0.5 0.2'
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pinit]
type = FunctionIC
function = z
variable = pp
[../]
[]
[Kernels]
[./dummy]
type = TimeDerivative
variable = pp
[../]
[]
[AuxVariables]
[./bulk_vel_x]
order = CONSTANT
family = MONOMIAL
[../]
[./bulk_vel_y]
order = CONSTANT
family = MONOMIAL
[../]
[./bulk_vel_z]
order = CONSTANT
family = MONOMIAL
[../]
[./fracture_vel_x]
order = CONSTANT
family = MONOMIAL
block = 3
[../]
[./fracture_vel_y]
order = CONSTANT
family = MONOMIAL
block = 3
[../]
[./fracture_vel_z]
order = CONSTANT
family = MONOMIAL
block = 3
[../]
[]
[AuxKernels]
[./bulk_vel_x]
type = PorousFlowDarcyVelocityComponent
variable = bulk_vel_x
component = x
fluid_phase = 0
[../]
[./bulk_vel_y]
type = PorousFlowDarcyVelocityComponent
variable = bulk_vel_y
component = y
fluid_phase = 0
[../]
[./bulk_vel_z]
type = PorousFlowDarcyVelocityComponent
variable = bulk_vel_z
component = z
fluid_phase = 0
[../]
[./fracture_vel_x]
type = PorousFlowDarcyVelocityComponentLowerDimensional
variable = fracture_vel_x
component = x
fluid_phase = 0
[../]
[./fracture_vel_y]
type = PorousFlowDarcyVelocityComponentLowerDimensional
variable = fracture_vel_y
component = y
fluid_phase = 0
[../]
[./fracture_vel_z]
type = PorousFlowDarcyVelocityComponentLowerDimensional
variable = fracture_vel_z
component = z
fluid_phase = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
pc = 0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1E16
viscosity = 10
density0 = 2
thermal_expansion = 0
[../]
[../]
[]
[Postprocessors]
[./bulk_vel_x]
type = PointValue
variable = bulk_vel_x
point = '0 0 0'
[../]
[./bulk_vel_y]
type = PointValue
variable = bulk_vel_y
point = '0 0 0'
[../]
[./bulk_vel_z]
type = PointValue
variable = bulk_vel_z
point = '0 0 0'
[../]
[./fracture_vel_x]
type = ElementAverageValue
block = 3
variable = fracture_vel_x
[../]
[./fracture_vel_y]
type = ElementAverageValue
block = 3
variable = fracture_vel_y
[../]
[./fracture_vel_z]
type = ElementAverageValue
block = 3
variable = fracture_vel_z
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '5 0 0 0 5 0 0 0 5'
block = '1 2'
[../]
[./permeability_fracture]
type = PorousFlowPermeabilityConst
permeability = '10 0 0 0 10 0 0 0 10'
block = 3
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[Executioner]
type = Transient
dt = 1
end_time = 1
[]
[Outputs]
csv = true
[]
modules/porous_flow/test/tests/energy_conservation/heat02.i
# checking that the heat-energy postprocessor correctly calculates the energy
# 1phase, constant porosity
[Mesh]
type = GeneratedMesh
dim = 1
nx = 3
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./temp]
[../]
[./pp]
[../]
[]
[ICs]
[./tinit]
type = FunctionIC
function = '100*x'
variable = temp
[../]
[./pinit]
type = FunctionIC
function = 'x'
variable = pp
[../]
[]
[Kernels]
[./dummyt]
type = TimeDerivative
variable = temp
[../]
[./dummyp]
type = TimeDerivative
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 1
viscosity = 0.001
thermal_expansion = 0
cv = 1.3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 2.2
density = 0.5
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Postprocessors]
[./total_heat]
type = PorousFlowHeatEnergy
phase = 0
[../]
[./rock_heat]
type = PorousFlowHeatEnergy
[../]
[./fluid_heat]
type = PorousFlowHeatEnergy
include_porous_skeleton = false
phase = 0
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1 1 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = heat02
csv = true
[]
modules/porous_flow/test/tests/jacobian/fflux07.i
# 2phase (PS), 2components (that exist in both phases), constant viscosity, constant insitu permeability
# density with constant bulk, Corey relative perm, nonzero gravity, vanGenuchten capillary pressure
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./sgas]
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
[../]
[./massfrac_ph1_sp0]
[../]
[]
[ICs]
[./ppwater]
type = RandomIC
variable = ppwater
min = 0
max = 1
[../]
[./ppgas]
type = RandomIC
variable = sgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 1
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 1
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = ppwater
gravity = '-1 -0.1 0'
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = sgas
gravity = '-1 -0.1 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater sgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
pc_max = 10
sat_lr = 0.1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = ppwater
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
s_res = 0.1
sum_s_res = 0.1
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
s_res = 0.0
sum_s_res = 0.1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-snes_type'
petsc_options_value = 'test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/aux_kernels/darcy_velocity_lower_2D.i
# checking that the PorousFlowDarcyVelocityComponentLowerDimensional AuxKernel works as expected in 1D+2D situation
# for the fully-saturated case (relative-permeability = 1)
# The 1_frac_in_2D_example.e has size 0.3x0.2x0, and a fracturing running through its
# centre, with normal = (0, 1, 0)
# Porepressure is initialised to grad(P) = (1, 2, 0)
# Fluid_density = 2
# viscosity = 10
# relative_permeability = 1
# permeability = (5, 5, 5) (in the bulk, measured in m^2)
# permeability = (10, 10, 10) (in the fracture, measured in m^3)
# aperture = 0.01
# gravity = (1, 0.5, 0)
# So Darcy velocity in the bulk = (0.5, -0.5, 0)
# in the fracture grad(P) = (1, 0, 0)
# In the fracture the projected gravity vector is
# tangential_gravity = (1, 0, 0)
# So the Darcy velocity in the fracture = (100, 0, 0)
[Mesh]
type = FileMesh
file = 1_frac_in_2D_example.e
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '1 0.5 0'
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pinit]
type = FunctionIC
function = 'x+2*y'
variable = pp
[../]
[]
[Kernels]
[./dummy]
type = TimeDerivative
variable = pp
[../]
[]
[AuxVariables]
[./bulk_vel_x]
order = CONSTANT
family = MONOMIAL
block = '2 3'
[../]
[./bulk_vel_y]
order = CONSTANT
family = MONOMIAL
block = '2 3'
[../]
[./bulk_vel_z]
order = CONSTANT
family = MONOMIAL
block = '2 3'
[../]
[./fracture_vel_x]
order = CONSTANT
family = MONOMIAL
block = 1
[../]
[./fracture_vel_y]
order = CONSTANT
family = MONOMIAL
block = 1
[../]
[./fracture_vel_z]
order = CONSTANT
family = MONOMIAL
block = 1
[../]
[]
[AuxKernels]
[./bulk_vel_x]
type = PorousFlowDarcyVelocityComponent
variable = bulk_vel_x
component = x
fluid_phase = 0
[../]
[./bulk_vel_y]
type = PorousFlowDarcyVelocityComponent
variable = bulk_vel_y
component = y
fluid_phase = 0
[../]
[./bulk_vel_z]
type = PorousFlowDarcyVelocityComponent
variable = bulk_vel_z
component = z
fluid_phase = 0
[../]
[./fracture_vel_x]
type = PorousFlowDarcyVelocityComponentLowerDimensional
variable = fracture_vel_x
component = x
fluid_phase = 0
aperture = 0.01
[../]
[./fracture_vel_y]
type = PorousFlowDarcyVelocityComponentLowerDimensional
variable = fracture_vel_y
component = y
fluid_phase = 0
aperture = 0.01
[../]
[./fracture_vel_z]
type = PorousFlowDarcyVelocityComponentLowerDimensional
variable = fracture_vel_z
component = z
fluid_phase = 0
aperture = 0.01
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
pc = 0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1E16
viscosity = 10
density0 = 2
thermal_expansion = 0
[../]
[../]
[]
[Postprocessors]
[./bulk_vel_x]
type = PointValue
variable = bulk_vel_x
point = '0 -0.05 0'
[../]
[./bulk_vel_y]
type = PointValue
variable = bulk_vel_y
point = '0 -0.05 0'
[../]
[./bulk_vel_z]
type = PointValue
variable = bulk_vel_z
point = '0 -0.05 0'
[../]
[./fracture_vel_x]
type = PointValue
point = '0 0 0'
variable = fracture_vel_x
[../]
[./fracture_vel_y]
type = PointValue
point = '0 0 0'
variable = fracture_vel_y
[../]
[./fracture_vel_z]
type = PointValue
point = '0 0 0'
variable = fracture_vel_z
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '5 0 0 0 5 0 0 0 5'
block = '2 3'
[../]
[./permeability_fracture]
type = PorousFlowPermeabilityConst
permeability = '10 0 0 0 10 0 0 0 10'
block = 1
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[Executioner]
type = Transient
dt = 1
end_time = 1
[]
[Outputs]
csv = true
[]
modules/porous_flow/test/tests/chemistry/2species_predis.i
# PorousFlow analogy of chemical_reactions/test/tests/solid_kinetics/2species_without_action.i
#
# Simple equilibrium reaction example to illustrate the use of PorousFlowAqueousPreDisChemistry
#
# In this example, two primary species a and b diffuse towards each other from
# opposite ends of a porous medium, reacting when they meet to form a mineral
# precipitate. The kinetic reaction is
#
# a + b = mineral
#
# where a and b are the primary species (reactants), and mineral is the precipitate.
# At the time of writing, the results of this test differ from chemical_reactions because
# in PorousFlow the mineral_concentration is measured in m^3 (precipitate) / m^3 (porous_material)
# in chemical_reactions the mineral_concentration is measured in m^3 (precipitate) / m^3 (fluid)
# ie, PorousFlow_mineral_concentration = porosity * chemical_reactions_mineral_concentration
[Mesh]
type = GeneratedMesh
dim = 2
xmax = 1
ymax = 1
nx = 40
[]
[Variables]
[./a]
order = FIRST
family = LAGRANGE
initial_condition = 0
[../]
[./b]
order = FIRST
family = LAGRANGE
initial_condition = 0
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 1E-6
[../]
[./pressure]
[../]
[./mineral]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./mineral]
type = PorousFlowPropertyAux
property = mineral_concentration
mineral_species = 0
variable = mineral
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Kernels]
[./mass_a]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = a
[../]
[./diff_a]
type = PorousFlowDispersiveFlux
variable = a
fluid_component = 0
disp_trans = 0
disp_long = 0
[../]
[./predis_a]
type = PorousFlowPreDis
variable = a
mineral_density = 1000
stoichiometry = 1
[../]
[./mass_b]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = b
[../]
[./diff_b]
type = PorousFlowDispersiveFlux
variable = b
fluid_component = 1
disp_trans = 0
disp_long = 0
[../]
[./predis_b]
type = PorousFlowPreDis
variable = b
mineral_density = 1000
stoichiometry = 1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9 # huge, so mimic chemical_reactions
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = 298.15
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'a b'
[../]
[./chem]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = 'a b'
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = '1 1'
reactions = '1 1'
specific_reactive_surface_area = '1.0'
kinetic_rate_constant = '1.0e-8'
activation_energy = '1.5e4'
molar_volume = 1
gas_constant = 8.314
reference_temperature = 298.15
[../]
[./mineral_conc]
type = PorousFlowAqueousPreDisMineral
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.4
[../]
[./permeability]
type = PorousFlowPermeabilityConst
# porous_flow permeability / porous_flow viscosity = chemical_reactions conductivity = 4E-3
permeability = '4E-6 0 0 0 4E-6 0 0 0 4E-6'
[../]
[./relp]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./diff]
type = PorousFlowDiffusivityConst
# porous_flow diffusion_coeff * tortuousity * porosity = chemical_reactions diffusivity = 5E-4
diffusion_coeff = '12.5E-4 12.5E-4 12.5E-4'
tortuosity = 1.0
[../]
[]
[BCs]
[./a_left]
type = DirichletBC
variable = a
boundary = left
value = 1.0e-2
[../]
[./a_right]
type = DirichletBC
variable = a
boundary = right
value = 0
[../]
[./b_left]
type = DirichletBC
variable = b
boundary = left
value = 0
[../]
[./b_right]
type = DirichletBC
variable = b
boundary = right
value = 1.0e-2
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 5
end_time = 50
[]
[Outputs]
print_linear_residuals = true
exodus = true
perf_graph = true
[]
modules/porous_flow/test/tests/chemistry/except15.i
# Exception test
# Incorrect number of secondary densities
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = PorousFlowPreDis
variable = a
mineral_density = '1 1'
stoichiometry = 2
[../]
[./b]
type = PorousFlowPreDis
variable = b
mineral_density = 1
stoichiometry = 3
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 1E-6
[../]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'a b'
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = 'a b'
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = '1 1'
reactions = '2 3'
specific_reactive_surface_area = 1.0
kinetic_rate_constant = 1.0e-8
activation_energy = 1.5e4
molar_volume = 1
[../]
[./mineral]
type = PorousFlowAqueousPreDisMineral
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/energy_conservation/heat04_action.i
# heat04, but using an action
#
# The sample is a single unit element, with fixed displacements on
# all sides. A heat source of strength S (J/m^3/s) is applied into
# the element. There is no fluid flow or heat flow. The rise
# in temperature, porepressure and stress, and the change in porosity is
# matched with theory.
#
# In this case, fluid mass must be conserved, and there is no
# volumetric strain, so
# porosity * fluid_density = constant
# Also, the energy-density in the rock-fluid system increases with S:
# d/dt [(1 - porosity) * rock_density * rock_heat_cap * T + porosity * fluid_density * fluid_heat_cap * T] = S
# Also, the porosity evolves according to THM as
# porosity = biot + (porosity0 - biot) * exp( (biot - 1) * P / fluid_bulk + rock_thermal_exp * T)
# Finally, the effective stress must be exactly zero (as there is
# no strain).
#
# Let us assume that
# fluid_density = dens0 * exp(P / fluid_bulk - fluid_thermal_exp * T)
# Then the conservation of fluid mass means
# porosity = por0 * exp(- P / fluid_bulk + fluid_thermal_exp * T)
# where dens0 * por0 = the initial fluid mass.
# The last expression for porosity, combined with the THM one,
# and assuming that biot = 1 for simplicity, gives
# porosity = 1 + (porosity0 - 1) * exp(rock_thermal_exp * T) = por0 * exp(- P / fluid_bulk + fluid_thermal_exp * T) .... (A)
#
# This stuff may be substituted into the heat energy-density equation:
# S = d/dt [(1 - porosity0) * exp(rock_thermal_exp * T) * rock_density * rock_heat_cap * T + porosity * fluid_density * fluid_heat_cap * T]
#
# If S is constant then
# S * t = (1 - porosity0) * exp(rock_thermal_exp * T) * rock_density * rock_heat_cap * T + porosity * fluid_density * fluid_heat_cap * T
# with T(t=0) = 0 then Eqn(A) implies that por0 = porosity0 and
# P / fluid_bulk = fluid_thermal_exp * T - log(1 + (por0 - 1) * exp(rock_thermal_exp * T)) + log(por0)
#
# Parameters:
# A = 2
# fluid_bulk = 2.0
# dens0 = 3.0
# fluid_thermal_exp = 0.5
# fluid_heat_cap = 2
# por0 = 0.5
# rock_thermal_exp = 0.25
# rock_density = 5
# rock_heat_capacity = 0.2
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.5
cv = 2
cp = 2
bulk_modulus = 2.0
density0 = 3.0
[../]
[../]
[]
[PorousFlowUnsaturated]
coupling_type = ThermoHydroMechanical
displacements = 'disp_x disp_y disp_z'
porepressure = pp
temperature = temp
dictator_name = Sir
biot_coefficient = 1.0
gravity = '0 0 0'
fp = the_simple_fluid
van_genuchten_alpha = 1.0E-12
van_genuchten_m = 0.5
relative_permeability_type = Corey
relative_permeability_exponent = 0.0
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = Sir
block = 0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./pp]
[../]
[./temp]
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./confinez]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back front'
[../]
[]
[Kernels]
[./heat_source]
type = BodyForce
function = 1
variable = temp
[../]
[]
[Functions]
[./err_T_fcn]
type = ParsedFunction
vars = 'por0 rte temp rd rhc m0 fhc source'
vals = '0.5 0.25 t0 5 0.2 1.5 2 1'
value = '((1-por0)*exp(rte*temp)*rd*rhc*temp+m0*fhc*temp-source*t)/(source*t)'
[../]
[./err_pp_fcn]
type = ParsedFunction
vars = 'por0 rte temp rd rhc m0 fhc source bulk pp fte'
vals = '0.5 0.25 t0 5 0.2 1.5 2 1 2 p0 0.5'
value = '(bulk*(fte*temp-log(1+(por0-1)*exp(rte*temp))+log(por0))-pp)/pp'
[../]
[]
[AuxVariables]
[./porosity]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '1 1.5'
# bulk modulus is lambda + 2*mu/3 = 1 + 2*1.5/3 = 2
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./porosity]
type = PorousFlowPorosity
thermal = true
fluid = true
mechanical = true
ensure_positive = false
biot_coefficient = 1.0
porosity_zero = 0.5
thermal_expansion_coeff = 0.25
solid_bulk = 2
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 0.2
density = 5.0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '0 0 0 0 0 0 0 0 0'
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '0 0 0 0 0 0 0 0 0'
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = 'console csv'
execute_on = 'timestep_end'
point = '0 0 0'
variable = pp
[../]
[./t0]
type = PointValue
outputs = 'console csv'
execute_on = 'timestep_end'
point = '0 0 0'
variable = temp
[../]
[./porosity]
type = PointValue
outputs = 'console csv'
execute_on = 'timestep_end'
point = '0 0 0'
variable = porosity
[../]
[./stress_xx]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_xx
[../]
[./stress_yy]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_yy
[../]
[./stress_zz]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_zz
[../]
[./fluid_mass]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'timestep_end'
use_displaced_mesh = true
outputs = 'console csv'
[../]
[./total_heat]
type = PorousFlowHeatEnergy
phase = 0
execute_on = 'timestep_end'
use_displaced_mesh = true
outputs = 'console csv'
[../]
[./err_T]
type = FunctionValuePostprocessor
function = err_T_fcn
[../]
[./err_P]
type = FunctionValuePostprocessor
function = err_pp_fcn
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-12 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 5
[]
[Outputs]
execute_on = 'initial timestep_end'
file_base = heat04_action
csv = true
[]
modules/porous_flow/test/tests/dirackernels/bh04.i
# fully-saturated
# production
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Functions]
[./dts]
type = PiecewiseLinear
y = '1E-2 1E-1 1 1E1 1E2 1E3'
x = '0 1E-1 1 1E1 1E2 1E3'
[../]
[]
[Variables]
[./pp]
initial_condition = 0
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.8
alpha = 1e-5
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityFLAC
m = 2
phase = 0
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
variable = pp
SumQuantityUO = borehole_total_outflow_mass
point_file = bh02.bh
fluid_phase = 0
bottom_p_or_t = -1E6
unit_weight = '0 0 0'
use_mobility = true
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 1E3
solve_type = NEWTON
[./TimeStepper]
type = FunctionDT
function = dts
[../]
[]
[Outputs]
file_base = bh04
exodus = false
csv = true
execute_on = timestep_end
[]
modules/porous_flow/test/tests/jacobian/fflux11.i
# 1phase, 3components, constant viscosity, constant insitu permeability
# density with constant bulk, VG relative perm with a cubic, nonzero gravity, unsaturated with VG
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./massfrac0]
[../]
[./massfrac1]
[../]
[]
[ICs]
[./pp]
type = RandomIC
variable = pp
min = -1.0
max = 0.0
[../]
[./massfrac0]
type = RandomIC
variable = massfrac0
min = 0
max = 0.3
[../]
[./massfrac1]
type = RandomIC
variable = massfrac1
min = 0
max = 0.4
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
gravity = '-1 -0.1 0'
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = massfrac0
gravity = '-1 -0.1 0'
[../]
[./flux2]
type = PorousFlowAdvectiveFlux
fluid_component = 2
variable = massfrac1
gravity = '-1 -0.1 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0 massfrac1'
number_fluid_phases = 1
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.6
alpha = 1 # small so that most effective saturations are close to 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac0 massfrac1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityVG
m = 0.6
seff_turnover = 0.8
phase = 0
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/dirackernels/theis_rz.i
# Theis problem: Flow to single sink using BasicTHM
# SinglePhase
# RZ mesh
[Mesh]
type = GeneratedMesh
dim = 1
nx = 20
xmax = 100
bias_x = 1.05
[]
[Problem]
coord_type = RZ
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 20E6
[../]
[]
[PorousFlowBasicTHM]
dictator_name = dictator
add_darcy_aux = false
fp = simple_fluid
gravity = '0 0 0'
multiply_by_density = false
porepressure = pp
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
viscosity = 0.001
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.05
[../]
[./biot_mod]
type = PorousFlowConstantBiotModulus
fluid_bulk_modulus = 2E9
biot_coefficient = 1.0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[../]
[]
[DiracKernels]
[./sink]
type = PorousFlowSquarePulsePointSource
point = '0 0 0'
mass_flux = -0.16E-3 # recall this is a volumetric flux because multiply_by_density = false in the Action, so this corresponds to a mass_flux of 0.16 kg/s/m because density=1000
variable = pp
[../]
[]
[VectorPostprocessors]
[./pp]
type = LineValueSampler
num_points = 25
start_point = '0 0 0'
end_point = '100 0 0'
sort_by = x
variable = pp
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 200
end_time = 1E3
nl_abs_tol = 1e-10
[]
[Outputs]
perf_graph = true
[./csv]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/energy_conservation/heat04.i
# The sample is a single unit element, with fixed displacements on
# all sides. A heat source of strength S (J/m^3/s) is applied into
# the element. There is no fluid flow or heat flow. The rise
# in temperature, porepressure and stress, and the change in porosity is
# matched with theory.
#
# In this case, fluid mass must be conserved, and there is no
# volumetric strain, so
# porosity * fluid_density = constant
# Also, the energy-density in the rock-fluid system increases with S:
# d/dt [(1 - porosity) * rock_density * rock_heat_cap * T + porosity * fluid_density * fluid_heat_cap * T] = S
# Also, the porosity evolves according to THM as
# porosity = biot + (porosity0 - biot) * exp( (biot - 1) * P / fluid_bulk + rock_thermal_exp * T)
# Finally, the effective stress must be exactly zero (as there is
# no strain).
#
# Let us assume that
# fluid_density = dens0 * exp(P / fluid_bulk - fluid_thermal_exp * T)
# Then the conservation of fluid mass means
# porosity = por0 * exp(- P / fluid_bulk + fluid_thermal_exp * T)
# where dens0 * por0 = the initial fluid mass.
# The last expression for porosity, combined with the THM one,
# and assuming that biot = 1 for simplicity, gives
# porosity = 1 + (porosity0 - 1) * exp(rock_thermal_exp * T) = por0 * exp(- P / fluid_bulk + fluid_thermal_exp * T) .... (A)
#
# This stuff may be substituted into the heat energy-density equation:
# S = d/dt [(1 - porosity0) * exp(rock_thermal_exp * T) * rock_density * rock_heat_cap * T + porosity * fluid_density * fluid_heat_cap * T]
#
# If S is constant then
# S * t = (1 - porosity0) * exp(rock_thermal_exp * T) * rock_density * rock_heat_cap * T + porosity * fluid_density * fluid_heat_cap * T
# with T(t=0) = 0 then Eqn(A) implies that por0 = porosity0 and
# P / fluid_bulk = fluid_thermal_exp * T - log(1 + (por0 - 1) * exp(rock_thermal_exp * T)) + log(por0)
#
# Parameters:
# A = 2
# fluid_bulk = 2.0
# dens0 = 3.0
# fluid_thermal_exp = 0.5
# fluid_heat_cap = 2
# por0 = 0.5
# rock_thermal_exp = 0.25
# rock_density = 5
# rock_heat_capacity = 0.2
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.5
cv = 2
cp = 2
bulk_modulus = 2.0
density0 = 3.0
[../]
[../]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./pp]
[../]
[./temp]
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./confinez]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back front'
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 1.0
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 1.0
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 1.0
component = 2
variable = disp_z
[../]
[./poro_vol_exp]
type = PorousFlowMassVolumetricExpansion
variable = pp
fluid_component = 0
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./temp]
type = PorousFlowEnergyTimeDerivative
variable = temp
[../]
[./poro_vol_exp_temp]
type = PorousFlowHeatVolumetricExpansion
variable = temp
[../]
[./heat_source]
type = BodyForce
function = 1
variable = temp
[../]
[]
[Functions]
[./err_T_fcn]
type = ParsedFunction
vars = 'por0 rte temp rd rhc m0 fhc source'
vals = '0.5 0.25 t0 5 0.2 1.5 2 1'
value = '((1-por0)*exp(rte*temp)*rd*rhc*temp+m0*fhc*temp-source*t)/(source*t)'
[../]
[./err_pp_fcn]
type = ParsedFunction
vars = 'por0 rte temp rd rhc m0 fhc source bulk pp fte'
vals = '0.5 0.25 t0 5 0.2 1.5 2 1 2 p0 0.5'
value = '(bulk*(fte*temp-log(1+(por0-1)*exp(rte*temp))+log(por0))-pp)/pp'
[../]
[]
[AuxVariables]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./porosity]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
[../]
[./stress_xz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xz
index_i = 0
index_j = 2
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[../]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp pp disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '1 1.5'
# bulk modulus is lambda + 2*mu/3 = 1 + 2*1.5/3 = 2
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./porosity]
type = PorousFlowPorosity
thermal = true
fluid = true
mechanical = true
ensure_positive = false
biot_coefficient = 1.0
porosity_zero = 0.5
thermal_expansion_coeff = 0.25
solid_bulk = 2
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 0.2
density = 5.0
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
temperature_unit = Kelvin
fp = the_simple_fluid
phase = 0
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = 'console csv'
execute_on = 'timestep_end'
point = '0 0 0'
variable = pp
[../]
[./t0]
type = PointValue
outputs = 'console csv'
execute_on = 'timestep_end'
point = '0 0 0'
variable = temp
[../]
[./porosity]
type = PointValue
outputs = 'console csv'
execute_on = 'timestep_end'
point = '0 0 0'
variable = porosity
[../]
[./stress_xx]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_xx
[../]
[./stress_yy]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_yy
[../]
[./stress_zz]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_zz
[../]
[./fluid_mass]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'timestep_end'
use_displaced_mesh = true
outputs = 'console csv'
[../]
[./total_heat]
type = PorousFlowHeatEnergy
phase = 0
execute_on = 'timestep_end'
use_displaced_mesh = true
outputs = 'console csv'
[../]
[./err_T]
type = FunctionValuePostprocessor
function = err_T_fcn
[../]
[./err_P]
type = FunctionValuePostprocessor
function = err_pp_fcn
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-12 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 5
[]
[Outputs]
execute_on = 'initial timestep_end'
file_base = heat04
exodus = true
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/poro_elasticity/terzaghi_fully_saturated_volume.i
# Terzaghi's problem of consolodation of a drained medium
# The FullySaturated Kernels are used, with multiply_by_density = false
# so that this becomes a linear problem with constant Biot Modulus
# Also, since the FullySaturated Kernels are used, we have to
# use consistent_with_displaced_mesh = false in the calculation of volumetric strain
#
# A saturated soil sample sits in a bath of water.
# It is constrained on its sides, and bottom.
# Its sides and bottom are also impermeable.
# Initially it is unstressed.
# A normal stress, q, is applied to the soil's top.
# The soil then slowly compresses as water is squeezed
# out from the sample from its top (the top BC for
# the porepressure is porepressure = 0).
#
# See, for example. Section 2.2 of the online manuscript
# Arnold Verruijt "Theory and Problems of Poroelasticity" Delft University of Technology 2013
# but note that the "sigma" in that paper is the negative
# of the stress in TensorMechanics
#
# Here are the problem's parameters, and their values:
# Soil height. h = 10
# Soil's Lame lambda. la = 2
# Soil's Lame mu, which is also the Soil's shear modulus. mu = 3
# Soil bulk modulus. K = la + 2*mu/3 = 4
# Soil confined compressibility. m = 1/(K + 4mu/3) = 0.125
# Soil bulk compliance. 1/K = 0.25
# Fluid bulk modulus. Kf = 8
# Fluid bulk compliance. 1/Kf = 0.125
# Fluid mobility (soil permeability/fluid viscosity). k = 1.5
# Soil initial porosity. phi0 = 0.1
# Biot coefficient. alpha = 0.6
# Soil initial storativity, which is the reciprocal of the initial Biot modulus. S = phi0/Kf + (alpha - phi0)(1 - alpha)/K = 0.0625
# Consolidation coefficient. c = k/(S + alpha^2 m) = 13.95348837
# Normal stress on top. q = 1
# Initial porepressure, resulting from instantaneous application of q, assuming corresponding instantaneous increase of porepressure (Note that this is calculated by MOOSE: we only need it for the analytical solution). p0 = alpha*m*q/(S + alpha^2 m) = 0.69767442
# Initial vertical displacement (down is positive), resulting from instantaneous application of q (Note this is calculated by MOOSE: we only need it for the analytical solution). uz0 = q*m*h*S/(S + alpha^2 m)
# Final vertical displacement (down in positive) (Note this is calculated by MOOSE: we only need it for the analytical solution). uzinf = q*m*h
#
# The solution for porepressure is
# P = 4*p0/\pi \sum_{k=1}^{\infty} \frac{(-1)^{k-1}}{2k-1} \cos ((2k-1)\pi z/(2h)) \exp(-(2k-1)^2 \pi^2 ct/(4 h^2))
# This series converges very slowly for ct/h^2 small, so in that domain
# P = p0 erf( (1-(z/h))/(2 \sqrt(ct/h^2)) )
#
# The degree of consolidation is defined as
# U = (uz - uz0)/(uzinf - uz0)
# where uz0 and uzinf are defined above, and
# uz = the vertical displacement of the top (down is positive)
# U = 1 - (8/\pi^2)\sum_{k=1}^{\infty} \frac{1}{(2k-1)^2} \exp(-(2k-1)^2 \pi^2 ct/(4 h^2))
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 10
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = 0
zmax = 10
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./basefixed]
type = DirichletBC
variable = disp_z
value = 0
boundary = back
[../]
[./topdrained]
type = DirichletBC
variable = porepressure
value = 0
boundary = front
[../]
[./topload]
type = NeumannBC
variable = disp_z
value = -1
boundary = front
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
component = 2
variable = disp_z
[../]
[./mass0]
type = PorousFlowFullySaturatedMassTimeDerivative
coupling_type = HydroMechanical
biot_coefficient = 0.6
multiply_by_density = false
variable = porepressure
[../]
[./flux]
type = PorousFlowFullySaturatedDarcyBase
multiply_by_density = false
variable = porepressure
gravity = '0 0 0'
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 8
density0 = 1
thermal_expansion = 0
viscosity = 0.96
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '2 3'
# bulk modulus is lambda + 2*mu/3 = 2 + 2*3/3 = 4
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./eff_fluid_pressure_qp]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
consistent_with_displaced_mesh = false
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = porepressure
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid_qp]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst # only the initial value of this is used
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.6
fluid_bulk_modulus = 8
solid_bulk_compliance = 0.25
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.5 0 0 0 1.5 0 0 0 1.5'
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = csv
point = '0 0 0'
variable = porepressure
use_displaced_mesh = false
[../]
[./p1]
type = PointValue
outputs = csv
point = '0 0 1'
variable = porepressure
use_displaced_mesh = false
[../]
[./p2]
type = PointValue
outputs = csv
point = '0 0 2'
variable = porepressure
use_displaced_mesh = false
[../]
[./p3]
type = PointValue
outputs = csv
point = '0 0 3'
variable = porepressure
use_displaced_mesh = false
[../]
[./p4]
type = PointValue
outputs = csv
point = '0 0 4'
variable = porepressure
use_displaced_mesh = false
[../]
[./p5]
type = PointValue
outputs = csv
point = '0 0 5'
variable = porepressure
use_displaced_mesh = false
[../]
[./p6]
type = PointValue
outputs = csv
point = '0 0 6'
variable = porepressure
use_displaced_mesh = false
[../]
[./p7]
type = PointValue
outputs = csv
point = '0 0 7'
variable = porepressure
use_displaced_mesh = false
[../]
[./p8]
type = PointValue
outputs = csv
point = '0 0 8'
variable = porepressure
use_displaced_mesh = false
[../]
[./p9]
type = PointValue
outputs = csv
point = '0 0 9'
variable = porepressure
use_displaced_mesh = false
[../]
[./p99]
type = PointValue
outputs = csv
point = '0 0 10'
variable = porepressure
use_displaced_mesh = false
[../]
[./zdisp]
type = PointValue
outputs = csv
point = '0 0 10'
variable = disp_z
use_displaced_mesh = false
[../]
[./dt]
type = FunctionValuePostprocessor
outputs = console
function = if(0.5*t<0.1,0.5*t,0.1)
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 10
[./TimeStepper]
type = PostprocessorDT
postprocessor = dt
dt = 0.0001
[../]
[]
[Outputs]
execute_on = 'timestep_end'
file_base = terzaghi_fully_saturated_volume
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/radioactive_decay/radioactive_decay01.i
# checking radioactive decay
# 1phase, 1component, constant porosity
#
# Note that we don't get mass = mass0 * exp(-Lambda * t)
# because of the time discretisation. We are solving
# the equation
# (mass - mass0)/dt = -Lambda * mass
# which has the solution
# mass = mass0/(1 + Lambda * dt)
[Mesh]
type = GeneratedMesh
dim = 1
nx = 3
xmin = -1
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pinit]
type = FunctionIC
function = 10
variable = pp
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./decay]
type = PorousFlowMassRadioactiveDecay
fluid_component = 0
variable = pp
decay_rate = 2.0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Postprocessors]
[./total_mass]
type = PorousFlowFluidMass
execute_on = 'timestep_end'
[../]
[./total_mass0]
type = PorousFlowFluidMass
execute_on = 'timestep_begin'
[../]
[./should_be_zero]
type = FunctionValuePostprocessor
function = should_be_0
[../]
[]
[Functions]
[./should_be_0]
type = ParsedFunction
vars = 'm0 m rate dt'
vals = 'total_mass0 total_mass 2.0 1'
value = 'm-m0/(1.0+rate*dt)'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
num_steps = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = radioactive_decay01
csv = true
[]
modules/porous_flow/examples/flow_through_fractured_media/coarse_3D.i
# Flow and solute transport along 2 2D eliptical fractures embedded in a 3D porous matrix
# the model domain has dimensions 1 x 1 x 0.3m and the two fracture have r1 = 0.45 and r2 = 0.2
# The fractures intersect each other and the domain boundaries on two opposite sides
# fracture aperture = 6e-4m
# fracture porosity = 6e-4m
# fracture permeability = 1.8e-11 which is based in k=3e-8 from a**2/12, and k*a = 3e-8*6e-4;
# matrix porosity = 0.1;
# matrix permeanility = 1e-20;
[Mesh]
type = FileMesh
file = coarse_3D.e
block_id = '1 2 3'
block_name = 'matrix f1 f2'
boundary_id = '1 2 3 4'
boundary_name = 'rf2 lf1 right_matrix left_matrix'
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./pp]
[../]
[./tracer]
[../]
[]
[AuxVariables]
[./velocity_x]
family = MONOMIAL
order = CONSTANT
block = 'f1 f2'
[../]
[./velocity_y]
family = MONOMIAL
order = CONSTANT
block = 'f1 f2'
[../]
[./velocity_z]
family = MONOMIAL
order = CONSTANT
block = 'f1 f2'
[../]
[]
[AuxKernels]
[./velocity_x]
type = PorousFlowDarcyVelocityComponentLowerDimensional
variable = velocity_x
component = x
aperture = 6E-4
[../]
[./velocity_y]
type = PorousFlowDarcyVelocityComponentLowerDimensional
variable = velocity_y
component = y
aperture = 6E-4
[../]
[./velocity_z]
type = PorousFlowDarcyVelocityComponentLowerDimensional
variable = velocity_z
component = z
aperture = 6E-4
[../]
[]
[ICs]
[./pp]
type = ConstantIC
variable = pp
value = 1e6
[../]
[./tracer]
type = ConstantIC
variable = tracer
value = 0
[../]
[]
[BCs]
[./top]
type = DirichletBC
value = 0
variable = tracer
boundary = rf2
[../]
[./bottom]
type = DirichletBC
value = 1
variable = tracer
boundary = lf1
[../]
[./ptop]
type = DirichletBC
variable = pp
boundary = rf2
value = 1e6
[../]
[./pbottom]
type = DirichletBC
variable = pp
boundary = lf1
value = 1.02e6
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./adv0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
[../]
[./diff0]
type = PorousFlowDispersiveFlux
fluid_component = 0
variable = pp
disp_trans = 0
disp_long = 0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = tracer
[../]
[./adv1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = tracer
[../]
[./diff1]
type = PorousFlowDispersiveFlux
fluid_component = 1
variable = tracer
disp_trans = 0
disp_long = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp tracer'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'tracer'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./poro1]
type = PorousFlowPorosityConst
porosity = 6e-4 # = a * phif
block = 'f1 f2'
[../]
[./diff1]
type = PorousFlowDiffusivityConst
diffusion_coeff = '1.e-9 1.e-9'
tortuosity = 1.0
block = 'f1 f2'
[../]
[./poro2]
type = PorousFlowPorosityConst
porosity = 0.1
block = 'matrix'
[../]
[./diff2]
type = PorousFlowDiffusivityConst
diffusion_coeff = '1.e-9 1.e-9'
tortuosity = 0.1
block = 'matrix'
[../]
[./relp]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./permeability1]
type = PorousFlowPermeabilityConst
permeability = '1.8e-11 0 0 0 1.8e-11 0 0 0 1.8e-11' # 1.8e-11 = a * kf
block = 'f1 f2'
[../]
[./permeability2]
type = PorousFlowPermeabilityConst
permeability = '1e-20 0 0 0 1e-20 0 0 0 1e-20'
block = 'matrix'
[../]
[]
[Preconditioning]
active = basic
[./mumps_is_best_for_parallel_jobs]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[./basic]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu NONZERO 2 '
[../]
[]
[Executioner]
type = Transient
solve_type = NEWTON
end_time = 20
dt = 1
[]
[VectorPostprocessors]
[./xmass]
type = LineValueSampler
start_point = '-0.5 0 0'
end_point = '0.5 0 0'
sort_by = x
num_points = 41
variable = tracer
outputs = csv
[../]
[]
[Outputs]
[./csv]
type = CSV
execute_on = 'final'
[../]
[]
modules/porous_flow/test/tests/gravity/grav02d.i
# Checking that gravity head is established in the transient situation when 0<=saturation<=1 (note the less-than-or-equal-to).
# 2phase (PP), 2components, vanGenuchten, constant fluid bulk-moduli for each phase, constant viscosity, constant permeability, Corey relative perm.
# A boundary condition enforces porepressures at the right boundary
# For better agreement with the analytical solution (ana_pp), just increase nx
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = -1
xmax = 0
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Functions]
[./dts]
type = PiecewiseLinear
x = '1E-3 1E-2 1E-1 2E-1'
y = '1E-3 1E-2 0.2E-1 1E-1'
[../]
[]
[Variables]
[./ppwater]
initial_condition = 0
[../]
[./ppgas]
initial_condition = 0.5
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[]
[BCs]
[./ppwater]
type = DirichletBC
boundary = right
variable = ppwater
value = 0
[../]
[./ppgas]
type = DirichletBC
boundary = right
variable = ppgas
value = 0.5
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = ppwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = ppwater
gravity = '-1 0 0'
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = ppgas
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = ppgas
gravity = '-1 0 0'
[../]
[]
[Functions]
[./ana_ppwater]
type = ParsedFunction
vars = 'g B p0 rho0'
vals = '1 2 pp_water_top 1'
value = '-B*log(exp(-p0/B)+g*rho0*x/B)' # expected pp at base
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.2
density0 = 1
viscosity = 1
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 0.1
viscosity = 0.5
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 0
[../]
[./relperm_gas]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 1
[../]
[]
[Postprocessors]
[./pp_water_top]
type = PointValue
variable = ppwater
point = '0 0 0'
[../]
[./pp_water_base]
type = PointValue
variable = ppwater
point = '-1 0 0'
[../]
[./pp_water_analytical]
type = FunctionValuePostprocessor
function = ana_ppwater
point = '-1 0 0'
[../]
[./ppwater_00]
type = PointValue
variable = ppwater
point = '0 0 0'
[../]
[./ppwater_01]
type = PointValue
variable = ppwater
point = '-0.1 0 0'
[../]
[./ppwater_02]
type = PointValue
variable = ppwater
point = '-0.2 0 0'
[../]
[./ppwater_03]
type = PointValue
variable = ppwater
point = '-0.3 0 0'
[../]
[./ppwater_04]
type = PointValue
variable = ppwater
point = '-0.4 0 0'
[../]
[./ppwater_05]
type = PointValue
variable = ppwater
point = '-0.5 0 0'
[../]
[./ppwater_06]
type = PointValue
variable = ppwater
point = '-0.6 0 0'
[../]
[./ppwater_07]
type = PointValue
variable = ppwater
point = '-0.7 0 0'
[../]
[./ppwater_08]
type = PointValue
variable = ppwater
point = '-0.8 0 0'
[../]
[./ppwater_09]
type = PointValue
variable = ppwater
point = '-0.9 0 0'
[../]
[./ppwater_10]
type = PointValue
variable = ppwater
point = '-1 0 0'
[../]
[./ppgas_00]
type = PointValue
variable = ppgas
point = '0 0 0'
[../]
[./ppgas_01]
type = PointValue
variable = ppgas
point = '-0.1 0 0'
[../]
[./ppgas_02]
type = PointValue
variable = ppgas
point = '-0.2 0 0'
[../]
[./ppgas_03]
type = PointValue
variable = ppgas
point = '-0.3 0 0'
[../]
[./ppgas_04]
type = PointValue
variable = ppgas
point = '-0.4 0 0'
[../]
[./ppgas_05]
type = PointValue
variable = ppgas
point = '-0.5 0 0'
[../]
[./ppgas_06]
type = PointValue
variable = ppgas
point = '-0.6 0 0'
[../]
[./ppgas_07]
type = PointValue
variable = ppgas
point = '-0.7 0 0'
[../]
[./ppgas_08]
type = PointValue
variable = ppgas
point = '-0.8 0 0'
[../]
[./ppgas_09]
type = PointValue
variable = ppgas
point = '-0.9 0 0'
[../]
[./ppgas_10]
type = PointValue
variable = ppgas
point = '-1 0 0'
[../]
[]
[Preconditioning]
active = andy
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-12 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-12 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
[./TimeStepper]
type = FunctionDT
function = dts
[../]
end_time = 1.0
[]
[Outputs]
[./csv]
type = CSV
execute_on = 'initial final'
file_base = grav02d
[../]
[]
modules/porous_flow/test/tests/fluids/simple_fluid_yr.i
# Test the properties calculated by the simple fluid Material
# Time unit is chosen to be years
# Pressure 10 MPa
# Temperature = 300 K (temperature unit = K)
# Density should equal 1500*exp(1E7/1E9-2E-4*300)=1426.844 kg/m^3
# Viscosity should equal 3.49E-11 Pa.yr
# Energy density should equal 4000 * 300 = 1.2E6 J/kg
# Specific enthalpy should equal 4000 * 300 + 10e6 / 1426.844 = 1.207008E6 J/kg
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 2.0E-4
cv = 4000.0
cp = 5000.0
bulk_modulus = 1.0E9
thermal_conductivity = 1.0
viscosity = 1.1E-3
density0 = 1500.0
[../]
[../]
[]
[Mesh]
type = GeneratedMesh
dim = 1
nx = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp T'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Variables]
[./pp]
initial_condition = 10E6
[../]
[./T]
initial_condition = 300.0
[../]
[]
[Kernels]
[./dummy_p]
type = Diffusion
variable = pp
[../]
[./dummy_T]
type = Diffusion
variable = T
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = T
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
temperature_unit = Kelvin
time_unit = years
fp = the_simple_fluid
phase = 0
[../]
[]
[Postprocessors]
[./pressure]
type = ElementIntegralVariablePostprocessor
variable = pp
[../]
[./temperature]
type = ElementIntegralVariablePostprocessor
variable = T
[../]
[./density]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_density_qp0'
[../]
[./viscosity]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_viscosity_qp0'
[../]
[./internal_energy]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_internal_energy_qp0'
[../]
[./enthalpy]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_enthalpy_qp0'
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
execute_on = 'timestep_end'
csv = true
[]
modules/porous_flow/test/tests/chemistry/except10.i
# Exception test.
# Incorrect number of activation energies
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = Diffusion
variable = a
[../]
[./b]
type = Diffusion
variable = b
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 1E-6
[../]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'a b'
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = 'a b'
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = '1 1'
reactions = '1 1'
specific_reactive_surface_area = 1.0
kinetic_rate_constant = 1.0e-8
activation_energy = '1.5e4 1'
molar_volume = 1
[../]
[./mineral]
type = PorousFlowAqueousPreDisMineral
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/energy_conservation/heat05.i
# Demonstrates that porosity is correctly initialised,
# since the residual should be zero in this example.
# If initQpStatefulProperties of the Porosity calculator
# is incorrect then the residual will be nonzero.
[Mesh]
type = GeneratedMesh
dim = 3
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.5
cv = 2
cp = 2
bulk_modulus = 2.0
density0 = 3.0
[../]
[../]
[]
[GlobalParams]
biot_coefficient = 0.7
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./pp]
initial_condition = 0.5
[../]
[./temp]
initial_condition = 1.0
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./confinez]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back front'
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
component = 2
variable = disp_z
[../]
[./poro_vol_exp]
type = PorousFlowMassVolumetricExpansion
variable = pp
fluid_component = 0
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./temp]
type = PorousFlowEnergyTimeDerivative
variable = temp
[../]
[./poro_vol_exp_temp]
type = PorousFlowHeatVolumetricExpansion
variable = temp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp pp disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '1 1.5'
# bulk modulus is lambda + 2*mu/3 = 1 + 2*1.5/3 = 2
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./porosity]
type = PorousFlowPorosity
thermal = true
fluid = true
mechanical = true
ensure_positive = false
porosity_zero = 0.5
thermal_expansion_coeff = 0.25
solid_bulk = 2
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 0.2
density = 5.0
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
temperature_unit = Kelvin
fp = the_simple_fluid
phase = 0
[../]
[]
[Postprocessors]
[./should_be_zero]
type = NumNonlinearIterations
[../]
[]
[Executioner]
type = Transient
num_steps = 1
nl_abs_tol = 1e-16
[]
[Outputs]
file_base = heat05
csv = true
[]
modules/porous_flow/test/tests/aux_kernels/properties.i
# Example of accessing properties using the PorousFlowPropertyAux AuxKernel for
# each phase and fluid component (as required).
[Mesh]
type = GeneratedMesh
dim = 2
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./pwater]
initial_condition = 1e6
[../]
[./sgas]
initial_condition = 0.3
[../]
[./temperature]
initial_condition = 50
[../]
[]
[AuxVariables]
[./x0_water]
order = FIRST
family = LAGRANGE
initial_condition = 0.1
[../]
[./x0_gas]
order = FIRST
family = LAGRANGE
initial_condition = 0.8
[../]
[./pressure_gas]
order = CONSTANT
family = MONOMIAL
[../]
[./capillary_pressure]
order = CONSTANT
family = MONOMIAL
[../]
[./saturation_water]
order = CONSTANT
family = MONOMIAL
[../]
[./density_water]
order = CONSTANT
family = MONOMIAL
[../]
[./density_gas]
order = CONSTANT
family = MONOMIAL
[../]
[./viscosity_water]
order = CONSTANT
family = MONOMIAL
[../]
[./viscosity_gas]
order = CONSTANT
family = MONOMIAL
[../]
[./x1_water]
order = CONSTANT
family = MONOMIAL
[../]
[./x1_gas]
order = CONSTANT
family = MONOMIAL
[../]
[./relperm_water]
order = CONSTANT
family = MONOMIAL
[../]
[./relperm_gas]
order = CONSTANT
family = MONOMIAL
[../]
[./enthalpy_water]
order = CONSTANT
family = MONOMIAL
[../]
[./enthalpy_gas]
order = CONSTANT
family = MONOMIAL
[../]
[./energy_water]
order = CONSTANT
family = MONOMIAL
[../]
[./energy_gas]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./pressure_gas]
type = PorousFlowPropertyAux
variable = pressure_gas
property = pressure
phase = 1
execute_on = timestep_end
[../]
[./capillary_pressure]
type = PorousFlowPropertyAux
variable = capillary_pressure
property = capillary_pressure
execute_on = timestep_end
[../]
[./saturation_water]
type = PorousFlowPropertyAux
variable = saturation_water
property = saturation
phase = 0
execute_on = timestep_end
[../]
[./density_water]
type = PorousFlowPropertyAux
variable = density_water
property = density
phase = 0
execute_on = timestep_end
[../]
[./density_gas]
type = PorousFlowPropertyAux
variable = density_gas
property = density
phase = 1
execute_on = timestep_end
[../]
[./viscosity_water]
type = PorousFlowPropertyAux
variable = viscosity_water
property = viscosity
phase = 0
execute_on = timestep_end
[../]
[./viscosity_gas]
type = PorousFlowPropertyAux
variable = viscosity_gas
property = viscosity
phase = 1
execute_on = timestep_end
[../]
[./relperm_water]
type = PorousFlowPropertyAux
variable = relperm_water
property = relperm
phase = 0
execute_on = timestep_end
[../]
[./relperm_gas]
type = PorousFlowPropertyAux
variable = relperm_gas
property = relperm
phase = 1
execute_on = timestep_end
[../]
[./x1_water]
type = PorousFlowPropertyAux
variable = x1_water
property = mass_fraction
phase = 0
fluid_component = 1
execute_on = timestep_end
[../]
[./x1_gas]
type = PorousFlowPropertyAux
variable = x1_gas
property = mass_fraction
phase = 1
fluid_component = 1
execute_on = timestep_end
[../]
[./enthalpy_water]
type = PorousFlowPropertyAux
variable = enthalpy_water
property = enthalpy
phase = 0
execute_on = timestep_end
[../]
[./enthalpy_gas]
type = PorousFlowPropertyAux
variable = enthalpy_gas
property = enthalpy
phase = 1
execute_on = timestep_end
[../]
[./energy_water]
type = PorousFlowPropertyAux
variable = energy_water
property = internal_energy
phase = 0
execute_on = timestep_end
[../]
[./energy_gas]
type = PorousFlowPropertyAux
variable = energy_gas
property = internal_energy
phase = 1
execute_on = timestep_end
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pwater
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sgas
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = sgas
[../]
[./energy_dot]
type = PorousFlowEnergyTimeDerivative
variable = temperature
[../]
[./heat_advection]
type = PorousFlowHeatAdvection
variable = temperature
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pwater sgas temperature'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-5
pc_max = 1e7
sat_lr = 0.1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
cv = 2
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 1e9
viscosity = 1e-4
density0 = 20
thermal_expansion = 0
cv = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = pwater
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'x0_water x0_gas'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1e-12 0 0 0 1e-12 0 0 0 1e-12'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 1.0
density = 125
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
nl_abs_tol = 1e-12
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/chemistry/precipitation.i
# The precipitation reaction
#
# a <==> mineral
#
# produces "mineral". Using mineral_density = fluid_density, theta = 1 = eta, the DE is
#
# a' = -(mineral / porosity)' = rate * surf_area * molar_vol (1 - (1 / eqm_const) * (act_coeff * a)^stoi)
#
# The following parameters are used
#
# T_ref = 0.5 K
# T = 1 K
# activation_energy = 3 J/mol
# gas_constant = 6 J/(mol K)
# kinetic_rate_at_ref_T = 0.60653 mol/(m^2 s)
# These give rate = 0.60653 * exp(1/2) = 1 mol/(m^2 s)
#
# surf_area = 0.5 m^2/L
# molar_volume = 2 L/mol
# These give rate * surf_area * molar_vol = 1 s^-1
#
# equilibrium_constant = 0.5 (dimensionless)
# primary_activity_coefficient = 2 (dimensionless)
# stoichiometry = 1 (dimensionless)
# This means that 1 - (1 / eqm_const) * (act_coeff * a)^stoi = 1 - 4 a, which is negative for a > 0.25, ie precipitation for a(t=0) > 0.25
#
# The solution of the DE is
# a = eqm_const / act_coeff + (a(t=0) - eqm_const / act_coeff) exp(-rate * surf_area * molar_vol * act_coeff * t / eqm_const)
# = 0.25 + (a(t=0) - 0.25) exp(-4 * t)
# c = c(t=0) - (a - a(t=0)) * porosity
#
# This test checks that (a + c / porosity) is time-independent, and that a follows the above solution
#
# Aside:
# The exponential curve is not followed exactly because moose actually solves
# (a - a_old)/dt = rate * surf_area * molar_vol (1 - (1 / eqm_const) * (act_coeff * a)^stoi)
# which does not give an exponential exactly, except in the limit dt->0
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
initial_condition = 0.9
[../]
[]
[AuxVariables]
[./pressure]
[../]
[./ini_mineral_conc]
initial_condition = 0.2
[../]
[./k]
initial_condition = 0.5
[../]
[./mineral]
family = MONOMIAL
order = CONSTANT
[../]
[./should_be_static]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./mineral]
type = PorousFlowPropertyAux
property = mineral_concentration
mineral_species = 0
variable = mineral
[../]
[./should_be_static]
type = ParsedAux
args = 'mineral a'
function = 'a + mineral / 0.1'
variable = should_be_static
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./mass_a]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = a
[../]
[./pre_dis]
type = PorousFlowPreDis
variable = a
mineral_density = 1000
stoichiometry = 1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = a
number_fluid_phases = 1
number_fluid_components = 2
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9 # huge, so mimic chemical_reactions
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = 1
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./mass_frac]
type = PorousFlowMassFraction
mass_fraction_vars = a
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = a
num_reactions = 1
equilibrium_constants = k
primary_activity_coefficients = 2
reactions = 1
specific_reactive_surface_area = 0.5
kinetic_rate_constant = 0.6065306597126334
activation_energy = 3
molar_volume = 2
gas_constant = 6
reference_temperature = 0.5
[../]
[./mineral_conc]
type = PorousFlowAqueousPreDisMineral
initial_concentrations = ini_mineral_conc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
nl_abs_tol = 1E-10
dt = 0.01
end_time = 1
[]
[Postprocessors]
[./a]
type = PointValue
point = '0 0 0'
variable = a
[../]
[./should_be_static]
type = PointValue
point = '0 0 0'
variable = should_be_static
[../]
[]
[Outputs]
interval = 10
csv = true
perf_graph = true
[]
modules/porous_flow/test/tests/jacobian/pls03.i
# PorousFlowPiecewiseLinearSink with 2-phase, 3-components
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 2
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[./massfrac_ph0_sp0]
[../]
[./massfrac_ph0_sp1]
[../]
[./massfrac_ph1_sp0]
[../]
[./massfrac_ph1_sp1]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas massfrac_ph0_sp0 massfrac_ph0_sp1 massfrac_ph1_sp0 massfrac_ph1_sp1'
number_fluid_phases = 2
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[ICs]
[./ppwater]
type = RandomIC
variable = ppwater
min = -1
max = 0
[../]
[./ppgas]
type = RandomIC
variable = ppgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 1
[../]
[./massfrac_ph0_sp1]
type = RandomIC
variable = massfrac_ph0_sp1
min = 0
max = 1
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 1
[../]
[./massfrac_ph1_sp1]
type = RandomIC
variable = massfrac_ph1_sp1
min = 0
max = 1
[../]
[]
[Kernels]
[./dummy_ppwater]
type = TimeDerivative
variable = ppwater
[../]
[./dummy_ppgas]
type = TimeDerivative
variable = ppgas
[../]
[./dummy_m00]
type = TimeDerivative
variable = massfrac_ph0_sp0
[../]
[./dummy_m01]
type = TimeDerivative
variable = massfrac_ph0_sp1
[../]
[./dummy_m10]
type = TimeDerivative
variable = massfrac_ph1_sp0
[../]
[./dummy_m11]
type = TimeDerivative
variable = massfrac_ph1_sp1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
viscosity = 1.4
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph0_sp1 massfrac_ph1_sp0 massfrac_ph1_sp1'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[]
[BCs]
[./flux_w]
type = PorousFlowPiecewiseLinearSink
boundary = 'left'
pt_vals = '-1 -0.5 0'
multipliers = '1 2 4'
variable = ppwater
mass_fraction_component = 0
fluid_phase = 0
use_relperm = true
use_mobility = true
flux_function = 'x*y'
[../]
[./flux_g]
type = PorousFlowPiecewiseLinearSink
boundary = 'top'
pt_vals = '0 0.5 1'
multipliers = '1 -2 4'
mass_fraction_component = 0
variable = ppgas
fluid_phase = 1
use_relperm = true
use_mobility = true
flux_function = '-x*y'
[../]
[./flux_1]
type = PorousFlowPiecewiseLinearSink
boundary = 'right'
pt_vals = '0 0.5 1'
multipliers = '1 3 4'
mass_fraction_component = 1
variable = massfrac_ph0_sp0
fluid_phase = 0
use_relperm = true
use_mobility = true
[../]
[./flux_2]
type = PorousFlowPiecewiseLinearSink
boundary = 'back top'
pt_vals = '0 0.5 1'
multipliers = '0 1 -3'
mass_fraction_component = 1
variable = massfrac_ph1_sp0
fluid_phase = 1
use_relperm = true
use_mobility = true
flux_function = '0.5*x*y'
[../]
[./flux_3]
type = PorousFlowPiecewiseLinearSink
boundary = 'right'
pt_vals = '0 0.5 1'
multipliers = '1 3 4'
mass_fraction_component = 2
variable = ppwater
fluid_phase = 0
use_relperm = true
use_mobility = true
[../]
[./flux_4]
type = PorousFlowPiecewiseLinearSink
boundary = 'back top'
pt_vals = '0 0.5 1'
multipliers = '0 1 -3'
mass_fraction_component = 2
variable = massfrac_ph1_sp0
fluid_phase = 1
use_relperm = true
use_mobility = true
flux_function = '-0.5*x*y'
[../]
[]
[Preconditioning]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 2
[]
[Outputs]
file_base = pls03
[]
modules/porous_flow/test/tests/jacobian/chem14.i
# Check derivatives of PorousFlowPorosity with chemical=true
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
initial_condition = 0.1
[../]
[]
[AuxVariables]
[./eqm_k0]
initial_condition = 1.234
[../]
[./eqm_k1]
initial_condition = 0.987
[../]
[./temp]
initial_condition = 0.5
[../]
[./ini_sec_conc0]
initial_condition = 0.111
[../]
[./ini_sec_conc1]
initial_condition = 0.222
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = PorousFlowMassTimeDerivative # this is rather irrelevant: we just want something with Porosity in it
variable = a
fluid_component = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = a
number_fluid_phases = 1
number_fluid_components = 2
number_aqueous_kinetic = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
at_nodes = true
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
at_nodes = true
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = a
at_nodes = true
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = a
num_reactions = 2
equilibrium_constants = 'eqm_k0 eqm_k1'
primary_activity_coefficients = 1
reactions = '1E-10
2E-10' # so that mass_frac = a
specific_reactive_surface_area = '-44.4E-2 -12E-2'
kinetic_rate_constant = '0.678 0.7'
activation_energy = '4.4 3.3'
molar_volume = '3.3 2.2'
reference_temperature = 1
gas_constant = 7.4
at_nodes = true
[../]
[./mineral]
type = PorousFlowAqueousPreDisMineral
initial_concentrations = 'ini_sec_conc0 ini_sec_conc1'
at_nodes = true
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
at_nodes = true
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
chemical = true
porosity_zero = 0.1
reference_chemistry = 'ini_sec_conc0 ini_sec_conc1'
initial_mineral_concentrations = 'ini_sec_conc0 ini_sec_conc1'
chemical_weights = '1.111 0.888' # so derivatives of porosity are big
at_nodes = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 0.1
end_time = 0.1
[]
[Preconditioning]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
modules/porous_flow/test/tests/gravity/grav02b.i
# Checking that gravity head is established in the steady-state situation when 0<saturation<1 (note the strictly less-than).
# 2phase (PP), 2components, vanGenuchten, constant fluid bulk-moduli for each phase, constant viscosity, constant permeability, Corey relative perm
# For better agreement with the analytical solution (ana_pp), just increase nx
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = -1
xmax = 0
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
initial_condition = -1.0
[../]
[./ppgas]
initial_condition = 0
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = ppwater
gravity = '-1 0 0'
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = ppgas
gravity = '-1 0 0'
[../]
[]
[BCs]
[./ppwater]
type = DirichletBC
boundary = right
variable = ppwater
value = -1
[../]
[./ppgas]
type = DirichletBC
boundary = right
variable = ppgas
value = 0
[../]
[]
[Functions]
[./ana_ppwater]
type = ParsedFunction
vars = 'g B p0 rho0'
vals = '1 2 pp_water_top 1'
value = '-B*log(exp(-p0/B)+g*rho0*x/B)' # expected pp at base
[../]
[./ana_ppgas]
type = ParsedFunction
vars = 'g B p0 rho0'
vals = '1 1 pp_gas_top 0.1'
value = '-B*log(exp(-p0/B)+g*rho0*x/B)' # expected pp at base
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 2
density0 = 1
viscosity = 1
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 0.1
viscosity = 0.5
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 0
[../]
[./relperm_gas]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 1
[../]
[]
[Postprocessors]
[./pp_water_top]
type = PointValue
variable = ppwater
point = '0 0 0'
[../]
[./pp_water_base]
type = PointValue
variable = ppwater
point = '-1 0 0'
[../]
[./pp_water_analytical]
type = FunctionValuePostprocessor
function = ana_ppwater
point = '-1 0 0'
[../]
[./pp_gas_top]
type = PointValue
variable = ppgas
point = '0 0 0'
[../]
[./pp_gas_base]
type = PointValue
variable = ppgas
point = '-1 0 0'
[../]
[./pp_gas_analytical]
type = FunctionValuePostprocessor
function = ana_ppgas
point = '-1 0 0'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
file_base = grav02b
[./csv]
type = CSV
[../]
exodus = false
[]
modules/porous_flow/test/tests/dirackernels/bh_except10.i
# PorousFlowPeacemanBorehole exception test
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = TimeDerivative
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
compute_internal_energy = false
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
bottom_p_or_t = 0
fluid_phase = 0
point_file = bh02.bh
use_mobility = true
use_internal_energy = true
SumQuantityUO = borehole_total_outflow_mass
variable = pp
unit_weight = '0 0 0'
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
modules/porous_flow/test/tests/chemistry/except6.i
# Exception test.
# Incorrect number of primary activity constants
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = Diffusion
variable = a
[../]
[./b]
type = Diffusion
variable = b
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_equilibrium = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./eqm_k0]
initial_condition = 1E2
[../]
[./eqm_k1]
initial_condition = 1E-2
[../]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFractionAqueousEquilibriumChemistry
mass_fraction_vars = 'a b'
num_reactions = 2
equilibrium_constants = 'eqm_k0 eqm_k1'
primary_activity_coefficients = '1'
secondary_activity_coefficients = '1 1'
reactions = '2 0
1 1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/dirackernels/injection_production.i
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 10
nz = 1
xmin = -50
xmax = 50
ymin = -50
ymax = 50
zmin = 0
zmax = 10
[]
[./central_nodes]
input = gen
type = ExtraNodesetGenerator
new_boundary = central_nodes
coord = '0 0 0 0 0 10'
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./porepressure]
initial_condition = 20E6
[../]
[./temperature]
initial_condition = 400
scaling = 1E-6 # fluid enthalpy is roughly 1E6
[../]
[]
[BCs]
[./injection_temperature]
type = DirichletBC
variable = temperature
value = 300
boundary = central_nodes
[../]
[]
[DiracKernels]
[./fluid_injection]
type = PorousFlowPeacemanBorehole
variable = porepressure
SumQuantityUO = injected_mass
point_file = injection.bh
function_of = pressure
fluid_phase = 0
bottom_p_or_t = 21E6
unit_weight = '0 0 0'
use_mobility = true
character = -1
[../]
[./fluid_production]
type = PorousFlowPeacemanBorehole
variable = porepressure
SumQuantityUO = produced_mass
point_file = production.bh
function_of = pressure
fluid_phase = 0
bottom_p_or_t = 20E6
unit_weight = '0 0 0'
use_mobility = true
character = 1
[../]
[./remove_heat_at_production_well]
type = PorousFlowPeacemanBorehole
variable = temperature
SumQuantityUO = produced_heat
point_file = production.bh
function_of = pressure
fluid_phase = 0
bottom_p_or_t = 20E6
unit_weight = '0 0 0'
use_mobility = true
use_enthalpy = true
character = 1
[../]
[]
[UserObjects]
[./injected_mass]
type = PorousFlowSumQuantity
[../]
[./produced_mass]
type = PorousFlowSumQuantity
[../]
[./produced_heat]
type = PorousFlowSumQuantity
[../]
[]
[Postprocessors]
[./heat_joules_extracted_this_timestep]
type = PorousFlowPlotQuantity
uo = produced_heat
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 2E-4
bulk_modulus = 2E9
viscosity = 1E-3
density0 = 1000
cv = 4000.0
cp = 4000.0
[../]
[../]
[]
[PorousFlowUnsaturated]
porepressure = porepressure
temperature = temperature
coupling_type = ThermoHydro
gravity = '0 0 0'
fp = the_simple_fluid
[]
[Materials]
[./porosity]
type = PorousFlowPorosityConst # only the initial value of this is ever used
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
solid_bulk_compliance = 1E-10
fluid_bulk_modulus = 2E9
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./thermal_expansion]
type = PorousFlowConstantThermalExpansionCoefficient
fluid_coefficient = 5E-6
drained_coefficient = 2E-4
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '1 0 0 0 1 0 0 0 1'
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
density = 2500.0
specific_heat_capacity = 1200.0
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 2E6
dt = 2E5
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/jacobian/mass01_fully_saturated.i
# FullySaturatedMassTimeDerivative
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
displacements = 'disp_x disp_y disp_z'
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.5
bulk_modulus = 1.5
density0 = 1.0
[../]
[../]
[]
[Variables]
[./pp]
[../]
[./T]
[../]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[ICs]
[./disp_x]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_x
[../]
[./disp_y]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_y
[../]
[./disp_z]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_z
[../]
[./pp]
type = RandomIC
variable = pp
min = 0
max = 1
[../]
[./T]
type = RandomIC
variable = T
min = 0
max = 1
[../]
[]
[BCs]
# necessary otherwise volumetric strain rate will be zero
[./disp_x]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./disp_y]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'left right'
[../]
[./disp_z]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'left right'
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowFullySaturatedMassTimeDerivative
variable = pp
coupling_type = ThermoHydroMechanical
biot_coefficient = 0.9
[../]
[./dummyT]
type = TimeDerivative
variable = T
[../]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp disp_x disp_y disp_z T'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./simple1]
type = TensorMechanicsPlasticSimpleTester
a = 0
b = 1
strength = 1E20
yield_function_tolerance = 1.0E-9
internal_constraint_tolerance = 1.0E-9
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
bulk_modulus = 2.0
shear_modulus = 3.0
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./temperature]
type = PorousFlowTemperature
temperature = T
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = the_simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst # only the initial vaue of this is ever used
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.9
fluid_bulk_modulus = 1.5
solid_bulk_compliance = 0.5
[../]
[./thermal_expansion]
type = PorousFlowConstantThermalExpansionCoefficient
biot_coefficient = 0.9
fluid_coefficient = 0.5
drained_coefficient = 0.4
[../]
[]
[Preconditioning]
[./check]
type = SMP
full = true
#petsc_options = '-snes_test_display'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 2
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/numerical_diffusion/fully_saturated_action.i
# Using the fully-saturated action, which does mass lumping but no upwinding
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./porepressure]
[../]
[./tracer]
[../]
[]
[ICs]
[./porepressure]
type = FunctionIC
variable = porepressure
function = '1 - x'
[../]
[./tracer]
type = FunctionIC
variable = tracer
function = 'if(x<0.1,0,if(x>0.3,0,1))'
[../]
[]
[PorousFlowFullySaturated]
porepressure = porepressure
coupling_type = Hydro
gravity = '0 0 0'
fp = the_simple_fluid
mass_fraction_vars = tracer
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1
boundary = left
[../]
[./no_tracer_on_left]
type = DirichletBC
variable = tracer
value = 0
boundary = left
[../]
[./remove_component_1]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 1
use_mobility = true
flux_function = 1E3
[../]
[./remove_component_0]
type = PorousFlowPiecewiseLinearSink
variable = tracer
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 0
use_mobility = true
flux_function = 1E3
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0
density0 = 1000.0
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-2 0 0 0 1E-2 0 0 0 1E-2'
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[VectorPostprocessors]
[./tracer]
type = LineValueSampler
start_point = '0 0 0'
end_point = '1 0 0'
num_points = 101
sort_by = x
variable = tracer
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 6
dt = 6E-1
nl_abs_tol = 1E-8
timestep_tolerance = 1E-3
[]
[Outputs]
[./out]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/examples/tutorial/13.i
# Example of reactive transport model with dissolution of dolomite
#
# The equilibrium system has 5 primary species (Variables) and
# 5 secondary species (PorousFlowMassFractionAqueousEquilibrium).
# Some of the equilibrium constants have been chosen rather arbitrarily.
#
# Equilibrium reactions
# H+ + HCO3- = CO2(aq)
# -H+ + HCO3- = CO32-
# HCO3- + Ca2+ = CaHCO3+
# HCO3- + Mg2+ = MgHCO3+
# HCO3- + Fe2+ = FeHCO3+
#
# The kinetic reaction that dissolves dolomite involves all 5 primary species.
#
# -2H+ + 2HCO3- + Ca2+ + 0.8Mg2+ + 0.2Fe2+ = CaMg0.8Fe0.2(CO3)2
#
# The initial concentration of precipitated dolomite is high, so it starts
# to dissolve immediately, increasing the concentrations of the primary species.
#
# Only single-phase, fully saturated physics is used.
# The pressure gradient is fixed, so that the Darcy velocity is 0.1m/s.
#
# Primary species are injected from the left side, and they flow to the right.
# Less dolomite dissolution therefore occurs on the left side (where
# the primary species have higher concentration).
#
# This test is more fully documented in tutorial_13
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmax = 1
[]
[Variables]
[./h+]
[../]
[./hco3-]
[../]
[./ca2+]
[../]
[./mg2+]
[../]
[./fe2+]
[../]
[]
[AuxVariables]
[./eqm_k0]
initial_condition = 2.19E6
[../]
[./eqm_k1]
initial_condition = 4.73E-11
[../]
[./eqm_k2]
initial_condition = 0.222
[../]
[./eqm_k3]
initial_condition = 1E-2
[../]
[./eqm_k4]
initial_condition = 1E-3
[../]
[./kinetic_k]
initial_condition = 326.2
[../]
[./pressure]
[../]
[./dolomite]
family = MONOMIAL
order = CONSTANT
[../]
[./dolomite_initial]
initial_condition = 1E-7
[../]
[]
[AuxKernels]
[./dolomite]
type = PorousFlowPropertyAux
property = mineral_concentration
mineral_species = 0
variable = dolomite
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[ICs]
[./pressure_ic]
type = FunctionIC
variable = pressure
function = '(1 - x) * 1E6'
[../]
[./h+_ic]
type = BoundingBoxIC
variable = h+
x1 = 0.0
y1 = 0.0
x2 = 1.0e-10
y2 = 0.25
inside = 5.0e-2
outside = 1.0e-6
[../]
[./hco3_ic]
type = BoundingBoxIC
variable = hco3-
x1 = 0.0
y1 = 0.0
x2 = 1.0e-10
y2 = 0.25
inside = 5.0e-2
outside = 1.0e-6
[../]
[./ca2_ic]
type = BoundingBoxIC
variable = ca2+
x1 = 0.0
y1 = 0.0
x2 = 1.0e-10
y2 = 0.25
inside = 5.0e-2
outside = 1.0e-6
[../]
[./mg2_ic]
type = BoundingBoxIC
variable = mg2+
x1 = 0.0
y1 = 0.0
x2 = 1.0e-10
y2 = 0.25
inside = 5.0e-2
outside = 1.0e-6
[../]
[./fe2_ic]
type = BoundingBoxIC
variable = fe2+
x1 = 0.0
y1 = 0.0
x2 = 1.0e-10
y2 = 0.25
inside = 5.0e-2
outside = 1.0e-6
[../]
[]
[Kernels]
[./h+_ie]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = h+
[../]
[./h+_conv]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = h+
[../]
[./predis_h+]
type = PorousFlowPreDis
variable = h+
mineral_density = 2875.0
stoichiometry = -2
[../]
[./hco3-_ie]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = hco3-
[../]
[./hco3-_conv]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = hco3-
[../]
[./predis_hco3-]
type = PorousFlowPreDis
variable = hco3-
mineral_density = 2875.0
stoichiometry = 2
[../]
[./ca2+_ie]
type = PorousFlowMassTimeDerivative
fluid_component = 2
variable = ca2+
[../]
[./ca2+_conv]
type = PorousFlowAdvectiveFlux
fluid_component = 2
variable = ca2+
[../]
[./predis_ca2+]
type = PorousFlowPreDis
variable = ca2+
mineral_density = 2875.0
stoichiometry = 1
[../]
[./mg2+_ie]
type = PorousFlowMassTimeDerivative
fluid_component = 3
variable = mg2+
[../]
[./mg2+_conv]
type = PorousFlowAdvectiveFlux
fluid_component = 3
variable = mg2+
[../]
[./predis_mg2+]
type = PorousFlowPreDis
variable = mg2+
mineral_density = 2875.0
stoichiometry = 0.8
[../]
[./fe2+_ie]
type = PorousFlowMassTimeDerivative
fluid_component = 4
variable = fe2+
[../]
[./fe2+_conv]
type = PorousFlowAdvectiveFlux
fluid_component = 4
variable = fe2+
[../]
[./predis_fe2+]
type = PorousFlowPreDis
variable = fe2+
mineral_density = 2875.0
stoichiometry = 0.2
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'h+ hco3- ca2+ mg2+ fe2+'
number_fluid_phases = 1
number_fluid_components = 6
number_aqueous_equilibrium = 5
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
viscosity = 1E-3
[../]
[../]
[]
[BCs]
[./hco3-_left]
type = DirichletBC
variable = hco3-
boundary = left
value = 5E-2
[../]
[./h+_left]
type = DirichletBC
variable = h+
boundary = left
value = 5E-2
[../]
[./ca2+_left]
type = DirichletBC
variable = ca2+
boundary = left
value = 5E-2
[../]
[./mg2+_left]
type = DirichletBC
variable = mg2+
boundary = left
value = 5E-2
[../]
[./fe2+_left]
type = DirichletBC
variable = fe2+
boundary = left
value = 5E-2
[../]
[./hco3-_right]
type = DirichletBC
variable = hco3-
boundary = right
value = 1E-6
[../]
[./h+_right]
type = DirichletBC
variable = h+
boundary = right
value = 1e-6
[../]
[./ca2+_right]
type = DirichletBC
variable = ca2+
boundary = right
value = 1E-6
[../]
[./mg2+_right]
type = DirichletBC
variable = mg2+
boundary = right
value = 1E-6
[../]
[./fe2+_right]
type = DirichletBC
variable = fe2+
boundary = right
value = 1E-6
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = 298.15
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./equilibrium_massfrac]
type = PorousFlowMassFractionAqueousEquilibriumChemistry
mass_fraction_vars = 'h+ hco3- ca2+ mg2+ fe2+'
num_reactions = 5
equilibrium_constants = 'eqm_k0 eqm_k1 eqm_k2 eqm_k3 eqm_k4'
primary_activity_coefficients = '1 1 1 1 1'
secondary_activity_coefficients = '1 1 1 1 1'
reactions = '1 1 0 0 0
-1 1 0 0 0
0 1 1 0 0
0 1 0 1 0
0 1 0 0 1'
[../]
[./kinetic]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = 'h+ hco3- ca2+ mg2+ fe2+'
num_reactions = 1
equilibrium_constants = kinetic_k
primary_activity_coefficients = '1 1 1 1 1'
reactions = '-2 2 1 0.8 0.2'
specific_reactive_surface_area = '1.2E-8'
kinetic_rate_constant = '3E-4'
activation_energy = '1.5e4'
molar_volume = 64365.0
gas_constant = 8.314
reference_temperature = 298.15
[../]
[./dolomite_conc]
type = PorousFlowAqueousPreDisMineral
initial_concentrations = dolomite_initial
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.2
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-10 0 0 0 1E-10 0 0 0 1E-10'
[../]
[./relp]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[./TimeStepper]
type = IterationAdaptiveDT
dt = 0.1
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[Outputs]
print_linear_residuals = false
perf_graph = true
exodus = true
[]
modules/porous_flow/test/tests/jacobian/fflux12.i
# 1phase, 3components, constant viscosity, constant insitu permeability
# density with constant bulk, FLAC relative perm with a cubic, nonzero gravity, unsaturated with VG
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./massfrac0]
[../]
[./massfrac1]
[../]
[]
[ICs]
[./pp]
type = RandomIC
variable = pp
min = -1.0
max = 0.0
[../]
[./massfrac0]
type = RandomIC
variable = massfrac0
min = 0
max = 0.3
[../]
[./massfrac1]
type = RandomIC
variable = massfrac1
min = 0
max = 0.4
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
gravity = '-1 -0.1 0'
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = massfrac0
gravity = '-1 -0.1 0'
[../]
[./flux2]
type = PorousFlowAdvectiveFlux
fluid_component = 2
variable = massfrac1
gravity = '-1 -0.1 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0 massfrac1'
number_fluid_phases = 1
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.6
alpha = 1 # small so that most effective saturations are close to 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac0 massfrac1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityFLAC
m = 10
phase = 0
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/poroperm/PermFromPoro03.i
# Testing permeability from porosity
# Trivial test, checking calculated permeability is correct
# k = k_anisotropic * B * exp(A * phi)
[Mesh]
type = GeneratedMesh
dim = 1
nx = 3
xmin = 0
xmax = 3
[]
[GlobalParams]
block = 0
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[./InitialCondition]
type = ConstantIC
value = 0
[../]
[../]
[]
[Kernels]
[./flux]
type = PorousFlowAdvectiveFlux
gravity = '0 0 0'
variable = pp
[../]
[]
[BCs]
[./ptop]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[./pbase]
type = DirichletBC
variable = pp
boundary = left
value = 1
[../]
[]
[AuxVariables]
[./poro]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_x]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_y]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_z]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./poro]
type = PorousFlowPropertyAux
property = porosity
variable = poro
[../]
[./perm_x]
type = PorousFlowPropertyAux
property = permeability
variable = perm_x
row = 0
column = 0
[../]
[./perm_y]
type = PorousFlowPropertyAux
property = permeability
variable = perm_y
row = 1
column = 1
[../]
[./perm_z]
type = PorousFlowPropertyAux
property = permeability
variable = perm_z
row = 2
column = 2
[../]
[]
[Postprocessors]
[./perm_x_bottom]
type = PointValue
variable = perm_x
point = '0 0 0'
[../]
[./perm_y_bottom]
type = PointValue
variable = perm_y
point = '0 0 0'
[../]
[./perm_z_bottom]
type = PointValue
variable = perm_z
point = '0 0 0'
[../]
[./perm_x_top]
type = PointValue
variable = perm_x
point = '3 0 0'
[../]
[./perm_y_top]
type = PointValue
variable = perm_y
point = '3 0 0'
[../]
[./perm_z_top]
type = PointValue
variable = perm_z
point = '3 0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
# unimportant in this fully-saturated test
m = 0.8
alpha = 1e-4
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2.2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./permeability]
type = PorousFlowPermeabilityExponential
k_anisotropy = '1 0 0 0 2 0 0 0 0.1'
poroperm_function = exp_k
A = 10
B = 1e-8
[../]
[./temperature]
type = PorousFlowTemperature
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0 # unimportant in this fully-saturated situation
phase = 0
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
solve_type = Newton
type = Steady
l_tol = 1E-5
nl_abs_tol = 1E-3
nl_rel_tol = 1E-8
l_max_its = 200
nl_max_its = 400
petsc_options_iname = '-pc_type -pc_asm_overlap -sub_pc_type -ksp_type -ksp_gmres_restart'
petsc_options_value = ' asm 2 lu gmres 200'
[]
[Outputs]
csv = true
execute_on = 'timestep_end'
[]
modules/porous_flow/test/tests/jacobian/mass01.i
# 1phase
# vanGenuchten, constant-bulk density, constant porosity, 1component
# fully saturated
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1
ny = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options = '-snes_test_display'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 2
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/dirackernels/theis3.i
# Two phase Theis problem: Flow from single source
# Constant rate injection 0.5 kg/s
# 1D cylindrical mesh
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmax = 2000
bias_x = 1.05
[]
[Problem]
type = FEProblem
coord_type = RZ
rz_coord_axis = Y
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./ppwater]
initial_condition = 20e6
[../]
[./sgas]
initial_condition = 0
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = ppwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = ppwater
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sgas
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = sgas
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater sgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
pc = 1e5
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
viscosity = 1e-3
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 10
viscosity = 1e-4
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = ppwater
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
compute_enthalpy = false
compute_internal_energy = false
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
compute_enthalpy = false
compute_internal_energy = false
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.2
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1e-12 0 0 0 1e-12 0 0 0 1e-12'
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 0
[../]
[./relperm_gas]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 1
[../]
[]
[BCs]
[./rightwater]
type = DirichletBC
boundary = right
value = 20e6
variable = ppwater
[../]
[]
[DiracKernels]
[./source]
type = PorousFlowSquarePulsePointSource
point = '0 0 0'
mass_flux = 0.5
variable = sgas
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options = '-snes_converged_reason -ksp_diagonal_scale -ksp_diagonal_scale_fix -ksp_gmres_modifiedgramschmidt -snes_linesearch_monitor'
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu NONZERO 2 1E-8 1E-10 20'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1e4
[./TimeStepper]
type = IterationAdaptiveDT
dt = 10
growth_factor = 2
[../]
[]
[VectorPostprocessors]
[./line]
type = NodalValueSampler
sort_by = x
variable = 'ppwater sgas'
execute_on = 'timestep_end'
[../]
[]
[Postprocessors]
[./ppwater]
type = PointValue
point = '4 0 0'
variable = ppwater
[../]
[./sgas]
type = PointValue
point = '4 0 0'
variable = sgas
[../]
[./massgas]
type = PorousFlowFluidMass
fluid_component = 1
[../]
[]
[Outputs]
file_base = theis3
print_linear_residuals = false
perf_graph = true
[./csv]
type = CSV
execute_on = timestep_end
execute_vector_postprocessors_on = final
[../]
[]
modules/porous_flow/test/tests/dirackernels/bh02.i
# fully-saturated
# production
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
# Because the Variable for this Sink is pp, and pp is associated
# with the fluid-mass conservation equation, this sink is extracting
# fluid mass (and not heat energy or something else)
variable = pp
# The following specfies that the total fluid mass coming out of
# the porespace via this sink in this timestep should be recorded
# in the pls_total_outflow_mass UserObject
SumQuantityUO = borehole_total_outflow_mass
# The following file defines the polyline geometry
# which is just two points in this particular example
point_file = bh02.bh
# First, we want Peacemans f to be a function of porepressure (and not
# temperature or something else). So bottom_p_or_t is actually porepressure
function_of = pressure
fluid_phase = 0
# The bottomhole pressure
bottom_p_or_t = 0
# In this example there is no increase of the wellbore pressure
# due to gravity:
unit_weight = '0 0 0'
# PeacemanBoreholes should almost always have use_mobility = true
use_mobility = true
# This is a production wellbore (a sink of fluid that removes fluid from porespace)
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
[Outputs]
file_base = bh02
exodus = false
csv = true
execute_on = timestep_end
[]
modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_fully_saturated.i
# Pressure pulse in 1D with 1 phase - transient
# using the PorousFlowFullySaturatedDarcyBase Kernel
[Mesh]
type = GeneratedMesh
dim = 1
nx = 20
xmin = 0
xmax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 2E6
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./flux]
type = PorousFlowFullySaturatedDarcyBase
variable = pp
gravity = '0 0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-15'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0
phase = 0
[../]
[]
[BCs]
[./left]
type = DirichletBC
boundary = left
value = 3E6
variable = pp
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-20 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E3
end_time = 1E4
[]
[Postprocessors]
[./p005]
type = PointValue
variable = pp
point = '5 0 0'
execute_on = 'initial timestep_end'
[../]
[./p015]
type = PointValue
variable = pp
point = '15 0 0'
execute_on = 'initial timestep_end'
[../]
[./p025]
type = PointValue
variable = pp
point = '25 0 0'
execute_on = 'initial timestep_end'
[../]
[./p035]
type = PointValue
variable = pp
point = '35 0 0'
execute_on = 'initial timestep_end'
[../]
[./p045]
type = PointValue
variable = pp
point = '45 0 0'
execute_on = 'initial timestep_end'
[../]
[./p055]
type = PointValue
variable = pp
point = '55 0 0'
execute_on = 'initial timestep_end'
[../]
[./p065]
type = PointValue
variable = pp
point = '65 0 0'
execute_on = 'initial timestep_end'
[../]
[./p075]
type = PointValue
variable = pp
point = '75 0 0'
execute_on = 'initial timestep_end'
[../]
[./p085]
type = PointValue
variable = pp
point = '85 0 0'
execute_on = 'initial timestep_end'
[../]
[./p095]
type = PointValue
variable = pp
point = '95 0 0'
execute_on = 'initial timestep_end'
[../]
[]
[Outputs]
file_base = pressure_pulse_1d_fully_saturated
print_linear_residuals = false
csv = true
[]
modules/porous_flow/test/tests/jacobian/mass07.i
# 1phase with MD_Gaussian (var = log(mass-density) with Gaussian capillary) formulation
# constant-bulk density, constant porosity, 1component
# unsaturated
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1
ny = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./md]
[../]
[]
[ICs]
[./md]
type = RandomIC
min = -1
max = -0.224 # unsaturated for md<log(density_P0=0.8)=-0.223
variable = md
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = md
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'md'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 0.8
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseMD_Gaussian
mass_density = md
al = 1.1
density_P0 = 0.8
bulk_modulus = 1.5
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options = '-snes_test_display'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/jacobian/fflux06.i
# 1phase with MD_Gaussian (var = log(mass-density) with Gaussian capillary) formulation
# constant viscosity, constant insitu permeability
# density with constant bulk, Corey relative perm, nonzero gravity
# unsaturated
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./md]
[../]
[]
[ICs]
[./md]
type = RandomIC
min = -1
max = -0.224 # unsaturated for md<log(density_P0=0.8)=-0.223
variable = md
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = md
gravity = '-1 -0.1 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'md'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseMD_Gaussian
mass_density = md
al = 1.1
density_P0 = 0.8
bulk_modulus = 1.5
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/jacobian/heat_advection01_fully_saturated.i
# 1phase, using fully-saturated version, heat advection
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./temp]
[../]
[./pp]
[../]
[]
[ICs]
[./temp]
type = RandomIC
variable = temp
max = 1.0
min = 0.0
[../]
[./pp]
type = RandomIC
variable = pp
max = 0.0
min = -1.0
[../]
[]
[Kernels]
[./pp]
type = TimeDerivative
variable = pp
[../]
[./heat_advection]
type = PorousFlowFullySaturatedHeatAdvection
variable = temp
gravity = '1 2 3'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 1.1
thermal_expansion = 0
viscosity = 1
cv = 1.1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./PS]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Preconditioning]
active = check
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/flux_limited_TVD_pflow/except03.i
# Exception test: fe_family specified but not fe_order
[Mesh]
type = GeneratedMesh
dim = 1
[]
[GlobalParams]
gravity = '1 2 3'
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./tracer]
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[PorousFlowUnsaturated]
porepressure = pp
mass_fraction_vars = tracer
fp = the_simple_fluid
[]
[UserObjects]
[./advective_flux_calculator]
type = PorousFlowAdvectiveFluxCalculatorSaturated
fe_family = Lagrange
[../]
[]
[Materials]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
modules/porous_flow/test/tests/gravity/grav01b.i
# Checking that gravity head is established
# 1phase, vanGenuchten, constant and large fluid-bulk, constant viscosity, constant permeability, Corey relperm
# fully saturated
# For better agreement with the analytical solution (ana_pp), just increase nx
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmin = -1
xmax = 0
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[./InitialCondition]
type = RandomIC
min = 0
max = 1
[../]
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
gravity = '-1 0 0'
[../]
[]
[Functions]
[./ana_pp]
type = ParsedFunction
vars = 'g B p0 rho0'
vals = '1 1E3 0 1'
value = '-B*log(exp(-p0/B)+g*rho0*x/B)' # expected pp at base
[../]
[]
[BCs]
[./z]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1e3
density0 = 1
viscosity = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 0
[../]
[]
[Postprocessors]
[./pp_base]
type = PointValue
variable = pp
point = '-1 0 0'
[../]
[./pp_analytical]
type = FunctionValuePostprocessor
function = ana_pp
point = '-1 0 0'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
execute_on = 'timestep_end'
file_base = grav01b
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/chemistry/except21.i
# Exception test.
# Incorrect aqueous_phase_number
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = Diffusion
variable = a
[../]
[./b]
type = Diffusion
variable = b
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_equilibrium = 2
aqueous_phase_number = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./pressure]
[../]
[]
[Materials]
[./temperature_qp]
type = PorousFlowTemperature
[../]
[./ppss_qp]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac_qp]
type = PorousFlowMassFractionAqueousEquilibriumChemistry
mass_fraction_vars = 'a b'
num_reactions = 2
equilibrium_constants = '1E2 1E-2'
primary_activity_coefficients = '1 1'
secondary_activity_coefficients = '1 1'
reactions = '2 0
1 1'
[../]
[./simple_fluid_qp]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/thm_rehbinder/fixed_outer.i
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 40
nt = 16
rmin = 0.1
rmax = 1
dmin = 0.0
dmax = 90
growth_r = 1.1
[]
[./make3D]
input = annular
type = MeshExtruderGenerator
bottom_sideset = bottom
top_sideset = top
extrusion_vector = '0 0 1'
num_layers = 1
[../]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
biot_coefficient = 1.0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[./temperature]
[../]
[]
[BCs]
[./plane_strain]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'top bottom'
[../]
[./ymin]
type = DirichletBC
variable = disp_y
value = 0
boundary = dmin
[../]
[./xmin]
type = DirichletBC
variable = disp_x
value = 0
boundary = dmax
[../]
[./cavity_temperature]
type = DirichletBC
variable = temperature
value = 1000
boundary = rmin
[../]
[./cavity_porepressure]
type = DirichletBC
variable = porepressure
value = 1E6
boundary = rmin
[../]
[./cavity_zero_effective_stress_x]
type = Pressure
component = 0
variable = disp_x
function = 1E6
boundary = rmin
use_displaced_mesh = false
[../]
[./cavity_zero_effective_stress_y]
type = Pressure
component = 1
variable = disp_y
function = 1E6
boundary = rmin
use_displaced_mesh = false
[../]
[./outer_temperature]
type = DirichletBC
variable = temperature
value = 0
boundary = rmax
[../]
[./outer_pressure]
type = DirichletBC
variable = porepressure
value = 0
boundary = rmax
[../]
[./fixed_outer_x]
type = DirichletBC
variable = disp_x
value = 0
boundary = rmax
[../]
[./fixed_outer_y]
type = DirichletBC
variable = disp_y
value = 0
boundary = rmax
[../]
[]
[AuxVariables]
[./stress_rr]
family = MONOMIAL
order = CONSTANT
[../]
[./stress_pp]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./stress_rr]
type = RankTwoScalarAux
rank_two_tensor = stress
variable = stress_rr
scalar_type = RadialStress
point1 = '0 0 0'
point2 = '0 0 1'
[../]
[./stress_pp]
type = RankTwoScalarAux
rank_two_tensor = stress
variable = stress_pp
scalar_type = HoopStress
point1 = '0 0 0'
point2 = '0 0 1'
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.0
bulk_modulus = 1E12
viscosity = 1.0E-3
density0 = 1000.0
cv = 1000.0
cp = 1000.0
porepressure_coefficient = 0.0
[../]
[../]
[]
[PorousFlowBasicTHM]
coupling_type = ThermoHydroMechanical
multiply_by_density = false
add_stress_aux = true
porepressure = porepressure
temperature = temperature
thermal_eigenstrain_name = thermal_contribution
gravity = '0 0 0'
fp = the_simple_fluid
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1E10
poissons_ratio = 0.2
[../]
[./strain]
type = ComputeSmallStrain
eigenstrain_names = thermal_contribution
[../]
[./thermal_contribution]
type = ComputeThermalExpansionEigenstrain
temperature = temperature
thermal_expansion_coeff = 1E-6
eigenstrain_name = thermal_contribution
stress_free_temperature = 0.0
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./porosity]
type = PorousFlowPorosityConst # only the initial value of this is ever used
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
solid_bulk_compliance = 1E-10
fluid_bulk_modulus = 1E12
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./thermal_expansion]
type = PorousFlowConstantThermalExpansionCoefficient
fluid_coefficient = 1E-6
drained_coefficient = 1E-6
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '1E6 0 0 0 1E6 0 0 0 1E6'
[../]
[]
[VectorPostprocessors]
[./P]
type = LineValueSampler
start_point = '0.1 0 0'
end_point = '1.0 0 0'
num_points = 10
sort_by = x
variable = porepressure
[../]
[./T]
type = LineValueSampler
start_point = '0.1 0 0'
end_point = '1.0 0 0'
num_points = 10
sort_by = x
variable = temperature
[../]
[./U]
type = LineValueSampler
start_point = '0.1 0 0'
end_point = '1.0 0 0'
num_points = 10
sort_by = x
variable = disp_x
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_rtol'
petsc_options_value = 'gmres asm lu 1E-8'
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
file_base = fixed_outer
execute_on = timestep_end
csv = true
[]
modules/porous_flow/test/tests/jacobian/fflux09.i
# 2phase (PP), 3components (that exist in both phases), constant viscosity, constant insitu permeability
# density with constant bulk, Corey relative perm, nonzero gravity, unsaturated with RSC capillary
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[./massfrac_ph0_sp0]
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp1]
[../]
[./massfrac_ph1_sp0]
[../]
[./massfrac_ph1_sp1]
[../]
[]
[ICs]
[./ppwater]
type = RandomIC
variable = ppwater
min = -1
max = 0
[../]
[./ppgas]
type = RandomIC
variable = ppgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 0.4
[../]
[./massfrac_ph0_sp1]
type = RandomIC
variable = massfrac_ph0_sp1
min = 0
max = 0.4
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 0.4
[../]
[./massfrac_ph1_sp1]
type = RandomIC
variable = massfrac_ph1_sp1
min = 0
max = 0.4
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = ppwater
gravity = '-1 -0.1 0'
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = ppgas
gravity = '-1 -0.1 0'
[../]
[./flux2]
type = PorousFlowAdvectiveFlux
fluid_component = 2
variable = massfrac_ph0_sp0
gravity = '-1 -0.1 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas massfrac_ph0_sp0'
number_fluid_phases = 2
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureRSC
shift = -0.1
scale_ratio = 3
oil_viscosity = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph0_sp1 massfrac_ph1_sp0 massfrac_ph1_sp1'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/examples/flow_through_fractured_media/coarse.i
# Flow and solute transport along a fracture embedded in a porous matrix
# The fracture is represented by lower dimensional elements
# fracture aperture = 6e-4m
# fracture porosity = 6e-4m = phi * a
# fracture permeability = 1.8e-11 which is based on k=3e-8 from a**2/12, and k*a = 3e-8*6e-4
# matrix porosity = 0.1
# matrix permeanility = 1e-20
[Mesh]
type = FileMesh
file = 'coarse.e'
block_id = '1 2 3'
block_name = 'fracture matrix1 matrix2'
boundary_id = '1 2'
boundary_name = 'bottom top'
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./pp]
[../]
[./massfrac0]
[../]
[]
[AuxVariables]
[./velocity_x]
family = MONOMIAL
order = CONSTANT
block = 'fracture'
[../]
[./velocity_y]
family = MONOMIAL
order = CONSTANT
block = 'fracture'
[../]
[]
[AuxKernels]
[./velocity_x]
type = PorousFlowDarcyVelocityComponentLowerDimensional
variable = velocity_x
component = x
aperture = 6E-4
[../]
[./velocity_y]
type = PorousFlowDarcyVelocityComponentLowerDimensional
variable = velocity_y
component = y
aperture = 6E-4
[../]
[]
[ICs]
[./massfrac0]
type = ConstantIC
variable = massfrac0
value = 0
[../]
[./pp_matrix]
type = ConstantIC
variable = pp
value = 1E6
[../]
[]
[BCs]
[./top]
type = DirichletBC
value = 0
variable = massfrac0
boundary = top
[../]
[./bottom]
type = DirichletBC
value = 1
variable = massfrac0
boundary = bottom
[../]
[./ptop]
type = DirichletBC
variable = pp
boundary = top
value = 1e6
[../]
[./pbottom]
type = DirichletBC
variable = pp
boundary = bottom
value = 1.002e6
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = pp
[../]
[./adv0]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = pp
[../]
[./diff0]
type = PorousFlowDispersiveFlux
fluid_component = 1
variable = pp
disp_trans = 0
disp_long = 0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = massfrac0
[../]
[./adv1]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = massfrac0
[../]
[./diff1]
type = PorousFlowDispersiveFlux
fluid_component = 0
variable = massfrac0
disp_trans = 0
disp_long = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = massfrac0
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./poro_fracture]
type = PorousFlowPorosityConst
porosity = 6e-4 # = a * phif
block = 'fracture'
[../]
[./poro_matrix]
type = PorousFlowPorosityConst
porosity = 0.1
block = 'matrix1 matrix2'
[../]
[./diff1]
type = PorousFlowDiffusivityConst
diffusion_coeff = '1e-9 1e-9'
tortuosity = 1.0
block = 'fracture'
[../]
[./diff2]
type = PorousFlowDiffusivityConst
diffusion_coeff = '1e-9 1e-9'
tortuosity = 0.1
block = 'matrix1 matrix2'
[../]
[./permeability_fracture]
type = PorousFlowPermeabilityConst
permeability = '1.8e-11 0 0 0 1.8e-11 0 0 0 1.8e-11' # 1.8e-11 = a * kf
block = 'fracture'
[../]
[./permeability_matrix]
type = PorousFlowPermeabilityConst
permeability = '1e-20 0 0 0 1e-20 0 0 0 1e-20'
block = 'matrix1 matrix2'
[../]
[./relp]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[]
[Preconditioning]
[./basic]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = NEWTON
end_time = 10
dt = 1
# controls for nonlinear iterations
nl_max_its = 15
nl_rel_tol = 1e-14
nl_abs_tol = 1e-12
[]
[VectorPostprocessors]
[./xmass]
type = LineValueSampler
start_point = '-0.5 0 0'
end_point = '0.5 0 0'
sort_by = x
num_points = 41
variable = massfrac0
outputs = csv
[../]
[]
[Outputs]
[./csv]
type = CSV
execute_on = 'final'
[../]
[]
modules/porous_flow/test/tests/poro_elasticity/mandel.i
# Mandel's problem of consolodation of a drained medium
#
# A sample is in plane strain.
# -a <= x <= a
# -b <= y <= b
# It is squashed with constant force by impermeable, frictionless plattens on its top and bottom surfaces (at y=+/-b)
# Fluid is allowed to leak out from its sides (at x=+/-a)
# The porepressure within the sample is monitored.
#
# As is common in the literature, this is simulated by
# considering the quarter-sample, 0<=x<=a and 0<=y<=b, with
# impermeable, roller BCs at x=0 and y=0 and y=b.
# Porepressure is fixed at zero on x=a.
# Porepressure and displacement are initialised to zero.
# Then the top (y=b) is moved downwards with prescribed velocity,
# so that the total force that is inducing this downwards velocity
# is fixed. The velocity is worked out by solving Mandel's problem
# analytically, and the total force is monitored in the simulation
# to check that it indeed remains constant.
#
# Here are the problem's parameters, and their values:
# Soil width. a = 1
# Soil height. b = 0.1
# Soil's Lame lambda. la = 0.5
# Soil's Lame mu, which is also the Soil's shear modulus. mu = G = 0.75
# Soil bulk modulus. K = la + 2*mu/3 = 1
# Drained Poisson ratio. nu = (3K - 2G)/(6K + 2G) = 0.2
# Soil bulk compliance. 1/K = 1
# Fluid bulk modulus. Kf = 8
# Fluid bulk compliance. 1/Kf = 0.125
# Soil initial porosity. phi0 = 0.1
# Biot coefficient. alpha = 0.6
# Biot modulus. M = 1/(phi0/Kf + (alpha - phi0)(1 - alpha)/K) = 4.705882
# Undrained bulk modulus. Ku = K + alpha^2*M = 2.694118
# Undrained Poisson ratio. nuu = (3Ku - 2G)/(6Ku + 2G) = 0.372627
# Skempton coefficient. B = alpha*M/Ku = 1.048035
# Fluid mobility (soil permeability/fluid viscosity). k = 1.5
# Consolidation coefficient. c = 2*k*B^2*G*(1-nu)*(1+nuu)^2/9/(1-nuu)/(nuu-nu) = 3.821656
# Normal stress on top. F = 1
#
# The solution for porepressure and displacements is given in
# AHD Cheng and E Detournay "A direct boundary element method for plane strain poroelasticity" International Journal of Numerical and Analytical Methods in Geomechanics 12 (1988) 551-572.
# The solution involves complicated infinite series, so I shall not write it here
#
# FINAL NOTE: The above solution assumes constant Biot Modulus.
# In porous_flow this is not true. Therefore the solution is
# a little different than in the paper. This test was therefore
# validated against MOOSE's poromechanics, which can choose either
# a constant Biot Modulus (which has been shown to agree with
# the analytic solution), or a non-constant Biot Modulus (which
# gives the same results as porous_flow).
[Mesh]
type = GeneratedMesh
dim = 3
nx = 10
ny = 1
nz = 1
xmin = 0
xmax = 1
ymin = 0
ymax = 0.1
zmin = 0
zmax = 1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.8
alpha = 1e-5
[../]
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./roller_xmin]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left'
[../]
[./roller_ymin]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom'
[../]
[./plane_strain]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back front'
[../]
[./xmax_drained]
type = DirichletBC
variable = porepressure
value = 0
boundary = right
[../]
[./top_velocity]
type = FunctionDirichletBC
variable = disp_y
function = top_velocity
boundary = top
[../]
[]
[Functions]
[./top_velocity]
type = PiecewiseLinear
x = '0 0.002 0.006 0.014 0.03 0.046 0.062 0.078 0.094 0.11 0.126 0.142 0.158 0.174 0.19 0.206 0.222 0.238 0.254 0.27 0.286 0.302 0.318 0.334 0.35 0.366 0.382 0.398 0.414 0.43 0.446 0.462 0.478 0.494 0.51 0.526 0.542 0.558 0.574 0.59 0.606 0.622 0.638 0.654 0.67 0.686 0.702'
y = '-0.041824842 -0.042730269 -0.043412712 -0.04428867 -0.045509181 -0.04645965 -0.047268246 -0.047974749 -0.048597109 -0.0491467 -0.049632388 -0.050061697 -0.050441198 -0.050776675 -0.051073238 -0.0513354 -0.051567152 -0.051772022 -0.051953128 -0.052113227 -0.052254754 -0.052379865 -0.052490464 -0.052588233 -0.052674662 -0.052751065 -0.052818606 -0.052878312 -0.052931093 -0.052977751 -0.053018997 -0.053055459 -0.053087691 -0.053116185 -0.053141373 -0.05316364 -0.053183324 -0.053200724 -0.053216106 -0.053229704 -0.053241725 -0.053252351 -0.053261745 -0.053270049 -0.053277389 -0.053283879 -0.053289615'
[../]
[]
[AuxVariables]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./tot_force]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[../]
[./tot_force]
type = ParsedAux
args = 'stress_yy porepressure'
execute_on = timestep_end
variable = tot_force
function = '-stress_yy+0.6*porepressure'
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
component = 2
variable = disp_z
[../]
[./poro_vol_exp]
type = PorousFlowMassVolumetricExpansion
variable = porepressure
fluid_component = 0
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = porepressure
[../]
[./flux]
type = PorousFlowAdvectiveFlux
variable = porepressure
gravity = '0 0 0'
fluid_component = 0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 8
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '0.5 0.75'
# bulk modulus is lambda + 2*mu/3 = 0.5 + 2*0.75/3 = 1
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
ensure_positive = false
porosity_zero = 0.1
biot_coefficient = 0.6
solid_bulk = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.5 0 0 0 1.5 0 0 0 1.5'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0 # unimportant in this fully-saturated situation
phase = 0
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = csv
point = '0.0 0 0'
variable = porepressure
[../]
[./p1]
type = PointValue
outputs = csv
point = '0.1 0 0'
variable = porepressure
[../]
[./p2]
type = PointValue
outputs = csv
point = '0.2 0 0'
variable = porepressure
[../]
[./p3]
type = PointValue
outputs = csv
point = '0.3 0 0'
variable = porepressure
[../]
[./p4]
type = PointValue
outputs = csv
point = '0.4 0 0'
variable = porepressure
[../]
[./p5]
type = PointValue
outputs = csv
point = '0.5 0 0'
variable = porepressure
[../]
[./p6]
type = PointValue
outputs = csv
point = '0.6 0 0'
variable = porepressure
[../]
[./p7]
type = PointValue
outputs = csv
point = '0.7 0 0'
variable = porepressure
[../]
[./p8]
type = PointValue
outputs = csv
point = '0.8 0 0'
variable = porepressure
[../]
[./p9]
type = PointValue
outputs = csv
point = '0.9 0 0'
variable = porepressure
[../]
[./p99]
type = PointValue
outputs = csv
point = '1 0 0'
variable = porepressure
[../]
[./xdisp]
type = PointValue
outputs = csv
point = '1 0.1 0'
variable = disp_x
[../]
[./ydisp]
type = PointValue
outputs = csv
point = '1 0.1 0'
variable = disp_y
[../]
[./total_downwards_force]
type = ElementAverageValue
outputs = csv
variable = tot_force
[../]
[./dt]
type = FunctionValuePostprocessor
outputs = console
function = if(0.15*t<0.01,0.15*t,0.01)
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu 1E-14 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 0.7
[./TimeStepper]
type = PostprocessorDT
postprocessor = dt
dt = 0.001
[../]
[]
[Outputs]
execute_on = 'timestep_end'
file_base = mandel
[./csv]
interval = 3
type = CSV
[../]
[]
modules/porous_flow/test/tests/flux_limited_TVD_pflow/jacobian_01.i
# Checking the Jacobian of Flux-Limited TVD Advection, 1 phase, 1 component, full saturation, using flux_limiter_type = none
# This is quite a heavy test, but we need a fairly big mesh to check the upwinding is happening correctly
[Mesh]
type = GeneratedMesh
dim = 3
nx = 3
xmin = 0
xmax = 1
ny = 4
ymin = -1
ymax = 2
bias_y = 1.5
nz = 4
zmin = 1
zmax = 2
bias_z = 0.8
[]
[GlobalParams]
gravity = '1 2 -0.5'
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pp]
variable = pp
type = RandomIC
min = 1
max = 2
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowFluxLimitedTVDAdvection
variable = pp
advective_flux_calculator = advective_flux_calculator
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 0.4
viscosity = 1.1
[../]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[./advective_flux_calculator]
type = PorousFlowAdvectiveFluxCalculatorSaturated
flux_limiter_type = None
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./relperm]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.21 0 0 0 1.5 0 0 0 0.8'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-snes_type'
petsc_options_value = 'test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
num_steps = 1
dt = 1
[]
modules/porous_flow/test/tests/recover/pffltvd.i
# Tests that PorousFlow can successfully recover using a checkpoint file.
# This test contains stateful material properties, adaptivity, integrated
# boundary conditions with nodal-sized materials, and TVD flux limiting.
#
# This test file is run three times:
# 1) The full input file is run to completion
# 2) The input file is run for half the time and checkpointing is included
# 3) The input file is run in recovery using the checkpoint data
#
# The final output of test 3 is compared to the final output of test 1 to verify
# that recovery was successful.
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 1
[]
[Adaptivity]
initial_steps = 1
initial_marker = tracer_marker
marker = tracer_marker
max_h_level = 1
[./Markers]
[./tracer_marker]
type = ValueRangeMarker
variable = tracer
lower_bound = 0.02
upper_bound = 0.98
[../]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./porepressure]
[../]
[./tracer]
[../]
[]
[ICs]
[./porepressure]
type = FunctionIC
variable = porepressure
function = '2 - x'
[../]
[./tracer]
type = FunctionIC
variable = tracer
function = 'if(x<0.1,0,if(x>0.3,0,1))'
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = tracer
[../]
[./flux0]
type = PorousFlowFluxLimitedTVDAdvection
variable = tracer
advective_flux_calculator = advective_flux_calculator_0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = porepressure
[../]
[./flux1]
type = PorousFlowFluxLimitedTVDAdvection
variable = porepressure
advective_flux_calculator = advective_flux_calculator_1
[../]
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 2
boundary = left
[../]
[./no_tracer_on_left]
type = DirichletBC
variable = tracer
value = 0
boundary = left
[../]
[./remove_component_1]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 1
use_mobility = true
flux_function = 1E3
[../]
[./remove_component_0]
type = PorousFlowPiecewiseLinearSink
variable = tracer
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 0
use_mobility = true
flux_function = 1E3
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
thermal_expansion = 0
viscosity = 1.0
density0 = 1000.0
[../]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure tracer'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[./advective_flux_calculator_0]
type = PorousFlowAdvectiveFluxCalculatorSaturatedMultiComponent
flux_limiter_type = superbee
fluid_component = 0
[../]
[./advective_flux_calculator_1]
type = PorousFlowAdvectiveFluxCalculatorSaturatedMultiComponent
flux_limiter_type = superbee
fluid_component = 1
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = tracer
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = the_simple_fluid
phase = 0
[../]
[./relperm]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-2 0 0 0 1E-2 0 0 0 1E-2'
[../]
[]
[Preconditioning]
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[]
[VectorPostprocessors]
[./tracer]
type = NodalValueSampler
sort_by = x
variable = tracer
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 0.2
dt = 0.05
[]
[Outputs]
csv = true
[]
modules/porous_flow/test/tests/chemistry/except20.i
# Exception test
# No reference chemistry
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./dummy]
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 1E-6
[../]
[./a]
initial_condition = 0.5
[../]
[./ini_mineral_conc]
initial_condition = 0.2
[../]
[./mineral]
family = MONOMIAL
order = CONSTANT
[../]
[./porosity]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./mineral]
type = PorousFlowPropertyAux
property = mineral_concentration
mineral_species = 0
variable = mineral
[../]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./dummy]
type = Diffusion
variable = dummy
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = dummy
number_fluid_phases = 1
number_fluid_components = 2
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./temperature_qp]
type = PorousFlowTemperature
temperature = 1
[../]
[./predis_qp]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = a
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = 2
reactions = 1
specific_reactive_surface_area = 0.5
kinetic_rate_constant = 0.6065306597126334
activation_energy = 3
molar_volume = 2
gas_constant = 6
reference_temperature = 0.5
[../]
[./mineral_conc_qp]
type = PorousFlowAqueousPreDisMineral
initial_concentrations = ini_mineral_conc
[../]
[./porosity]
type = PorousFlowPorosity
chemical = true
porosity_zero = 0.6
initial_mineral_concentrations = ini_mineral_conc
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
nl_abs_tol = 1E-10
dt = 0.1
end_time = 0.4
[]
[Postprocessors]
[./porosity]
type = PointValue
point = '0 0 0'
variable = porosity
[../]
[./c]
type = PointValue
point = '0 0 0'
variable = mineral
[../]
[]
[Outputs]
csv = true
perf_graph = true
[]
modules/porous_flow/test/tests/poroperm/except2.i
# Exception test: fluid=true but no solid_bulk is provided
[Mesh]
type = GeneratedMesh
dim = 3
[]
[GlobalParams]
PorousFlowDictator = dictator
displacements = 'disp_x disp_y disp_z'
biot_coefficient = 0.7
[]
[Variables]
[./porepressure]
initial_condition = 2
[../]
[./temperature]
initial_condition = 4
[../]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[ICs]
[./disp_x]
type = FunctionIC
function = '0.5 * x'
variable = disp_x
[../]
[]
[Kernels]
[./dummy_p]
type = TimeDerivative
variable = porepressure
[../]
[./dummy_t]
type = TimeDerivative
variable = temperature
[../]
[./dummy_x]
type = TimeDerivative
variable = disp_x
[../]
[./dummy_y]
type = TimeDerivative
variable = disp_y
[../]
[./dummy_z]
type = TimeDerivative
variable = disp_z
[../]
[]
[AuxVariables]
[./porosity]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
[../]
[]
[Postprocessors]
[./porosity]
type = PointValue
variable = porosity
point = '0 0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure temperature'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temperature
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./porosity]
type = PorousFlowPorosity
mechanical = true
fluid = true
thermal = true
ensure_positive = false
porosity_zero = 0.5
thermal_expansion_coeff = 0.5
reference_porepressure = 3
reference_temperature = 3.5
[../]
[]
[Executioner]
solve_type = Newton
type = Transient
num_steps = 1
[]
[Outputs]
csv = true
[]
modules/porous_flow/test/tests/jacobian/desorped_mass_vol_exp01.i
# Tests the PorousFlowDesorpedMassVolumetricExpansion kernel
# Fluid with constant bulk modulus, van-Genuchten capillary, HM porosity
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
block = 0
PorousFlowDictator = dictator
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[./conc]
family = MONOMIAL
order = CONSTANT
[../]
[]
[ICs]
[./disp_x]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_x
[../]
[./disp_y]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_y
[../]
[./disp_z]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_z
[../]
[./p]
type = RandomIC
min = -1
max = 1
variable = porepressure
[../]
[./conc]
type = RandomIC
min = 0
max = 1
variable = conc
[../]
[]
[BCs]
# necessary otherwise volumetric strain rate will be zero
[./disp_x]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./disp_y]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'left right'
[../]
[./disp_z]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'left right'
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
displacements = 'disp_x disp_y disp_z'
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
displacements = 'disp_x disp_y disp_z'
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
displacements = 'disp_x disp_y disp_z'
component = 2
[../]
[./poro]
type = PorousFlowMassVolumetricExpansion
fluid_component = 0
variable = porepressure
[../]
[./conc_in_poro]
type = PorousFlowDesorpedMassVolumetricExpansion
conc_var = conc
variable = porepressure
[../]
[./conc]
type = PorousFlowDesorpedMassVolumetricExpansion
conc_var = conc
variable = conc
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z conc'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '2 3'
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
porosity_zero = 0.1
biot_coefficient = 0.5
solid_bulk = 1
[../]
[./p_eff]
type = PorousFlowEffectiveFluidPressure
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E-5
[]
[Outputs]
execute_on = 'timestep_end'
file_base = jacobian2
exodus = false
[]
modules/porous_flow/examples/tutorial/04.i
# Darcy flow with heat advection and conduction, and elasticity
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[./make3D]
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
input = annular
[../]
[./shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[../]
[./aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[../]
[./injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomain_ids = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[../]
[./rename]
type = RenameBlockGenerator
old_block_id = '0 1'
new_block_name = 'caps aquifer'
input = 'injection_area'
[../]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
biot_coefficient = 1.0
[]
[Variables]
[./porepressure]
[../]
[./temperature]
initial_condition = 293
scaling = 1E-8
[../]
[./disp_x]
scaling = 1E-10
[../]
[./disp_y]
scaling = 1E-10
[../]
[./disp_z]
scaling = 1E-10
[../]
[]
[PorousFlowBasicTHM]
porepressure = porepressure
temperature = temperature
coupling_type = ThermoHydroMechanical
gravity = '0 0 0'
fp = the_simple_fluid
thermal_eigenstrain_name = thermal_contribution
use_displaced_mesh = false
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1E6
boundary = injection_area
[../]
[./constant_injection_temperature]
type = DirichletBC
variable = temperature
value = 313
boundary = injection_area
[../]
[./roller_tmax]
type = DirichletBC
variable = disp_x
value = 0
boundary = dmax
[../]
[./roller_tmin]
type = DirichletBC
variable = disp_y
value = 0
boundary = dmin
[../]
[./roller_top_bottom]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'top bottom'
[../]
[./cavity_pressure_x]
type = Pressure
boundary = injection_area
variable = disp_x
component = 0
factor = 1E6
use_displaced_mesh = false
[../]
[./cavity_pressure_y]
type = Pressure
boundary = injection_area
variable = disp_y
component = 1
factor = 1E6
use_displaced_mesh = false
[../]
[]
[AuxVariables]
[./stress_rr]
family = MONOMIAL
order = CONSTANT
[../]
[./stress_pp]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./stress_rr]
type = RankTwoScalarAux
rank_two_tensor = stress
variable = stress_rr
scalar_type = RadialStress
point1 = '0 0 0'
point2 = '0 0 1'
[../]
[./stress_pp]
type = RankTwoScalarAux
rank_two_tensor = stress
variable = stress_pp
scalar_type = HoopStress
point1 = '0 0 0'
point2 = '0 0 1'
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
thermal_expansion = 0.0002
cp = 4194
cv = 4186
porepressure_coefficient = 0
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
solid_bulk_compliance = 2E-7
fluid_bulk_modulus = 1E7
[../]
[./permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[../]
[./permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[../]
[./thermal_expansion]
type = PorousFlowConstantThermalExpansionCoefficient
drained_coefficient = 0.003
fluid_coefficient = 0.0002
[../]
[./rock_internal_energy]
type = PorousFlowMatrixInternalEnergy
density = 2500.0
specific_heat_capacity = 1200.0
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '10 0 0 0 10 0 0 0 10'
block = 'caps aquifer'
[../]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 5E9
poissons_ratio = 0.0
[../]
[./strain]
type = ComputeSmallStrain
eigenstrain_names = thermal_contribution
[../]
[./thermal_contribution]
type = ComputeThermalExpansionEigenstrain
temperature = temperature
thermal_expansion_coeff = 0.001 # this is the linear thermal expansion coefficient
eigenstrain_name = thermal_contribution
stress_free_temperature = 293
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_abs_tol = 1E-15
nl_rel_tol = 1E-14
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/dirackernels/bh_except08.i
# PorousFlowPeacemanBorehole exception test
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = TimeDerivative
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
at_nodes = false # Needed to force expected error
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
bottom_p_or_t = 0
fluid_phase = 0
point_file = bh02.bh
use_mobility = true
SumQuantityUO = borehole_total_outflow_mass
variable = pp
unit_weight = '0 0 0'
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
modules/porous_flow/examples/flow_through_fractured_media/fine_steady.i
# Using a mixed-dimensional mesh
# Steady-state porepressure distribution along a fracture in a porous matrix
# This is used to initialise the transient solute-transport simulation
[Mesh]
type = FileMesh
# The gold mesh is used to reduce the number of large files in the MOOSE repository.
# The porepressure is not read from the gold mesh
file = 'gold/fine_steady_out.e'
block_id = '1 2 3'
block_name = 'fracture matrix1 matrix2'
boundary_id = '1 2'
boundary_name = 'bottom top'
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pp]
type = ConstantIC
variable = pp
value = 1e6
[../]
[]
[BCs]
[./ptop]
type = DirichletBC
variable = pp
boundary = top
value = 1e6
[../]
[./pbottom]
type = DirichletBC
variable = pp
boundary = bottom
value = 1.002e6
[../]
[]
[Kernels]
[./adv0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./relp]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./permeability1]
type = PorousFlowPermeabilityConst
permeability = '1.8e-11 0 0 0 1.8e-11 0 0 0 1.8e-11' # kf=3e-8, a=6e-4m. 1.8e-11 = kf * a
block = 'fracture'
[../]
[./permeability2]
type = PorousFlowPermeabilityConst
permeability = '1e-20 0 0 0 1e-20 0 0 0 1e-20'
block = 'matrix1 matrix2'
[../]
[]
[Preconditioning]
active = basic
[./mumps_is_best_for_parallel_jobs]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[./basic]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu NONZERO 2 '
[../]
[]
[Executioner]
type = Steady
solve_type = NEWTON
# controls for nonlinear iterations
nl_abs_tol = 1e-9
nl_rel_tol = 1e-14
[]
[Outputs]
exodus = true
execute_on = 'timestep_end'
[]
modules/porous_flow/examples/tutorial/08.i
# Unsaturated Darcy-Richards flow
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[./make3D]
input = annular
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
[../]
[./shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[../]
[./aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[../]
[./injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomain_ids = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[../]
[./rename]
type = RenameBlockGenerator
old_block_id = '0 1'
new_block_name = 'caps aquifer'
input = 'injection_area'
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./porepressure]
[../]
[]
[PorousFlowUnsaturated]
porepressure = porepressure
coupling_type = Hydro
gravity = '0 0 0'
fp = the_simple_fluid
relative_permeability_exponent = 3
relative_permeability_type = Corey
residual_saturation = 0.1
van_genuchten_alpha = 1E-6
van_genuchten_m = 0.6
[]
[BCs]
[./production]
type = PorousFlowSink
variable = porepressure
fluid_phase = 0
flux_function = 1E-2
use_relperm = true
boundary = injection_area
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[../]
[./permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_abs_tol = 1E-7
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/poro_elasticity/pp_generation_unconfined.i
# A sample is constrained on all sides, except its top
# and its boundaries are
# also impermeable. Fluid is pumped into the sample via a
# volumetric source (ie kg/second per cubic meter), and the
# rise in the top surface, porepressure, and stress are observed.
#
# In the standard poromechanics scenario, the Biot Modulus is held
# fixed and the source has units 1/time. Then the expected result
# is
# strain_zz = disp_z = BiotCoefficient*BiotModulus*s*t/((bulk + 4*shear/3) + BiotCoefficient^2*BiotModulus)
# porepressure = BiotModulus*(s*t - BiotCoefficient*strain_zz)
# stress_xx = (bulk - 2*shear/3)*strain_zz (remember this is effective stress)
# stress_zz = (bulk + 4*shear/3)*strain_zz (remember this is effective stress)
#
# In porous_flow, however, the source has units kg/s/m^3 and the
# Biot Modulus is not held fixed. This means that disp_z, porepressure,
# etc are not linear functions of t. Nevertheless, the ratios remain
# fixed:
# stress_xx/strain_zz = (bulk - 2*shear/3) = 1 (for the parameters used here)
# stress_zz/strain_zz = (bulk + 4*shear/3) = 4 (for the parameters used here)
# porepressure/strain_zz = 13.3333333 (for the parameters used here)
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.8
alpha = 1e-5
[../]
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./confinez]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back'
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
component = 2
variable = disp_z
[../]
[./poro_vol_exp]
type = PorousFlowMassVolumetricExpansion
variable = porepressure
fluid_component = 0
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = porepressure
[../]
[./flux]
type = PorousFlowAdvectiveFlux
variable = porepressure
gravity = '0 0 0'
fluid_component = 0
[../]
[./source]
type = BodyForce
function = 0.1
variable = porepressure
[../]
[]
[AuxVariables]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
[../]
[./stress_xz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xz
index_i = 0
index_j = 2
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 3.3333333333
density0 = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '1 1.5'
# bulk modulus is lambda + 2*mu/3 = 1 + 2*1.5/3 = 2
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
displacements = 'disp_x disp_y disp_z'
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
porosity_zero = 0.1
biot_coefficient = 0.3
solid_bulk = 2
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 1 0 0 0 1' # unimportant
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0 # unimportant in this fully-saturated situation
phase = 0
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = none
point = '0 0 0'
variable = porepressure
[../]
[./zdisp]
type = PointValue
outputs = none
point = '0 0 0.5'
variable = disp_z
[../]
[./stress_xx]
type = PointValue
outputs = none
point = '0 0 0'
variable = stress_xx
[../]
[./stress_yy]
type = PointValue
outputs = none
point = '0 0 0'
variable = stress_yy
[../]
[./stress_zz]
type = PointValue
outputs = none
point = '0 0 0'
variable = stress_zz
[../]
[./stress_xx_over_strain]
type = FunctionValuePostprocessor
function = stress_xx_over_strain_fcn
outputs = csv
[../]
[./stress_zz_over_strain]
type = FunctionValuePostprocessor
function = stress_zz_over_strain_fcn
outputs = csv
[../]
[./p_over_strain]
type = FunctionValuePostprocessor
function = p_over_strain_fcn
outputs = csv
[../]
[]
[Functions]
[./stress_xx_over_strain_fcn]
type = ParsedFunction
value = a/b
vars = 'a b'
vals = 'stress_xx zdisp'
[../]
[./stress_zz_over_strain_fcn]
type = ParsedFunction
value = a/b
vars = 'a b'
vals = 'stress_zz zdisp'
[../]
[./p_over_strain_fcn]
type = ParsedFunction
value = a/b
vars = 'a b'
vals = 'p0 zdisp'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-14 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 10
dt = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = pp_generation_unconfined
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/poro_elasticity/terzaghi_constM.i
# Terzaghi's problem of consolodation of a drained medium
#
# A saturated soil sample sits in a bath of water.
# It is constrained on its sides, and bottom.
# Its sides and bottom are also impermeable.
# Initially it is unstressed.
# A normal stress, q, is applied to the soil's top.
# The soil then slowly compresses as water is squeezed
# out from the sample from its top (the top BC for
# the porepressure is porepressure = 0).
#
# See, for example. Section 2.2 of the online manuscript
# Arnold Verruijt "Theory and Problems of Poroelasticity" Delft University of Technology 2013
# but note that the "sigma" in that paper is the negative
# of the stress in TensorMechanics
#
# Here are the problem's parameters, and their values:
# Soil height. h = 10
# Soil's Lame lambda. la = 2
# Soil's Lame mu, which is also the Soil's shear modulus. mu = 3
# Soil bulk modulus. K = la + 2*mu/3 = 4
# Soil confined compressibility. m = 1/(K + 4mu/3) = 0.125
# Soil bulk compliance. 1/K = 0.25
# Fluid bulk modulus. Kf = 8
# Fluid bulk compliance. 1/Kf = 0.125
# Fluid mobility (soil permeability/fluid viscosity). k = 1.5
# Soil initial porosity. phi0 = 0.1
# Biot coefficient. alpha = 0.6
# Soil initial storativity, which is the reciprocal of the initial Biot modulus. S = phi0/Kf + (alpha - phi0)(1 - alpha)/K = 0.0625
# Consolidation coefficient. c = k/(S + alpha^2 m) = 13.95348837
# Normal stress on top. q = 1
# Initial porepressure, resulting from instantaneous application of q, assuming corresponding instantaneous increase of porepressure (Note that this is calculated by MOOSE: we only need it for the analytical solution). p0 = alpha*m*q/(S + alpha^2 m) = 0.69767442
# Initial vertical displacement (down is positive), resulting from instantaneous application of q (Note this is calculated by MOOSE: we only need it for the analytical solution). uz0 = q*m*h*S/(S + alpha^2 m)
# Final vertical displacement (down in positive) (Note this is calculated by MOOSE: we only need it for the analytical solution). uzinf = q*m*h
#
# The solution for porepressure is
# P = 4*p0/\pi \sum_{k=1}^{\infty} \frac{(-1)^{k-1}}{2k-1} \cos ((2k-1)\pi z/(2h)) \exp(-(2k-1)^2 \pi^2 ct/(4 h^2))
# This series converges very slowly for ct/h^2 small, so in that domain
# P = p0 erf( (1-(z/h))/(2 \sqrt(ct/h^2)) )
#
# The degree of consolidation is defined as
# U = (uz - uz0)/(uzinf - uz0)
# where uz0 and uzinf are defined above, and
# uz = the vertical displacement of the top (down is positive)
# U = 1 - (8/\pi^2)\sum_{k=1}^{\infty} \frac{1}{(2k-1)^2} \exp(-(2k-1)^2 \pi^2 ct/(4 h^2))
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 10
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = 0
zmax = 10
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.8
alpha = 1
[../]
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./basefixed]
type = DirichletBC
variable = disp_z
value = 0
boundary = back
[../]
[./topdrained]
type = DirichletBC
variable = porepressure
value = 0
boundary = front
[../]
[./topload]
type = NeumannBC
variable = disp_z
value = -1
boundary = front
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
component = 2
variable = disp_z
[../]
[./poro_vol_exp]
type = PorousFlowMassVolumetricExpansion
variable = porepressure
fluid_component = 0
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = porepressure
[../]
[./flux]
type = PorousFlowAdvectiveFlux
variable = porepressure
gravity = '0 0 0'
fluid_component = 0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 8
density0 = 1
thermal_expansion = 0
viscosity = 0.96
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '2 3'
# bulk modulus is lambda + 2*mu/3 = 2 + 2*3/3 = 4
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityHMBiotModulus
porosity_zero = 0.1
biot_coefficient = 0.6
solid_bulk = 4
constant_fluid_bulk_modulus = 8
constant_biot_modulus = 16
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.5 0 0 0 1.5 0 0 0 1.5'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0 # unimportant in this fully-saturated situation
phase = 0
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = csv
point = '0 0 0'
variable = porepressure
use_displaced_mesh = false
[../]
[./p1]
type = PointValue
outputs = csv
point = '0 0 1'
variable = porepressure
use_displaced_mesh = false
[../]
[./p2]
type = PointValue
outputs = csv
point = '0 0 2'
variable = porepressure
use_displaced_mesh = false
[../]
[./p3]
type = PointValue
outputs = csv
point = '0 0 3'
variable = porepressure
use_displaced_mesh = false
[../]
[./p4]
type = PointValue
outputs = csv
point = '0 0 4'
variable = porepressure
use_displaced_mesh = false
[../]
[./p5]
type = PointValue
outputs = csv
point = '0 0 5'
variable = porepressure
use_displaced_mesh = false
[../]
[./p6]
type = PointValue
outputs = csv
point = '0 0 6'
variable = porepressure
use_displaced_mesh = false
[../]
[./p7]
type = PointValue
outputs = csv
point = '0 0 7'
variable = porepressure
use_displaced_mesh = false
[../]
[./p8]
type = PointValue
outputs = csv
point = '0 0 8'
variable = porepressure
use_displaced_mesh = false
[../]
[./p9]
type = PointValue
outputs = csv
point = '0 0 9'
variable = porepressure
use_displaced_mesh = false
[../]
[./p99]
type = PointValue
outputs = csv
point = '0 0 10'
variable = porepressure
use_displaced_mesh = false
[../]
[./zdisp]
type = PointValue
outputs = csv
point = '0 0 10'
variable = disp_z
use_displaced_mesh = false
[../]
[./dt]
type = FunctionValuePostprocessor
outputs = console
function = if(0.5*t<0.1,0.5*t,0.1)
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 10
[./TimeStepper]
type = PostprocessorDT
postprocessor = dt
dt = 0.0001
[../]
[]
[Outputs]
execute_on = 'timestep_end'
file_base = terzaghi_constM
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/poro_elasticity/mandel_fully_saturated_volume.i
# Mandel's problem of consolodation of a drained medium
# Using the FullySaturatedDarcyBase and FullySaturatedFullySaturatedMassTimeDerivative kernels
# with multiply_by_density = false, so that this problem becomes linear
# Note the use of consistent_with_displaced_mesh = false in the calculation of volumetric strain
#
# A sample is in plane strain.
# -a <= x <= a
# -b <= y <= b
# It is squashed with constant force by impermeable, frictionless plattens on its top and bottom surfaces (at y=+/-b)
# Fluid is allowed to leak out from its sides (at x=+/-a)
# The porepressure within the sample is monitored.
#
# As is common in the literature, this is simulated by
# considering the quarter-sample, 0<=x<=a and 0<=y<=b, with
# impermeable, roller BCs at x=0 and y=0 and y=b.
# Porepressure is fixed at zero on x=a.
# Porepressure and displacement are initialised to zero.
# Then the top (y=b) is moved downwards with prescribed velocity,
# so that the total force that is inducing this downwards velocity
# is fixed. The velocity is worked out by solving Mandel's problem
# analytically, and the total force is monitored in the simulation
# to check that it indeed remains constant.
#
# Here are the problem's parameters, and their values:
# Soil width. a = 1
# Soil height. b = 0.1
# Soil's Lame lambda. la = 0.5
# Soil's Lame mu, which is also the Soil's shear modulus. mu = G = 0.75
# Soil bulk modulus. K = la + 2*mu/3 = 1
# Drained Poisson ratio. nu = (3K - 2G)/(6K + 2G) = 0.2
# Soil bulk compliance. 1/K = 1
# Fluid bulk modulus. Kf = 8
# Fluid bulk compliance. 1/Kf = 0.125
# Soil initial porosity. phi0 = 0.1
# Biot coefficient. alpha = 0.6
# Biot modulus. M = 1/(phi0/Kf + (alpha - phi0)(1 - alpha)/K) = 4.705882
# Undrained bulk modulus. Ku = K + alpha^2*M = 2.694118
# Undrained Poisson ratio. nuu = (3Ku - 2G)/(6Ku + 2G) = 0.372627
# Skempton coefficient. B = alpha*M/Ku = 1.048035
# Fluid mobility (soil permeability/fluid viscosity). k = 1.5
# Consolidation coefficient. c = 2*k*B^2*G*(1-nu)*(1+nuu)^2/9/(1-nuu)/(nuu-nu) = 3.821656
# Normal stress on top. F = 1
#
# The solution for porepressure and displacements is given in
# AHD Cheng and E Detournay "A direct boundary element method for plane strain poroelasticity" International Journal of Numerical and Analytical Methods in Geomechanics 12 (1988) 551-572.
# The solution involves complicated infinite series, so I shall not write it here
[Mesh]
type = GeneratedMesh
dim = 3
nx = 10
ny = 1
nz = 1
xmin = 0
xmax = 1
ymin = 0
ymax = 0.1
zmin = 0
zmax = 1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./roller_xmin]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left'
[../]
[./roller_ymin]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom'
[../]
[./plane_strain]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back front'
[../]
[./xmax_drained]
type = DirichletBC
variable = porepressure
value = 0
boundary = right
[../]
[./top_velocity]
type = FunctionDirichletBC
variable = disp_y
function = top_velocity
boundary = top
[../]
[]
[Functions]
[./top_velocity]
type = PiecewiseLinear
x = '0 0.002 0.006 0.014 0.03 0.046 0.062 0.078 0.094 0.11 0.126 0.142 0.158 0.174 0.19 0.206 0.222 0.238 0.254 0.27 0.286 0.302 0.318 0.334 0.35 0.366 0.382 0.398 0.414 0.43 0.446 0.462 0.478 0.494 0.51 0.526 0.542 0.558 0.574 0.59 0.606 0.622 0.638 0.654 0.67 0.686 0.702'
y = '-0.041824842 -0.042730269 -0.043412712 -0.04428867 -0.045509181 -0.04645965 -0.047268246 -0.047974749 -0.048597109 -0.0491467 -0.049632388 -0.050061697 -0.050441198 -0.050776675 -0.051073238 -0.0513354 -0.051567152 -0.051772022 -0.051953128 -0.052113227 -0.052254754 -0.052379865 -0.052490464 -0.052588233 -0.052674662 -0.052751065 -0.052818606 -0.052878312 -0.052931093 -0.052977751 -0.053018997 -0.053055459 -0.053087691 -0.053116185 -0.053141373 -0.05316364 -0.053183324 -0.053200724 -0.053216106 -0.053229704 -0.053241725 -0.053252351 -0.053261745 -0.053270049 -0.053277389 -0.053283879 -0.053289615'
[../]
[]
[AuxVariables]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./tot_force]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[../]
[./tot_force]
type = ParsedAux
args = 'stress_yy porepressure'
execute_on = timestep_end
variable = tot_force
function = '-stress_yy+0.6*porepressure'
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
component = 2
variable = disp_z
[../]
[./mass0]
type = PorousFlowFullySaturatedMassTimeDerivative
biot_coefficient = 0.6
multiply_by_density = false
coupling_type = HydroMechanical
variable = porepressure
[../]
[./flux]
type = PorousFlowFullySaturatedDarcyBase
multiply_by_density = false
variable = porepressure
gravity = '0 0 0'
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 8
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '0.5 0.75'
# bulk modulus is lambda + 2*mu/3 = 0.5 + 2*0.75/3 = 1
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./eff_fluid_pressure_qp]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
consistent_with_displaced_mesh = false
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = porepressure
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid_qp]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst # only the initial value of this is ever used
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.6
solid_bulk_compliance = 1
fluid_bulk_modulus = 8
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.5 0 0 0 1.5 0 0 0 1.5'
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = csv
point = '0.0 0 0'
variable = porepressure
[../]
[./p1]
type = PointValue
outputs = csv
point = '0.1 0 0'
variable = porepressure
[../]
[./p2]
type = PointValue
outputs = csv
point = '0.2 0 0'
variable = porepressure
[../]
[./p3]
type = PointValue
outputs = csv
point = '0.3 0 0'
variable = porepressure
[../]
[./p4]
type = PointValue
outputs = csv
point = '0.4 0 0'
variable = porepressure
[../]
[./p5]
type = PointValue
outputs = csv
point = '0.5 0 0'
variable = porepressure
[../]
[./p6]
type = PointValue
outputs = csv
point = '0.6 0 0'
variable = porepressure
[../]
[./p7]
type = PointValue
outputs = csv
point = '0.7 0 0'
variable = porepressure
[../]
[./p8]
type = PointValue
outputs = csv
point = '0.8 0 0'
variable = porepressure
[../]
[./p9]
type = PointValue
outputs = csv
point = '0.9 0 0'
variable = porepressure
[../]
[./p99]
type = PointValue
outputs = csv
point = '1 0 0'
variable = porepressure
[../]
[./xdisp]
type = PointValue
outputs = csv
point = '1 0.1 0'
variable = disp_x
[../]
[./ydisp]
type = PointValue
outputs = csv
point = '1 0.1 0'
variable = disp_y
[../]
[./total_downwards_force]
type = ElementAverageValue
outputs = csv
variable = tot_force
[../]
[./dt]
type = FunctionValuePostprocessor
outputs = console
function = if(0.15*t<0.01,0.15*t,0.01)
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu 1E-14 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 0.7
[./TimeStepper]
type = PostprocessorDT
postprocessor = dt
dt = 0.001
[../]
[]
[Outputs]
execute_on = 'timestep_end'
file_base = mandel_fully_saturated_volume
[./csv]
interval = 3
type = CSV
[../]
[]
modules/porous_flow/test/tests/dirackernels/bh_except11.i
# PorousFlowPeacemanBorehole exception test
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = TimeDerivative
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
bottom_p_or_t = 0
fluid_phase = 0
point_file = bh02.bh
use_relative_permeability = true
SumQuantityUO = borehole_total_outflow_mass
variable = pp
unit_weight = '0 0 0'
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
modules/porous_flow/examples/tutorial/08_KT.i
# Unsaturated Darcy-Richards flow
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[./make3D]
input = annular
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
[../]
[./shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[../]
[./aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[../]
[./injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomain_ids = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[../]
[./rename]
type = RenameBlockGenerator
old_block_id = '0 1'
new_block_name = 'caps aquifer'
input = 'injection_area'
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./porepressure]
[../]
[]
[PorousFlowUnsaturated]
porepressure = porepressure
coupling_type = Hydro
gravity = '0 0 0'
fp = the_simple_fluid
relative_permeability_exponent = 3
relative_permeability_type = Corey
residual_saturation = 0.1
van_genuchten_alpha = 1E-6
van_genuchten_m = 0.6
stabilization = KT
flux_limiter_type = None
[]
[BCs]
[./production]
type = PorousFlowSink
variable = porepressure
fluid_phase = 0
flux_function = 1E-2
use_relperm = true
boundary = injection_area
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[../]
[./permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E5
dt = 1E5
nl_rel_tol = 1E-14
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/dirackernels/squarepulse1.i
# Test PorousFlowSquarePulsePointSource DiracKernel
[Mesh]
type = GeneratedMesh
dim = 2
bias_x = 1.1
bias_y = 1.1
ymax = 1
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = pp
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.2
[../]
[]
[Postprocessors]
[./total_mass]
type = PorousFlowFluidMass
execute_on = 'initial timestep_end'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
nl_abs_tol = 1e-14
dt = 200
end_time = 2000
[]
[Outputs]
perf_graph = true
file_base = squarepulse1
csv = true
execute_on = 'initial timestep_end'
[./con]
output_linear = true
type = Console
[../]
[]
[ICs]
[./PressureIC]
variable = pp
type = ConstantIC
value = 20e6
[../]
[]
[DiracKernels]
[./sink1]
type = PorousFlowSquarePulsePointSource
start_time = 100
end_time = 300
point = '0.5 0.5 0'
mass_flux = -0.1
variable = pp
[../]
[./sink]
type = PorousFlowSquarePulsePointSource
start_time = 600
end_time = 1400
point = '0.5 0.5 0'
mass_flux = -0.1
variable = pp
[../]
[./source]
point = '0.5 0.5 0'
start_time = 1500
mass_flux = 0.2
end_time = 2000
variable = pp
type = PorousFlowSquarePulsePointSource
[../]
[]
modules/porous_flow/test/tests/flux_limited_TVD_pflow/pffltvd_2D_angle.i
# Using flux-limited TVD advection ala Kuzmin and Turek, mploying PorousFlow Kernels and UserObjects, with superbee flux-limiter
# 2D version with velocity = (0.1, 0.2, 0)
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
xmin = 0
xmax = 1
ny = 10
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./porepressure]
[../]
[./tracer]
[../]
[]
[ICs]
[./porepressure]
type = FunctionIC
variable = porepressure
function = '1 - x - 2 * y'
[../]
[./tracer]
type = FunctionIC
variable = tracer
function = 'if(x<0.1 | x > 0.3 | y < 0.1 | y > 0.3, 0, 1)'
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = tracer
[../]
[./flux0]
type = PorousFlowFluxLimitedTVDAdvection
variable = tracer
advective_flux_calculator = advective_flux_calculator_0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = porepressure
[../]
[./flux1]
type = PorousFlowFluxLimitedTVDAdvection
variable = porepressure
advective_flux_calculator = advective_flux_calculator_1
[../]
[]
[BCs]
[./constant_boundary_porepressure]
type = FunctionDirichletBC
variable = porepressure
function = '1 - x - 2 * y'
boundary = 'left right top bottom'
[../]
[./no_tracer_at_boundary]
type = DirichletBC
variable = tracer
value = 0
boundary = 'left right top bottom'
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
thermal_expansion = 0
viscosity = 1.0
density0 = 1000.0
[../]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure tracer'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[./advective_flux_calculator_0]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
flux_limiter_type = superbee
fluid_component = 0
[../]
[./advective_flux_calculator_1]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
flux_limiter_type = superbee
fluid_component = 1
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = tracer
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = the_simple_fluid
phase = 0
[../]
[./relperm]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-2 0 0 0 1E-2 0 0 0 1E-2'
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 0.3
dt = 0.1
[]
[Outputs]
[./out]
type = Exodus
execute_on = 'initial final'
[../]
[]
modules/porous_flow/test/tests/gravity/grav02c.i
# Checking that gravity head is established in the transient situation when 0<=saturation<=1 (note the less-than-or-equal-to).
# 2phase (PP), 2components, vanGenuchten, constant fluid bulk-moduli for each phase, constant viscosity, constant permeability, Corey relative perm
# For better agreement with the analytical solution (ana_pp), just increase nx
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = -1
xmax = 0
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Functions]
[./dts]
type = PiecewiseLinear
y = '1E-3 1E-2 1E-1'
x = '1E-3 1E-2 1E-1'
[../]
[]
[Variables]
[./ppwater]
initial_condition = -0.1
[../]
[./ppgas]
initial_condition = 0
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = ppwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = ppwater
gravity = '-1 0 0'
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = ppgas
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = ppgas
gravity = '-1 0 0'
[../]
[]
[Functions]
[./ana_ppwater]
type = ParsedFunction
vars = 'g B p0 rho0'
vals = '1 2 pp_water_top 1'
value = '-B*log(exp(-p0/B)+g*rho0*x/B)' # expected pp at base
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 2
density0 = 1
viscosity = 1
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 0.1
viscosity = 0.5
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 0
[../]
[./relperm_gas]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 1
[../]
[]
[Postprocessors]
[./pp_water_top]
type = PointValue
variable = ppwater
point = '0 0 0'
[../]
[./pp_water_base]
type = PointValue
variable = ppwater
point = '-1 0 0'
[../]
[./pp_water_analytical]
type = FunctionValuePostprocessor
function = ana_ppwater
point = '-1 0 0'
[../]
[./mass_ph0]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'initial timestep_end'
[../]
[./mass_ph1]
type = PorousFlowFluidMass
fluid_component = 1
execute_on = 'initial timestep_end'
[../]
[]
[Preconditioning]
active = andy
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-12 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-12 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
[./TimeStepper]
type = FunctionDT
function = dts
[../]
end_time = 1.0
[]
[Outputs]
execute_on = 'initial timestep_end'
file_base = grav02c
[./csv]
type = CSV
[../]
exodus = true
[]
modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d.i
# Pressure pulse in 1D with 1 phase - transient
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 2E6
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./flux]
type = PorousFlowAdvectiveFlux
variable = pp
gravity = '0 0 0'
fluid_component = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-15'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0
phase = 0
[../]
[]
[BCs]
[./left]
type = DirichletBC
boundary = left
value = 3E6
variable = pp
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-20 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E3
end_time = 1E4
[]
[Postprocessors]
[./p000]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = 'initial timestep_end'
[../]
[./p010]
type = PointValue
variable = pp
point = '10 0 0'
execute_on = 'initial timestep_end'
[../]
[./p020]
type = PointValue
variable = pp
point = '20 0 0'
execute_on = 'initial timestep_end'
[../]
[./p030]
type = PointValue
variable = pp
point = '30 0 0'
execute_on = 'initial timestep_end'
[../]
[./p040]
type = PointValue
variable = pp
point = '40 0 0'
execute_on = 'initial timestep_end'
[../]
[./p050]
type = PointValue
variable = pp
point = '50 0 0'
execute_on = 'initial timestep_end'
[../]
[./p060]
type = PointValue
variable = pp
point = '60 0 0'
execute_on = 'initial timestep_end'
[../]
[./p070]
type = PointValue
variable = pp
point = '70 0 0'
execute_on = 'initial timestep_end'
[../]
[./p080]
type = PointValue
variable = pp
point = '80 0 0'
execute_on = 'initial timestep_end'
[../]
[./p090]
type = PointValue
variable = pp
point = '90 0 0'
execute_on = 'initial timestep_end'
[../]
[./p100]
type = PointValue
variable = pp
point = '100 0 0'
execute_on = 'initial timestep_end'
[../]
[]
[Outputs]
file_base = pressure_pulse_1d
print_linear_residuals = false
csv = true
[]
modules/porous_flow/test/tests/poroperm/PermTensorFromVar01.i
# Testing permeability calculated from scalar and tensor
# Trivial test, checking calculated permeability is correct
# k = k_anisotropy * perm
[Mesh]
type = GeneratedMesh
dim = 1
nx = 3
xmin = 0
xmax = 3
[]
[GlobalParams]
block = 0
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[./InitialCondition]
type = ConstantIC
value = 0
[../]
[../]
[]
[Kernels]
[./flux]
type = PorousFlowAdvectiveFlux
gravity = '0 0 0'
variable = pp
[../]
[]
[BCs]
[./ptop]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[./pbase]
type = DirichletBC
variable = pp
boundary = left
value = 1
[../]
[]
[AuxVariables]
[./perm_var]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_x]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_y]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_z]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./perm_var]
type = ConstantAux
value = 2
variable = perm_var
[../]
[./perm_x]
type = PorousFlowPropertyAux
property = permeability
variable = perm_x
row = 0
column = 0
[../]
[./perm_y]
type = PorousFlowPropertyAux
property = permeability
variable = perm_y
row = 1
column = 1
[../]
[./perm_z]
type = PorousFlowPropertyAux
property = permeability
variable = perm_z
row = 2
column = 2
[../]
[]
[Postprocessors]
[./perm_x_left]
type = PointValue
variable = perm_x
point = '0.5 0 0'
[../]
[./perm_y_left]
type = PointValue
variable = perm_y
point = '0.5 0 0'
[../]
[./perm_z_left]
type = PointValue
variable = perm_z
point = '0.5 0 0'
[../]
[./perm_x_right]
type = PointValue
variable = perm_x
point = '2.5 0 0'
[../]
[./perm_y_right]
type = PointValue
variable = perm_y
point = '2.5 0 0'
[../]
[./perm_z_right]
type = PointValue
variable = perm_z
point = '2.5 0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
# unimportant in this fully-saturated test
m = 0.8
alpha = 1e-4
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./permeability]
type = PorousFlowPermeabilityTensorFromVar
k_anisotropy = '1 0 0 0 2 0 0 0 0.1'
perm = perm_var
[../]
[./temperature]
type = PorousFlowTemperature
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0 # unimportant in this fully-saturated situation
phase = 0
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
solve_type = Newton
type = Steady
l_tol = 1E-5
nl_abs_tol = 1E-3
nl_rel_tol = 1E-8
l_max_its = 200
nl_max_its = 400
petsc_options_iname = '-pc_type -pc_asm_overlap -sub_pc_type -ksp_type -ksp_gmres_restart'
petsc_options_value = ' asm 2 lu gmres 200'
[]
[Outputs]
csv = true
execute_on = 'timestep_end'
[]
modules/porous_flow/test/tests/gravity/grav01d.i
# Test illustrating that PorousFlow allows block-restricted relative permeabilities and capillarities
# and automatically adds appropriate Joiners.
# Physically, this test is checking that gravity head is established
# for 1phase, vanGenuchten, constant fluid-bulk, constant viscosity, constant permeability, Corey relative perm
# For better agreement with the analytical solution (ana_pp), just increase nx
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 1
nx = 100
xmin = -1
xmax = 0
[]
[./define_block1]
input = gen
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '-1 -1 -1'
top_right = '-0.5 1 1'
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[./InitialCondition]
type = RandomIC
min = -1
max = 1
[../]
[../]
[]
[Kernels]
[./dot]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
gravity = '-1 0 0'
[../]
[]
[Functions]
[./ana_pp]
type = ParsedFunction
vars = 'g B p0 rho0'
vals = '1 2 -1 1'
value = '-B*log(exp(-p0/B)+g*rho0*x/B)' # expected pp at base
[../]
[]
[BCs]
[./z]
type = DirichletBC
variable = pp
boundary = right
value = -1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc_0]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[./pc_1]
type = PorousFlowCapillaryPressureVG
m = 0.6
alpha = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2
density0 = 1
viscosity = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss_0]
type = PorousFlow1PhaseP
block = 0
porepressure = pp
capillary_pressure = pc_0
[../]
[./ppss_1]
type = PorousFlow1PhaseP
block = 1
porepressure = pp
capillary_pressure = pc_1
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm_0]
type = PorousFlowRelativePermeabilityCorey
block = 0
n = 1
phase = 0
[../]
[./relperm_1]
type = PorousFlowRelativePermeabilityCorey
block = 1
n = 2
phase = 0
[../]
[]
[Postprocessors]
[./pp_base]
type = PointValue
variable = pp
point = '-1 0 0'
[../]
[./pp_analytical]
type = FunctionValuePostprocessor
function = ana_pp
point = '-1 0 0'
[../]
[]
[Preconditioning]
active = andy
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E6
end_time = 1E6
[]
[Outputs]
execute_on = 'timestep_end'
file_base = grav01d
csv = true
[]
modules/porous_flow/test/tests/flux_limited_TVD_pflow/pffltvd_2D_trimesh.i
# Using flux-limited TVD advection ala Kuzmin and Turek, mploying PorousFlow Kernels and UserObjects, with superbee flux-limiter
# 2D version
[Mesh]
type = FileMesh
file = trimesh.msh
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
block = '50'
[]
[Variables]
[./porepressure]
[../]
[./tracer]
[../]
[]
[ICs]
[./porepressure]
type = FunctionIC
variable = porepressure
function = '1 - x'
[../]
[./tracer]
type = FunctionIC
variable = tracer
function = 'if(x<0.1,0,if(x>0.305,0,1))'
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = tracer
[../]
[./flux0]
type = PorousFlowFluxLimitedTVDAdvection
variable = tracer
advective_flux_calculator = advective_flux_calculator_0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = porepressure
[../]
[./flux1]
type = PorousFlowFluxLimitedTVDAdvection
variable = porepressure
advective_flux_calculator = advective_flux_calculator_1
[../]
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1
boundary = left
[../]
[./no_tracer_on_left]
type = DirichletBC
variable = tracer
value = 0
boundary = left
[../]
[./remove_component_1]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 1
use_mobility = true
flux_function = 1E3
[../]
[./remove_component_0]
type = PorousFlowPiecewiseLinearSink
variable = tracer
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 0
use_mobility = true
flux_function = 1E3
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
thermal_expansion = 0
viscosity = 1.0
density0 = 1000.0
[../]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure tracer'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[./advective_flux_calculator_0]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
flux_limiter_type = superbee
fluid_component = 0
[../]
[./advective_flux_calculator_1]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
flux_limiter_type = superbee
fluid_component = 1
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = tracer
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = the_simple_fluid
phase = 0
[../]
[./relperm]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-2 0 0 0 1E-2 0 0 0 1E-2'
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[VectorPostprocessors]
[./tracer]
type = LineValueSampler
start_point = '0 0 0'
end_point = '1 0.04 0'
num_points = 101
sort_by = x
variable = tracer
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 6
dt = 6E-2
nl_abs_tol = 1E-8
timestep_tolerance = 1E-3
[]
[Outputs]
print_linear_residuals = false
[./out]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/dirackernels/bh_except13.i
# PorousFlowPeacemanBorehole exception test
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = TimeDerivative
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
bottom_p_or_t = 0
fluid_phase = 0
point_file = coincident_points.bh
SumQuantityUO = borehole_total_outflow_mass
variable = pp
unit_weight = '0 0 0'
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_2phasePS_KT.i
# Pressure pulse in 1D with 2 phases, 2components - transient
# Using KT stabilization
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./ppwater]
initial_condition = 2e6
[../]
[./sgas]
initial_condition = 0.3
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[./ppgas]
family = MONOMIAL
order = FIRST
[../]
[]
[Kernels]
[./mass_component0]
type = PorousFlowMassTimeDerivative
variable = ppwater
fluid_component = 0
[../]
[./flux_component0_phase0]
type = PorousFlowFluxLimitedTVDAdvection
variable = ppwater
advective_flux_calculator = afc_component0_phase0
[../]
[./flux_component0_phase1]
type = PorousFlowFluxLimitedTVDAdvection
variable = ppwater
advective_flux_calculator = afc_component0_phase1
[../]
[./mass_component1]
type = PorousFlowMassTimeDerivative
variable = sgas
fluid_component = 1
[../]
[./flux_component1_phase0]
type = PorousFlowFluxLimitedTVDAdvection
variable = sgas
advective_flux_calculator = afc_component1_phase0
[../]
[./flux_component1_phase1]
type = PorousFlowFluxLimitedTVDAdvection
variable = sgas
advective_flux_calculator = afc_component1_phase1
[../]
[]
[AuxKernels]
[./ppgas]
type = PorousFlowPropertyAux
property = pressure
phase = 1
variable = ppgas
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater sgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
pc = 1e5
[../]
[./afc_component0_phase0]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
fluid_component = 0
phase = 0
flux_limiter_type = superbee
[../]
[./afc_component0_phase1]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
fluid_component = 0
phase = 1
flux_limiter_type = superbee
[../]
[./afc_component1_phase0]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
fluid_component = 1
phase = 0
flux_limiter_type = superbee
[../]
[./afc_component1_phase1]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
fluid_component = 1
phase = 1
flux_limiter_type = superbee
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 2e7
density0 = 1
thermal_expansion = 0
viscosity = 1e-5
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = ppwater
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1e-15 0 0 0 1e-15 0 0 0 1e-15'
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 0
[../]
[./relperm_gas]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 1
[../]
[]
[BCs]
[./leftwater]
type = DirichletBC
boundary = left
value = 3e6
variable = ppwater
[../]
[./rightwater]
type = DirichletBC
boundary = right
value = 2e6
variable = ppwater
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-20 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1e3
end_time = 1e4
[]
[VectorPostprocessors]
[./pp]
type = LineValueSampler
sort_by = x
variable = 'ppwater ppgas'
start_point = '0 0 0'
end_point = '100 0 0'
num_points = 11
[../]
[]
[Outputs]
file_base = pressure_pulse_1d_2phasePS_KT
print_linear_residuals = false
[./csv]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/mass_conservation/mass07.i
# Checking that the mass postprocessor throws the correct error if
# too many phases are supplied
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./sat]
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[]
[ICs]
[./pinit]
type = ConstantIC
value = 1
variable = pp
[../]
[./satinit]
type = FunctionIC
function = 1-x
variable = sat
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sat
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp sat'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 1
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 0.1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = pp
phase1_saturation = sat
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Postprocessors]
[./comp1_total_mass]
type = PorousFlowFluidMass
fluid_component = 1
phase = '0 1 2'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
modules/porous_flow/test/tests/jacobian/mass09.i
# 2phase (PS)
# vanGenuchten, constant-bulk density for each phase, constant porosity, 2components (that exist in both phases)
# unsaturated
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1
ny = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./sgas]
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
[../]
[./massfrac_ph1_sp0]
[../]
[]
[ICs]
[./ppwater]
type = RandomIC
variable = ppwater
min = 0
max = 1
[../]
[./sgas]
type = RandomIC
variable = sgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 1
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 1
[../]
[]
[Kernels]
[./mass_sp0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = ppwater
[../]
[./mass_sp1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sgas
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater sgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
pc_max = 10
sat_lr = 0.1
log_extension = false
s_scale = 0.9
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = ppwater
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Preconditioning]
active = check
[./check]
type = SMP
full = true
petsc_options_iname = '-snes_type'
petsc_options_value = 'test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/mass_conservation/mass05.i
# Checking that the mass postprocessor correctly calculates the mass
# of each component in each phase, as well as the total mass of each
# component in all phases.
# 2phase, 2component, constant porosity
[Mesh]
type = GeneratedMesh
dim = 1
nx = 2
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./sat]
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 0.3
[../]
[./massfrac_ph1_sp0]
initial_condition = 0.55
[../]
[]
[ICs]
[./pinit]
type = ConstantIC
value = 1
variable = pp
[../]
[./satinit]
type = FunctionIC
function = 1-x
variable = sat
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sat
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp sat'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
pc = 0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 1
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 0.1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = pp
phase1_saturation = sat
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Postprocessors]
[./comp0_phase0_mass]
type = PorousFlowFluidMass
fluid_component = 0
phase = 0
[../]
[./comp0_phase1_mass]
type = PorousFlowFluidMass
fluid_component = 0
phase = 1
[../]
[./comp0_total_mass]
type = PorousFlowFluidMass
fluid_component = 0
[../]
[./comp0_total_mass2]
type = PorousFlowFluidMass
fluid_component = 0
phase = '0 1'
[../]
[./comp1_phase0_mass]
type = PorousFlowFluidMass
fluid_component = 1
phase = 0
[../]
[./comp1_phase1_mass]
type = PorousFlowFluidMass
fluid_component = 1
phase = 1
[../]
[./comp1_total_mass]
type = PorousFlowFluidMass
fluid_component = 1
[../]
[./comp1_total_mass2]
type = PorousFlowFluidMass
fluid_component = 1
phase = '0 1'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
nl_abs_tol = 1e-16
dt = 1
end_time = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = mass05
csv = true
[]
modules/porous_flow/test/tests/gravity/fully_saturated_grav01a.i
# Checking that gravity head is established
# 1phase, constant fluid-bulk, constant viscosity, constant permeability
# fully saturated
# For better agreement with the analytical solution (ana_pp), just increase nx
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmin = -1
xmax = 0
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[./InitialCondition]
type = RandomIC
min = 0
max = 1
[../]
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowFullySaturatedDarcyBase
variable = pp
gravity = '-1 0 0'
[../]
[]
[Functions]
[./ana_pp]
type = ParsedFunction
vars = 'g B p0 rho0'
vals = '1 1.2 0 1'
value = '-B*log(exp(-p0/B)+g*rho0*x/B)' # expected pp at base
[../]
[]
[BCs]
[./z]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.2
density0 = 1
viscosity = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[]
[Postprocessors]
[./pp_base]
type = PointValue
variable = pp
point = '-1 0 0'
[../]
[./pp_analytical]
type = FunctionValuePostprocessor
function = ana_pp
point = '-1 0 0'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
execute_on = 'timestep_end'
file_base = fully_saturated_grav01a
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/dirackernels/bh07.i
# Comparison with analytical solution for cylindrically-symmetric situation
[Mesh]
type = FileMesh
file = bh07_input.e
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Functions]
[./dts]
type = PiecewiseLinear
y = '1000 10000'
x = '100 1000'
[../]
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./fflux]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
gravity = '0 0 0'
[../]
[]
[BCs]
[./fix_outer]
type = DirichletBC
boundary = perimeter
variable = pp
value = 1E7
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.8
alpha = 1e-5
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-11 0 0 0 1E-11 0 0 0 1E-11'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityFLAC
m = 2
phase = 0
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
variable = pp
SumQuantityUO = borehole_total_outflow_mass
point_file = bh07.bh
fluid_phase = 0
bottom_p_or_t = 0
unit_weight = '0 0 0'
use_mobility = true
re_constant = 0.1594 # use Chen and Zhang version
character = 2 # double the strength because bh07.bh only fills half the mesh
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
execute_on = 'initial timestep_end'
[../]
[./fluid_mass]
type = PorousFlowFluidMass
execute_on = 'initial timestep_end'
[../]
[]
[VectorPostprocessors]
[./pp]
type = LineValueSampler
variable = pp
start_point = '0 0 0'
end_point = '300 0 0'
sort_by = x
num_points = 300
execute_on = timestep_end
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 1E3
solve_type = NEWTON
[./TimeStepper]
# get only marginally better results for smaller time steps
type = FunctionDT
function = dts
[../]
[]
[Outputs]
file_base = bh07
[./along_line]
type = CSV
execute_on = final
[../]
[./exodus]
type = Exodus
execute_on = 'initial final'
[../]
[]
modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_2phase.i
# Pressure pulse in 1D with 2 phases (with one having zero saturation), 2components - transient
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
initial_condition = 2E6
[../]
[./ppgas]
initial_condition = 2E6
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = ppwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
variable = ppwater
gravity = '0 0 0'
fluid_component = 0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = ppgas
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
variable = ppgas
gravity = '0 0 0'
fluid_component = 1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 2e6
density0 = 1
thermal_expansion = 0
viscosity = 1e-5
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-15'
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 0
[../]
[./relperm_gas]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 1
[../]
[]
[BCs]
[./leftwater]
type = DirichletBC
boundary = left
value = 3E6
variable = ppwater
[../]
[./leftgas]
type = DirichletBC
boundary = left
value = 3E6
variable = ppgas
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options = '-snes_converged_reason -ksp_diagonal_scale -ksp_diagonal_scale_fix -ksp_gmres_modifiedgramschmidt -snes_linesearch_monitor'
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu NONZERO 2 1E-15 1E-20 20'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E3
end_time = 1E4
[]
[Postprocessors]
[./p000]
type = PointValue
variable = ppwater
point = '0 0 0'
execute_on = 'initial timestep_end'
[../]
[./p010]
type = PointValue
variable = ppwater
point = '10 0 0'
execute_on = 'initial timestep_end'
[../]
[./p020]
type = PointValue
variable = ppwater
point = '20 0 0'
execute_on = 'initial timestep_end'
[../]
[./p030]
type = PointValue
variable = ppwater
point = '30 0 0'
execute_on = 'initial timestep_end'
[../]
[./p040]
type = PointValue
variable = ppwater
point = '40 0 0'
execute_on = 'initial timestep_end'
[../]
[./p050]
type = PointValue
variable = ppwater
point = '50 0 0'
execute_on = 'initial timestep_end'
[../]
[./p060]
type = PointValue
variable = ppwater
point = '60 0 0'
execute_on = 'initial timestep_end'
[../]
[./p070]
type = PointValue
variable = ppwater
point = '70 0 0'
execute_on = 'initial timestep_end'
[../]
[./p080]
type = PointValue
variable = ppwater
point = '80 0 0'
execute_on = 'initial timestep_end'
[../]
[./p090]
type = PointValue
variable = ppwater
point = '90 0 0'
execute_on = 'initial timestep_end'
[../]
[./p100]
type = PointValue
variable = ppwater
point = '100 0 0'
execute_on = 'initial timestep_end'
[../]
[]
[Outputs]
file_base = pressure_pulse_1d_2phase
print_linear_residuals = false
csv = true
[]
modules/porous_flow/test/tests/jacobian/mass08.i
# 1phase
# vanGenuchten, constant-bulk density, HM porosity, 1component, unsaturated
[Mesh]
type = GeneratedMesh
dim = 3
xmin = -1
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./pp]
[../]
[]
[ICs]
[./disp_x]
type = RandomIC
variable = disp_x
min = -0.1
max = 0.1
[../]
[./disp_y]
type = RandomIC
variable = disp_y
min = -0.1
max = 0.1
[../]
[./disp_z]
type = RandomIC
variable = disp_z
min = -0.1
max = 0.1
[../]
[./pp]
type = RandomIC
variable = pp
min = -1
max = 1
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '0.5 0.75'
# bulk modulus is lambda + 2*mu/3 = 0.5 + 2*0.75/3 = 1
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
porosity_zero = 0.1
biot_coefficient = 0.5
solid_bulk = 1
[../]
[./p_eff]
type = PorousFlowEffectiveFluidPressure
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/numerical_diffusion/pffltvd.i
# Using flux-limited TVD advection ala Kuzmin and Turek, employing PorousFlow Kernels and UserObjects, with superbee flux-limiter
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./porepressure]
[../]
[./tracer]
[../]
[]
[ICs]
[./porepressure]
type = FunctionIC
variable = porepressure
function = '1 - x'
[../]
[./tracer]
type = FunctionIC
variable = tracer
function = 'if(x<0.1,0,if(x>0.3,0,1))'
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = tracer
[../]
[./flux0]
type = PorousFlowFluxLimitedTVDAdvection
variable = tracer
advective_flux_calculator = advective_flux_calculator_0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = porepressure
[../]
[./flux1]
type = PorousFlowFluxLimitedTVDAdvection
variable = porepressure
advective_flux_calculator = advective_flux_calculator_1
[../]
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1
boundary = left
[../]
[./no_tracer_on_left]
type = DirichletBC
variable = tracer
value = 0
boundary = left
[../]
[./remove_component_1]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 1
use_mobility = true
flux_function = 1E3
[../]
[./remove_component_0]
type = PorousFlowPiecewiseLinearSink
variable = tracer
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 0
use_mobility = true
flux_function = 1E3
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
thermal_expansion = 0
viscosity = 1.0
density0 = 1000.0
[../]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure tracer'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[./advective_flux_calculator_0]
type = PorousFlowAdvectiveFluxCalculatorSaturatedMultiComponent
flux_limiter_type = superbee
fluid_component = 0
[../]
[./advective_flux_calculator_1]
type = PorousFlowAdvectiveFluxCalculatorSaturatedMultiComponent
flux_limiter_type = superbee
fluid_component = 1
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = tracer
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = the_simple_fluid
phase = 0
[../]
[./relperm]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-2 0 0 0 1E-2 0 0 0 1E-2'
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[VectorPostprocessors]
[./tracer]
type = LineValueSampler
start_point = '0 0 0'
end_point = '1 0 0'
num_points = 101
sort_by = x
variable = tracer
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 6
dt = 6E-2
nl_abs_tol = 1E-8
timestep_tolerance = 1E-3
[]
[Outputs]
[./out]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/examples/tidal/atm_tides.i
# A 10m x 10m "column" of height 100m is subjected to cyclic pressure at its top
# Assumptions:
# the boundaries are impermeable, except the top boundary
# only vertical displacement is allowed
# the atmospheric pressure sets the total stress at the top of the model
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 10
xmin = 0
xmax = 10
ymin = 0
ymax = 10
zmin = -100
zmax = 0
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
biot_coefficient = 0.6
multiply_by_density = false
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
scaling = 1E11
[../]
[]
[ICs]
[./porepressure]
type = FunctionIC
variable = porepressure
function = '-10000*z' # approximately correct
[../]
[]
[Functions]
[./ini_stress_zz]
type = ParsedFunction
value = '(25000 - 0.6*10000)*z' # remember this is effective stress
[../]
[./cyclic_porepressure]
type = ParsedFunction
value = 'if(t>0,5000 * sin(2 * pi * t / 3600.0 / 24.0),0)'
[../]
[./neg_cyclic_porepressure]
type = ParsedFunction
value = '-if(t>0,5000 * sin(2 * pi * t / 3600.0 / 24.0),0)'
[../]
[]
[BCs]
# zmin is called 'back'
# zmax is called 'front'
# ymin is called 'bottom'
# ymax is called 'top'
# xmin is called 'left'
# xmax is called 'right'
[./no_x_disp]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'bottom top' # because of 1-element meshing, this fixes u_x=0 everywhere
[../]
[./no_y_disp]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top' # because of 1-element meshing, this fixes u_y=0 everywhere
[../]
[./no_z_disp_at_bottom]
type = DirichletBC
variable = disp_z
value = 0
boundary = back
[../]
[./pp]
type = FunctionDirichletBC
variable = porepressure
function = cyclic_porepressure
boundary = front
[../]
[./total_stress_at_top]
type = FunctionNeumannBC
variable = disp_z
function = neg_cyclic_porepressure
boundary = front
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.0
bulk_modulus = 2E9
viscosity = 1E-3
density0 = 1000.0
[../]
[../]
[]
[PorousFlowBasicTHM]
coupling_type = HydroMechanical
displacements = 'disp_x disp_y disp_z'
porepressure = porepressure
gravity = '0 0 -10'
fp = the_simple_fluid
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
bulk_modulus = 10.0E9 # drained bulk modulus
poissons_ratio = 0.25
[../]
[./strain]
type = ComputeSmallStrain
eigenstrain_names = ini_stress
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./ini_stress]
type = ComputeEigenstrainFromInitialStress
initial_stress = '0 0 0 0 0 0 0 0 ini_stress_zz'
eigenstrain_name = ini_stress
[../]
[./porosity]
type = PorousFlowPorosityConst # only the initial value of this is ever used
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
solid_bulk_compliance = 1E-10
fluid_bulk_modulus = 2E9
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-14'
[../]
[./density]
type = GenericConstantMaterial
prop_names = density
prop_values = 2500.0
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = csv
point = '0 0 0'
variable = porepressure
[../]
[./uz0]
type = PointValue
outputs = csv
point = '0 0 0'
variable = disp_z
[../]
[./p100]
type = PointValue
outputs = csv
point = '0 0 -100'
variable = porepressure
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = -3600 # so postprocessors get recorded correctly at t=0
dt = 3600
end_time = 360000
nl_abs_tol = 5E-7
nl_rel_tol = 1E-10
[]
[Outputs]
csv = true
[]
modules/porous_flow/test/tests/poro_elasticity/pp_generation_unconfined_fully_saturated.i
# A sample is constrained on all sides, except its top
# and its boundaries are
# also impermeable. Fluid is pumped into the sample via a
# volumetric source (ie kg/second per cubic meter), and the
# rise in the top surface, porepressure, and stress are observed.
#
# In the standard poromechanics scenario, the Biot Modulus is held
# fixed and the source has units 1/time. Then the expected result
# is
# strain_zz = disp_z = BiotCoefficient*BiotModulus*s*t/((bulk + 4*shear/3) + BiotCoefficient^2*BiotModulus)
# porepressure = BiotModulus*(s*t - BiotCoefficient*strain_zz)
# stress_xx = (bulk - 2*shear/3)*strain_zz (remember this is effective stress)
# stress_zz = (bulk + 4*shear/3)*strain_zz (remember this is effective stress)
#
# In porous_flow, however, the source has units kg/s/m^3. The ratios remain
# fixed:
# stress_xx/strain_zz = (bulk - 2*shear/3) = 1 (for the parameters used here)
# stress_zz/strain_zz = (bulk + 4*shear/3) = 4 (for the parameters used here)
# porepressure/strain_zz = 13.3333333 (for the parameters used here)
#
# Expect
# disp_z = 0.3*10*s*t/((2 + 4*1.5/3) + 0.3^2*10) = 0.612245*s*t
# porepressure = 10*(s*t - 0.3*0.612245*s*t) = 8.163265*s*t
# stress_xx = (2 - 2*1.5/3)*0.612245*s*t = 0.612245*s*t
# stress_zz = (2 + 4*shear/3)*0.612245*s*t = 2.44898*s*t
# The relationship between the constant poroelastic source
# s (m^3/second/m^3) and the PorousFlow source, S (kg/second/m^3) is
# S = fluid_density * s = s * exp(porepressure/fluid_bulk)
#
# Finally, note that the volumetric strain has
# consistent_with_displaced_mesh = false
# which is needed when using the FullySaturated version of the Kernels
# in order to generate the above results
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./confinez]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back'
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
component = 2
variable = disp_z
[../]
[./mass0]
type = PorousFlowFullySaturatedMassTimeDerivative
variable = porepressure
coupling_type = HydroMechanical
biot_coefficient = 0.3
[../]
[./source]
type = BodyForce
function = '0.1*exp(8.163265306*0.1*t/3.3333333333)'
variable = porepressure
[../]
[]
[AuxVariables]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
[../]
[./stress_xz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xz
index_i = 0
index_j = 2
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 3.3333333333
density0 = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature_qp]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '1 1.5'
# bulk modulus is lambda + 2*mu/3 = 1 + 2*1.5/3 = 2
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
displacements = 'disp_x disp_y disp_z'
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
consistent_with_displaced_mesh = false
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = porepressure
[../]
[./simple_fluid_qp]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst # the "const" is irrelevant here: all that uses Porosity is the BiotModulus, which just uses the initial value of porosity
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.3
fluid_bulk_modulus = 3.3333333333
solid_bulk_compliance = 0.5
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = csv
point = '0 0 0'
variable = porepressure
[../]
[./zdisp]
type = PointValue
outputs = csv
point = '0 0 0.5'
variable = disp_z
[../]
[./stress_xx]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_xx
[../]
[./stress_yy]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_yy
[../]
[./stress_zz]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_zz
[../]
[./stress_xx_over_strain]
type = FunctionValuePostprocessor
function = stress_xx_over_strain_fcn
outputs = csv
[../]
[./stress_zz_over_strain]
type = FunctionValuePostprocessor
function = stress_zz_over_strain_fcn
outputs = csv
[../]
[./p_over_strain]
type = FunctionValuePostprocessor
function = p_over_strain_fcn
outputs = csv
[../]
[]
[Functions]
[./stress_xx_over_strain_fcn]
type = ParsedFunction
value = a/b
vars = 'a b'
vals = 'stress_xx zdisp'
[../]
[./stress_zz_over_strain_fcn]
type = ParsedFunction
value = a/b
vars = 'a b'
vals = 'stress_zz zdisp'
[../]
[./p_over_strain_fcn]
type = ParsedFunction
value = a/b
vars = 'a b'
vals = 'p0 zdisp'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-14 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 10
dt = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = pp_generation_unconfined_fully_saturated
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/dirackernels/bh_except04.i
# PorousFlowPeacemanBorehole exception test
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = TimeDerivative
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
at_nodes = true # Needed to force exepected error
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
bottom_p_or_t = 0
fluid_phase = 0
function_of = temperature
point_file = bh02.bh
SumQuantityUO = borehole_total_outflow_mass
variable = pp
unit_weight = '0 0 0'
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
modules/porous_flow/test/tests/jacobian/mass_vol_exp02.i
# Tests the PorousFlowMassVolumetricExpansion kernel
# Fluid with constant bulk modulus, van-Genuchten capillary, HM porosity
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
block = 0
PorousFlowDictator = dictator
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[ICs]
[./disp_x]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_x
[../]
[./disp_y]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_y
[../]
[./disp_z]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_z
[../]
[./p]
type = RandomIC
min = -1
max = 1
variable = porepressure
[../]
[]
[BCs]
# necessary otherwise volumetric strain rate will be zero
[./disp_x]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./disp_y]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'left right'
[../]
[./disp_z]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'left right'
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
displacements = 'disp_x disp_y disp_z'
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
displacements = 'disp_x disp_y disp_z'
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
displacements = 'disp_x disp_y disp_z'
component = 2
[../]
[./poro]
type = PorousFlowMassVolumetricExpansion
fluid_component = 0
variable = porepressure
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '2 3'
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
porosity_zero = 0.1
biot_coefficient = 0.5
solid_bulk = 1
[../]
[./p_eff]
type = PorousFlowEffectiveFluidPressure
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E-5
[]
[Outputs]
execute_on = 'timestep_end'
file_base = jacobian2
exodus = false
[]
modules/porous_flow/test/tests/dirackernels/pls03_action.i
# Test that the upwinding works correctly.
#
# A poly-line sink sits at the centre of the element.
# It has length=4 and weight=0.5, and extracts fluid
# at a constant rate of
# (1 * relative_permeability) kg.m^-1.s^-1
# Since it sits at the centre of the element, it extracts
# equally from each node, so the rate of extraction from
# each node is
# (0.5 * relative_permeability) kg.s^-1
# including the length and weight effects.
#
# There is no fluid flow.
#
# The initial conditions are such that all nodes have
# relative_permeability=0, except for one which has
# relative_permeaility = 1. Therefore, all nodes should
# remain at their initial porepressure, except the one.
#
# The porosity is 0.1, and the elemental volume is 2,
# so the fluid mass at the node in question = 0.2 * density / 4,
# where the 4 is the number of nodes in the element.
# In this simulation density = dens0 * exp(P / bulk), with
# dens0 = 100, and bulk = 20 MPa.
# The initial porepressure P0 = 10 MPa, so the final (after
# 1 second of simulation) is
# P(t=1) = 8.748592 MPa
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1
ny = 1
xmin = 0
xmax = 2
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.0
bulk_modulus = 2.0E7
viscosity = 1.0
density0 = 100.0
[../]
[../]
[]
[PorousFlowUnsaturated]
porepressure = pp
gravity = '0 0 0'
fp = the_simple_fluid
van_genuchten_alpha = 1.0E-7
van_genuchten_m = 0.5
relative_permeability_exponent = 2
residual_saturation = 0.99
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
#function = if((x<1)&(y<0.5),1E7,-1E7)
function = if((x<1)&(y>0.5),1E7,-1E7)
#function = if((x>1)&(y<0.5),1E7,-1E7)
#function = if((x>1)&(y>0.5),1E7,-1E7)
[../]
[]
[UserObjects]
[./pls_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[]
[Materials]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '0 0 0 0 0 0 0 0 0'
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[DiracKernels]
[./pls]
type = PorousFlowPolyLineSink
fluid_phase = 0
point_file = pls03.bh
use_relative_permeability = true
line_length = 4
SumQuantityUO = pls_total_outflow_mass
variable = pp
p_or_t_vals = '0 1E7'
fluxes = '1 1'
[../]
[]
[Postprocessors]
[./pls_report]
type = PorousFlowPlotQuantity
uo = pls_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p00]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[./p01]
type = PointValue
variable = pp
point = '0 1 0'
execute_on = timestep_end
[../]
[./p20]
type = PointValue
variable = pp
point = '2 0 0'
execute_on = timestep_end
[../]
[./p21]
type = PointValue
variable = pp
point = '2 1 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 pls_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 1
dt = 1
solve_type = NEWTON
[]
[Outputs]
file_base = pls03_action
exodus = false
csv = true
execute_on = timestep_end
[]
modules/porous_flow/test/tests/jacobian/fflux01.i
# 1phase, 1component, constant viscosity, constant insitu permeability
# density with constant bulk, Corey relative perm, nonzero gravity, unsaturated with vanGenuchten
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = -0.7+x+y
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
gravity = '-1 -0.1 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/aux_kernels/darcy_velocity.i
# checking that the PorousFlowDarcyVelocityComponent AuxKernel works as expected
# for the fully-saturated case (relative-permeability = 1)
# There is one element, of unit size. The pressures and fluid densities at the qps are:
# (x,y,z)=( 0.211325 , 0.211325 , 0.211325 ). p = 1.479 rho = 3.217
# (x,y,z)=( 0.788675 , 0.211325 , 0.211325 ). p = 2.057 rho = 4.728
# (x,y,z)=( 0.211325 , 0.788675 , 0.211325 ). p = 2.634 rho = 6.947
# (x,y,z)=( 0.788675 , 0.788675 , 0.211325 ). p = 3.211 rho = 10.208
# (x,y,z)=( 0.211325 , 0.211325 , 0.788675 ). p = 3.789 rho = 15.001
# (x,y,z)=( 0.788675 , 0.211325 , 0.788675 ). p = 4.367 rho = 22.043
# (x,y,z)=( 0.211325 , 0.788675 , 0.788675 ). p = 4.943 rho = 32.392
# (x,y,z)=( 0.788675 , 0.788675 , 0.788675 ). p = 5.521 rho = 47.599
# Average density = 17.7668
# grad(P) = (1, 2, 4)
# with permeability = diag(1, 2, 3) and gravity = (1, -2, 3) and viscosity = 3.2
# So Darcy velocity = (5.23963, -23.4585, 46.2192)
[Mesh]
type = GeneratedMesh
dim = 3
xmin = 0
xmax = 1
ymin = 0
ymax = 1
zmin = 0
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '1 -2 3'
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pinit]
type = FunctionIC
function = x+2*y+4*z
variable = pp
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[AuxVariables]
[./vel_x]
order = CONSTANT
family = MONOMIAL
[../]
[./vel_y]
order = CONSTANT
family = MONOMIAL
[../]
[./vel_z]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./vel_x]
type = PorousFlowDarcyVelocityComponent
variable = vel_x
component = x
fluid_phase = 0
[../]
[./vel_y]
type = PorousFlowDarcyVelocityComponent
variable = vel_y
component = y
fluid_phase = 0
[../]
[./vel_z]
type = PorousFlowDarcyVelocityComponent
variable = vel_z
component = z
fluid_phase = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
viscosity = 3.2
density0 = 1.2
thermal_expansion = 0
[../]
[../]
[]
[Postprocessors]
[./vel_x]
type = PointValue
variable = vel_x
point = '0.5 0.5 0.5'
[../]
[./vel_y]
type = PointValue
variable = vel_y
point = '0.5 0.5 0.5'
[../]
[./vel_z]
type = PointValue
variable = vel_z
point = '0.5 0.5 0.5'
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
nl_abs_tol = 1e-16
dt = 1
end_time = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = darcy_velocity
csv = true
[]
modules/porous_flow/test/tests/jacobian/denergy02.i
# 2phase, 1 component, with solid displacements, time derivative of energy-density
[Mesh]
type = GeneratedMesh
dim = 3
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./pgas]
[../]
[./pwater]
[../]
[./temp]
[../]
[]
[ICs]
[./disp_x]
type = RandomIC
variable = disp_x
min = -0.1
max = 0.1
[../]
[./disp_y]
type = RandomIC
variable = disp_y
min = -0.1
max = 0.1
[../]
[./disp_z]
type = RandomIC
variable = disp_z
min = -0.1
max = 0.1
[../]
[./pgas]
type = RandomIC
variable = pgas
max = 1.0
min = 0.0
[../]
[./pwater]
type = RandomIC
variable = pwater
max = 0.0
min = -1.0
[../]
[./temp]
type = RandomIC
variable = temp
max = 1.0
min = 0.0
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./dummy_pgas]
type = Diffusion
variable = pgas
[../]
[./dummy_pwater]
type = Diffusion
variable = pwater
[../]
[./energy_dot]
type = PorousFlowEnergyTimeDerivative
variable = temp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pgas temp pwater disp_x disp_y disp_z'
number_fluid_phases = 2
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
cv = 1.3
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
cv = 0.7
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '0.5 0.75'
# bulk modulus is lambda + 2*mu/3 = 0.5 + 2*0.75/3 = 1
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
porosity_zero = 0.7
biot_coefficient = 0.9
solid_bulk = 1
[../]
[./p_eff]
type = PorousFlowEffectiveFluidPressure
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 1.1
density = 0.5
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = pwater
phase1_porepressure = pgas
capillary_pressure = pc
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/newton_cooling/nc02.i
# Newton cooling from a bar. 1-phase steady
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1000
ny = 1
xmin = 0
xmax = 100
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pressure'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.8
alpha = 1e-5
[../]
[]
[Variables]
[./pressure]
[../]
[]
[ICs]
[./pressure]
type = FunctionIC
variable = pressure
function = '(2-x/100)*1E6'
[../]
[]
[Kernels]
[./flux]
type = PorousFlowAdvectiveFlux
fluid_component = 0
gravity = '0 0 0'
variable = pressure
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1e6
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-15'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey # irrelevant in this fully-saturated situation
n = 2
phase = 0
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = pressure
boundary = left
value = 2E6
[../]
[./newton]
type = PorousFlowPiecewiseLinearSink
variable = pressure
boundary = right
pt_vals = '0 100000 200000 300000 400000 500000 600000 700000 800000 900000 1000000 1100000 1200000 1300000 1400000 1500000 1600000 1700000 1800000 1900000 2000000'
multipliers = '0. 5.6677197748570516e-6 0.000011931518841831313 0.00001885408740732065 0.000026504708864284114 0.000034959953203725676 0.000044304443352900224 0.00005463170211001232 0.00006604508815181467 0.00007865883048198513 0.00009259917167338928 0.00010800563134618119 0.00012503240252705603 0.00014384989486488752 0.00016464644014777016 0.00018763017719085535 0.0002130311349595711 0.00024110353477682344 0.00027212833465544285 0.00030641604122040985 0.00034430981736352295'
use_mobility = false
use_relperm = false
fluid_phase = 0
flux_function = 1
[../]
[]
[VectorPostprocessors]
[./porepressure]
type = LineValueSampler
variable = pressure
start_point = '0 0.5 0'
end_point = '100 0.5 0'
sort_by = x
num_points = 20
execute_on = timestep_end
[../]
[]
[Preconditioning]
active = 'andy'
[./andy]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_max_it -sub_pc_factor_shift_type -pc_asm_overlap -snes_atol -snes_rtol '
petsc_options_value = 'gmres asm lu 100 NONZERO 2 1E-12 1E-15'
[../]
[]
[Executioner]
type = Steady
[]
[Outputs]
file_base = nc02
execute_on = timestep_end
exodus = false
[./along_line]
type = CSV
execute_vector_postprocessors_on = timestep_end
[../]
[]
modules/porous_flow/test/tests/flux_limited_TVD_pflow/except02.i
# Exception test: fluid_component number too big
[Mesh]
type = GeneratedMesh
dim = 1
[]
[GlobalParams]
gravity = '1 2 3'
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./tracer]
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[PorousFlowUnsaturated]
porepressure = pp
mass_fraction_vars = tracer
fp = the_simple_fluid
[]
[UserObjects]
[./advective_flux_calculator]
type = PorousFlowAdvectiveFluxCalculatorSaturatedMultiComponent
fluid_component = 2
[../]
[]
[Materials]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
modules/porous_flow/test/tests/chemistry/except17.i
# Exception test.
# Incorrect number of equilibrium reactions
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = Diffusion
variable = a
[../]
[./b]
type = Diffusion
variable = b
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_kinetic = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./eqm_k0]
initial_condition = 1E2
[../]
[./eqm_k1]
initial_condition = 1E-2
[../]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFractionAqueousEquilibriumChemistry
mass_fraction_vars = 'a b'
num_reactions = 2
equilibrium_constants = 'eqm_k0 eqm_k1'
primary_activity_coefficients = '1 1'
secondary_activity_coefficients = '1 1'
reactions = '2 0
1 1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/chemistry/except1.i
# Exception test.
# Incorrect number of secondary activity coefficients
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = Diffusion
variable = a
[../]
[./b]
type = Diffusion
variable = b
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_equilibrium = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./eqm_k0]
initial_condition = 1E2
[../]
[./eqm_k1]
initial_condition = 1E-2
[../]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFractionAqueousEquilibriumChemistry
mass_fraction_vars = 'a b'
num_reactions = 2
equilibrium_constants = 'eqm_k0 eqm_k1'
primary_activity_coefficients = '1 1'
secondary_activity_coefficients = '1'
reactions = '2 0
1 1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/sinks/s10.i
# apply a basic sink fluxes to all boundaries.
# Sink strength = S kg.m^-2.s^-1
#
# Use fully-saturated physics, with no flow
# (permeability is zero).
# Each finite element is (2m)^3 in size, and
# porosity is 0.125, so each element holds 1 m^3
# of fluid.
# With density = 10 exp(pp)
# then each element holds 10 exp(pp) kg of fluid
#
# Each boundary node that is away from other boundaries
# (ie, not on a mesh corner or edge) therefore holds
# 5 exp(pp)
# kg of fluid, which is just density * porosity * volume_of_node
#
# Each of such nodes are exposed to a sink flux of strength
# S * A
# where A is the area controlled by the node (in this case 4 m^2)
#
# So d(5 exp(pp))/dt = -4S, ie
# exp(pp) = exp(pp0) - 0.8 * S * t
#
# This is therefore similar to s01.i . However, this test is
# run 6 times: one for each boundary. The purpose of this is
# to ensure that the PorousFlowSink BC removes fluid from the
# correct nodes. This is nontrivial because of the upwinding
# and storing of Material Properties at nodes.
[Mesh]
type = GeneratedMesh
dim = 3
nx = 5
ny = 5
nz = 5
xmin = 0
xmax = 10
ymin = 0
ymax = 10
zmin = 0
zmax = 10
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Variables]
[./pp]
initial_condition = 1
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 10
thermal_expansion = 0
viscosity = 11
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.125
[../]
[]
[BCs]
[./flux]
type = PorousFlowSink
boundary = left
variable = pp
use_mobility = false
use_relperm = false
fluid_phase = 0
flux_function = 1
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_max_it -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu 10000 NONZERO 2'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 0.25
end_time = 1
nl_rel_tol = 1E-12
nl_abs_tol = 1E-12
[]
[Outputs]
file_base = s10
[./exodus]
type = Exodus
execute_on = 'initial final'
[../]
[]
modules/porous_flow/test/tests/jacobian/pls04.i
# PorousFlowPiecewiseLinearSink with 2-phase, 3-components, with enthalpy, internal_energy, and thermal_conductivity
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 2
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[./massfrac_ph0_sp0]
[../]
[./massfrac_ph0_sp1]
[../]
[./massfrac_ph1_sp0]
[../]
[./massfrac_ph1_sp1]
[../]
[./temp]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp ppwater ppgas massfrac_ph0_sp0 massfrac_ph0_sp1 massfrac_ph1_sp0 massfrac_ph1_sp1'
number_fluid_phases = 2
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[ICs]
[./temp]
type = RandomIC
variable = temp
min = 1
max = 2
[../]
[./ppwater]
type = RandomIC
variable = ppwater
min = -1
max = 0
[../]
[./ppgas]
type = RandomIC
variable = ppgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 1
[../]
[./massfrac_ph0_sp1]
type = RandomIC
variable = massfrac_ph0_sp1
min = 0
max = 1
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 1
[../]
[./massfrac_ph1_sp1]
type = RandomIC
variable = massfrac_ph1_sp1
min = 0
max = 1
[../]
[]
[Kernels]
[./dummy_temp]
type = TimeDerivative
variable = temp
[../]
[./dummy_ppwater]
type = TimeDerivative
variable = ppwater
[../]
[./dummy_ppgas]
type = TimeDerivative
variable = ppgas
[../]
[./dummy_m00]
type = TimeDerivative
variable = massfrac_ph0_sp0
[../]
[./dummy_m01]
type = TimeDerivative
variable = massfrac_ph0_sp1
[../]
[./dummy_m10]
type = TimeDerivative
variable = massfrac_ph1_sp0
[../]
[./dummy_m11]
type = TimeDerivative
variable = massfrac_ph1_sp1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
cv = 1.1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
viscosity = 1.4
cv = 1.8
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph0_sp1 massfrac_ph1_sp0 massfrac_ph1_sp1'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '0.1 0.2 0.3 0.2 0 0.1 0.3 0.1 0.1'
wet_thermal_conductivity = '10 2 31 2 40 1 31 1 10'
exponent = 0.5
[../]
[]
[BCs]
[./flux_w]
type = PorousFlowPiecewiseLinearSink
boundary = 'left'
pt_vals = '-1 -0.5 0'
multipliers = '1 2 4'
variable = ppwater
mass_fraction_component = 0
fluid_phase = 0
use_relperm = true
use_mobility = true
use_enthalpy = true
flux_function = 'x*y'
[../]
[./flux_g]
type = PorousFlowPiecewiseLinearSink
boundary = 'top'
pt_vals = '0 0.5 1'
multipliers = '1 -2 4'
mass_fraction_component = 0
variable = ppgas
fluid_phase = 1
use_relperm = true
use_mobility = true
use_internal_energy = true
flux_function = '-x*y'
[../]
[./flux_1]
type = PorousFlowPiecewiseLinearSink
boundary = 'right'
pt_vals = '0 0.5 1'
multipliers = '1 3 4'
mass_fraction_component = 1
variable = massfrac_ph0_sp0
fluid_phase = 0
use_relperm = true
use_mobility = true
use_internal_energy = true
[../]
[./flux_2]
type = PorousFlowPiecewiseLinearSink
boundary = 'back top'
pt_vals = '0 0.5 1'
multipliers = '0 1 -3'
mass_fraction_component = 1
variable = massfrac_ph1_sp0
fluid_phase = 1
use_relperm = true
use_mobility = true
use_enthalpy = true
flux_function = '0.5*x*y'
[../]
[./flux_3]
type = PorousFlowPiecewiseLinearSink
boundary = 'right'
pt_vals = '0 0.5 1'
multipliers = '1 3 4'
mass_fraction_component = 2
variable = ppwater
fluid_phase = 0
use_relperm = true
use_enthalpy = true
use_mobility = true
[../]
[./flux_4]
type = PorousFlowPiecewiseLinearSink
boundary = 'back top'
pt_vals = '0 0.5 1'
multipliers = '0 1 -3'
mass_fraction_component = 2
variable = massfrac_ph1_sp0
fluid_phase = 1
use_relperm = true
use_mobility = true
flux_function = '-0.5*x*y'
use_enthalpy = true
use_thermal_conductivity = true
[../]
[]
[Preconditioning]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
file_base = pls04
[]
modules/porous_flow/test/tests/heterogeneous_materials/constant_poroperm.i
# Assign porosity and permeability variables from constant AuxVariables to create
# a heterogeneous model
[Mesh]
type = GeneratedMesh
dim = 3
nx = 3
ny = 3
nz = 3
xmax = 3
ymax = 3
zmax = 3
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 -10'
[]
[Variables]
[./ppwater]
initial_condition = 1.5e6
[../]
[]
[AuxVariables]
[./poro]
family = MONOMIAL
order = CONSTANT
[../]
[./permxx]
family = MONOMIAL
order = CONSTANT
[../]
[./permxy]
family = MONOMIAL
order = CONSTANT
[../]
[./permxz]
family = MONOMIAL
order = CONSTANT
[../]
[./permyx]
family = MONOMIAL
order = CONSTANT
[../]
[./permyy]
family = MONOMIAL
order = CONSTANT
[../]
[./permyz]
family = MONOMIAL
order = CONSTANT
[../]
[./permzx]
family = MONOMIAL
order = CONSTANT
[../]
[./permzy]
family = MONOMIAL
order = CONSTANT
[../]
[./permzz]
family = MONOMIAL
order = CONSTANT
[../]
[./poromat]
family = MONOMIAL
order = CONSTANT
[../]
[./permxxmat]
family = MONOMIAL
order = CONSTANT
[../]
[./permxymat]
family = MONOMIAL
order = CONSTANT
[../]
[./permxzmat]
family = MONOMIAL
order = CONSTANT
[../]
[./permyxmat]
family = MONOMIAL
order = CONSTANT
[../]
[./permyymat]
family = MONOMIAL
order = CONSTANT
[../]
[./permyzmat]
family = MONOMIAL
order = CONSTANT
[../]
[./permzxmat]
family = MONOMIAL
order = CONSTANT
[../]
[./permzymat]
family = MONOMIAL
order = CONSTANT
[../]
[./permzzmat]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./poromat]
type = PorousFlowPropertyAux
property = porosity
variable = poromat
[../]
[./permxxmat]
type = PorousFlowPropertyAux
property = permeability
variable = permxxmat
column = 0
row = 0
[../]
[./permxymat]
type = PorousFlowPropertyAux
property = permeability
variable = permxymat
column = 1
row = 0
[../]
[./permxzmat]
type = PorousFlowPropertyAux
property = permeability
variable = permxzmat
column = 2
row = 0
[../]
[./permyxmat]
type = PorousFlowPropertyAux
property = permeability
variable = permyxmat
column = 0
row = 1
[../]
[./permyymat]
type = PorousFlowPropertyAux
property = permeability
variable = permyymat
column = 1
row = 1
[../]
[./permyzmat]
type = PorousFlowPropertyAux
property = permeability
variable = permyzmat
column = 2
row = 1
[../]
[./permzxmat]
type = PorousFlowPropertyAux
property = permeability
variable = permzxmat
column = 0
row = 2
[../]
[./permzymat]
type = PorousFlowPropertyAux
property = permeability
variable = permzymat
column = 1
row = 2
[../]
[./permzzmat]
type = PorousFlowPropertyAux
property = permeability
variable = permzzmat
column = 2
row = 2
[../]
[]
[ICs]
[./poro]
type = RandomIC
seed = 0
variable = poro
max = 0.5
min = 0.1
[../]
[./permx]
type = FunctionIC
function = permx
variable = permxx
[../]
[./permy]
type = FunctionIC
function = permy
variable = permyy
[../]
[./permz]
type = FunctionIC
function = permz
variable = permzz
[../]
[]
[Functions]
[./permx]
type = ParsedFunction
value = '(1+x)*1e-11'
[../]
[./permy]
type = ParsedFunction
value = '(1+y)*1e-11'
[../]
[./permz]
type = ParsedFunction
value = '(1+z)*1e-11'
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
variable = ppwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
variable = ppwater
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
viscosity = 1e-3
thermal_expansion = 0
cv = 2
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = ppwater
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = poro
[../]
[./permeability]
type = PorousFlowPermeabilityConstFromVar
perm_xx = permxx
perm_yy = permyy
perm_zz = permzz
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[Postprocessors]
[./mass_ph0]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'initial timestep_end'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol'
petsc_options_value = 'bcgs bjacobi 1E-12 1E-10'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 100
dt = 100
[]
[Outputs]
execute_on = 'initial timestep_end'
exodus = true
perf_graph = true
[]
modules/porous_flow/test/tests/dirackernels/bh05.i
# unsaturated
# injection
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Functions]
[./dts]
type = PiecewiseLinear
y = '500 500 1E1'
x = '4000 5000 6500'
[../]
[]
[Variables]
[./pp]
initial_condition = -2E5
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.8
alpha = 1e-5
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityFLAC
m = 2
phase = 0
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
variable = pp
SumQuantityUO = borehole_total_outflow_mass
point_file = bh03.bh
fluid_phase = 0
bottom_p_or_t = 0
unit_weight = '0 0 0'
use_mobility = true
character = -1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 6500
solve_type = NEWTON
[./TimeStepper]
type = FunctionDT
function = dts
[../]
[]
[Outputs]
file_base = bh05
exodus = false
csv = true
execute_on = timestep_end
[]
modules/porous_flow/test/tests/aux_kernels/darcy_velocity_lower_except.i
# Exception testing for PorousFlowDarcyVelocityComponentLowerDimensional
# Checking that an error is produced if the AuxVariable is not defined only on
# lower-dimensional elements
[Mesh]
type = FileMesh
file = fractured_block.e
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '1 0.5 0.2'
[]
[Variables]
[./pp]
[../]
[]
[Kernels]
[./dummy]
type = TimeDerivative
variable = pp
[../]
[]
[AuxVariables]
[./fracture_vel_x]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./fracture_vel_x]
type = PorousFlowDarcyVelocityComponentLowerDimensional
variable = fracture_vel_x
component = x
fluid_phase = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
pc = 0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1E16
viscosity = 10
density0 = 2
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '5 0 0 0 5 0 0 0 5'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[Executioner]
type = Transient
dt = 1
end_time = 1
[]
modules/porous_flow/test/tests/poro_elasticity/undrained_oedometer.i
# An undrained oedometer test on a saturated poroelastic sample.
#
# The sample is a single unit element, with roller BCs on the sides
# and bottom. A constant displacement is applied to the top: disp_z = -0.01*t.
# There is no fluid flow.
#
# Under these conditions
# porepressure = -(Fluid bulk modulus)*log(1 - 0.01t)
# stress_xx = (bulk - 2*shear/3)*disp_z/L (remember this is effective stress)
# stress_zz = (bulk + 4*shear/3)*disp_z/L (remember this is effective stress)
# where L is the height of the sample (L=1 in this test)
#
# Parameters:
# Bulk modulus = 2
# Shear modulus = 1.5
# fluid bulk modulus = 1
#
# Desired output:
# zdisp = -0.01*t
# p0 = 1*log(1-0.01t)
# stress_xx = stress_yy = -0.01*t
# stress_zz = -0.04*t
#
# Regarding the "log" - it just comes from conserving fluid mass
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./basefixed]
type = DirichletBC
variable = disp_z
value = 0
boundary = back
[../]
[./top_velocity]
type = FunctionDirichletBC
variable = disp_z
function = -0.01*t
boundary = front
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_vol_exp]
type = PorousFlowMassVolumetricExpansion
variable = porepressure
fluid_component = 0
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = porepressure
[../]
[]
[AuxVariables]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
[../]
[./stress_xz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xz
index_i = 0
index_j = 2
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '1 1.5'
# bulk modulus is lambda + 2*mu/3 = 1 + 2*1.5/3 = 2
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.8
alpha = 1
[../]
[]
[Postprocessors]
[./fluid_mass]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'initial timestep_end'
use_displaced_mesh = true
[../]
[./p0]
type = PointValue
outputs = csv
point = '0 0 0'
variable = porepressure
[../]
[./zdisp]
type = PointValue
outputs = csv
point = '0 0 0.5'
variable = disp_z
[../]
[./stress_xx]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_xx
[../]
[./stress_yy]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_yy
[../]
[./stress_zz]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_zz
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-14 1E-8 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 10
dt = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = undrained_oedometer
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/dispersion/disp01.i
# Test dispersive part of PorousFlowDispersiveFlux kernel by setting diffusion
# coefficients to zero. A pressure gradient is applied over the mesh to give a
# uniform velocity. Gravity is set to zero.
# Mass fraction is set to 1 on the left hand side and 0 on the right hand side.
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmax = 10
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./pp]
[../]
[./massfrac0]
[../]
[]
[AuxVariables]
[./velocity]
family = MONOMIAL
order = FIRST
[../]
[]
[AuxKernels]
[./velocity]
type = PorousFlowDarcyVelocityComponent
variable = velocity
component = x
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = pic
[../]
[./massfrac0]
type = ConstantIC
variable = massfrac0
value = 0
[../]
[]
[Functions]
[./pic]
type = ParsedFunction
value = 1.1e5-x*1e3
[../]
[]
[BCs]
[./xleft]
type = DirichletBC
value = 1
variable = massfrac0
boundary = left
[../]
[./xright]
type = DirichletBC
value = 0
variable = massfrac0
boundary = right
[../]
[./pright]
type = DirichletBC
variable = pp
boundary = right
value = 1e5
[../]
[./pleft]
type = DirichletBC
variable = pp
boundary = left
value = 1.1e5
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./adv0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
[../]
[./diff0]
type = PorousFlowDispersiveFlux
variable = pp
disp_trans = 0
disp_long = 0.2
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = massfrac0
[../]
[./adv1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = massfrac0
[../]
[./diff1]
type = PorousFlowDispersiveFlux
fluid_component = 1
variable = massfrac0
disp_trans = 0
disp_long = 0.2
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1e9
density0 = 1000
viscosity = 0.001
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = massfrac0
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./poro]
type = PorousFlowPorosityConst
porosity = 0.3
[../]
[./diff]
type = PorousFlowDiffusivityConst
diffusion_coeff = '0 0'
tortuosity = 0.1
[../]
[./relp]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1e-9 0 0 0 1e-9 0 0 0 1e-9'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu NONZERO 2 '
[../]
[]
[Executioner]
type = Transient
solve_type = NEWTON
end_time = 1e3
dtmax = 50
[./TimeStepper]
type = IterationAdaptiveDT
growth_factor = 1.5
cutback_factor = 0.5
dt = 1
[../]
[]
[VectorPostprocessors]
[./xmass]
type = NodalValueSampler
sort_by = id
variable = massfrac0
[../]
[]
[Outputs]
[./out]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/jacobian/basic_advection3.i
# Basic advection with 1 porepressure as a PorousFlow variable
# Constant permeability
# Constant viscosity
[Mesh]
type = GeneratedMesh
dim = 1
nx = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./u]
[../]
[./P]
[../]
[]
[ICs]
[./P]
type = RandomIC
variable = P
min = -1
max = 0
[../]
[./u]
type = RandomIC
variable = u
[../]
[]
[Kernels]
[./dummy_P]
type = NullKernel
variable = P
[../]
[./u_advection]
type = PorousFlowBasicAdvection
variable = u
phase = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = P
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
alpha = 1
m = 0.6
sat_lr = 0.1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 3
density0 = 4
thermal_expansion = 0
viscosity = 150.0
[../]
[../]
[]
[Materials]
[./temperature_qp]
type = PorousFlowTemperature
[../]
[./ppss_qp]
type = PorousFlow1PhaseP
porepressure = P
capillary_pressure = pc
[../]
[./simple_fluid_qp]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '5 0 0 0 5 0 0 0 5'
[../]
[./relperm_qp]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
s_res = 0.1
sum_s_res = 0.1
[../]
[./darcy_velocity_qp]
type = PorousFlowDarcyVelocityMaterial
gravity = '0.25 0 0'
[../]
[]
[Preconditioning]
[./check]
type = SMP
full = true
#petsc_options = '-snes_test_display'
petsc_options_iname = '-snes_type'
petsc_options_value = ' test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/dirackernels/injection_with_plasticity.i
# Example: Injection into a uniform aquifer 10 x 10 x 5 km
# Drucker-Prager deformation
# Darcy flow
gravity = -9.81
solid_density = 2350
fluid_density = 1000
porosity0 = 0.1
[Mesh]
type = GeneratedMesh
dim = 3
xmin = 0
xmax = 1e4
ymin = 0
ymax = 1e4
zmax = 0
zmin = -5e3
nx = 2
ny = 2
nz = 2
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 ${gravity}'
displacements = 'disp_x disp_y disp_z'
strain_at_nearest_qp = true
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0 # Not doing a thermal simulation
bulk_modulus = 2E9
density0 = ${fluid_density}
viscosity = 5E-4
[../]
[../]
[]
[PorousFlowFullySaturated]
coupling_type = HydroMechanical
porepressure = pp
dictator_name = dictator
fp = simple_fluid
add_darcy_aux = false
add_stress_aux = false
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./pp]
scaling = 1E6
[./InitialCondition]
type = FunctionIC
function = ini_pp
[../]
[../]
[]
[Functions]
[./ini_stress]
type = ParsedFunction
value = '-${gravity} * z * (${solid_density} - ${fluid_density}) * (1.0 - ${porosity0})' # initial effective stress that should result from weight force
[../]
[./ini_pp]
type = ParsedFunction
value = '${gravity} * z * ${fluid_density} + 1E5'
[../]
[]
[BCs]
[./p_top]
type = FunctionDirichletBC
variable = pp
boundary = front
function = ini_pp
[../]
[./x_roller]
type = DirichletBC
variable = disp_x
boundary = 'left right'
value = 0
[../]
[./y_roller]
type = DirichletBC
variable = disp_y
boundary = 'top bottom'
value = 0
[../]
[./z_confined]
type = DirichletBC
variable = disp_z
boundary = 'back front'
value = 0
[../]
[]
[UserObjects]
[./pls_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
# Cohesion
[./mc_coh]
type = TensorMechanicsHardeningConstant
value = 6.0E6
[../]
# Friction angle
[./mc_phi]
type = TensorMechanicsHardeningConstant
value = 35.0
convert_to_radians = true
[../]
# Dilation angle
[./mc_psi]
type = TensorMechanicsHardeningConstant
value = 2
convert_to_radians = true
[../]
# Drucker-Prager objects
[./dp]
type = TensorMechanicsPlasticDruckerPragerHyperbolic
mc_cohesion = mc_coh
mc_friction_angle = mc_phi
mc_dilation_angle = mc_psi
yield_function_tolerance = 1E-3
internal_constraint_tolerance = 1E-6
[../]
# Tensile strength
[./tens]
type = TensorMechanicsHardeningConstant
value = 3.0E6
[../]
# Compressive strength (cap on yield envelope)
[./compr_all]
type = TensorMechanicsHardeningConstant
value = 1E10
[../]
[]
[Materials]
[./strain]
type = ComputeIncrementalSmallStrain
eigenstrain_names = eigenstrain_all
[../]
[./eigenstrain_all]
type = ComputeEigenstrainFromInitialStress
initial_stress = 'ini_stress 0 0 0 ini_stress 0 0 0 ini_stress'
eigenstrain_name = eigenstrain_all
[../]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
bulk_modulus = 3.3333E9
shear_modulus = 2.5E9
[../]
[./dp_mat]
type = CappedDruckerPragerStressUpdate
DP_model = dp
tensile_strength = tens
compressive_strength = compr_all
smoothing_tol = 1E5
yield_function_tol = 1E-3
tip_smoother = 0
[../]
[./stress]
type = ComputeMultipleInelasticStress
inelastic_models = dp_mat
[../]
# Permeability
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-13 0 0 0 1E-13 0 0 0 1E-13'
[../]
# Porosity
[./porosity]
type = PorousFlowPorosity
porosity_zero = ${porosity0}
biot_coefficient = 1.0
solid_bulk = 1.0 # Required but irrelevant when biot_coefficient is unity
mechanical = true
fluid = true
[../]
# Density of saturated rock
[./density]
type = PorousFlowTotalGravitationalDensityFullySaturatedFromPorosity
rho_s = ${solid_density}
[../]
[]
[DiracKernels]
[./pls]
type = PorousFlowPolyLineSink
variable = pp
SumQuantityUO = pls_total_outflow_mass
point_file = two_nodes.bh
function_of = pressure
fluid_phase = 0
p_or_t_vals = '0 1E7'
fluxes = '-1.59 -1.59'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
[../]
[]
[Executioner]
solve_type = Newton
type = Transient
dt = 1E6
end_time = 1E6
nl_rel_tol = 1E-7
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/actions/basicthm_h.i
# PorousFlowBasicTHM action with coupling_type = HydroGenerator
# (no thermal or mechanical effects)
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 10
ny = 3
xmax = 10
ymax = 3
[]
[./aquifer]
input = gen
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 1 0'
top_right = '10 2 0'
[../]
[./injection_area]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'injection_area'
normal = '-1 0 0'
input = 'aquifer'
[../]
[./outflow_area]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'outflow_area'
normal = '1 0 0'
input = 'injection_area'
[../]
[./rename]
type = RenameBlockGenerator
old_block_id = '0 1'
new_block_name = 'caprock aquifer'
input = 'outflow_area'
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./porepressure]
initial_condition = 1e6
[../]
[]
[AuxVariables]
[./temperature]
initial_condition = 293
[../]
[]
[PorousFlowBasicTHM]
porepressure = porepressure
temperature = temperature
coupling_type = Hydro
gravity = '0 0 0'
fp = simple_fluid
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1.5e6
boundary = injection_area
[../]
[./constant_outflow_porepressure]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
boundary = outflow_area
pt_vals = '0 1e9'
multipliers = '0 1e9'
flux_function = 1e-6
PT_shift = 1e6
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.8
solid_bulk_compliance = 2e-7
fluid_bulk_modulus = 1e7
[../]
[./permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1e-13 0 0 0 1e-13 0 0 0 1e-13'
[../]
[./permeability_caprock]
type = PorousFlowPermeabilityConst
block = caprock
permeability = '1e-15 0 0 0 1e-15 0 0 0 1e-15'
[../]
[]
[Preconditioning]
[./basic]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1e4
dt = 1e3
nl_abs_tol = 1e-15
nl_rel_tol = 1E-14
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/jacobian/fflux02.i
# 1phase, 3components, constant viscosity, constant insitu permeability
# density with constant bulk, Corey relative perm, nonzero gravity, unsaturated with vanGenuchten
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./massfrac0]
[../]
[./massfrac1]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = -0.7+x+y
[../]
[./massfrac0]
type = RandomIC
variable = massfrac0
min = 0
max = 0.3
[../]
[./massfrac1]
type = RandomIC
variable = massfrac1
min = 0
max = 0.4
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
gravity = '-1 -0.1 0'
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = massfrac0
gravity = '-1 -0.1 0'
[../]
[./flux2]
type = PorousFlowAdvectiveFlux
fluid_component = 2
variable = massfrac1
gravity = '-1 -0.1 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0 massfrac1'
number_fluid_phases = 1
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac0 massfrac1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/flux_limited_TVD_pflow/pffltvd_3D.i
# Using flux-limited TVD advection ala Kuzmin and Turek, employing PorousFlow Kernels and UserObjects, with superbee flux-limiter
# 3D version
[Mesh]
type = GeneratedMesh
dim = 3
nx = 10
xmin = 0
xmax = 1
ny = 4
ymin = 0
ymax = 0.5
nz = 3
zmin = 0
zmax = 2
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./porepressure]
[../]
[./tracer]
[../]
[]
[ICs]
[./porepressure]
type = FunctionIC
variable = porepressure
function = '1 - x'
[../]
[./tracer]
type = FunctionIC
variable = tracer
function = 'if(x<0.1,0,if(x>0.3,0,1))'
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = tracer
[../]
[./flux0]
type = PorousFlowFluxLimitedTVDAdvection
variable = tracer
advective_flux_calculator = advective_flux_calculator_0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = porepressure
[../]
[./flux1]
type = PorousFlowFluxLimitedTVDAdvection
variable = porepressure
advective_flux_calculator = advective_flux_calculator_1
[../]
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1
boundary = left
[../]
[./no_tracer_on_left]
type = DirichletBC
variable = tracer
value = 0
boundary = left
[../]
[./remove_component_1]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 1
use_mobility = true
flux_function = 1E3
[../]
[./remove_component_0]
type = PorousFlowPiecewiseLinearSink
variable = tracer
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 0
use_mobility = true
flux_function = 1E3
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
thermal_expansion = 0
viscosity = 1.0
density0 = 1000.0
[../]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure tracer'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[./advective_flux_calculator_0]
type = PorousFlowAdvectiveFluxCalculatorSaturatedMultiComponent
flux_limiter_type = superbee
fluid_component = 0
[../]
[./advective_flux_calculator_1]
type = PorousFlowAdvectiveFluxCalculatorSaturatedMultiComponent
flux_limiter_type = superbee
fluid_component = 1
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = tracer
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = the_simple_fluid
phase = 0
[../]
[./relperm]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-2 0 0 0 1E-2 0 0 0 1E-2'
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[VectorPostprocessors]
[./tracer]
type = LineValueSampler
start_point = '0 0 0'
end_point = '1 0.5 2'
num_points = 11
sort_by = x
variable = tracer
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 0.3
dt = 6E-2
nl_abs_tol = 1E-8
timestep_tolerance = 1E-3
[]
[Outputs]
print_linear_residuals = false
[./out]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/poro_elasticity/mandel_basicthm.i
# using a BasicTHM Action
#
# Mandel's problem of consolodation of a drained medium
# Using the FullySaturatedDarcyBase and FullySaturatedFullySaturatedMassTimeDerivative kernels
# with multiply_by_density = false, so that this problem becomes linear
# Note the use of consistent_with_displaced_mesh = false in the calculation of volumetric strain
#
# A sample is in plane strain.
# -a <= x <= a
# -b <= y <= b
# It is squashed with constant force by impermeable, frictionless plattens on its top and bottom surfaces (at y=+/-b)
# Fluid is allowed to leak out from its sides (at x=+/-a)
# The porepressure within the sample is monitored.
#
# As is common in the literature, this is simulated by
# considering the quarter-sample, 0<=x<=a and 0<=y<=b, with
# impermeable, roller BCs at x=0 and y=0 and y=b.
# Porepressure is fixed at zero on x=a.
# Porepressure and displacement are initialised to zero.
# Then the top (y=b) is moved downwards with prescribed velocity,
# so that the total force that is inducing this downwards velocity
# is fixed. The velocity is worked out by solving Mandel's problem
# analytically, and the total force is monitored in the simulation
# to check that it indeed remains constant.
#
# Here are the problem's parameters, and their values:
# Soil width. a = 1
# Soil height. b = 0.1
# Soil's Lame lambda. la = 0.5
# Soil's Lame mu, which is also the Soil's shear modulus. mu = G = 0.75
# Soil bulk modulus. K = la + 2*mu/3 = 1
# Drained Poisson ratio. nu = (3K - 2G)/(6K + 2G) = 0.2
# Soil bulk compliance. 1/K = 1
# Fluid bulk modulus. Kf = 8
# Fluid bulk compliance. 1/Kf = 0.125
# Soil initial porosity. phi0 = 0.1
# Biot coefficient. alpha = 0.6
# Biot modulus. M = 1/(phi0/Kf + (alpha - phi0)(1 - alpha)/K) = 4.705882
# Undrained bulk modulus. Ku = K + alpha^2*M = 2.694118
# Undrained Poisson ratio. nuu = (3Ku - 2G)/(6Ku + 2G) = 0.372627
# Skempton coefficient. B = alpha*M/Ku = 1.048035
# Fluid mobility (soil permeability/fluid viscosity). k = 1.5
# Consolidation coefficient. c = 2*k*B^2*G*(1-nu)*(1+nuu)^2/9/(1-nuu)/(nuu-nu) = 3.821656
# Normal stress on top. F = 1
#
# The solution for porepressure and displacements is given in
# AHD Cheng and E Detournay "A direct boundary element method for plane strain poroelasticity" International Journal of Numerical and Analytical Methods in Geomechanics 12 (1988) 551-572.
# The solution involves complicated infinite series, so I shall not write it here
[Mesh]
type = GeneratedMesh
dim = 3
nx = 10
ny = 1
nz = 1
xmin = 0
xmax = 1
ymin = 0
ymax = 0.1
zmin = 0
zmax = 1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./roller_xmin]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left'
[../]
[./roller_ymin]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom'
[../]
[./plane_strain]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back front'
[../]
[./xmax_drained]
type = DirichletBC
variable = porepressure
value = 0
boundary = right
[../]
[./top_velocity]
type = FunctionDirichletBC
variable = disp_y
function = top_velocity
boundary = top
[../]
[]
[Functions]
[./top_velocity]
type = PiecewiseLinear
x = '0 0.002 0.006 0.014 0.03 0.046 0.062 0.078 0.094 0.11 0.126 0.142 0.158 0.174 0.19 0.206 0.222 0.238 0.254 0.27 0.286 0.302 0.318 0.334 0.35 0.366 0.382 0.398 0.414 0.43 0.446 0.462 0.478 0.494 0.51 0.526 0.542 0.558 0.574 0.59 0.606 0.622 0.638 0.654 0.67 0.686 0.702'
y = '-0.041824842 -0.042730269 -0.043412712 -0.04428867 -0.045509181 -0.04645965 -0.047268246 -0.047974749 -0.048597109 -0.0491467 -0.049632388 -0.050061697 -0.050441198 -0.050776675 -0.051073238 -0.0513354 -0.051567152 -0.051772022 -0.051953128 -0.052113227 -0.052254754 -0.052379865 -0.052490464 -0.052588233 -0.052674662 -0.052751065 -0.052818606 -0.052878312 -0.052931093 -0.052977751 -0.053018997 -0.053055459 -0.053087691 -0.053116185 -0.053141373 -0.05316364 -0.053183324 -0.053200724 -0.053216106 -0.053229704 -0.053241725 -0.053252351 -0.053261745 -0.053270049 -0.053277389 -0.053283879 -0.053289615'
[../]
[]
[AuxVariables]
[./tot_force]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./tot_force]
type = ParsedAux
args = 'stress_yy porepressure'
execute_on = timestep_end
variable = tot_force
function = '-stress_yy+0.6*porepressure'
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.0
bulk_modulus = 8.0
viscosity = 1.0
density0 = 1.0
[../]
[../]
[]
[PorousFlowBasicTHM]
coupling_type = HydroMechanical
displacements = 'disp_x disp_y disp_z'
multiply_by_density = false
porepressure = porepressure
biot_coefficient = 0.6
gravity = '0 0 0'
fp = the_simple_fluid
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '0.5 0.75'
# bulk modulus is lambda + 2*mu/3 = 0.5 + 2*0.75/3 = 1
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./porosity]
type = PorousFlowPorosityConst # only the initial value of this is ever used
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.6
solid_bulk_compliance = 1
fluid_bulk_modulus = 8
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.5 0 0 0 1.5 0 0 0 1.5'
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = csv
point = '0.0 0 0'
variable = porepressure
[../]
[./p1]
type = PointValue
outputs = csv
point = '0.1 0 0'
variable = porepressure
[../]
[./p2]
type = PointValue
outputs = csv
point = '0.2 0 0'
variable = porepressure
[../]
[./p3]
type = PointValue
outputs = csv
point = '0.3 0 0'
variable = porepressure
[../]
[./p4]
type = PointValue
outputs = csv
point = '0.4 0 0'
variable = porepressure
[../]
[./p5]
type = PointValue
outputs = csv
point = '0.5 0 0'
variable = porepressure
[../]
[./p6]
type = PointValue
outputs = csv
point = '0.6 0 0'
variable = porepressure
[../]
[./p7]
type = PointValue
outputs = csv
point = '0.7 0 0'
variable = porepressure
[../]
[./p8]
type = PointValue
outputs = csv
point = '0.8 0 0'
variable = porepressure
[../]
[./p9]
type = PointValue
outputs = csv
point = '0.9 0 0'
variable = porepressure
[../]
[./p99]
type = PointValue
outputs = csv
point = '1 0 0'
variable = porepressure
[../]
[./xdisp]
type = PointValue
outputs = csv
point = '1 0.1 0'
variable = disp_x
[../]
[./ydisp]
type = PointValue
outputs = csv
point = '1 0.1 0'
variable = disp_y
[../]
[./total_downwards_force]
type = ElementAverageValue
outputs = csv
variable = tot_force
[../]
[./dt]
type = FunctionValuePostprocessor
outputs = console
function = if(0.15*t<0.01,0.15*t,0.01)
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu 1E-14 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 0.7
[./TimeStepper]
type = PostprocessorDT
postprocessor = dt
dt = 0.001
[../]
[]
[Outputs]
execute_on = 'timestep_end'
file_base = mandel_basicthm
[./csv]
interval = 3
type = CSV
[../]
[]
modules/porous_flow/test/tests/mass_conservation/mass08.i
# Checking that the mass postprocessor throws the correct error when a given phase index
# is too large
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./sat]
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[]
[ICs]
[./pinit]
type = ConstantIC
value = 1
variable = pp
[../]
[./satinit]
type = FunctionIC
function = 1-x
variable = sat
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sat
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp sat'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 1
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 0.1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = pp
phase1_saturation = sat
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Postprocessors]
[./comp1_total_mass]
type = PorousFlowFluidMass
fluid_component = 1
phase = 2
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
modules/porous_flow/test/tests/infiltration_and_drainage/wli02.i
[Mesh]
type = GeneratedMesh
dim = 2
nx = 50
ny = 1
xmin = -1000
xmax = 0
ymin = 0
ymax = 0.05
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = pressure
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureBW
Sn = 0.0
Ss = 1.0
C = 1.5
las = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 4
density0 = 10
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./temperature]
type = PorousFlowTemperature
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pressure
capillary_pressure = pc
[../]
[./relperm]
type = PorousFlowRelativePermeabilityBW
Sn = 0.0
Ss = 1.0
Kn = 0
Ks = 1
C = 1.5
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.25
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 1 0 0 0 1'
[../]
[]
[Variables]
[./pressure]
initial_condition = -1E-4
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pressure
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pressure
gravity = '-0.1 0 0'
[../]
[]
[AuxVariables]
[./SWater]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./SWater]
type = MaterialStdVectorAux
property = PorousFlow_saturation_qp
index = 0
variable = SWater
[../]
[]
[BCs]
[./base]
type = DirichletBC
boundary = 'left'
value = -1E-4
variable = pressure
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options = '-snes_converged_reason -ksp_diagonal_scale -ksp_diagonal_scale_fix -ksp_gmres_modifiedgramschmidt -snes_linesearch_monitor'
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu NONZERO 2 1E-10 1E-10 10000'
[../]
[]
[VectorPostprocessors]
[./swater]
type = LineValueSampler
variable = SWater
start_point = '-1000 0 0'
end_point = '0 0 0'
sort_by = x
num_points = 71
execute_on = timestep_end
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
petsc_options = '-snes_converged_reason'
end_time = 100
dt = 5
[]
[Outputs]
file_base = wli02
sync_times = '100 500 1000'
[./exodus]
type = Exodus
sync_only = true
[../]
[./along_line]
type = CSV
sync_only = true
[../]
[]
modules/porous_flow/test/tests/jacobian/diff03.i
# Test the Jacobian of the diffusive component of the PorousFlowDisperiveFlux kernel for two phases.
# By setting disp_long and disp_trans to zero, the purely diffusive component of the flux
# can be isolated. Uses saturation-dependent tortuosity and diffusion coefficients from the
# Millington-Quirk model
[Mesh]
type = GeneratedMesh
dim = 2
nx = 3
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./sgas]
[../]
[./massfrac0]
[../]
[]
[AuxVariables]
[./massfrac1]
[../]
[]
[ICs]
[./sgas]
type = RandomIC
variable = sgas
max = 1
min = 0
[../]
[./massfrac0]
type = RandomIC
variable = massfrac0
min = 0
max = 1
[../]
[./massfrac1]
type = RandomIC
variable = massfrac1
min = 0
max = 1
[../]
[]
[Kernels]
[./diff0]
type = PorousFlowDispersiveFlux
fluid_component = 0
variable = sgas
gravity = '1 0 0'
disp_long = '0 0'
disp_trans = '0 0'
[../]
[./diff1]
type = PorousFlowDispersiveFlux
fluid_component = 1
variable = massfrac0
gravity = '1 0 0'
disp_long = '0 0'
disp_trans = '0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'sgas massfrac0'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
pc = 0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1e7
density0 = 10
thermal_expansion = 0
viscosity = 1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 1e7
density0 = 1
thermal_expansion = 0
viscosity = 0.1
[../]
[../]
[]
[Materials]
[./temp]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = 1
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac0 massfrac1'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./poro]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./diff]
type = PorousFlowDiffusivityMillingtonQuirk
diffusion_coeff = '1e-2 1e-1 1e-2 1e-1'
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityConst
phase = 1
[../]
[]
[Preconditioning]
active = smp
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/poroperm/PermFromPoro02.i
# Testing permeability from porosity
# Trivial test, checking calculated permeability is correct
# k = k_anisotropic * k0 * (1-phi0)^m/phi0^n * phi^n/(1-phi)^m
[Mesh]
type = GeneratedMesh
dim = 1
nx = 3
xmin = 0
xmax = 3
[]
[GlobalParams]
block = 0
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[./InitialCondition]
type = ConstantIC
value = 0
[../]
[../]
[]
[Kernels]
[./flux]
type = PorousFlowAdvectiveFlux
gravity = '0 0 0'
variable = pp
[../]
[]
[BCs]
[./ptop]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[./pbase]
type = DirichletBC
variable = pp
boundary = left
value = 1
[../]
[]
[AuxVariables]
[./poro]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_x]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_y]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_z]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./poro]
type = PorousFlowPropertyAux
property = porosity
variable = poro
[../]
[./perm_x]
type = PorousFlowPropertyAux
property = permeability
variable = perm_x
row = 0
column = 0
[../]
[./perm_y]
type = PorousFlowPropertyAux
property = permeability
variable = perm_y
row = 1
column = 1
[../]
[./perm_z]
type = PorousFlowPropertyAux
property = permeability
variable = perm_z
row = 2
column = 2
[../]
[]
[Postprocessors]
[./perm_x_bottom]
type = PointValue
variable = perm_x
point = '0 0 0'
[../]
[./perm_y_bottom]
type = PointValue
variable = perm_y
point = '0 0 0'
[../]
[./perm_z_bottom]
type = PointValue
variable = perm_z
point = '0 0 0'
[../]
[./perm_x_top]
type = PointValue
variable = perm_x
point = '3 0 0'
[../]
[./perm_y_top]
type = PointValue
variable = perm_y
point = '3 0 0'
[../]
[./perm_z_top]
type = PointValue
variable = perm_z
point = '3 0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
# unimportant in this fully-saturated test
m = 0.8
alpha = 1e-4
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2.2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./permeability]
type = PorousFlowPermeabilityKozenyCarman
k_anisotropy = '1 0 0 0 2 0 0 0 0.1'
poroperm_function = kozeny_carman_phi0
k0 = 1e-10
phi0 = 0.05
m = 2
n = 7
[../]
[./temperature]
type = PorousFlowTemperature
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0 # unimportant in this fully-saturated situation
phase = 0
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
solve_type = Newton
type = Steady
l_tol = 1E-5
nl_abs_tol = 1E-3
nl_rel_tol = 1E-8
l_max_its = 200
nl_max_its = 400
petsc_options_iname = '-pc_type -pc_asm_overlap -sub_pc_type -ksp_type -ksp_gmres_restart'
petsc_options_value = ' asm 2 lu gmres 200'
[]
[Outputs]
csv = true
execute_on = 'timestep_end'
[]
modules/porous_flow/test/tests/heat_advection/heat_advection_1d.i
# 1phase, heat advecting with a moving fluid
[Mesh]
type = GeneratedMesh
dim = 1
nx = 50
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./temp]
initial_condition = 200
[../]
[./pp]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = '1-x'
[../]
[]
[BCs]
[./pp0]
type = DirichletBC
variable = pp
boundary = left
value = 1
[../]
[./pp1]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[./spit_heat]
type = DirichletBC
variable = temp
boundary = left
value = 300
[../]
[./suck_heat]
type = DirichletBC
variable = temp
boundary = right
value = 200
[../]
[]
[Kernels]
[./mass_dot]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./advection]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
[../]
[./energy_dot]
type = PorousFlowEnergyTimeDerivative
variable = temp
[../]
[./heat_advection]
type = PorousFlowHeatAdvection
variable = temp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.6
alpha = 1.3
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 100
density0 = 1000
viscosity = 4.4
thermal_expansion = 0
cv = 2
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.2
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 1.0
density = 125
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./PS]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres bjacobi 1E-15 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 0.01
end_time = 0.6
[]
[VectorPostprocessors]
[./T]
type = LineValueSampler
start_point = '0 0 0'
end_point = '1 0 0'
num_points = 51
sort_by = x
variable = temp
[../]
[]
[Outputs]
[./csv]
type = CSV
sync_times = '0.1 0.6'
sync_only = true
[../]
[]
modules/porous_flow/test/tests/infiltration_and_drainage/rd03.i
[Mesh]
file = gold/rd02.e
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Functions]
[./dts]
type = PiecewiseLinear
y = '2E4 1E6'
x = '0 1E6'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = pressure
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.336
alpha = 1.43e-4
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e7
viscosity = 1.01e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./temperature]
type = PorousFlowTemperature
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pressure
capillary_pressure = pc
[../]
[./relperm]
type = PorousFlowRelativePermeabilityVG
m = 0.336
seff_turnover = 0.99
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.33
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '0.295E-12 0 0 0 0.295E-12 0 0 0 0.295E-12'
[../]
[]
[Variables]
[./pressure]
initial_from_file_timestep = LATEST
initial_from_file_var = pressure
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pressure
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pressure
gravity = '-10 0 0'
[../]
[]
[AuxVariables]
[./SWater]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./SWater]
type = MaterialStdVectorAux
property = PorousFlow_saturation_qp
index = 0
variable = SWater
[../]
[]
[BCs]
[./base]
type = DirichletBC
boundary = left
value = 0.0
variable = pressure
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options = '-snes_converged_reason -ksp_diagonal_scale -ksp_diagonal_scale_fix -ksp_gmres_modifiedgramschmidt -snes_linesearch_monitor'
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu NONZERO 2 1E-10 1E-10 10'
[../]
[]
[VectorPostprocessors]
[./swater]
type = LineValueSampler
variable = SWater
start_point = '0 0 0'
end_point = '6 0 0'
sort_by = x
num_points = 121
execute_on = timestep_end
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
petsc_options = '-snes_converged_reason'
end_time = 8.2944E6
[./TimeStepper]
type = FunctionDT
function = dts
[../]
[]
[Outputs]
file_base = rd03
[./exodus]
type = Exodus
execute_on = 'initial final'
[../]
[./along_line]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/energy_conservation/except02.i
# checking that the heat-energy postprocessor throws the correct error if the kernel_variable_number is illegal
[Mesh]
type = GeneratedMesh
dim = 1
nx = 3
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./temp]
[../]
[]
[ICs]
[./tinit]
type = FunctionIC
function = '100*x'
variable = temp
[../]
[./pinit]
type = FunctionIC
function = x
variable = pp
[../]
[]
[Kernels]
[./dummyt]
type = TimeDerivative
variable = temp
[../]
[./dummyp]
type = TimeDerivative
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 1
viscosity = 0.001
thermal_expansion = 0
cv = 1.3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 2.2
density = 0.5
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Postprocessors]
[./total_heat]
type = PorousFlowHeatEnergy
kernel_variable_number = 2
[../]
[./rock_heat]
type = PorousFlowHeatEnergy
[../]
[./fluid_heat]
type = PorousFlowHeatEnergy
include_porous_skeleton = false
phase = 0
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1 1 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = except01
csv = true
[]
modules/porous_flow/test/tests/chemistry/except2.i
# Exception test.
# Incorrect number of phases
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = Diffusion
variable = a
[../]
[./b]
type = Diffusion
variable = b
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 2
number_fluid_components = 3
number_aqueous_equilibrium = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./eqm_k0]
initial_condition = 1E2
[../]
[./eqm_k1]
initial_condition = 1E-2
[../]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFractionAqueousEquilibriumChemistry
mass_fraction_vars = 'a b'
num_reactions = 2
equilibrium_constants = 'eqm_k0 eqm_k1'
primary_activity_coefficients = '1 1'
secondary_activity_coefficients = '1 1'
reactions = '2 0
1 1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/mass_conservation/mass10.i
# Checking that the mass postprocessor throws the correct error when kernel_variable_numer is illegal
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./sat]
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[]
[ICs]
[./pinit]
type = ConstantIC
value = 1
variable = pp
[../]
[./satinit]
type = FunctionIC
function = 1-x
variable = sat
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sat
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp sat'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 1
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 0.1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = pp
phase1_saturation = sat
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Postprocessors]
[./comp1_total_mass]
type = PorousFlowFluidMass
fluid_component = 1
kernel_variable_number = 2
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
modules/porous_flow/test/tests/dirackernels/bh_except14.i
# fully-saturated
# production
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
bottom_p_or_t = 0
fluid_phase = 0
point_file = bh02_huge.bh
SumQuantityUO = borehole_total_outflow_mass
variable = pp
unit_weight = '0 0 0'
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_2phasePS.i
# Pressure pulse in 1D with 2 phases, 2components - transient
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./ppwater]
initial_condition = 2e6
[../]
[./sgas]
initial_condition = 0.3
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[./ppgas]
family = MONOMIAL
order = FIRST
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = ppwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
variable = ppwater
fluid_component = 0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sgas
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
variable = sgas
fluid_component = 1
[../]
[]
[AuxKernels]
[./ppgas]
type = PorousFlowPropertyAux
property = pressure
phase = 1
variable = ppgas
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater sgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
pc = 1e5
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 2e7
density0 = 1
thermal_expansion = 0
viscosity = 1e-5
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = ppwater
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1e-15 0 0 0 1e-15 0 0 0 1e-15'
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 0
[../]
[./relperm_gas]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 1
[../]
[]
[BCs]
[./leftwater]
type = DirichletBC
boundary = left
value = 3e6
variable = ppwater
[../]
[./rightwater]
type = DirichletBC
boundary = right
value = 2e6
variable = ppwater
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-20 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1e3
end_time = 1e4
[]
[VectorPostprocessors]
[./pp]
type = LineValueSampler
sort_by = x
variable = 'ppwater ppgas'
start_point = '0 0 0'
end_point = '100 0 0'
num_points = 11
[../]
[]
[Outputs]
file_base = pressure_pulse_1d_2phasePS
print_linear_residuals = false
[./csv]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/flux_limited_TVD_pflow/except01.i
# Exception test: phase number too big
[Mesh]
type = GeneratedMesh
dim = 1
[]
[GlobalParams]
gravity = '1 2 3'
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./tracer]
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[PorousFlowUnsaturated]
porepressure = pp
mass_fraction_vars = tracer
fp = the_simple_fluid
[]
[UserObjects]
[./advective_flux_calculator]
type = PorousFlowAdvectiveFluxCalculatorSaturated
phase = 2
[../]
[]
[Materials]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
modules/porous_flow/test/tests/infiltration_and_drainage/wli01.i
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1000
ny = 1
xmin = -10000
xmax = 0
ymin = 0
ymax = 0.05
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = pressure
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureBW
Sn = 0.0
Ss = 1.0
C = 1.5
las = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 4
density0 = 10
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./temperature]
type = PorousFlowTemperature
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pressure
capillary_pressure = pc
[../]
[./relperm]
type = PorousFlowRelativePermeabilityBW
Sn = 0.0
Ss = 1.0
Kn = 0
Ks = 1
C = 1.5
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.25
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 1 0 0 0 1'
[../]
[]
[Variables]
[./pressure]
initial_condition = -1E-4
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pressure
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pressure
gravity = '-0.1 0 0'
[../]
[]
[AuxVariables]
[./SWater]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./SWater]
type = MaterialStdVectorAux
property = PorousFlow_saturation_qp
index = 0
variable = SWater
[../]
[]
[BCs]
[./base]
type = DirichletBC
boundary = 'left'
value = -1E-4
variable = pressure
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options = '-snes_converged_reason -ksp_diagonal_scale -ksp_diagonal_scale_fix -ksp_gmres_modifiedgramschmidt -snes_linesearch_monitor'
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu NONZERO 2 1E-10 1E-10 10000'
[../]
[]
[VectorPostprocessors]
[./swater]
type = LineValueSampler
variable = SWater
start_point = '-5000 0 0'
end_point = '0 0 0'
sort_by = x
num_points = 71
execute_on = timestep_end
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
petsc_options = '-snes_converged_reason'
end_time = 1000
dt = 1
[]
[Outputs]
file_base = wli01
sync_times = '100 500 1000'
[./exodus]
type = Exodus
sync_only = true
[../]
[./along_line]
type = CSV
sync_only = true
[../]
[]
modules/porous_flow/test/tests/jacobian/heat_vol_exp01.i
# Tests the PorousFlowHeatVolumetricExpansion kernel
# Fluid with constant bulk modulus, van-Genuchten capillary, THM porosity
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
block = 0
PorousFlowDictator = dictator
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[./temperature]
[../]
[]
[ICs]
[./disp_x]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_x
[../]
[./disp_y]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_y
[../]
[./disp_z]
type = RandomIC
min = -0.1
max = 0.1
variable = disp_z
[../]
[./p]
type = RandomIC
min = -1
max = 0
variable = porepressure
[../]
[./t]
type = RandomIC
min = 1
max = 2
variable = temperature
[../]
[]
[BCs]
# necessary otherwise volumetric strain rate will be zero
[./disp_x]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./disp_y]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'left right'
[../]
[./disp_z]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'left right'
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
displacements = 'disp_x disp_y disp_z'
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
displacements = 'disp_x disp_y disp_z'
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
displacements = 'disp_x disp_y disp_z'
component = 2
[../]
[./dummy]
type = TimeDerivative
variable = porepressure
[../]
[./temp]
type = PorousFlowHeatVolumetricExpansion
variable = temperature
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure temperature disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
cv = 1.3
[../]
[../]
[]
[Materials]
[./p_eff]
type = PorousFlowEffectiveFluidPressure
[../]
[./temperature]
type = PorousFlowTemperature
temperature = temperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '2 3'
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss_nodal]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
thermal = true
porosity_zero = 0.1
biot_coefficient = 0.5
solid_bulk = 1
thermal_expansion_coeff = 0.1
reference_temperature = 0.1
reference_porepressure = 0.2
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 1.1
density = 0.5
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E-5
[]
[Outputs]
execute_on = 'timestep_end'
file_base = jacobian2
exodus = false
[]
modules/porous_flow/test/tests/infiltration_and_drainage/bw01.i
[Mesh]
type = GeneratedMesh
dim = 2
nx = 400
ny = 1
xmin = -10
xmax = 10
ymin = 0
ymax = 0.05
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Functions]
[./dts]
type = PiecewiseLinear
y = '1E-5 1E-2 1E-2 1E-1'
x = '0 1E-5 1 10'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = pressure
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureBW
Sn = 0.0
Ss = 1.0
C = 1.5
las = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 4
density0 = 10
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./temperature]
type = PorousFlowTemperature
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pressure
capillary_pressure = pc
[../]
[./relperm]
type = PorousFlowRelativePermeabilityBW
Sn = 0.0
Ss = 1.0
Kn = 0
Ks = 1
C = 1.5
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.25
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 1 0 0 0 1'
[../]
[]
[Variables]
[./pressure]
initial_condition = -9E2
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pressure
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pressure
gravity = '-0.1 0 0'
[../]
[]
[AuxVariables]
[./SWater]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./SWater]
type = MaterialStdVectorAux
property = PorousFlow_saturation_qp
index = 0
variable = SWater
[../]
[]
[BCs]
[./recharge]
type = PorousFlowSink
variable = pressure
boundary = right
flux_function = -1.25 # corresponds to Rstar being 0.5 because i have to multiply by density*porosity
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options = '-snes_converged_reason -ksp_diagonal_scale -ksp_diagonal_scale_fix -ksp_gmres_modifiedgramschmidt -snes_linesearch_monitor'
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu NONZERO 2 1E-10 1E-10 10000'
[../]
[]
[VectorPostprocessors]
[./swater]
type = LineValueSampler
variable = SWater
start_point = '-10 0 0'
end_point = '10 0 0'
sort_by = x
num_points = 101
execute_on = timestep_end
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
petsc_options = '-snes_converged_reason'
end_time = 8
[./TimeStepper]
type = FunctionDT
function = dts
[../]
[]
[Outputs]
file_base = bw01
sync_times = '0.5 2 8'
[./exodus]
type = Exodus
sync_only = true
[../]
[./along_line]
type = CSV
sync_only = true
[../]
[]
modules/porous_flow/test/tests/chemistry/except9.i
# Exception test.
# Incorrect number of kinetic rate constants
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = Diffusion
variable = a
[../]
[./b]
type = Diffusion
variable = b
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 1E-6
[../]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'a b'
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = 'a b'
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = '1 1'
reactions = '1 1'
specific_reactive_surface_area = 1.0
kinetic_rate_constant = '1.0e-8 1'
activation_energy = '1.5e4'
molar_volume = 1
[../]
[./mineral]
type = PorousFlowAqueousPreDisMineral
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/sinks/s07.i
# apply a sink flux on just one component of a 3-component system and observe the correct behavior
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0
xmax = 1
ymin = 0
ymax = 1
zmin = 0
zmax = 2
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp frac0 frac1'
number_fluid_phases = 1
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1.1
[../]
[]
[Variables]
[./pp]
[../]
[./frac0]
initial_condition = 0.1
[../]
[./frac1]
initial_condition = 0.6
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = y
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = frac0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = frac1
[../]
[./mass2]
type = PorousFlowMassTimeDerivative
fluid_component = 2
variable = pp
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.3
density0 = 1.1
thermal_expansion = 0
viscosity = 1.1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'frac0 frac1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '0.2 0 0 0 0.1 0 0 0 0.1'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[AuxVariables]
[./flux_out]
[../]
[]
[Functions]
[./mass1_00]
type = ParsedFunction
value = 'frac*vol*por*dens0*exp(pp/bulk)*pow(1+pow(-al*pp,1.0/(1-m)),-m)'
vars = 'frac vol por dens0 pp bulk al m'
vals = 'f1_00 0.25 0.1 1.1 p00 1.3 1.1 0.5'
[../]
[./expected_mass_change1_00]
type = ParsedFunction
value = 'frac*fcn*area*dt'
vars = 'frac fcn area dt'
vals = 'f1_00 6 0.5 1E-3'
[../]
[./mass1_00_expect]
type = ParsedFunction
value = 'mass_prev-mass_change'
vars = 'mass_prev mass_change'
vals = 'm1_00_prev del_m1_00'
[../]
[./mass1_01]
type = ParsedFunction
value = 'frac*vol*por*dens0*exp(pp/bulk)*pow(1+pow(-al*pp,1.0/(1-m)),-m)'
vars = 'frac vol por dens0 pp bulk al m'
vals = 'f1_01 0.25 0.1 1.1 p01 1.3 1.1 0.5'
[../]
[./expected_mass_change1_01]
type = ParsedFunction
value = 'frac*fcn*area*dt'
vars = 'frac fcn area dt'
vals = 'f1_01 6 0.5 1E-3'
[../]
[./mass1_01_expect]
type = ParsedFunction
value = 'mass_prev-mass_change'
vars = 'mass_prev mass_change'
vals = 'm1_01_prev del_m1_01'
[../]
[]
[Postprocessors]
[./f1_00]
type = PointValue
point = '0 0 0'
variable = frac1
execute_on = 'initial timestep_end'
[../]
[./flux_00]
type = PointValue
point = '0 0 0'
variable = flux_out
execute_on = 'initial timestep_end'
[../]
[./p00]
type = PointValue
point = '0 0 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./m1_00]
type = FunctionValuePostprocessor
function = mass1_00
execute_on = 'initial timestep_end'
[../]
[./m1_00_prev]
type = FunctionValuePostprocessor
function = mass1_00
execute_on = 'timestep_begin'
outputs = 'console'
[../]
[./del_m1_00]
type = FunctionValuePostprocessor
function = expected_mass_change1_00
execute_on = 'timestep_end'
outputs = 'console'
[../]
[./m1_00_expect]
type = FunctionValuePostprocessor
function = mass1_00_expect
execute_on = 'timestep_end'
[../]
[./f1_01]
type = PointValue
point = '0 1 0'
variable = frac1
execute_on = 'initial timestep_end'
[../]
[./flux_01]
type = PointValue
point = '0 1 0'
variable = flux_out
execute_on = 'initial timestep_end'
[../]
[./p01]
type = PointValue
point = '0 1 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./m1_01]
type = FunctionValuePostprocessor
function = mass1_01
execute_on = 'initial timestep_end'
[../]
[./m1_01_prev]
type = FunctionValuePostprocessor
function = mass1_01
execute_on = 'timestep_begin'
outputs = 'console'
[../]
[./del_m1_01]
type = FunctionValuePostprocessor
function = expected_mass_change1_01
execute_on = 'timestep_end'
outputs = 'console'
[../]
[./m1_01_expect]
type = FunctionValuePostprocessor
function = mass1_01_expect
execute_on = 'timestep_end'
[../]
[./f1_11]
type = PointValue
point = '1 1 0'
variable = frac1
execute_on = 'initial timestep_end'
[../]
[./flux_11]
type = PointValue
point = '1 1 0'
variable = flux_out
execute_on = 'initial timestep_end'
[../]
[./p11]
type = PointValue
point = '1 1 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[]
[BCs]
[./flux]
type = PorousFlowSink
boundary = 'left'
variable = frac1
use_mobility = false
use_relperm = false
mass_fraction_component = 1
fluid_phase = 0
flux_function = 6
save_in = flux_out
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_max_it -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu 10 NONZERO 2'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E-3
end_time = 0.01
nl_rel_tol = 1E-12
nl_abs_tol = 1E-12
[]
[Outputs]
file_base = s07
[./console]
type = Console
execute_on = 'nonlinear linear'
[../]
[./csv]
type = CSV
execute_on = 'timestep_end'
[../]
[]
modules/porous_flow/test/tests/chemistry/precipitation_2phase.i
# Using a two-phase system (see precipitation.i for the single-phase)
# The saturation and porosity are chosen so that the results are identical to precipitation.i
#
# The precipitation reaction
#
# a <==> mineral
#
# produces "mineral". Using mineral_density = fluid_density, theta = 1 = eta, the DE is
#
# a' = -(mineral / (porosity * saturation))' = rate * surf_area * molar_vol (1 - (1 / eqm_const) * (act_coeff * a)^stoi)
#
# The following parameters are used
#
# T_ref = 0.5 K
# T = 1 K
# activation_energy = 3 J/mol
# gas_constant = 6 J/(mol K)
# kinetic_rate_at_ref_T = 0.60653 mol/(m^2 s)
# These give rate = 0.60653 * exp(1/2) = 1 mol/(m^2 s)
#
# surf_area = 0.5 m^2/L
# molar_volume = 2 L/mol
# These give rate * surf_area * molar_vol = 1 s^-1
#
# equilibrium_constant = 0.5 (dimensionless)
# primary_activity_coefficient = 2 (dimensionless)
# stoichiometry = 1 (dimensionless)
# This means that 1 - (1 / eqm_const) * (act_coeff * a)^stoi = 1 - 4 a, which is negative for a > 0.25, ie precipitation for a(t=0) > 0.25
#
# The solution of the DE is
# a = eqm_const / act_coeff + (a(t=0) - eqm_const / act_coeff) exp(-rate * surf_area * molar_vol * act_coeff * t / eqm_const)
# = 0.25 + (a(t=0) - 0.25) exp(-4 * t)
# c = c(t=0) - (a - a(t=0)) * (porosity * saturation)
#
# This test checks that (a + c / (porosity * saturation)) is time-independent, and that a follows the above solution
#
# Aside:
# The exponential curve is not followed exactly because moose actually solves
# (a - a_old)/dt = rate * surf_area * molar_vol (1 - (1 / eqm_const) * (act_coeff * a)^stoi)
# which does not give an exponential exactly, except in the limit dt->0
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
initial_condition = 0.9
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 0.5
[../]
[./pressure0]
[../]
[./saturation1]
initial_condition = 0.25
[../]
[./b]
initial_condition = 0.123
[../]
[./ini_mineral_conc]
initial_condition = 0.2
[../]
[./mineral]
family = MONOMIAL
order = CONSTANT
[../]
[./should_be_static]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./mineral]
type = PorousFlowPropertyAux
property = mineral_concentration
mineral_species = 0
variable = mineral
[../]
[./should_be_static]
type = ParsedAux
args = 'mineral a'
function = 'a + mineral / 0.1'
variable = should_be_static
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./mass_a]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = a
[../]
[./pre_dis]
type = PorousFlowPreDis
variable = a
mineral_density = 1000
stoichiometry = 1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = a
number_fluid_phases = 2
number_fluid_components = 2
number_aqueous_kinetic = 1
aqueous_phase_number = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9 # huge, so mimic chemical_reactions
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = 1
[../]
[./ppss]
type = PorousFlow2PhasePS
capillary_pressure = pc
phase0_porepressure = pressure0
phase1_saturation = saturation1
[../]
[./mass_frac]
type = PorousFlowMassFraction
mass_fraction_vars = 'b a'
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = a
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = 2
reactions = 1
specific_reactive_surface_area = 0.5
kinetic_rate_constant = 0.6065306597126334
activation_energy = 3
molar_volume = 2
gas_constant = 6
reference_temperature = 0.5
[../]
[./mineral_conc]
type = PorousFlowAqueousPreDisMineral
initial_concentrations = ini_mineral_conc
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.4
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
nl_abs_tol = 1E-10
dt = 0.01
end_time = 1
[]
[Postprocessors]
[./a]
type = PointValue
point = '0 0 0'
variable = a
[../]
[./should_be_static]
type = PointValue
point = '0 0 0'
variable = should_be_static
[../]
[]
[Outputs]
interval = 10
csv = true
perf_graph = true
[]
modules/porous_flow/test/tests/infiltration_and_drainage/rsc01.i
# RSC test with high-res time and spatial resolution
[Mesh]
type = GeneratedMesh
dim = 2
nx = 600
ny = 1
xmin = 0
xmax = 10 # x is the depth variable, called zeta in RSC
ymin = 0
ymax = 0.05
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Functions]
[./dts]
type = PiecewiseLinear
y = '3E-3 3E-2 0.05'
x = '0 1 5'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pwater poil'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureRSC
oil_viscosity = 2E-3
scale_ratio = 2E3
shift = 10
[../]
[]
[Modules]
[./FluidProperties]
[./water]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 10
thermal_expansion = 0
viscosity = 1e-3
[../]
[./oil]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 20
thermal_expansion = 0
viscosity = 2e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = pwater
phase1_porepressure = poil
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./water]
type = PorousFlowSingleComponentFluid
fp = water
phase = 0
compute_enthalpy = false
compute_internal_energy = false
[../]
[./oil]
type = PorousFlowSingleComponentFluid
fp = oil
phase = 1
compute_enthalpy = false
compute_internal_energy = false
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 0
[../]
[./relperm_oil]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.25
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-5 0 0 0 1E-5 0 0 0 1E-5'
[../]
[]
[Variables]
[./pwater]
[../]
[./poil]
[../]
[]
[ICs]
[./water_init]
type = ConstantIC
variable = pwater
value = 0
[../]
[./oil_init]
type = ConstantIC
variable = poil
value = 15
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pwater
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = poil
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = poil
[../]
[]
[AuxVariables]
[./SWater]
family = MONOMIAL
order = CONSTANT
[../]
[./SOil]
family = MONOMIAL
order = CONSTANT
[../]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[]
[AuxKernels]
[./SWater]
type = MaterialStdVectorAux
property = PorousFlow_saturation_qp
index = 0
variable = SWater
[../]
[./SOil]
type = MaterialStdVectorAux
property = PorousFlow_saturation_qp
index = 1
variable = SOil
[../]
[]
[BCs]
# we are pumping water into a system that has virtually incompressible fluids, hence the pressures rise enormously. this adversely affects convergence because of almost-overflows and precision-loss problems. The fixed things help keep pressures low and so prevent these awful behaviours. the movement of the saturation front is the same regardless of the fixed things.
active = 'recharge fixedoil fixedwater'
[./recharge]
type = PorousFlowSink
variable = pwater
boundary = 'left'
flux_function = -1.0
[../]
[./fixedwater]
type = DirichletBC
variable = pwater
boundary = 'right'
value = 0
[../]
[./fixedoil]
type = DirichletBC
variable = poil
boundary = 'right'
value = 15
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options = '-snes_converged_reason -ksp_diagonal_scale -ksp_diagonal_scale_fix -ksp_gmres_modifiedgramschmidt -snes_linesearch_monitor'
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu NONZERO 2 1E-10 1E-10 10000'
[../]
[]
[VectorPostprocessors]
[./swater]
type = LineValueSampler
variable = SWater
start_point = '0 0 0'
end_point = '7 0 0'
sort_by = x
num_points = 21
execute_on = timestep_end
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
petsc_options = '-snes_converged_reason'
end_time = 5
[./TimeStepper]
type = FunctionDT
function = dts
[../]
[]
[Outputs]
file_base = rsc01
[./along_line]
type = CSV
execute_vector_postprocessors_on = final
[../]
[./exodus]
type = Exodus
execute_on = 'initial final'
[../]
[]
modules/porous_flow/test/tests/newton_cooling/nc01.i
# Newton cooling from a bar. 1-phase transient
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1000
ny = 1
xmin = 0
xmax = 100
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pressure'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.8
alpha = 1e-5
[../]
[]
[Variables]
[./pressure]
initial_condition = 2E6
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pressure
[../]
[./flux]
type = PorousFlowAdvectiveFlux
fluid_component = 0
gravity = '0 0 0'
variable = pressure
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1e6
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-15'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey # irrelevant in this fully-saturated situation
n = 2
phase = 0
[../]
[]
[BCs]
[./left]
type = DirichletBC
variable = pressure
boundary = left
value = 2E6
[../]
[./newton]
type = PorousFlowPiecewiseLinearSink
variable = pressure
boundary = right
pt_vals = '0 100000 200000 300000 400000 500000 600000 700000 800000 900000 1000000 1100000 1200000 1300000 1400000 1500000 1600000 1700000 1800000 1900000 2000000'
multipliers = '0. 5.6677197748570516e-6 0.000011931518841831313 0.00001885408740732065 0.000026504708864284114 0.000034959953203725676 0.000044304443352900224 0.00005463170211001232 0.00006604508815181467 0.00007865883048198513 0.00009259917167338928 0.00010800563134618119 0.00012503240252705603 0.00014384989486488752 0.00016464644014777016 0.00018763017719085535 0.0002130311349595711 0.00024110353477682344 0.00027212833465544285 0.00030641604122040985 0.00034430981736352295'
use_mobility = false
use_relperm = false
fluid_phase = 0
flux_function = 1
[../]
[]
[VectorPostprocessors]
[./porepressure]
type = LineValueSampler
variable = pressure
start_point = '0 0.5 0'
end_point = '100 0.5 0'
sort_by = x
num_points = 20
execute_on = timestep_end
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-12 1E-15 10000'
[../]
[]
[Executioner]
type = Transient
end_time = 1E8
dt = 1E6
[]
[Outputs]
file_base = nc01
[./along_line]
type = CSV
execute_vector_postprocessors_on = final
[../]
[]
modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_3comp.i
# Pressure pulse in 1D with 1 phase but 3 components (viscosity, relperm, etc are independent of mass-fractions) - transient
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 2E6
[../]
[./massfrac0]
initial_condition = 0.1
[../]
[./massfrac1]
initial_condition = 0.3
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
variable = pp
gravity = '0 0 0'
fluid_component = 0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = massfrac0
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
variable = massfrac0
gravity = '0 0 0'
fluid_component = 1
[../]
[./mass2]
type = PorousFlowMassTimeDerivative
fluid_component = 2
variable = massfrac1
[../]
[./flux2]
type = PorousFlowAdvectiveFlux
variable = massfrac1
gravity = '0 0 0'
fluid_component = 2
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0 massfrac1'
number_fluid_phases = 1
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac0 massfrac1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-15'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0
phase = 0
[../]
[]
[BCs]
[./left]
type = DirichletBC
boundary = left
value = 3E6
variable = pp
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options = '-snes_converged_reason -ksp_diagonal_scale -ksp_diagonal_scale_fix -ksp_gmres_modifiedgramschmidt -snes_linesearch_monitor'
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap -snes_atol -snes_rtol -snes_max_it -ksp_rtol -ksp_atol'
petsc_options_value = 'gmres asm lu NONZERO 2 1E-7 1E-10 20 1E-10 1E-100'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E3
end_time = 1E4
[]
[Postprocessors]
[./p000]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = 'initial timestep_end'
[../]
[./p010]
type = PointValue
variable = pp
point = '10 0 0'
execute_on = 'initial timestep_end'
[../]
[./p020]
type = PointValue
variable = pp
point = '20 0 0'
execute_on = 'initial timestep_end'
[../]
[./p030]
type = PointValue
variable = pp
point = '30 0 0'
execute_on = 'initial timestep_end'
[../]
[./p040]
type = PointValue
variable = pp
point = '40 0 0'
execute_on = 'initial timestep_end'
[../]
[./p050]
type = PointValue
variable = pp
point = '50 0 0'
execute_on = 'initial timestep_end'
[../]
[./p060]
type = PointValue
variable = pp
point = '60 0 0'
execute_on = 'initial timestep_end'
[../]
[./p070]
type = PointValue
variable = pp
point = '70 0 0'
execute_on = 'initial timestep_end'
[../]
[./p080]
type = PointValue
variable = pp
point = '80 0 0'
execute_on = 'initial timestep_end'
[../]
[./p090]
type = PointValue
variable = pp
point = '90 0 0'
execute_on = 'initial timestep_end'
[../]
[./p100]
type = PointValue
variable = pp
point = '100 0 0'
execute_on = 'initial timestep_end'
[../]
[./mf_0_010]
type = PointValue
variable = massfrac0
point = '10 0 0'
execute_on = 'timestep_end'
[../]
[./mf_1_010]
type = PointValue
variable = massfrac1
point = '10 0 0'
execute_on = 'timestep_end'
[../]
[]
[Outputs]
file_base = pressure_pulse_1d_3comp
print_linear_residuals = true
exodus = true
csv = true
[]
modules/porous_flow/examples/tidal/earth_tide_fullsat.i
# A confined aquifer is fully saturated with water
# Earth tides apply strain to the aquifer and the resulting porepressure changes are recorded
#
# To replicate standard poroelasticity exactly:
# (1) the PorousFlowBasicTHM Action is used;
# (2) multiply_by_density = false;
# (3) PorousFlowConstantBiotModulus is used
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0
xmax = 1
ymin = 0
ymax = 1
zmin = 0
zmax = 1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
biot_coefficient = 0.6
multiply_by_density = false
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./strain_x]
type = FunctionDirichletBC
variable = disp_x
function = earth_tide_x
boundary = 'left right'
[../]
[./strain_y]
type = FunctionDirichletBC
variable = disp_y
function = earth_tide_y
boundary = 'bottom top'
[../]
[./strain_z]
type = FunctionDirichletBC
variable = disp_z
function = earth_tide_z
boundary = 'back front'
[../]
[]
[Functions]
[./earth_tide_x]
type = ParsedFunction
value = 'x*1E-8*(5*cos(t*2*pi) + 2*cos((t-0.5)*2*pi) + 1*cos((t+0.3)*0.5*pi))'
[../]
[./earth_tide_y]
type = ParsedFunction
value = 'y*1E-8*(7*cos(t*2*pi) + 4*cos((t-0.3)*2*pi) + 7*cos((t+0.6)*0.5*pi))'
[../]
[./earth_tide_z]
type = ParsedFunction
value = 'z*1E-8*(7*cos((t-0.5)*2*pi) + 4*cos((t-0.8)*2*pi) + 7*cos((t+0.1)*4*pi))'
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
[../]
[../]
[]
[PorousFlowBasicTHM]
coupling_type = HydroMechanical
displacements = 'disp_x disp_y disp_z'
porepressure = porepressure
gravity = '0 0 0'
fp = the_simple_fluid
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
bulk_modulus = 10.0E9 # drained bulk modulus
poissons_ratio = 0.25
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./porosity]
type = PorousFlowPorosityConst # only the initial value of this is ever used
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
solid_bulk_compliance = 1E-10
fluid_bulk_modulus = 2E9
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[]
[Postprocessors]
[./pp]
type = PointValue
point = '0.5 0.5 0.5'
variable = porepressure
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 0.01
end_time = 2
[]
[Outputs]
console = true
csv = true
[]
modules/porous_flow/test/tests/dirackernels/bh_except12.i
# PorousFlowPeacemanBorehole exception test
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = TimeDerivative
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
bottom_p_or_t = 0
fluid_phase = 0
point_file = does_not_exist
SumQuantityUO = borehole_total_outflow_mass
variable = pp
unit_weight = '0 0 0'
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
modules/porous_flow/test/tests/fluids/simple_fluid_hr.i
# Test the properties calculated by the simple fluid Material
# Time are chosen to be hours
# Pressure 10 MPa
# Temperature = 300 K (temperature unit = K)
# Density should equal 1500*exp(1E7/1E9-2E-4*300)=1426.844 kg/m^3
# Viscosity should equal 3.06E-7 Pa.hr
# Energy density should equal 4000 * 300 = 1.2E6 J/kg
# Specific enthalpy should equal 4000 * 300 + 10e6 / 1426.844 = 1.207008E6 J/kg
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 2.0E-4
cv = 4000.0
cp = 5000.0
bulk_modulus = 1.0E9
thermal_conductivity = 1.0
viscosity = 1.1E-3
density0 = 1500.0
[../]
[../]
[]
[Mesh]
type = GeneratedMesh
dim = 1
nx = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp T'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Variables]
[./pp]
initial_condition = 10E6
[../]
[./T]
initial_condition = 300.0
[../]
[]
[Kernels]
[./dummy_p]
type = Diffusion
variable = pp
[../]
[./dummy_T]
type = Diffusion
variable = T
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = T
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
temperature_unit = Kelvin
time_unit = hours
fp = the_simple_fluid
phase = 0
[../]
[]
[Postprocessors]
[./pressure]
type = ElementIntegralVariablePostprocessor
variable = pp
[../]
[./temperature]
type = ElementIntegralVariablePostprocessor
variable = T
[../]
[./density]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_density_qp0'
[../]
[./viscosity]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_viscosity_qp0'
[../]
[./internal_energy]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_internal_energy_qp0'
[../]
[./enthalpy]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_enthalpy_qp0'
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
execute_on = 'timestep_end'
csv = true
[]
modules/porous_flow/test/tests/gravity/grav02a.i
# Checking that gravity head is established in the transient situation when 0<saturation<1 (note the strictly less-than).
# 2phase (PP), 2components, vanGenuchten, constant fluid bulk-moduli for each phase, constant viscosity, constant permeability, Corey relative perm
# For better agreement with the analytical solution (ana_pp), just increase nx
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = -1
xmax = 0
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
initial_condition = -1.0
[../]
[./ppgas]
initial_condition = 0
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = ppwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = ppwater
gravity = '-1 0 0'
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = ppgas
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = ppgas
gravity = '-1 0 0'
[../]
[]
[Functions]
[./ana_ppwater]
type = ParsedFunction
vars = 'g B p0 rho0'
vals = '1 2 pp_water_top 1'
value = '-B*log(exp(-p0/B)+g*rho0*x/B)' # expected pp at base
[../]
[./ana_ppgas]
type = ParsedFunction
vars = 'g B p0 rho0'
vals = '1 1 pp_gas_top 0.1'
value = '-B*log(exp(-p0/B)+g*rho0*x/B)' # expected pp at base
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 2
density0 = 1
viscosity = 1
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 0.1
viscosity = 0.5
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 0
[../]
[./relperm_gas]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 1
[../]
[]
[Postprocessors]
[./pp_water_top]
type = PointValue
variable = ppwater
point = '0 0 0'
[../]
[./pp_water_base]
type = PointValue
variable = ppwater
point = '-1 0 0'
[../]
[./pp_water_analytical]
type = FunctionValuePostprocessor
function = ana_ppwater
point = '-1 0 0'
[../]
[./pp_gas_top]
type = PointValue
variable = ppgas
point = '0 0 0'
[../]
[./pp_gas_base]
type = PointValue
variable = ppgas
point = '-1 0 0'
[../]
[./pp_gas_analytical]
type = FunctionValuePostprocessor
function = ana_ppgas
point = '-1 0 0'
[../]
[./mass_ph0]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'initial timestep_end'
[../]
[./mass_ph1]
type = PorousFlowFluidMass
fluid_component = 1
execute_on = 'initial timestep_end'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 0.1
end_time = 1.0
nl_rel_tol = 1E-10
nl_abs_tol = 1E-12
[]
[Outputs]
[./csv]
type = CSV
file_base = grav02a
execute_on = 'initial final'
[../]
[]
modules/porous_flow/test/tests/jacobian/fflux01_fully_saturated.i
# 1phase, 3components, constant viscosity, constant insitu permeability
# density with constant bulk, nonzero gravity
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./massfrac0]
[../]
[./massfrac1]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = -0.7+x+y
[../]
[./massfrac0]
type = RandomIC
variable = massfrac0
min = 0
max = 0.3
[../]
[./massfrac1]
type = RandomIC
variable = massfrac1
min = 0
max = 0.4
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowFullySaturatedDarcyFlow
fluid_component = 0
variable = pp
gravity = '-1 -0.1 0'
[../]
[./flux1]
type = PorousFlowFullySaturatedDarcyFlow
fluid_component = 1
variable = massfrac0
gravity = '-1 -0.1 0'
[../]
[./flux2]
type = PorousFlowFullySaturatedDarcyFlow
fluid_component = 2
variable = massfrac1
gravity = '-1 -0.1 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0 massfrac1'
number_fluid_phases = 1
number_fluid_components = 3
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac0 massfrac1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[]
[Preconditioning]
active = check
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/mass_conservation/mass03.i
# checking that the mass postprocessor correctly calculates the mass
# 1phase, 1component, constant porosity, with a constant fluid source
[Mesh]
type = GeneratedMesh
dim = 3
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = -0.5
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./source]
type = BodyForce
variable = pp
value = 0.1 # kg/m^3/s
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Postprocessors]
[./porepressure]
type = PointValue
point = '0 0 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./total_mass]
type = PorousFlowFluidMass
execute_on = 'initial timestep_end'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres bjacobi 1E-12 1E-20 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 10
[]
[Outputs]
execute_on = 'initial timestep_end'
file_base = mass03
csv = true
[]
modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_steady.i
# Pressure pulse in 1D with 1 phase - steady
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 2E6
[../]
[]
[Kernels]
active = flux
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./flux]
type = PorousFlowAdvectiveFlux
variable = pp
gravity = '0 0 0'
fluid_component = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-15'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0
phase = 0
[../]
[]
[BCs]
[./left]
type = DirichletBC
boundary = left
value = 3E6
variable = pp
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-20 10000'
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Postprocessors]
[./p000]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = 'initial timestep_end'
[../]
[./p010]
type = PointValue
variable = pp
point = '10 0 0'
execute_on = 'initial timestep_end'
[../]
[./p020]
type = PointValue
variable = pp
point = '20 0 0'
execute_on = 'initial timestep_end'
[../]
[./p030]
type = PointValue
variable = pp
point = '30 0 0'
execute_on = 'initial timestep_end'
[../]
[./p040]
type = PointValue
variable = pp
point = '40 0 0'
execute_on = 'initial timestep_end'
[../]
[./p050]
type = PointValue
variable = pp
point = '50 0 0'
execute_on = 'initial timestep_end'
[../]
[./p060]
type = PointValue
variable = pp
point = '60 0 0'
execute_on = 'initial timestep_end'
[../]
[./p070]
type = PointValue
variable = pp
point = '70 0 0'
execute_on = 'initial timestep_end'
[../]
[./p080]
type = PointValue
variable = pp
point = '80 0 0'
execute_on = 'initial timestep_end'
[../]
[./p090]
type = PointValue
variable = pp
point = '90 0 0'
execute_on = 'initial timestep_end'
[../]
[./p100]
type = PointValue
variable = pp
point = '100 0 0'
execute_on = 'initial timestep_end'
[../]
[]
[Outputs]
file_base = pressure_pulse_1d_steady
print_linear_residuals = false
csv = true
[]
modules/porous_flow/test/tests/infiltration_and_drainage/rd02.i
[Mesh]
type = GeneratedMesh
dim = 2
nx = 120
ny = 1
xmin = 0
xmax = 6
ymin = 0
ymax = 0.05
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Functions]
[./dts]
type = PiecewiseLinear
y = '1E-2 1 10 500 5000 50000'
x = '0 10 100 1000 10000 500000'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = pressure
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.336
alpha = 1.43e-4
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e7
viscosity = 1.01e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./temperature]
type = PorousFlowTemperature
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pressure
capillary_pressure = pc
[../]
[./relperm]
type = PorousFlowRelativePermeabilityVG
m = 0.336
seff_turnover = 0.99
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.33
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '0.295E-12 0 0 0 0.295E-12 0 0 0 0.295E-12'
[../]
[]
[Variables]
[./pressure]
initial_condition = 0.0
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pressure
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pressure
gravity = '-10 0 0'
[../]
[]
[AuxVariables]
[./SWater]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./SWater]
type = MaterialStdVectorAux
property = PorousFlow_saturation_qp
index = 0
variable = SWater
[../]
[]
[BCs]
[./base]
type = DirichletBC
boundary = left
value = 0.0
variable = pressure
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options = '-snes_converged_reason -ksp_diagonal_scale -ksp_diagonal_scale_fix -ksp_gmres_modifiedgramschmidt -snes_linesearch_monitor'
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu NONZERO 2 1E-10 1E-10 10'
[../]
[]
[VectorPostprocessors]
[./swater]
type = LineValueSampler
variable = SWater
start_point = '0 0 0'
end_point = '6 0 0'
sort_by = x
num_points = 121
execute_on = timestep_end
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
petsc_options = '-snes_converged_reason'
end_time = 345600
[./TimeStepper]
type = FunctionDT
function = dts
[../]
[]
[Outputs]
file_base = rd02
[./exodus]
type = Exodus
execute_on = 'initial final'
[../]
[./along_line]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/dispersion/diff01_action.i
# Test diffusive part of PorousFlowDispersiveFlux kernel by setting dispersion
# coefficients to zero. Pressure is held constant over the mesh, and gravity is
# set to zero so that no advective transport of mass takes place.
# Mass fraction is set to 1 on the left hand side and 0 on the right hand side.
[Mesh]
type = GeneratedMesh
dim = 1
nx = 20
xmax = 10
bias_x = 1.1
[]
[GlobalParams]
PorousFlowDictator = andy_heheheh
[]
[Variables]
[./pp]
[../]
[./massfrac0]
[../]
[]
[ICs]
[./pp]
type = ConstantIC
variable = pp
value = 1e5
[../]
[./massfrac0]
type = ConstantIC
variable = massfrac0
value = 0
[../]
[]
[BCs]
[./left]
type = DirichletBC
value = 1
variable = massfrac0
boundary = left
[../]
[./right]
type = DirichletBC
value = 0
variable = massfrac0
boundary = right
[../]
[./pright]
type = DirichletBC
variable = pp
boundary = right
value = 1e5
[../]
[./pleft]
type = DirichletBC
variable = pp
boundary = left
value = 1e5
[../]
[]
[Kernels]
[./diff0]
type = PorousFlowDispersiveFlux
fluid_component = 0
variable = massfrac0
disp_trans = 0
disp_long = 0
gravity = '0 0 0'
[../]
[./diff1]
type = PorousFlowDispersiveFlux
fluid_component = 1
variable = pp
disp_trans = 0
disp_long = 0
gravity = '0 0 0'
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.0
bulk_modulus = 1E7
viscosity = 0.001
density0 = 1000.0
[../]
[../]
[]
[PorousFlowUnsaturated]
porepressure = pp
gravity = '0 0 0'
fp = the_simple_fluid
dictator_name = andy_heheheh
relative_permeability_type = Corey
relative_permeability_exponent = 0.0
mass_fraction_vars = massfrac0
[]
[Materials]
[./poro]
type = PorousFlowPorosityConst
porosity = 0.3
[../]
[./diff]
type = PorousFlowDiffusivityConst
diffusion_coeff = '1 1'
tortuosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1e-9 0 0 0 1e-9 0 0 0 1e-9'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu NONZERO 2 '
[../]
[]
[Executioner]
type = Transient
solve_type = NEWTON
dt = 1
end_time = 20
[]
[VectorPostprocessors]
[./xmass]
type = NodalValueSampler
sort_by = id
variable = massfrac0
[../]
[]
[Outputs]
[./out]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/infiltration_and_drainage/rsc02.i
# RSC test with low-res time and spatial resolution
[Mesh]
type = GeneratedMesh
dim = 2
nx = 200
ny = 1
xmin = 0
xmax = 10 # x is the depth variable, called zeta in RSC
ymin = 0
ymax = 0.05
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Functions]
[./dts]
type = PiecewiseLinear
y = '3E-2 5E-1 8E-1'
x = '0 1 5'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pwater poil'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureRSC
oil_viscosity = 2E-3
scale_ratio = 2E3
shift = 10
[../]
[]
[Modules]
[./FluidProperties]
[./water]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 10
thermal_expansion = 0
viscosity = 1e-3
[../]
[./oil]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 20
thermal_expansion = 0
viscosity = 2e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = pwater
phase1_porepressure = poil
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./water]
type = PorousFlowSingleComponentFluid
fp = water
phase = 0
compute_enthalpy = false
compute_internal_energy = false
[../]
[./oil]
type = PorousFlowSingleComponentFluid
fp = oil
phase = 1
compute_enthalpy = false
compute_internal_energy = false
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 0
[../]
[./relperm_oil]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.25
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-5 0 0 0 1E-5 0 0 0 1E-5'
[../]
[]
[Variables]
[./pwater]
[../]
[./poil]
[../]
[]
[ICs]
[./water_init]
type = ConstantIC
variable = pwater
value = 0
[../]
[./oil_init]
type = ConstantIC
variable = poil
value = 15
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pwater
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = poil
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = poil
[../]
[]
[AuxVariables]
[./SWater]
family = MONOMIAL
order = CONSTANT
[../]
[./SOil]
family = MONOMIAL
order = CONSTANT
[../]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[]
[AuxKernels]
[./SWater]
type = MaterialStdVectorAux
property = PorousFlow_saturation_qp
index = 0
variable = SWater
[../]
[./SOil]
type = MaterialStdVectorAux
property = PorousFlow_saturation_qp
index = 1
variable = SOil
[../]
[]
[BCs]
# we are pumping water into a system that has virtually incompressible fluids, hence the pressures rise enormously. this adversely affects convergence because of almost-overflows and precision-loss problems. The fixed things help keep pressures low and so prevent these awful behaviours. the movement of the saturation front is the same regardless of the fixed things.
active = 'recharge fixedoil fixedwater'
[./recharge]
type = PorousFlowSink
variable = pwater
boundary = 'left'
flux_function = -1.0
[../]
[./fixedwater]
type = DirichletBC
variable = pwater
boundary = 'right'
value = 0
[../]
[./fixedoil]
type = DirichletBC
variable = poil
boundary = 'right'
value = 15
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options = '-snes_converged_reason -ksp_diagonal_scale -ksp_diagonal_scale_fix -ksp_gmres_modifiedgramschmidt -snes_linesearch_monitor'
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu NONZERO 2 1E-10 1E-10 10000'
[../]
[]
[VectorPostprocessors]
[./swater]
type = LineValueSampler
variable = SWater
start_point = '0 0 0'
end_point = '7 0 0'
sort_by = x
num_points = 21
execute_on = timestep_end
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
petsc_options = '-snes_converged_reason'
end_time = 5
[./TimeStepper]
type = FunctionDT
function = dts
[../]
[]
[Outputs]
file_base = rsc02
[./along_line]
type = CSV
execute_vector_postprocessors_on = final
[../]
[./exodus]
type = Exodus
execute_on = 'initial final'
[../]
[]
modules/porous_flow/test/tests/energy_conservation/heat03.i
# The sample is a single unit element, with roller BCs on the sides
# and bottom. A constant displacement is applied to the top: disp_z = -0.01*t.
# There is no fluid flow or heat flow.
# Heat energy conservation is checked.
#
# Under these conditions (here L is the height of the sample: L=1 in this case):
# porepressure = porepressure(t=0) - (Fluid bulk modulus)*log(1 - 0.01*t)
# stress_xx = (bulk - 2*shear/3)*disp_z/L (remember this is effective stress)
# stress_zz = (bulk + 4*shear/3)*disp_z/L (remember this is effective stress)
# Also, the total heat energy must be conserved: this is
# fluid_mass * fluid_heat_cap * temperature + (1 - porosity) * rock_density * rock_heat_cap * temperature * volume
# Since fluid_mass is conserved, and volume = (1 - 0.01*t), this can be solved for temperature:
# temperature = initial_heat_energy / (fluid_mass * fluid_heat_cap + (1 - porosity) * rock_density * rock_heat_cap * (1 - 0.01*t))
#
# Parameters:
# Bulk modulus = 2
# Shear modulus = 1.5
# fluid bulk modulus = 0.5
# initial porepressure = 0.1
# initial temperature = 10
#
# Desired output:
# zdisp = -0.01*t
# p0 = 0.1 - 0.5*log(1-0.01*t)
# stress_xx = stress_yy = -0.01*t
# stress_zz = -0.04*t
# t0 = 11.5 / (0.159 + 0.99 * (1 - 0.01*t))
#
# Regarding the "log" - it comes from preserving fluid mass
#
# Note that the PorousFlowMassVolumetricExpansion and PorousFlowHeatVolumetricExpansion Kernels are used
# Note too that the Postprocessors have use_displaced_mesh = true
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./pp]
initial_condition = 0.1
[../]
[./temp]
initial_condition = 10
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./basefixed]
type = DirichletBC
variable = disp_z
value = 0
boundary = back
[../]
[./top_velocity]
type = FunctionDirichletBC
variable = disp_z
function = -0.01*t
boundary = front
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.3
component = 2
variable = disp_z
[../]
[./poro_vol_exp]
type = PorousFlowMassVolumetricExpansion
variable = pp
fluid_component = 0
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./temp]
type = PorousFlowEnergyTimeDerivative
variable = temp
[../]
[./poro_vol_exp_temp]
type = PorousFlowHeatVolumetricExpansion
variable = temp
[../]
[]
[AuxVariables]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
[../]
[./stress_xz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xz
index_i = 0
index_j = 2
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp pp disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 1
viscosity = 1
thermal_expansion = 0
cv = 1.3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '1 1.5'
# bulk modulus is lambda + 2*mu/3 = 1 + 2*1.5/3 = 2
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 2.2
density = 0.5
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '0.5 0 0 0 0.5 0 0 0 0.5'
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = 'console csv'
execute_on = 'initial timestep_end'
point = '0 0 0'
variable = pp
[../]
[./t0]
type = PointValue
outputs = 'console csv'
execute_on = 'initial timestep_end'
point = '0 0 0'
variable = temp
[../]
[./zdisp]
type = PointValue
outputs = csv
point = '0 0 0.5'
use_displaced_mesh = false
variable = disp_z
[../]
[./stress_xx]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_xx
[../]
[./stress_yy]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_yy
[../]
[./stress_zz]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_zz
[../]
[./fluid_mass]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'initial timestep_end'
use_displaced_mesh = true
outputs = 'console csv'
[../]
[./total_heat]
type = PorousFlowHeatEnergy
phase = 0
execute_on = 'initial timestep_end'
use_displaced_mesh = true
outputs = 'console csv'
[../]
[./rock_heat]
type = PorousFlowHeatEnergy
execute_on = 'initial timestep_end'
use_displaced_mesh = true
outputs = 'console csv'
[../]
[./fluid_heat]
type = PorousFlowHeatEnergy
include_porous_skeleton = false
phase = 0
execute_on = 'initial timestep_end'
use_displaced_mesh = true
outputs = 'console csv'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-14 1E-8 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 2
end_time = 10
[]
[Outputs]
execute_on = 'initial timestep_end'
file_base = heat03
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/basic_advection/except1.i
# phase number is too high in PorousFlowBasicAdvection
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./u]
[../]
[]
[AuxVariables]
[./P]
[../]
[]
[ICs]
[./P]
type = FunctionIC
variable = P
function = '2*(1-x)'
[../]
[./u]
type = FunctionIC
variable = u
function = 'if(x<0.1,1,0)'
[../]
[]
[Kernels]
[./u_dot]
type = TimeDerivative
variable = u
[../]
[./u_advection]
type = PorousFlowBasicAdvection
variable = u
phase = 1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = ''
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 4
thermal_expansion = 0
viscosity = 150.0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = P
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '5 0 0 0 5 0 0 0 5'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0
phase = 0
[../]
[./darcy_velocity]
type = PorousFlowDarcyVelocityMaterial
gravity = '0.25 0 0'
[../]
[]
[BCs]
[./left]
type = DirichletBC
boundary = left
value = 1
variable = u
[../]
[./right]
type = DirichletBC
boundary = right
value = 0
variable = u
[../]
[]
[Preconditioning]
[./basic]
type = SMP
full = true
petsc_options_iname = '-pc_type -snes_rtol'
petsc_options_value = ' lu 1E-10'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 5
[]
[Outputs]
exodus = true
print_linear_residuals = false
[]
modules/porous_flow/test/tests/basic_advection/1phase.i
# Basic advection of u in a 1-phase situation
#
# grad(P) = -2
# density * gravity = 4 * 0.25
# grad(P) - density * gravity = -3
# permeability = 5
# viscosity = 150
# so Darcy velocity = 0.1
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./u]
[../]
[]
[AuxVariables]
[./P]
[../]
[]
[ICs]
[./P]
type = FunctionIC
variable = P
function = '2*(1-x)'
[../]
[./u]
type = FunctionIC
variable = u
function = 'if(x<0.1,1,0)'
[../]
[]
[Kernels]
[./u_dot]
type = TimeDerivative
variable = u
[../]
[./u_advection]
type = PorousFlowBasicAdvection
variable = u
phase = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = ''
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 4
thermal_expansion = 0
viscosity = 150.0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = P
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '5 0 0 0 5 0 0 0 5'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0
phase = 0
[../]
[./darcy_velocity]
type = PorousFlowDarcyVelocityMaterial
gravity = '0.25 0 0'
[../]
[]
[BCs]
[./left]
type = DirichletBC
boundary = left
value = 1
variable = u
[../]
[./right]
type = DirichletBC
boundary = right
value = 0
variable = u
[../]
[]
[Preconditioning]
[./basic]
type = SMP
full = true
petsc_options_iname = '-pc_type -snes_rtol'
petsc_options_value = ' lu 1E-10'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 5
[]
[Outputs]
exodus = true
print_linear_residuals = false
[]
modules/porous_flow/test/tests/poroperm/PermTensorFromVar02.i
# Testing permeability calculated from scalar and tensor
# Trivial test, checking calculated permeability is correct
# when scalar is a FunctionAux.
# k = k_anisotropy * perm
[Mesh]
type = GeneratedMesh
dim = 1
nx = 3
xmin = 0
xmax = 3
[]
[GlobalParams]
block = 0
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[./InitialCondition]
type = ConstantIC
value = 0
[../]
[../]
[]
[Kernels]
[./flux]
type = PorousFlowAdvectiveFlux
gravity = '0 0 0'
variable = pp
[../]
[]
[BCs]
[./ptop]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[./pbase]
type = DirichletBC
variable = pp
boundary = left
value = 1
[../]
[]
[Functions]
[./perm_fn]
type = ParsedFunction
value = '2*(x+1)'
[../]
[]
[AuxVariables]
[./perm_var]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_x]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_y]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_z]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./perm_var]
type = FunctionAux
function = perm_fn
variable = perm_var
[../]
[./perm_x]
type = PorousFlowPropertyAux
property = permeability
variable = perm_x
row = 0
column = 0
[../]
[./perm_y]
type = PorousFlowPropertyAux
property = permeability
variable = perm_y
row = 1
column = 1
[../]
[./perm_z]
type = PorousFlowPropertyAux
property = permeability
variable = perm_z
row = 2
column = 2
[../]
[]
[Postprocessors]
[./perm_x_left]
type = PointValue
variable = perm_x
point = '0.5 0 0'
[../]
[./perm_y_left]
type = PointValue
variable = perm_y
point = '0.5 0 0'
[../]
[./perm_z_left]
type = PointValue
variable = perm_z
point = '0.5 0 0'
[../]
[./perm_x_right]
type = PointValue
variable = perm_x
point = '2.5 0 0'
[../]
[./perm_y_right]
type = PointValue
variable = perm_y
point = '2.5 0 0'
[../]
[./perm_z_right]
type = PointValue
variable = perm_z
point = '2.5 0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
# unimportant in this fully-saturated test
m = 0.8
alpha = 1e-4
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./permeability]
type = PorousFlowPermeabilityTensorFromVar
k_anisotropy = '1 0 0 0 2 0 0 0 0.1'
perm = perm_var
[../]
[./temperature]
type = PorousFlowTemperature
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0 # unimportant in this fully-saturated situation
phase = 0
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
solve_type = Newton
type = Steady
l_tol = 1E-5
nl_abs_tol = 1E-3
nl_rel_tol = 1E-8
l_max_its = 200
nl_max_its = 400
petsc_options_iname = '-pc_type -pc_asm_overlap -sub_pc_type -ksp_type -ksp_gmres_restart'
petsc_options_value = ' asm 2 lu gmres 200'
[]
[Outputs]
csv = true
execute_on = 'timestep_end'
[]
modules/porous_flow/test/tests/newton_cooling/nc06.i
# Newton cooling from a bar. 1-phase and heat, steady
[Mesh]
type = GeneratedMesh
dim = 2
nx = 100
ny = 1
xmin = 0
xmax = 100
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pressure temp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.8
alpha = 1e-5
[../]
[]
[Variables]
[./pressure]
[../]
[./temp]
[../]
[]
[ICs]
# have to start these reasonably close to their steady-state values
[./pressure]
type = FunctionIC
variable = pressure
function = '(2-x/100)*1E6'
[../]
[./temperature]
type = FunctionIC
variable = temp
function = 100+0.1*x
[../]
[]
[Kernels]
[./flux]
type = PorousFlowAdvectiveFlux
fluid_component = 0
gravity = '0 0 0'
variable = pressure
[../]
[./heat_advection]
type = PorousFlowHeatAdvection
gravity = '0 0 0'
variable = temp
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1e6
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
cv = 1e6
porepressure_coefficient = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-15'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey # irrelevant in this fully-saturated situation
n = 2
phase = 0
[../]
[]
[BCs]
[./leftp]
type = DirichletBC
variable = pressure
boundary = left
value = 2E6
[../]
[./leftt]
type = DirichletBC
variable = temp
boundary = left
value = 100
[../]
[./newtonp]
type = PorousFlowPiecewiseLinearSink
variable = pressure
boundary = right
pt_vals = '0 100000 200000 300000 400000 500000 600000 700000 800000 900000 1000000 1100000 1200000 1300000 1400000 1500000 1600000 1700000 1800000 1900000 2000000'
multipliers = '0. 5.6677197748570516e-6 0.000011931518841831313 0.00001885408740732065 0.000026504708864284114 0.000034959953203725676 0.000044304443352900224 0.00005463170211001232 0.00006604508815181467 0.00007865883048198513 0.00009259917167338928 0.00010800563134618119 0.00012503240252705603 0.00014384989486488752 0.00016464644014777016 0.00018763017719085535 0.0002130311349595711 0.00024110353477682344 0.00027212833465544285 0.00030641604122040985 0.00034430981736352295'
use_mobility = false
use_relperm = false
fluid_phase = 0
flux_function = 1
[../]
[./newton]
type = PorousFlowPiecewiseLinearSink
variable = temp
boundary = right
pt_vals = '0 100000 200000 300000 400000 500000 600000 700000 800000 900000 1000000 1100000 1200000 1300000 1400000 1500000 1600000 1700000 1800000 1900000 2000000'
multipliers = '0. 5.6677197748570516e-6 0.000011931518841831313 0.00001885408740732065 0.000026504708864284114 0.000034959953203725676 0.000044304443352900224 0.00005463170211001232 0.00006604508815181467 0.00007865883048198513 0.00009259917167338928 0.00010800563134618119 0.00012503240252705603 0.00014384989486488752 0.00016464644014777016 0.00018763017719085535 0.0002130311349595711 0.00024110353477682344 0.00027212833465544285 0.00030641604122040985 0.00034430981736352295'
use_mobility = false
use_relperm = false
use_internal_energy = true
fluid_phase = 0
flux_function = 1
[../]
[]
[VectorPostprocessors]
[./porepressure]
type = LineValueSampler
variable = pressure
start_point = '0 0.5 0'
end_point = '100 0.5 0'
sort_by = x
num_points = 11
execute_on = timestep_end
[../]
[./temperature]
type = LineValueSampler
variable = temp
start_point = '0 0.5 0'
end_point = '100 0.5 0'
sort_by = x
num_points = 11
execute_on = timestep_end
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_max_it -sub_pc_factor_shift_type -pc_asm_overlap -snes_atol -snes_rtol '
petsc_options_value = 'gmres asm lu 100 NONZERO 2 1E-8 1E-15'
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
file_base = nc06
execute_on = timestep_end
exodus = true
[./along_line]
type = CSV
execute_vector_postprocessors_on = timestep_end
[../]
[]
modules/porous_flow/test/tests/jacobian/chem15.i
# Check derivatives of mass-fraction, but using Equilibrium chemistry
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
initial_condition = 0.1
[../]
[./b]
initial_condition = 0.2
[../]
[./h2o_dummy]
[../]
[]
[AuxVariables]
[./eqm_k0]
initial_condition = 1.234E-4
[../]
[./eqm_k1]
initial_condition = 0.987E-4
[../]
[./eqm_k2]
initial_condition = 0.5E-4
[../]
[./temp]
initial_condition = 0.5
[../]
[./ini_sec_conc0]
initial_condition = 0.111
[../]
[./ini_sec_conc1]
initial_condition = 0.222
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = PorousFlowMassTimeDerivative
variable = a
fluid_component = 0
[../]
[./b]
type = PorousFlowMassTimeDerivative
variable = b
fluid_component = 1
[../]
[./h2o_dummy]
# note that in real simulations this Kernel would not be used
# It is just here to check derivatives
type = PorousFlowMassTimeDerivative
variable = h2o_dummy
fluid_component = 2
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_equilibrium = 3
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFractionAqueousEquilibriumChemistry
mass_fraction_vars = 'a b'
num_reactions = 3
equilibrium_constants = 'eqm_k0 eqm_k1 eqm_k2'
primary_activity_coefficients = '1 1.2'
secondary_activity_coefficients = '1 2 3'
reactions = '1 2
2.2 -1
-2 1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 0.1
end_time = 0.1
[]
[Preconditioning]
[./check]
type = SMP
full = true
petsc_options = '-snes_test_display'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
modules/porous_flow/test/tests/chemistry/dissolution_limited.i
# The dissolution reaction, with limited initial mineral concentration
#
# a <==> mineral
#
# produces "mineral". Using mineral_density = fluid_density, theta = 1 = eta, the DE is
#
# a' = -(mineral / porosity)' = rate * surf_area * molar_vol (1 - (1 / eqm_const) * (act_coeff * a)^stoi)
#
# The following parameters are used
#
# T_ref = 0.5 K
# T = 1 K
# activation_energy = 3 J/mol
# gas_constant = 6 J/(mol K)
# kinetic_rate_at_ref_T = 0.60653 mol/(m^2 s)
# These give rate = 0.60653 * exp(1/2) = 1 mol/(m^2 s)
#
# surf_area = 0.5 m^2/L
# molar_volume = 2 L/mol
# These give rate * surf_area * molar_vol = 1 s^-1
#
# equilibrium_constant = 0.5 (dimensionless)
# primary_activity_coefficient = 2 (dimensionless)
# stoichiometry = 1 (dimensionless)
# This means that 1 - (1 / eqm_const) * (act_coeff * a)^stoi = 1 - 4 a, which is positive for a < 0.25, ie dissolution for a(t=0) < 0.25
#
# The solution of the DE is
# a = eqm_const / act_coeff + (a(t=0) - eqm_const / act_coeff) exp(-rate * surf_area * molar_vol * act_coeff * t / eqm_const)
# = 0.25 + (a(t=0) - 0.25) exp(-4 * t)
# c = c(t=0) - (a - a(t=0)) * porosity
#
# However, c(t=0) is small, so that the reaction only works until c=0, then a and c both remain fixed
#
# This test checks that (a + c / porosity) is time-independent, and that a follows the above solution, until c=0 and thereafter remains fixed.
#
# Aside:
# The exponential curve is not followed exactly because moose actually solves
# (a - a_old)/dt = rate * surf_area * molar_vol (1 - (1 / eqm_const) * (act_coeff * a)^stoi)
# which does not give an exponential exactly, except in the limit dt->0
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
initial_condition = 0.05
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 0.5
[../]
[./pressure]
[../]
[./ini_mineral_conc]
initial_condition = 0.015
[../]
[./mineral]
family = MONOMIAL
order = CONSTANT
[../]
[./should_be_static]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./mineral]
type = PorousFlowPropertyAux
property = mineral_concentration
mineral_species = 0
variable = mineral
[../]
[./should_be_static]
type = ParsedAux
args = 'mineral a'
function = 'a + mineral / 0.1'
variable = should_be_static
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./mass_a]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = a
[../]
[./pre_dis]
type = PorousFlowPreDis
variable = a
mineral_density = 1000
stoichiometry = 1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = a
number_fluid_phases = 1
number_fluid_components = 2
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9 # huge, so mimic chemical_reactions
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = 1
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./mass_frac]
type = PorousFlowMassFraction
mass_fraction_vars = a
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = a
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = 2
reactions = 1
specific_reactive_surface_area = 0.5
kinetic_rate_constant = 0.6065306597126334
activation_energy = 3
molar_volume = 2
gas_constant = 6
reference_temperature = 0.5
[../]
[./mineral_conc]
type = PorousFlowAqueousPreDisMineral
initial_concentrations = ini_mineral_conc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
nl_abs_tol = 1E-10
dt = 0.01
end_time = 1
[]
[Postprocessors]
[./a]
type = PointValue
point = '0 0 0'
variable = a
[../]
[./should_be_static]
type = PointValue
point = '0 0 0'
variable = should_be_static
[../]
[]
[Outputs]
interval = 10
csv = true
perf_graph = true
[]
modules/porous_flow/test/tests/jacobian/mass03.i
# 1phase
# vanGenuchten, constant-bulk density, constant porosity, 3components
# unsaturated
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1
ny = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./mass_frac_comp0]
[../]
[./mass_frac_comp1]
[../]
[]
[ICs]
[./pp]
type = RandomIC
variable = pp
min = -1
max = 0
[../]
[./mass_frac_comp0]
type = RandomIC
variable = mass_frac_comp0
min = 0
max = 0.3
[../]
[./mass_frac_comp1]
type = RandomIC
variable = mass_frac_comp1
min = 0
max = 0.3
[../]
[]
[Kernels]
[./mass_comp0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./masscomp1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = mass_frac_comp0
[../]
[./masscomp2]
type = PorousFlowMassTimeDerivative
fluid_component = 2
variable = mass_frac_comp1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp mass_frac_comp0 mass_frac_comp1'
number_fluid_phases = 1
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
s_scale = 0.9
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'mass_frac_comp0 mass_frac_comp1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 2
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/thermal_conductivity/ThermalCondPorosity01.i
# Trivial test of PorousFlowThermalConductivityFromPorosity
# Porosity = 0.1
# Solid thermal conductivity = 3
# Fluid thermal conductivity = 2
# Expected porous medium thermal conductivity = 3 * (1 - 0.1) + 2 * 0.1 = 2.9
[Mesh]
type = GeneratedMesh
dim = 3
xmin = 0
xmax = 1
ymin = 0
ymax = 1
zmin = -1
zmax = 0
nx = 1
ny = 1
nz = 1
# This test uses ElementalVariableValue postprocessors on specific
# elements, so element numbering needs to stay unchanged
allow_renumbering = false
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Variables]
[./temp]
initial_condition = 1
[../]
[./pp]
initial_condition = 0
[../]
[]
[Kernels]
[./heat_conduction]
type = PorousFlowHeatConduction
variable = temp
[../]
[./dummy]
type = Diffusion
variable = pp
[../]
[]
[BCs]
[./temp]
type = DirichletBC
variable = temp
boundary = 'front back'
value = 1
[../]
[./pp]
type = DirichletBC
variable = pp
boundary = 'front back'
value = 0
[../]
[]
[AuxVariables]
[./lambda_x]
order = CONSTANT
family = MONOMIAL
[../]
[./lambda_y]
order = CONSTANT
family = MONOMIAL
[../]
[./lambda_z]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./lambda_x]
type = MaterialRealTensorValueAux
property = PorousFlow_thermal_conductivity_qp
row = 0
column = 0
variable = lambda_x
[../]
[./lambda_y]
type = MaterialRealTensorValueAux
property = PorousFlow_thermal_conductivity_qp
row = 1
column = 1
variable = lambda_y
[../]
[./lambda_z]
type = MaterialRealTensorValueAux
property = PorousFlow_thermal_conductivity_qp
row = 2
column = 2
variable = lambda_z
[../]
[]
[Postprocessors]
[./lambda_x]
type = ElementalVariableValue
elementid = 0
variable = lambda_x
execute_on = 'timestep_end'
[../]
[./lambda_y]
type = ElementalVariableValue
elementid = 0
variable = lambda_y
execute_on = 'timestep_end'
[../]
[./lambda_z]
type = ElementalVariableValue
elementid = 0
variable = lambda_z
execute_on = 'timestep_end'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp temp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./ppss_qp]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity_qp]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./lambda]
type = PorousFlowThermalConductivityFromPorosity
lambda_s = '3 0 0 0 3 0 0 0 3'
lambda_f = '2 0 0 0 2 0 0 0 2'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
solve_type = Newton
type = Steady
[]
[Outputs]
file_base = ThermalCondPorosity01
csv = true
execute_on = 'timestep_end'
[]
modules/porous_flow/test/tests/gravity/fully_saturated_grav01b.i
# Checking that gravity head is established
# 1phase, constant and large fluid-bulk, constant viscosity, constant permeability
# fully saturated with fully-saturated Kernel
# For better agreement with the analytical solution (ana_pp), just increase nx
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmin = -1
xmax = 0
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[./InitialCondition]
type = RandomIC
min = 0
max = 1
[../]
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowFullySaturatedDarcyBase
variable = pp
gravity = '-1 0 0'
[../]
[]
[Functions]
[./ana_pp]
type = ParsedFunction
vars = 'g B p0 rho0'
vals = '1 1E3 0 1'
value = '-B*log(exp(-p0/B)+g*rho0*x/B)' # expected pp at base
[../]
[]
[BCs]
[./z]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1e3
density0 = 1
viscosity = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[]
[Postprocessors]
[./pp_base]
type = PointValue
variable = pp
point = '-1 0 0'
[../]
[./pp_analytical]
type = FunctionValuePostprocessor
function = ana_pp
point = '-1 0 0'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
execute_on = 'timestep_end'
file_base = fully_saturated_grav01b
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/chemistry/except5.i
# Exception test.
# Incorrect number of equilibrium constant
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = Diffusion
variable = a
[../]
[./b]
type = Diffusion
variable = b
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_equilibrium = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 1E2
[../]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFractionAqueousEquilibriumChemistry
mass_fraction_vars = 'a b'
num_reactions = 2
equilibrium_constants = eqm_k
primary_activity_coefficients = '1 1'
secondary_activity_coefficients = '1 1'
reactions = '2 0
1 1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/gravity/grav01c_action.i
# Checking that gravity head is established
# using the Unsaturated Action
# For better agreement with the analytical solution (ana_pp), just increase nx
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmin = -1
xmax = 0
[]
[GlobalParams]
PorousFlowDictator = dictator
block = 0
[]
[Variables]
[./pp]
[./InitialCondition]
type = RandomIC
min = -1
max = 1
[../]
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.0
bulk_modulus = 2.0
viscosity = 1.0
density0 = 1.0
[../]
[../]
[]
[PorousFlowUnsaturated]
add_saturation_aux = false
add_darcy_aux = false
porepressure = pp
gravity = '-1 0 0'
fp = the_simple_fluid
van_genuchten_alpha = 1.0
van_genuchten_m = 0.5
relative_permeability_type = Corey
relative_permeability_exponent = 1.0
[]
[Functions]
[./ana_pp]
type = ParsedFunction
vars = 'g B p0 rho0'
vals = '1 2 -1 1'
value = '-B*log(exp(-p0/B)+g*rho0*x/B)' # expected pp at base
[../]
[]
[BCs]
[./z]
type = DirichletBC
variable = pp
boundary = right
value = -1
[../]
[]
[Materials]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[]
[Postprocessors]
[./pp_base]
type = PointValue
variable = pp
point = '-1 0 0'
[../]
[./pp_analytical]
type = FunctionValuePostprocessor
function = ana_pp
point = '-1 0 0'
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
execute_on = 'timestep_end'
file_base = grav01c_action
exodus = true
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/chemistry/except12.i
# Exception test.
# Incorrect number of theta exponents
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = Diffusion
variable = a
[../]
[./b]
type = Diffusion
variable = b
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 1E-6
[../]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'a b'
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = 'a b'
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = '1 1'
reactions = '1 1'
specific_reactive_surface_area = 1.0
kinetic_rate_constant = 1.0e-8
activation_energy = 1.5e4
molar_volume = 1
theta_exponent = '1 1'
[../]
[./mineral]
type = PorousFlowAqueousPreDisMineral
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/poroperm/PermFromPoro01.i
# Testing permeability from porosity
# Trivial test, checking calculated permeability is correct
# k = k_anisotropic * f * d^2 * phi^n / (1-phi)^m
[Mesh]
type = GeneratedMesh
dim = 1
nx = 3
xmin = 0
xmax = 3
[]
[GlobalParams]
block = 0
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[./InitialCondition]
type = ConstantIC
value = 0
[../]
[../]
[]
[Kernels]
[./flux]
type = PorousFlowAdvectiveFlux
gravity = '0 0 0'
variable = pp
[../]
[]
[BCs]
[./ptop]
type = DirichletBC
variable = pp
boundary = right
value = 0
[../]
[./pbase]
type = DirichletBC
variable = pp
boundary = left
value = 1
[../]
[]
[AuxVariables]
[./poro]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_x]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_y]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_z]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./poro]
type = PorousFlowPropertyAux
property = porosity
variable = poro
[../]
[./perm_x]
type = PorousFlowPropertyAux
property = permeability
variable = perm_x
row = 0
column = 0
[../]
[./perm_y]
type = PorousFlowPropertyAux
property = permeability
variable = perm_y
row = 1
column = 1
[../]
[./perm_z]
type = PorousFlowPropertyAux
property = permeability
variable = perm_z
row = 2
column = 2
[../]
[]
[Postprocessors]
[./perm_x_bottom]
type = PointValue
variable = perm_x
point = '0 0 0'
[../]
[./perm_y_bottom]
type = PointValue
variable = perm_y
point = '0 0 0'
[../]
[./perm_z_bottom]
type = PointValue
variable = perm_z
point = '0 0 0'
[../]
[./perm_x_top]
type = PointValue
variable = perm_x
point = '3 0 0'
[../]
[./perm_y_top]
type = PointValue
variable = perm_y
point = '3 0 0'
[../]
[./perm_z_top]
type = PointValue
variable = perm_z
point = '3 0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
# unimportant in this fully-saturated test
m = 0.8
alpha = 1e-4
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2.2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./permeability]
type = PorousFlowPermeabilityKozenyCarman
k_anisotropy = '1 0 0 0 2 0 0 0 0.1'
poroperm_function = kozeny_carman_fd2
f = 0.1
d = 5
m = 2
n = 7
[../]
[./temperature]
type = PorousFlowTemperature
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0 # unimportant in this fully-saturated situation
phase = 0
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
solve_type = Newton
type = Steady
l_tol = 1E-5
nl_abs_tol = 1E-3
nl_rel_tol = 1E-8
l_max_its = 200
nl_max_its = 400
petsc_options_iname = '-pc_type -pc_asm_overlap -sub_pc_type -ksp_type -ksp_gmres_restart'
petsc_options_value = ' asm 2 lu gmres 200'
[]
[Outputs]
csv = true
execute_on = 'timestep_end'
[]
modules/porous_flow/test/tests/flux_limited_TVD_pflow/except04.i
# Exception test: fe_order specified but not fe_family
[Mesh]
type = GeneratedMesh
dim = 1
[]
[GlobalParams]
gravity = '1 2 3'
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./tracer]
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[PorousFlowUnsaturated]
porepressure = pp
mass_fraction_vars = tracer
fp = the_simple_fluid
[]
[UserObjects]
[./advective_flux_calculator]
type = PorousFlowAdvectiveFluxCalculatorSaturated
fe_order = First
[../]
[]
[Materials]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
modules/porous_flow/test/tests/dirackernels/bh_except06.i
# PorousFlowPeacemanBorehole exception test
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = TimeDerivative
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
bottom_p_or_t = 0
fluid_phase = 0
point_file = bh02.bh
use_mobility = true
SumQuantityUO = borehole_total_outflow_mass
variable = pp
unit_weight = '0 0 0'
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
modules/porous_flow/test/tests/infiltration_and_drainage/bw02.i
[Mesh]
type = GeneratedMesh
dim = 2
nx = 200
ny = 1
xmin = -10
xmax = 10
ymin = 0
ymax = 0.05
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Functions]
[./dts]
type = PiecewiseLinear
y = '1E-1 5E-1 5E-1'
x = '0 1 10'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = pressure
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureBW
Sn = 0.0
Ss = 1.0
C = 1.5
las = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 4
density0 = 10
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./temperature]
type = PorousFlowTemperature
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pressure
capillary_pressure = pc
[../]
[./relperm]
type = PorousFlowRelativePermeabilityBW
Sn = 0.0
Ss = 1.0
Kn = 0
Ks = 1
C = 1.5
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.25
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 1 0 0 0 1'
[../]
[]
[Variables]
[./pressure]
initial_condition = -9E2
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pressure
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pressure
gravity = '-0.1 0 0'
[../]
[]
[AuxVariables]
[./SWater]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./SWater]
type = MaterialStdVectorAux
property = PorousFlow_saturation_qp
index = 0
variable = SWater
[../]
[]
[BCs]
[./recharge]
type = PorousFlowSink
variable = pressure
boundary = right
flux_function = -1.25 # corresponds to Rstar being 0.5 because i have to multiply by density*porosity
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options = '-snes_converged_reason -ksp_diagonal_scale -ksp_diagonal_scale_fix -ksp_gmres_modifiedgramschmidt -snes_linesearch_monitor'
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu NONZERO 2 1E-10 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
petsc_options = '-snes_converged_reason'
end_time = 2
[./TimeStepper]
type = FunctionDT
function = dts
[../]
[]
[VectorPostprocessors]
[./swater]
type = LineValueSampler
variable = SWater
start_point = '-10 0 0'
end_point = '10 0 0'
sort_by = x
num_points = 80
execute_on = timestep_end
[../]
[]
[Outputs]
file_base = bw02
sync_times = '0.5 2 8'
[./exodus]
type = Exodus
sync_only = true
[../]
[./along_line]
type = CSV
sync_only = true
[../]
[]
modules/porous_flow/test/tests/dispersion/disp01_heavy.i
# Test dispersive part of PorousFlowDispersiveFlux kernel by setting diffusion
# coefficients to zero. A pressure gradient is applied over the mesh to give a
# uniform velocity. Gravity is set to zero.
# Mass fraction is set to 1 on the left hand side and 0 on the right hand side.
[Mesh]
type = GeneratedMesh
dim = 1
nx = 200
xmax = 10
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
compute_enthalpy = false
compute_internal_energy = false
[]
[Variables]
[./pp]
[../]
[./massfrac0]
[../]
[]
[AuxVariables]
[./velocity]
family = MONOMIAL
order = FIRST
[../]
[]
[AuxKernels]
[./velocity]
type = PorousFlowDarcyVelocityComponent
variable = velocity
component = x
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = pic
[../]
[./massfrac0]
type = ConstantIC
variable = massfrac0
value = 0
[../]
[]
[Functions]
[./pic]
type = ParsedFunction
value = 1.1e5-x*1e3
[../]
[]
[BCs]
[./xleft]
type = DirichletBC
value = 1
variable = massfrac0
boundary = left
[../]
[./xright]
type = DirichletBC
value = 0
variable = massfrac0
boundary = right
[../]
[./pright]
type = DirichletBC
variable = pp
boundary = right
value = 1e5
[../]
[./pleft]
type = DirichletBC
variable = pp
boundary = left
value = 1.1e5
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./adv0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
[../]
[./diff0]
type = PorousFlowDispersiveFlux
variable = pp
disp_trans = 0
disp_long = 0.2
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = massfrac0
[../]
[./adv1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = massfrac0
[../]
[./diff1]
type = PorousFlowDispersiveFlux
fluid_component = 1
variable = massfrac0
disp_trans = 0
disp_long = 0.2
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1e9
density0 = 1000
viscosity = 0.001
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = massfrac0
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./poro]
type = PorousFlowPorosityConst
porosity = 0.3
[../]
[./diff]
type = PorousFlowDiffusivityConst
diffusion_coeff = '0 0'
tortuosity = 0.1
[../]
[./relp]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1e-9 0 0 0 1e-9 0 0 0 1e-9'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu NONZERO 2 '
[../]
[]
[Executioner]
type = Transient
solve_type = NEWTON
end_time = 1e3
dtmax = 10
[./TimeStepper]
type = IterationAdaptiveDT
growth_factor = 1.5
cutback_factor = 0.5
dt = 1
[../]
[]
[VectorPostprocessors]
[./xmass]
type = NodalValueSampler
sort_by = id
variable = massfrac0
[../]
[]
[Outputs]
[./out]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/flux_limited_TVD_pflow/pffltvd_2D.i
# Using flux-limited TVD advection ala Kuzmin and Turek, employing PorousFlow Kernels and UserObjects, with superbee flux-limiter
# 3D version
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
xmin = 0
xmax = 1
ny = 4
ymin = 0
ymax = 0.5
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./porepressure]
[../]
[./tracer]
[../]
[]
[ICs]
[./porepressure]
type = FunctionIC
variable = porepressure
function = '1 - x'
[../]
[./tracer]
type = FunctionIC
variable = tracer
function = 'if(x<0.1,0,if(x>0.3,0,1))'
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = tracer
[../]
[./flux0]
type = PorousFlowFluxLimitedTVDAdvection
variable = tracer
advective_flux_calculator = advective_flux_calculator_0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = porepressure
[../]
[./flux1]
type = PorousFlowFluxLimitedTVDAdvection
variable = porepressure
advective_flux_calculator = advective_flux_calculator_1
[../]
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1
boundary = left
[../]
[./no_tracer_on_left]
type = DirichletBC
variable = tracer
value = 0
boundary = left
[../]
[./remove_component_1]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 1
use_mobility = true
flux_function = 1E3
[../]
[./remove_component_0]
type = PorousFlowPiecewiseLinearSink
variable = tracer
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 0
use_mobility = true
flux_function = 1E3
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
thermal_expansion = 0
viscosity = 1.0
density0 = 1000.0
[../]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure tracer'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[./advective_flux_calculator_0]
type = PorousFlowAdvectiveFluxCalculatorSaturatedMultiComponent
flux_limiter_type = superbee
fluid_component = 0
[../]
[./advective_flux_calculator_1]
type = PorousFlowAdvectiveFluxCalculatorSaturatedMultiComponent
flux_limiter_type = superbee
fluid_component = 1
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = tracer
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = the_simple_fluid
phase = 0
[../]
[./relperm]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-2 0 0 0 1E-2 0 0 0 1E-2'
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[VectorPostprocessors]
[./tracer]
type = LineValueSampler
start_point = '0 0 0'
end_point = '1 0.5 0'
num_points = 11
sort_by = x
variable = tracer
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 6
dt = 6E-2
nl_abs_tol = 1E-8
timestep_tolerance = 1E-3
[]
[Outputs]
[./out]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/jacobian/basic_advection5.i
# Basic advection with 1 porepressure as a PorousFlow variable
[Mesh]
type = GeneratedMesh
dim = 1
nx = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./u]
[../]
[./P]
[../]
[]
[ICs]
[./P]
type = RandomIC
variable = P
min = -1
max = 1
[../]
[./u]
type = RandomIC
variable = u
[../]
[]
[Kernels]
[./dummy_P]
type = NullKernel
variable = P
[../]
[./u_advection]
type = PorousFlowBasicAdvection
variable = u
phase = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = P
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
alpha = 1
m = 0.6
sat_lr = 0.1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 3
density0 = 4
thermal_expansion = 0
viscosity = 150.0
[../]
[../]
[]
[Materials]
[./temperature_qp]
type = PorousFlowTemperature
[../]
[./ppss_qp]
type = PorousFlow1PhaseP
porepressure = P
capillary_pressure = pc
[../]
[./simple_fluid_qp]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./effective_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
fluid = true
biot_coefficient = 0.5
solid_bulk = 1
[../]
[./permeability]
type = PorousFlowPermeabilityKozenyCarman
poroperm_function = kozeny_carman_phi0
k0 = 5
m = 2
n = 2
phi0 = 0.1
[../]
[./relperm_qp]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./darcy_velocity_qp]
type = PorousFlowDarcyVelocityMaterial
gravity = '0.25 0 0'
[../]
[]
[Preconditioning]
[./check]
type = SMP
full = true
#petsc_options = '-snes_test_display'
petsc_options_iname = '-snes_type'
petsc_options_value = ' test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/dirackernels/bh_except05.i
# PorousFlowPeacemanBorehole exception test
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = TimeDerivative
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
bottom_p_or_t = 0
fluid_phase = 0
mass_fraction_component = 0
point_file = bh02.bh
SumQuantityUO = borehole_total_outflow_mass
variable = pp
unit_weight = '0 0 0'
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
modules/porous_flow/test/tests/actions/addmaterials.i
# Test that the PorousFlowAddMaterialAction correctly handles the case where
# materials are added with the default add_nodes parameter, as well as
# at_nodes = true, to make sure that the action doesn't add a duplicate material
[Mesh]
type = GeneratedMesh
dim = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./pwater]
initial_condition = 1e6
[../]
[./sgas]
initial_condition = 0.3
[../]
[./temperature]
initial_condition = 50
[../]
[]
[AuxVariables]
[./x0]
initial_condition = 0.1
[../]
[./x1]
initial_condition = 0.5
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pwater
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sgas
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pwater
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = sgas
[../]
[./energy_dot]
type = PorousFlowEnergyTimeDerivative
variable = temperature
[../]
[./heat_advection]
type = PorousFlowHeatAdvection
variable = temperature
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pwater sgas temperature'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-5
pc_max = 1e7
sat_lr = 0.1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
cv = 2
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 1e9
viscosity = 1e-4
density0 = 20
thermal_expansion = 0
cv = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = 50
[../]
[./temperature_nodal]
type = PorousFlowTemperature
at_nodes = true
temperature = 50
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = pwater
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./ppss_nodal]
type = PorousFlow2PhasePS
at_nodes = true
phase0_porepressure = pwater
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'x0 x1'
[../]
[./massfrac_nodal]
type = PorousFlowMassFraction
at_nodes = true
mass_fraction_vars = 'x0 x1'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid0_nodal]
type = PorousFlowSingleComponentFluid
at_nodes = true
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./simple_fluid1_nodal]
type = PorousFlowSingleComponentFluid
at_nodes = true
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1e-12 0 0 0 1e-12 0 0 0 1e-12'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
s_res = 0.1
sum_s_res = 0.11
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
s_res = 0.01
sum_s_res = 0.11
[../]
[./relperm0_nodal]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
at_nodes = true
[../]
[./relperm1_nodal]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
at_nodes = true
[../]
[./porosity_nodal]
type = PorousFlowPorosityConst
porosity = 0.1
at_nodes = true
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 1.0
density = 125
[../]
[./unused]
type = GenericConstantMaterial
prop_names = unused
prop_values = 0
[../]
[]
[Executioner]
type = Transient
end_time = 1
nl_abs_tol = 1e-14
[]
modules/porous_flow/test/tests/jacobian/diff02.i
# Test the Jacobian of the diffusive component of the PorousFlowDisperiveFlux kernel for two phases.
# By setting disp_long and disp_trans to zero, the purely diffusive component of the flux
# can be isolated. Uses constant tortuosity and diffusion coefficients
[Mesh]
type = GeneratedMesh
dim = 2
nx = 3
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./sgas]
[../]
[./massfrac0]
[../]
[]
[AuxVariables]
[./massfrac1]
[../]
[]
[ICs]
[./sgas]
type = RandomIC
variable = sgas
max = 1
min = 0
[../]
[./massfrac0]
type = RandomIC
variable = massfrac0
min = 0
max = 1
[../]
[./massfrac1]
type = RandomIC
variable = massfrac1
min = 0
max = 1
[../]
[]
[Kernels]
[./diff0]
type = PorousFlowDispersiveFlux
fluid_component = 0
variable = sgas
gravity = '1 0 0'
disp_long = '0 0'
disp_trans = '0 0'
[../]
[./diff1]
type = PorousFlowDispersiveFlux
fluid_component = 1
variable = massfrac0
gravity = '1 0 0'
disp_long = '0 0'
disp_trans = '0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'sgas massfrac0'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
pc = 0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1e7
density0 = 10
thermal_expansion = 0
viscosity = 1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 1e7
density0 = 1
thermal_expansion = 0
viscosity = 0.1
[../]
[../]
[]
[Materials]
[./temp]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = 1
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac0 massfrac1'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./poro]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./diff]
type = PorousFlowDiffusivityConst
diffusion_coeff = '1e-2 1e-1 1e-2 1e-1'
tortuosity = '0.1 0.2'
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityConst
phase = 1
[../]
[]
[Preconditioning]
active = smp
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/jacobian/hgs01.i
# apply a half-gaussian sink flux and observe the correct behavior
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 2
xmin = -1
xmax = 1
ymin = -1
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[./massfrac_ph0_sp0]
[../]
[./massfrac_ph1_sp0]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas massfrac_ph0_sp0 massfrac_ph1_sp0'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[ICs]
[./ppwater]
type = RandomIC
variable = ppwater
min = -1
max = 0
[../]
[./ppgas]
type = RandomIC
variable = ppgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 1
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 1
[../]
[]
[Kernels]
[./dummy_ppwater]
type = TimeDerivative
variable = ppwater
[../]
[./dummy_ppgas]
type = TimeDerivative
variable = ppgas
[../]
[./dummy_m00]
type = TimeDerivative
variable = massfrac_ph0_sp0
[../]
[./dummy_m10]
type = TimeDerivative
variable = massfrac_ph1_sp0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
viscosity = 1.4
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[]
[BCs]
[./flux_w]
type = PorousFlowHalfGaussianSink
boundary = 'left'
center = 0.1
sd = 1.1
max = 2.2
variable = ppwater
mass_fraction_component = 0
fluid_phase = 0
use_relperm = true
use_mobility = true
flux_function = 'x*y'
[../]
[./flux_g]
type = PorousFlowHalfGaussianSink
boundary = 'top left front'
center = 0.5
sd = 1.1
max = -2.2
mass_fraction_component = 0
variable = ppgas
fluid_phase = 1
use_relperm = true
use_mobility = true
flux_function = '-x*y'
[../]
[./flux_1]
type = PorousFlowHalfGaussianSink
boundary = 'right'
center = -0.1
sd = 1.1
max = 1.2
mass_fraction_component = 1
variable = massfrac_ph0_sp0
fluid_phase = 1
use_relperm = true
use_mobility = true
flux_function = '-1.1*x*y'
[../]
[./flux_2]
type = PorousFlowHalfGaussianSink
boundary = 'bottom'
center = 3.2
sd = 1.1
max = 1.2
mass_fraction_component = 1
variable = massfrac_ph1_sp0
fluid_phase = 1
use_relperm = true
use_mobility = true
flux_function = '0.5*x*y'
[../]
[]
[Preconditioning]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 2
[]
[Outputs]
file_base = pls03
[]
modules/porous_flow/test/tests/sinks/s06.i
# apply a half-cubic sink flux and observe the correct behavior
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0
xmax = 1
ymin = 0
ymax = 1
zmin = 0
zmax = 2
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1.1
[../]
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = x*(y+1)
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.3
density0 = 1.1
thermal_expansion = 0
viscosity = 1.1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-5 0 0 0 1E-5 0 0 0 1E-5'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[AuxVariables]
[./flux_out]
[../]
[]
[Functions]
[./mass10]
type = ParsedFunction
value = 'vol*por*dens0*exp(pp/bulk)*if(pp>=0,1,pow(1+pow(-al*pp,1.0/(1-m)),-m))'
vars = 'vol por dens0 pp bulk al m'
vals = '0.25 0.1 1.1 p10 1.3 1.1 0.5'
[../]
[./rate10]
type = ParsedFunction
value = 'fcn*if(pp>center,m,if(pp<themin,0,m/c/c/c*(2*(pp-center)+c)*((pp-center)-c)*((pp-center)-c)))'
vars = 'm fcn pp center sd themin c'
vals = '2 3 p10 0.9 0.5 0.1 -0.8'
[../]
[./mass10_expect]
type = ParsedFunction
value = 'mass_prev-rate*area*dt'
vars = 'mass_prev rate area dt'
vals = 'm10_prev m10_rate 0.5 2E-3'
[../]
[./mass11]
type = ParsedFunction
value = 'vol*por*dens0*exp(pp/bulk)*if(pp>=0,1,pow(1+pow(-al*pp,1.0/(1-m)),-m))'
vars = 'vol por dens0 pp bulk al m'
vals = '0.25 0.1 1.1 p11 1.3 1.1 0.5'
[../]
[./rate11]
type = ParsedFunction
value = 'fcn*if(pp>center,m,if(pp<themin,0,m/c/c/c*(2*(pp-center)+c)*((pp-center)-c)*((pp-center)-c)))'
vars = 'm fcn pp center sd themin c'
vals = '2 3 p11 0.9 0.5 0.1 -0.8'
[../]
[./mass11_expect]
type = ParsedFunction
value = 'mass_prev-rate*area*dt'
vars = 'mass_prev rate area dt'
vals = 'm11_prev m11_rate 0.5 2E-3'
[../]
[]
[Postprocessors]
[./flux00]
type = PointValue
variable = flux_out
point = '0 0 0'
[../]
[./flux01]
type = PointValue
variable = flux_out
point = '0 1 0'
[../]
[./flux10]
type = PointValue
variable = flux_out
point = '1 0 0'
[../]
[./flux11]
type = PointValue
variable = flux_out
point = '1 1 0'
[../]
[./p00]
type = PointValue
point = '0 0 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./p10]
type = PointValue
point = '1 0 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./m10]
type = FunctionValuePostprocessor
function = mass10
execute_on = 'initial timestep_end'
[../]
[./m10_prev]
type = FunctionValuePostprocessor
function = mass10
execute_on = 'timestep_begin'
outputs = 'console'
[../]
[./m10_rate]
type = FunctionValuePostprocessor
function = rate10
execute_on = 'timestep_end'
[../]
[./m10_expect]
type = FunctionValuePostprocessor
function = mass10_expect
execute_on = 'timestep_end'
[../]
[./p01]
type = PointValue
point = '0 1 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./p11]
type = PointValue
point = '1 1 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./m11]
type = FunctionValuePostprocessor
function = mass11
execute_on = 'initial timestep_end'
[../]
[./m11_prev]
type = FunctionValuePostprocessor
function = mass11
execute_on = 'timestep_begin'
outputs = 'console'
[../]
[./m11_rate]
type = FunctionValuePostprocessor
function = rate11
execute_on = 'timestep_end'
[../]
[./m11_expect]
type = FunctionValuePostprocessor
function = mass11_expect
execute_on = 'timestep_end'
[../]
[]
[BCs]
[./flux]
type = PorousFlowHalfCubicSink
boundary = 'left right'
max = 2
cutoff = -0.8
center = 0.9
variable = pp
use_mobility = false
use_relperm = false
fluid_phase = 0
flux_function = 3
save_in = flux_out
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_max_it -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu 10000 NONZERO 2'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 2E-3
end_time = 6E-2
nl_rel_tol = 1E-12
nl_abs_tol = 1E-12
[]
[Outputs]
file_base = s06
[./console]
type = Console
execute_on = 'nonlinear linear'
interval = 5
[../]
[./csv]
type = CSV
execute_on = 'timestep_end'
interval = 3
[../]
[]
modules/porous_flow/test/tests/desorption/desorption02.i
# Illustrates desorption works as planned.
#
# A mesh contains 3 elements in arranged in a line.
# The central element contains desorped fluid.
# This desorps to the nodes of that element.
#
# In the central element, of volume V, the following occurs.
# The initial porepressure=1, and concentration=1.
# The initial mass of fluid is
# V * (2 * porosity * density + (1 - porosity) * concentration)
# = V * 1.289547
# Notice the factor of "2" in the porespace contribution:
# it is because the porepressure is evaluated at nodes, so
# the nodes on the exterior of the centre_block have
# nodal-volume contributions from the elements not in centre_block.
#
# The mass-conservation equation reads
# 2 * porosity * density + (1 - porosity) * concentration = 1.289547
# and the desorption equation reads
# d( (1-porosity)C )/dt = - (1/tau)(C - dens_L * P / (P_L + P))
# where C = concentration, P = porepressure, P_L = Langmuir pressure
# dens_L = Langmuir density, tau = time constant.
# Using the mass-conservation equation in the desorption equation
# yields a nonlinear equation of P. For dt=1, and the numerical values
# given below this yields
# P = 1.83697
# and
# C = 0.676616
# The desired result is achieved by MOOSE
[Mesh]
type = FileMesh
file = three_eles.e
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./conc]
family = MONOMIAL
order = CONSTANT
block = centre_block
[../]
[]
[ICs]
[./p_ic]
type = ConstantIC
variable = pp
value = 1.0
[../]
[./conc_ic]
type = ConstantIC
variable = conc
value = 1.0
block = centre_block
[../]
[]
[Kernels]
[./porespace_mass_dot]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./fluid_flow]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
gravity = '0 0 0'
[../]
[./desorped_mass_dot]
type = PorousFlowDesorpedMassTimeDerivative
block = centre_block
conc_var = conc
variable = pp
[../]
[./desorped_mass_dot_conc_var]
type = PorousFlowDesorpedMassTimeDerivative
block = centre_block
conc_var = conc
variable = conc
[../]
[./flow_from_matrix]
type = DesorptionFromMatrix
block = centre_block
variable = conc
pressure_var = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp conc'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
viscosity = 1
density0 = 1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./lang_stuff]
type = LangmuirMaterial
block = centre_block
one_over_adsorption_time_const = 10.0
one_over_desorption_time_const = 10.0
langmuir_density = 1
langmuir_pressure = 1
pressure_var = pp
conc_var = conc
[../]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '0 0 0 0 0 0 0 0 0'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityFLAC
m = 1
phase = 0
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/energy_conservation/heat04_fullysat_action.i
# heat04, but using an action
#
# The sample is a single unit element, with fixed displacements on
# all sides. A heat source of strength S (J/m^3/s) is applied into
# the element. There is no fluid flow or heat flow. The rise
# in temperature, porepressure and stress, and the change in porosity is
# matched with theory.
#
# In this case, fluid mass must be conserved, and there is no
# volumetric strain, so
# porosity * fluid_density = constant
# Also, the energy-density in the rock-fluid system increases with S:
# d/dt [(1 - porosity) * rock_density * rock_heat_cap * T + porosity * fluid_density * fluid_heat_cap * T] = S
# Also, the porosity evolves according to THM as
# porosity = biot + (porosity0 - biot) * exp( (biot - 1) * P / fluid_bulk + rock_thermal_exp * T)
# Finally, the effective stress must be exactly zero (as there is
# no strain).
#
# Let us assume that
# fluid_density = dens0 * exp(P / fluid_bulk - fluid_thermal_exp * T)
# Then the conservation of fluid mass means
# porosity = por0 * exp(- P / fluid_bulk + fluid_thermal_exp * T)
# where dens0 * por0 = the initial fluid mass.
# The last expression for porosity, combined with the THM one,
# and assuming that biot = 1 for simplicity, gives
# porosity = 1 + (porosity0 - 1) * exp(rock_thermal_exp * T) = por0 * exp(- P / fluid_bulk + fluid_thermal_exp * T) .... (A)
#
# This stuff may be substituted into the heat energy-density equation:
# S = d/dt [(1 - porosity0) * exp(rock_thermal_exp * T) * rock_density * rock_heat_cap * T + porosity * fluid_density * fluid_heat_cap * T]
#
# If S is constant then
# S * t = (1 - porosity0) * exp(rock_thermal_exp * T) * rock_density * rock_heat_cap * T + porosity * fluid_density * fluid_heat_cap * T
# with T(t=0) = 0 then Eqn(A) implies that por0 = porosity0 and
# P / fluid_bulk = fluid_thermal_exp * T - log(1 + (por0 - 1) * exp(rock_thermal_exp * T)) + log(por0)
#
# Parameters:
# A = 2
# fluid_bulk = 2.0
# dens0 = 3.0
# fluid_thermal_exp = 0.5
# fluid_heat_cap = 2
# por0 = 0.5
# rock_thermal_exp = 0.25
# rock_density = 5
# rock_heat_capacity = 0.2
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.5
cv = 2
cp = 2
bulk_modulus = 2.0
density0 = 3.0
[../]
[../]
[]
[PorousFlowFullySaturated]
coupling_type = ThermoHydroMechanical
displacements = 'disp_x disp_y disp_z'
porepressure = pp
temperature = temp
dictator_name = Sir
biot_coefficient = 1.0
gravity = '0 0 0'
fp = the_simple_fluid
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = Sir
block = 0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./pp]
[../]
[./temp]
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./confinez]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back front'
[../]
[]
[Kernels]
[./heat_source]
type = BodyForce
function = 1
variable = temp
[../]
[]
[Functions]
[./err_T_fcn]
type = ParsedFunction
vars = 'por0 rte temp rd rhc m0 fhc source'
vals = '0.5 0.25 t0 5 0.2 1.5 2 1'
value = '((1-por0)*exp(rte*temp)*rd*rhc*temp+m0*fhc*temp-source*t)/(source*t)'
[../]
[./err_pp_fcn]
type = ParsedFunction
vars = 'por0 rte temp rd rhc m0 fhc source bulk pp fte'
vals = '0.5 0.25 t0 5 0.2 1.5 2 1 2 p0 0.5'
value = '(bulk*(fte*temp-log(1+(por0-1)*exp(rte*temp))+log(por0))-pp)/pp'
[../]
[]
[AuxVariables]
[./porosity]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '1 1.5'
# bulk modulus is lambda + 2*mu/3 = 1 + 2*1.5/3 = 2
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./porosity]
type = PorousFlowPorosity
thermal = true
fluid = true
mechanical = true
ensure_positive = false
biot_coefficient = 1.0
porosity_zero = 0.5
thermal_expansion_coeff = 0.25
solid_bulk = 2
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 0.2
density = 5.0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '0 0 0 0 0 0 0 0 0'
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '0 0 0 0 0 0 0 0 0'
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = 'console csv'
execute_on = 'timestep_end'
point = '0 0 0'
variable = pp
[../]
[./t0]
type = PointValue
outputs = 'console csv'
execute_on = 'timestep_end'
point = '0 0 0'
variable = temp
[../]
[./porosity]
type = PointValue
outputs = 'console csv'
execute_on = 'timestep_end'
point = '0 0 0'
variable = porosity
[../]
[./stress_xx]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_xx
[../]
[./stress_yy]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_yy
[../]
[./stress_zz]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_zz
[../]
[./fluid_mass]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'timestep_end'
use_displaced_mesh = true
outputs = 'console csv'
[../]
[./total_heat]
type = PorousFlowHeatEnergy
phase = 0
execute_on = 'timestep_end'
use_displaced_mesh = true
outputs = 'console csv'
[../]
[./err_T]
type = FunctionValuePostprocessor
function = err_T_fcn
[../]
[./err_P]
type = FunctionValuePostprocessor
function = err_pp_fcn
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-12 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 5
[]
[Outputs]
execute_on = 'initial timestep_end'
file_base = heat04_fullysat_action
csv = true
[]
modules/porous_flow/test/tests/jacobian/basic_advection6.i
# Basic advection with 2 porepressure as PorousFlow variables
[Mesh]
type = GeneratedMesh
dim = 1
nx = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./u]
[../]
[./P0]
[../]
[./P1]
[../]
[]
[ICs]
[./P0]
type = RandomIC
variable = P0
min = -1
max = 0
[../]
[./P1]
type = RandomIC
variable = P1
min = 0
max = 1
[../]
[./u]
type = RandomIC
variable = u
[../]
[]
[Kernels]
[./dummy_P0]
type = NullKernel
variable = P0
[../]
[./dummy_P1]
type = NullKernel
variable = P1
[../]
[./u_advection]
type = PorousFlowBasicAdvection
variable = u
phase = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'P0 P1'
number_fluid_phases = 2
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
alpha = 1
m = 0.6
sat_lr = 0.1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 3
density0 = 4
thermal_expansion = 0
viscosity = 150.0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 4
density0 = 3
thermal_expansion = 0
viscosity = 130.0
[../]
[../]
[]
[Materials]
[./temperature_qp]
type = PorousFlowTemperature
[../]
[./ppss_qp]
type = PorousFlow2PhasePP
phase0_porepressure = P0
phase1_porepressure = P1
capillary_pressure = pc
[../]
[./simple_fluid0_qp]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1_qp]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./effective_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
fluid = true
biot_coefficient = 0.5
solid_bulk = 1
[../]
[./permeability]
type = PorousFlowPermeabilityKozenyCarman
poroperm_function = kozeny_carman_phi0
k0 = 5
m = 2
n = 2
phi0 = 0.1
[../]
[./relperm0_qp]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
s_res = 0.1
sum_s_res = 0.1
[../]
[./relperm1_qp]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
s_res = 0.0
sum_s_res = 0.1
[../]
[./darcy_velocity_qp]
type = PorousFlowDarcyVelocityMaterial
gravity = '0.25 0 0'
[../]
[]
[Preconditioning]
[./check]
type = SMP
full = true
petsc_options = '-snes_test_display'
petsc_options_iname = '-snes_type'
petsc_options_value = ' test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/energy_conservation/heat04_action_KT.i
# heat04, but using an action with KT stabilization.
# See heat04.i for a full discussion of the results.
# The KT stabilization should have no impact as there is no flow, but this input file checks that MOOSE runs.
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.5
cv = 2
cp = 2
bulk_modulus = 2.0
density0 = 3.0
[../]
[../]
[]
[PorousFlowUnsaturated]
coupling_type = ThermoHydroMechanical
displacements = 'disp_x disp_y disp_z'
porepressure = pp
temperature = temp
dictator_name = Sir
biot_coefficient = 1.0
gravity = '0 0 0'
fp = the_simple_fluid
van_genuchten_alpha = 1.0E-12
van_genuchten_m = 0.5
relative_permeability_type = Corey
relative_permeability_exponent = 0.0
stabilization = KT
flux_limiter_type = superbee
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = Sir
block = 0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./pp]
[../]
[./temp]
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./confinez]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back front'
[../]
[]
[Kernels]
[./heat_source]
type = BodyForce
function = 1
variable = temp
[../]
[]
[Functions]
[./err_T_fcn]
type = ParsedFunction
vars = 'por0 rte temp rd rhc m0 fhc source'
vals = '0.5 0.25 t0 5 0.2 1.5 2 1'
value = '((1-por0)*exp(rte*temp)*rd*rhc*temp+m0*fhc*temp-source*t)/(source*t)'
[../]
[./err_pp_fcn]
type = ParsedFunction
vars = 'por0 rte temp rd rhc m0 fhc source bulk pp fte'
vals = '0.5 0.25 t0 5 0.2 1.5 2 1 2 p0 0.5'
value = '(bulk*(fte*temp-log(1+(por0-1)*exp(rte*temp))+log(por0))-pp)/pp'
[../]
[]
[AuxVariables]
[./porosity]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '1 1.5'
# bulk modulus is lambda + 2*mu/3 = 1 + 2*1.5/3 = 2
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./porosity]
type = PorousFlowPorosity
thermal = true
fluid = true
mechanical = true
ensure_positive = false
biot_coefficient = 1.0
porosity_zero = 0.5
thermal_expansion_coeff = 0.25
solid_bulk = 2
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 0.2
density = 5.0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '0 0 0 0 0 0 0 0 0'
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '0 0 0 0 0 0 0 0 0'
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = 'console csv'
execute_on = 'timestep_end'
point = '0 0 0'
variable = pp
[../]
[./t0]
type = PointValue
outputs = 'console csv'
execute_on = 'timestep_end'
point = '0 0 0'
variable = temp
[../]
[./porosity]
type = PointValue
outputs = 'console csv'
execute_on = 'timestep_end'
point = '0 0 0'
variable = porosity
[../]
[./stress_xx]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_xx
[../]
[./stress_yy]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_yy
[../]
[./stress_zz]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_zz
[../]
[./fluid_mass]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'timestep_end'
use_displaced_mesh = true
outputs = 'console csv'
[../]
[./total_heat]
type = PorousFlowHeatEnergy
phase = 0
execute_on = 'timestep_end'
use_displaced_mesh = true
outputs = 'console csv'
[../]
[./err_T]
type = FunctionValuePostprocessor
function = err_T_fcn
[../]
[./err_P]
type = FunctionValuePostprocessor
function = err_pp_fcn
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-12 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 5
[]
[Outputs]
execute_on = 'initial timestep_end'
file_base = heat04_action
csv = true
[]
modules/porous_flow/test/tests/jacobian/basic_advection2.i
# Basic advection with 1 porepressure as a PorousFlow variable
# Fully saturated
# Constant permeability
# Constant viscosity
[Mesh]
type = GeneratedMesh
dim = 1
nx = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./u]
[../]
[./P]
[../]
[]
[ICs]
[./P]
type = RandomIC
variable = P
[../]
[./u]
type = RandomIC
variable = u
[../]
[]
[Kernels]
[./dummy_P]
type = NullKernel
variable = P
[../]
[./u_advection]
type = PorousFlowBasicAdvection
variable = u
phase = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = P
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
alpha = 1
m = 0.6
sat_lr = 0.1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 3
density0 = 4
thermal_expansion = 0
viscosity = 150.0
[../]
[../]
[]
[Materials]
[./temperature_qp]
type = PorousFlowTemperature
[../]
[./ppss_qp]
type = PorousFlow1PhaseP
porepressure = P
capillary_pressure = pc
[../]
[./simple_fluid_qp]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '5 0 0 0 5 0 0 0 5'
[../]
[./relperm_qp]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
s_res = 0.1
sum_s_res = 0.1
[../]
[./darcy_velocity_qp]
type = PorousFlowDarcyVelocityMaterial
gravity = '0.25 0 0'
[../]
[]
[Preconditioning]
[./check]
type = SMP
full = true
#petsc_options = '-snes_test_display'
petsc_options_iname = '-snes_type'
petsc_options_value = ' test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/dirackernels/bh_except16.i
# fully-saturated
# production
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
function_of = temperature
bottom_p_or_t = 0
fluid_phase = 0
point_file = bh02.bh
SumQuantityUO = borehole_total_outflow_mass
variable = pp
unit_weight = '0 0 0'
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
modules/porous_flow/test/tests/dirackernels/bh_except02.i
# PorousFlowPeacemanBorehole exception test
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
initial_condition = 1E7
[../]
[]
[Kernels]
[./mass0]
type = TimeDerivative
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./borehole_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
viscosity = 1e-3
density0 = 1000
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[DiracKernels]
[./bh]
type = PorousFlowPeacemanBorehole
bottom_p_or_t = 0
fluid_phase = 0
mass_fraction_component = 1
point_file = bh02.bh
SumQuantityUO = borehole_total_outflow_mass
variable = pp
unit_weight = '0 0 0'
character = 1
[../]
[]
[Postprocessors]
[./bh_report]
type = PorousFlowPlotQuantity
uo = borehole_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p0]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 bh_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 0.5
dt = 1E-2
solve_type = NEWTON
[]
modules/porous_flow/test/tests/dirackernels/pls03.i
# Test that the upwinding works correctly.
#
# A poly-line sink sits at the centre of the element.
# It has length=4 and weight=0.5, and extracts fluid
# at a constant rate of
# (1 * relative_permeability) kg.m^-1.s^-1
# Since it sits at the centre of the element, it extracts
# equally from each node, so the rate of extraction from
# each node is
# (0.5 * relative_permeability) kg.s^-1
# including the length and weight effects.
#
# There is no fluid flow.
#
# The initial conditions are such that all nodes have
# relative_permeability=0, except for one which has
# relative_permeaility = 1. Therefore, all nodes should
# remain at their initial porepressure, except the one.
#
# The porosity is 0.1, and the elemental volume is 2,
# so the fluid mass at the node in question = 0.2 * density / 4,
# where the 4 is the number of nodes in the element.
# In this simulation density = dens0 * exp(P / bulk), with
# dens0 = 100, and bulk = 20 MPa.
# The initial porepressure P0 = 10 MPa, so the final (after
# 1 second of simulation) is
# P(t=1) = 8.748592 MPa
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1
ny = 1
xmin = 0
xmax = 2
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
#function = if((x<1)&(y<0.5),1E7,-1E7)
function = if((x<1)&(y>0.5),1E7,-1E7)
#function = if((x>1)&(y<0.5),1E7,-1E7)
#function = if((x>1)&(y>0.5),1E7,-1E7)
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pls_total_outflow_mass]
type = PorousFlowSumQuantity
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-7
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e7
density0 = 100
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./relperm]
type = PorousFlowRelativePermeabilityFLAC
phase = 0
m = 2
s_res = 0.99
sum_s_res = 0.99
[../]
[]
[DiracKernels]
[./pls]
type = PorousFlowPolyLineSink
fluid_phase = 0
point_file = pls03.bh
use_relative_permeability = true
line_length = 4
SumQuantityUO = pls_total_outflow_mass
variable = pp
p_or_t_vals = '0 1E7'
fluxes = '1 1'
[../]
[]
[Postprocessors]
[./pls_report]
type = PorousFlowPlotQuantity
uo = pls_total_outflow_mass
[../]
[./fluid_mass0]
type = PorousFlowFluidMass
execute_on = timestep_begin
[../]
[./fluid_mass1]
type = PorousFlowFluidMass
execute_on = timestep_end
[../]
[./zmass_error]
type = FunctionValuePostprocessor
function = mass_bal_fcn
execute_on = timestep_end
[../]
[./p00]
type = PointValue
variable = pp
point = '0 0 0'
execute_on = timestep_end
[../]
[./p01]
type = PointValue
variable = pp
point = '0 1 0'
execute_on = timestep_end
[../]
[./p20]
type = PointValue
variable = pp
point = '2 0 0'
execute_on = timestep_end
[../]
[./p21]
type = PointValue
variable = pp
point = '2 1 0'
execute_on = timestep_end
[../]
[]
[Functions]
[./mass_bal_fcn]
type = ParsedFunction
value = abs((a-c+d)/2/(a+c))
vars = 'a c d'
vals = 'fluid_mass1 fluid_mass0 pls_report'
[../]
[]
[Preconditioning]
[./usual]
type = SMP
full = true
petsc_options = '-snes_converged_reason'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -ksp_max_it'
petsc_options_value = 'bcgs bjacobi 1E-10 1E-10 10000 30'
[../]
[]
[Executioner]
type = Transient
end_time = 1
dt = 1
solve_type = NEWTON
[]
[Outputs]
file_base = pls03
exodus = false
csv = true
execute_on = timestep_end
[]
modules/porous_flow/test/tests/sinks/s04.i
# apply a piecewise-linear sink flux and observe the correct behavior
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0
xmax = 1
ymin = 0
ymax = 1
zmin = 0
zmax = 2
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = y+1
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.3
density0 = 1.1
thermal_expansion = 0
viscosity = 1.1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-5 0 0 0 1E-5 0 0 0 1E-5'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[AuxVariables]
[./flux_out]
[../]
[./xval]
[../]
[./yval]
[../]
[./pt_shift]
initial_condition = 0.3
[../]
[]
[ICs]
[./xval]
type = FunctionIC
variable = xval
function = x
[../]
[./yval]
type = FunctionIC
variable = yval
function = y
[../]
[]
[Functions]
[./mass10]
type = ParsedFunction
value = 'vol*por*dens0*exp(pp/bulk)'
vars = 'vol por dens0 pp bulk'
vals = '0.25 0.1 1.1 p10 1.3'
[../]
[./rate10]
type = ParsedFunction
value = 'fcn*if(pp>0.8,1,if(pp<0.3,0.5,0.2+pp))'
vars = 'fcn pp'
vals = '8 p10'
[../]
[./mass10_expect]
type = ParsedFunction
value = 'mass_prev-rate*area*dt'
vars = 'mass_prev rate area dt'
vals = 'm10_prev m10_rate 0.5 1E-3'
[../]
[./mass11]
type = ParsedFunction
value = 'vol*por*dens0*exp(pp/bulk)'
vars = 'vol por dens0 pp bulk'
vals = '0.25 0.1 1.1 p11 1.3'
[../]
[./rate11]
type = ParsedFunction
value = 'fcn*if(pp>0.8,1,if(pp<0.3,0.5,0.2+pp))'
vars = 'fcn pp'
vals = '8 p11'
[../]
[./mass11_expect]
type = ParsedFunction
value = 'mass_prev-rate*area*dt'
vars = 'mass_prev rate area dt'
vals = 'm11_prev m11_rate 0.5 1E-3'
[../]
[]
[Postprocessors]
[./p00]
type = PointValue
point = '0 0 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./p10]
type = PointValue
point = '1 0 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./m10]
type = FunctionValuePostprocessor
function = mass10
execute_on = 'initial timestep_end'
[../]
[./m10_prev]
type = FunctionValuePostprocessor
function = mass10
execute_on = 'timestep_begin'
outputs = 'console'
[../]
[./m10_rate]
type = FunctionValuePostprocessor
function = rate10
execute_on = 'timestep_end'
[../]
[./m10_expect]
type = FunctionValuePostprocessor
function = mass10_expect
execute_on = 'timestep_end'
[../]
[./p01]
type = PointValue
point = '0 1 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./p11]
type = PointValue
point = '1 1 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./m11]
type = FunctionValuePostprocessor
function = mass11
execute_on = 'initial timestep_end'
[../]
[./m11_prev]
type = FunctionValuePostprocessor
function = mass11
execute_on = 'timestep_begin'
outputs = 'console'
[../]
[./m11_rate]
type = FunctionValuePostprocessor
function = rate11
execute_on = 'timestep_end'
[../]
[./m11_expect]
type = FunctionValuePostprocessor
function = mass11_expect
execute_on = 'timestep_end'
[../]
[]
[BCs]
[./flux]
type = PorousFlowPiecewiseLinearSink
boundary = 'right'
PT_shift = pt_shift
pt_vals = '0.0 0.5'
multipliers = '0.5 1'
variable = pp
use_mobility = false
use_relperm = false
fluid_phase = 0
flux_function = 8
save_in = flux_out
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_max_it -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu 10000 NONZERO 2'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E-3
end_time = 1E-2
nl_rel_tol = 1E-12
nl_abs_tol = 1E-12
[]
[Outputs]
file_base = s04
[./console]
type = Console
execute_on = 'nonlinear linear'
[../]
[./csv]
type = CSV
execute_on = 'timestep_end'
[../]
[]
modules/porous_flow/test/tests/flux_limited_TVD_pflow/jacobian_03.i
# Checking the Jacobian of Flux-Limited TVD Advection, 2 phases, 2 components, using flux_limiter_type = None
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 2
ymin = -1
ymax = 2
bias_y = 1.5
[]
[GlobalParams]
gravity = '1 2 -0.5'
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[./massfrac_ph0_sp0]
[../]
[./massfrac_ph1_sp0]
[../]
[]
[ICs]
[./ppwater]
type = RandomIC
variable = ppwater
min = -1
max = 0
[../]
[./ppgas]
type = RandomIC
variable = ppgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 1
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 1
[../]
[]
[Kernels]
[./flux_ph0_sp0]
type = PorousFlowFluxLimitedTVDAdvection
variable = ppwater
advective_flux_calculator = advective_flux_calculator_ph0_sp0
[../]
[./flux_ph0_sp1]
type = PorousFlowFluxLimitedTVDAdvection
variable = ppgas
advective_flux_calculator = advective_flux_calculator_ph0_sp1
[../]
[./flux_ph1_sp0]
type = PorousFlowFluxLimitedTVDAdvection
variable = massfrac_ph0_sp0
advective_flux_calculator = advective_flux_calculator_ph1_sp0
[../]
[./flux_ph1_sp1]
type = PorousFlowFluxLimitedTVDAdvection
variable = massfrac_ph1_sp0
advective_flux_calculator = advective_flux_calculator_ph1_sp1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
viscosity = 1.4
[../]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas massfrac_ph0_sp0 massfrac_ph1_sp0'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
alpha = 1
m = 0.5
[../]
[./advective_flux_calculator_ph0_sp0]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
flux_limiter_type = None
phase = 0
fluid_component = 0
[../]
[./advective_flux_calculator_ph0_sp1]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
flux_limiter_type = None
phase = 0
fluid_component = 1
[../]
[./advective_flux_calculator_ph1_sp0]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
flux_limiter_type = None
phase = 1
fluid_component = 0
[../]
[./advective_flux_calculator_ph1_sp1]
type = PorousFlowAdvectiveFluxCalculatorUnsaturatedMultiComponent
flux_limiter_type = None
phase = 1
fluid_component = 1
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.21 0 0 0 1.5 0 0 0 0.8'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-snes_type'
petsc_options_value = 'test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
num_steps = 1
dt = 1
[]
modules/porous_flow/test/tests/jacobian/basic_advection1.i
# Basic advection with no PorousFlow variables
[Mesh]
type = GeneratedMesh
dim = 1
nx = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./u]
[../]
[]
[AuxVariables]
[./P]
[../]
[]
[ICs]
[./P]
type = FunctionIC
variable = P
function = '2*(1-x)'
[../]
[./u]
type = RandomIC
variable = u
[../]
[]
[Kernels]
[./u_advection]
type = PorousFlowBasicAdvection
variable = u
phase = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = ''
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 4
thermal_expansion = 0
viscosity = 150.0
[../]
[../]
[]
[Materials]
[./temperature_qp]
type = PorousFlowTemperature
[../]
[./ppss_qp]
type = PorousFlow1PhaseP
porepressure = P
capillary_pressure = pc
[../]
[./simple_fluid_qp]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '5 0 0 0 5 0 0 0 5'
[../]
[./relperm_qp]
type = PorousFlowRelativePermeabilityCorey
n = 0
phase = 0
[../]
[./darcy_velocity_qp]
type = PorousFlowDarcyVelocityMaterial
gravity = '0.25 0 0'
[../]
[]
[Preconditioning]
[./check]
type = SMP
full = true
#petsc_options = '-snes_test_display'
petsc_options_iname = '-snes_type'
petsc_options_value = ' test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/sinks/s08.i
# apply a sink flux on just one component of a 3-component, 2-phase system and observe the correct behavior
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0
xmax = 1
ymin = 0
ymax = 1
zmin = 0
zmax = 2
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pwater frac_ph0_c0 pgas'
number_fluid_phases = 2
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1.1
[../]
[]
[Variables]
[./pwater]
[../]
[./frac_ph0_c0]
initial_condition = 0.3
[../]
[./pgas]
[../]
[]
[ICs]
[./pwater]
type = FunctionIC
variable = pwater
function = y
[../]
[./pgas]
type = FunctionIC
variable = pgas
function = y+3
[../]
[]
[Kernels]
[./mass_c0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = frac_ph0_c0
[../]
[./mass_c1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = pwater
[../]
[./mass_c2]
type = PorousFlowMassTimeDerivative
fluid_component = 2
variable = pgas
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 2.3
density0 = 1.5
thermal_expansion = 0
viscosity = 2.1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 1.3
density0 = 1.1
thermal_expansion = 0
viscosity = 1.1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = pwater
phase1_porepressure = pgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'frac_ph0_c0 frac_ph0_c1 frac_ph1_c0 frac_ph1_c1'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '0.2 0 0 0 0.1 0 0 0 0.1'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 1
[../]
[]
[AuxVariables]
[./flux_out]
[../]
[./frac_ph0_c1]
initial_condition = 0.35
[../]
[./frac_ph1_c0]
initial_condition = 0.1
[../]
[./frac_ph1_c1]
initial_condition = 0.8
[../]
[]
[Functions]
[./mass1_00]
type = ParsedFunction
value = 'fgas*vol*por*dens0gas*exp(pgas/bulkgas)*(1-pow(1+pow(al*(pgas-pwater),1.0/(1-m)),-m))+fwater*vol*por*dens0water*exp(pwater/bulkwater)*(pow(1+pow(al*(pgas-pwater),1.0/(1-m)),-m))'
vars = 'vol por dens0gas pgas pwater bulkgas al m dens0water bulkwater fgas fwater'
vals = '0.25 0.1 1.1 pgas_00 pwater_00 1.3 1.1 0.5 1.5 2.3 frac_ph1_c1_00 frac_ph0_c1_00'
[../]
[./expected_mass_change1_00]
type = ParsedFunction
value = 'frac*fcn*area*dt*pow(1-pow(1+pow(al*(pgas-pwater),1.0/(1-m)),-m), 2)'
vars = 'frac fcn area dt pgas pwater al m'
vals = 'frac_ph1_c1_00 100 0.5 1E-3 pgas_00 pwater_00 1.1 0.5'
[../]
[./mass1_00_expect]
type = ParsedFunction
value = 'mass_prev-mass_change'
vars = 'mass_prev mass_change'
vals = 'm1_00_prev del_m1_00'
[../]
[]
[Postprocessors]
[./total_mass_comp0]
type = PorousFlowFluidMass
fluid_component = 0
[../]
[./total_mass_comp1]
type = PorousFlowFluidMass
fluid_component = 1
[../]
[./total_mass_comp2]
type = PorousFlowFluidMass
fluid_component = 2
[../]
[./frac_ph1_c1_00]
type = PointValue
point = '0 0 0'
variable = frac_ph1_c1
execute_on = 'initial timestep_end'
[../]
[./frac_ph0_c1_00]
type = PointValue
point = '0 0 0'
variable = frac_ph0_c1
execute_on = 'initial timestep_end'
[../]
[./flux_00]
type = PointValue
point = '0 0 0'
variable = flux_out
execute_on = 'initial timestep_end'
[../]
[./pgas_00]
type = PointValue
point = '0 0 0'
variable = pgas
execute_on = 'initial timestep_end'
[../]
[./pwater_00]
type = PointValue
point = '0 0 0'
variable = pwater
execute_on = 'initial timestep_end'
[../]
[./m1_00]
type = FunctionValuePostprocessor
function = mass1_00
execute_on = 'initial timestep_end'
[../]
[./m1_00_prev]
type = FunctionValuePostprocessor
function = mass1_00
execute_on = 'timestep_begin'
outputs = 'console'
[../]
[./del_m1_00]
type = FunctionValuePostprocessor
function = expected_mass_change1_00
execute_on = 'timestep_end'
outputs = 'console'
[../]
[./m1_00_expect]
type = FunctionValuePostprocessor
function = mass1_00_expect
execute_on = 'timestep_end'
[../]
[]
[BCs]
[./flux_ph1_c1]
type = PorousFlowSink
boundary = 'left'
variable = pwater # sink applied to the mass_c1 Kernel
use_mobility = false
use_relperm = true
mass_fraction_component = 1
fluid_phase = 1
flux_function = 100
save_in = flux_out
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_max_it -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu 100 NONZERO 2'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1E-3
end_time = 0.01
nl_rel_tol = 1E-12
nl_abs_tol = 1E-12
[]
[Outputs]
file_base = s08
exodus = true
[./console]
type = Console
execute_on = 'nonlinear linear'
[../]
[./csv]
type = CSV
execute_on = 'timestep_end'
[../]
[]
modules/porous_flow/examples/tidal/atm_tides_open_hole.i
# A 100m x 10m "slab" of height 100m is subjected to cyclic pressure at its top
# Assumptions:
# the boundaries are impermeable, except the top boundary
# only vertical displacement is allowed
# the atmospheric pressure sets the total stress at the top of the model
# at the slab left-hand side there is a borehole that taps into the base of the slab.
[Mesh]
[./the_mesh]
type = GeneratedMeshGenerator
dim = 3
nx = 10
ny = 1
nz = 10
xmin = 0
xmax = 100
ymin = -5
ymax = 5
zmin = -100
zmax = 0
[../]
[./bh_back]
type = ExtraNodesetGenerator
coord = '0 -5 -100'
input = the_mesh
new_boundary = 11
[../]
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
biot_coefficient = 0.6
multiply_by_density = false
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
scaling = 1E11
[../]
[]
[ICs]
[./porepressure]
type = FunctionIC
variable = porepressure
function = '-10000*z' # this is only approximately correct
[../]
[]
[Functions]
[./ini_stress_zz]
type = ParsedFunction
value = '(25000 - 0.6*10000)*z' # remember this is effective stress
[../]
[./cyclic_porepressure]
type = ParsedFunction
value = 'if(t>0,5000 * sin(2 * pi * t / 3600.0 / 24.0),0)'
[../]
[./cyclic_porepressure_at_depth]
type = ParsedFunction
value = '-10000*z + if(t>0,5000 * sin(2 * pi * t / 3600.0 / 24.0),0)'
[../]
[./neg_cyclic_porepressure]
type = ParsedFunction
value = '-if(t>0,5000 * sin(2 * pi * t / 3600.0 / 24.0),0)'
[../]
[]
[BCs]
# zmin is called 'back'
# zmax is called 'front'
# ymin is called 'bottom'
# ymax is called 'top'
# xmin is called 'left'
# xmax is called 'right'
[./no_x_disp]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'bottom top' # because of 1-element meshing, this fixes u_x=0 everywhere
[../]
[./no_y_disp]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top' # because of 1-element meshing, this fixes u_y=0 everywhere
[../]
[./no_z_disp_at_bottom]
type = DirichletBC
variable = disp_z
value = 0
boundary = back
[../]
[./pp]
type = FunctionDirichletBC
variable = porepressure
function = cyclic_porepressure
boundary = front
[../]
[./pp_downhole]
type = FunctionDirichletBC
variable = porepressure
function = cyclic_porepressure_at_depth
boundary = 11
[../]
[./total_stress_at_top]
type = FunctionNeumannBC
variable = disp_z
function = neg_cyclic_porepressure
boundary = front
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.0
bulk_modulus = 2E9
viscosity = 1E-3
density0 = 1000.0
[../]
[../]
[]
[PorousFlowBasicTHM]
coupling_type = HydroMechanical
displacements = 'disp_x disp_y disp_z'
porepressure = porepressure
gravity = '0 0 -10'
fp = the_simple_fluid
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
bulk_modulus = 10.0E9 # drained bulk modulus
poissons_ratio = 0.25
[../]
[./strain]
type = ComputeSmallStrain
eigenstrain_names = ini_stress
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./ini_stress]
type = ComputeEigenstrainFromInitialStress
initial_stress = '0 0 0 0 0 0 0 0 ini_stress_zz'
eigenstrain_name = ini_stress
[../]
[./porosity]
type = PorousFlowPorosityConst # only the initial value of this is ever used
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
solid_bulk_compliance = 1E-10
fluid_bulk_modulus = 2E9
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[../]
[./density]
type = GenericConstantMaterial
prop_names = density
prop_values = 2500.0
[../]
[]
[Postprocessors]
[./p0_0]
type = PointValue
outputs = csv
point = '0 0 0'
variable = porepressure
[../]
[./p100_0]
type = PointValue
outputs = csv
point = '100 0 0'
variable = porepressure
[../]
[./p0_100]
type = PointValue
outputs = csv
point = '0 0 -100'
variable = porepressure
[../]
[./p100_100]
type = PointValue
outputs = csv
point = '100 0 -100'
variable = porepressure
[../]
[./uz0]
type = PointValue
outputs = csv
point = '0 0 0'
variable = disp_z
[../]
[./uz100]
type = PointValue
outputs = csv
point = '100 0 0'
variable = disp_z
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = -3600
dt = 3600
end_time = 172800
nl_rel_tol = 1E-10
nl_abs_tol = 1E-5
[]
[Outputs]
print_linear_residuals = false
csv = true
[]
modules/porous_flow/test/tests/chemistry/except22.i
# Exception test
# Zero fluid phases
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./dummy]
[../]
[]
[AuxVariables]
[./a]
initial_condition = 0.5
[../]
[./ini_mineral_conc]
initial_condition = 0.2
[../]
[./mineral]
family = MONOMIAL
order = CONSTANT
[../]
[./porosity]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./mineral]
type = PorousFlowPropertyAux
property = mineral_concentration
mineral_species = 0
variable = mineral
[../]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./dummy]
type = Diffusion
variable = dummy
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = dummy
number_fluid_phases = 0
number_fluid_components = 2
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./temperature_qp]
type = PorousFlowTemperature
temperature = 1
[../]
[./predis_qp]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = a
num_reactions = 1
equilibrium_constants = 0.5
primary_activity_coefficients = 2
reactions = 1
specific_reactive_surface_area = 0.5
kinetic_rate_constant = 0.6065306597126334
activation_energy = 3
molar_volume = 2
gas_constant = 6
reference_temperature = 0.5
[../]
[./mineral_conc_qp]
type = PorousFlowAqueousPreDisMineral
initial_concentrations = ini_mineral_conc
[../]
[./porosity]
type = PorousFlowPorosity
chemical = true
porosity_zero = 0.6
reference_chemistry = ini_mineral_conc
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
nl_abs_tol = 1E-10
dt = 0.1
end_time = 0.4
[]
[Postprocessors]
[./porosity]
type = PointValue
point = '0 0 0'
variable = porosity
[../]
[./c]
type = PointValue
point = '0 0 0'
variable = mineral
[../]
[]
[Outputs]
csv = true
perf_graph = true
[]
modules/porous_flow/test/tests/jacobian/line_sink01.i
# PorousFlowPeacemanBorehole with 2-phase, 3-components, with enthalpy, internal_energy, and thermal_conductivity
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[./massfrac_ph0_sp0]
[../]
[./massfrac_ph0_sp1]
[../]
[./massfrac_ph1_sp0]
[../]
[./massfrac_ph1_sp1]
[../]
[./temp]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp ppwater ppgas massfrac_ph0_sp0 massfrac_ph0_sp1 massfrac_ph1_sp0 massfrac_ph1_sp1'
number_fluid_phases = 2
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[./dummy_outflow0]
type = PorousFlowSumQuantity
[../]
[./dummy_outflow1]
type = PorousFlowSumQuantity
[../]
[./dummy_outflow2]
type = PorousFlowSumQuantity
[../]
[./dummy_outflow3]
type = PorousFlowSumQuantity
[../]
[./dummy_outflow4]
type = PorousFlowSumQuantity
[../]
[./dummy_outflow5]
type = PorousFlowSumQuantity
[../]
[./dummy_outflow6]
type = PorousFlowSumQuantity
[../]
[./dummy_outflow7]
type = PorousFlowSumQuantity
[../]
[]
[ICs]
[./temp]
type = RandomIC
variable = temp
min = 1
max = 2
[../]
[./ppwater]
type = RandomIC
variable = ppwater
min = -1
max = 0
[../]
[./ppgas]
type = RandomIC
variable = ppgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 1
[../]
[./massfrac_ph0_sp1]
type = RandomIC
variable = massfrac_ph0_sp1
min = 0
max = 1
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 1
[../]
[./massfrac_ph1_sp1]
type = RandomIC
variable = massfrac_ph1_sp1
min = 0
max = 1
[../]
[]
[Kernels]
[./dummy_temp]
type = TimeDerivative
variable = temp
[../]
[./dummy_ppwater]
type = TimeDerivative
variable = ppwater
[../]
[./dummy_ppgas]
type = TimeDerivative
variable = ppgas
[../]
[./dummy_m00]
type = TimeDerivative
variable = massfrac_ph0_sp0
[../]
[./dummy_m01]
type = TimeDerivative
variable = massfrac_ph0_sp1
[../]
[./dummy_m10]
type = TimeDerivative
variable = massfrac_ph1_sp0
[../]
[./dummy_m11]
type = TimeDerivative
variable = massfrac_ph1_sp1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
cv = 1.1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
viscosity = 1.4
cv = 1.8
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph0_sp1 massfrac_ph1_sp0 massfrac_ph1_sp1'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '0.1 0.02 0.03 0.02 0.0 0.01 0.03 0.01 0.3'
[../]
[]
[DiracKernels]
[./dirac0]
type = PorousFlowPeacemanBorehole
fluid_phase = 0
variable = ppwater
point_file = one_point.bh
line_length = 1
SumQuantityUO = dummy_outflow0
character = 1
bottom_p_or_t = -10
unit_weight = '1 2 3'
re_constant = 0.123
[../]
[./dirac1]
type = PorousFlowPeacemanBorehole
fluid_phase = 1
variable = ppgas
line_length = 1
line_direction = '-1 -1 -1'
use_relative_permeability = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow1
character = -0.5
bottom_p_or_t = 10
unit_weight = '1 2 -3'
re_constant = 0.3
[../]
[./dirac2]
type = PorousFlowPeacemanBorehole
fluid_phase = 0
variable = massfrac_ph0_sp0
line_length = 1.3
line_direction = '1 0 1'
use_mobility = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow2
character = 0.6
bottom_p_or_t = -4
unit_weight = '-1 -2 -3'
re_constant = 0.4
[../]
[./dirac3]
type = PorousFlowPeacemanBorehole
fluid_phase = 0
variable = massfrac_ph0_sp1
line_length = 1.3
line_direction = '1 1 1'
use_enthalpy = true
mass_fraction_component = 0
point_file = one_point.bh
SumQuantityUO = dummy_outflow3
character = -1
bottom_p_or_t = 3
unit_weight = '0.1 0.2 0.3'
re_constant = 0.5
[../]
[./dirac4]
type = PorousFlowPeacemanBorehole
fluid_phase = 1
variable = massfrac_ph1_sp0
function_of = temperature
line_length = 0.9
line_direction = '1 1 1'
mass_fraction_component = 1
use_internal_energy = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow4
character = 1.1
bottom_p_or_t = -7
unit_weight = '-1 2 3'
re_constant = 0.6
[../]
[./dirac5]
type = PorousFlowPeacemanBorehole
fluid_phase = 1
variable = temp
line_length = 0.9
function_of = temperature
line_direction = '1 2 3'
mass_fraction_component = 2
use_internal_energy = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow5
character = 0.9
bottom_p_or_t = -8
unit_weight = '1 2 1'
re_constant = 0.7
[../]
[./dirac6]
type = PorousFlowPeacemanBorehole
fluid_phase = 0
variable = ppwater
point_file = one_point.bh
SumQuantityUO = dummy_outflow6
character = 0
bottom_p_or_t = 10
unit_weight = '0.0 0.0 0.0'
[../]
[./dirac7]
type = PorousFlowPeacemanBorehole
fluid_phase = 1
variable = massfrac_ph0_sp0
use_mobility = true
mass_fraction_component = 1
use_relative_permeability = true
use_internal_energy = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow7
character = -1
bottom_p_or_t = 10
unit_weight = '0.1 0.2 0.3'
[../]
[]
[Preconditioning]
[./check]
type = SMP
full = true
#petsc_options = '-snes_test_display'
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
file_base = line_sink01
[]
modules/porous_flow/examples/flow_through_fractured_media/fine_thick_fracture_steady.i
# Using a single-dimensional mesh
# Steady-state porepressure distribution along a fracture in a porous matrix
# This is used to initialise the transient solute-transport simulation
[Mesh]
type = FileMesh
# The gold mesh is used to reduce the number of large files in the MOOSE repository.
# The porepressure is not read from the gold mesh
file = 'gold/fine_thick_fracture_steady_out.e'
block_id = '1 2 3'
block_name = 'fracture matrix1 matrix2'
boundary_id = '1 2'
boundary_name = 'bottom top'
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pp]
type = ConstantIC
variable = pp
value = 1e6
[../]
[]
[BCs]
[./ptop]
type = DirichletBC
variable = pp
boundary = top
value = 1e6
[../]
[./pbottom]
type = DirichletBC
variable = pp
boundary = bottom
value = 1.002e6
[../]
[]
[Kernels]
[./adv0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./relp]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./permeability1]
type = PorousFlowPermeabilityConst
permeability = '3e-8 0 0 0 3e-8 0 0 0 3e-8' # the true permeability is used without scaling by aperture
block = 'fracture'
[../]
[./permeability2]
type = PorousFlowPermeabilityConst
permeability = '1e-20 0 0 0 1e-20 0 0 0 1e-20'
block = 'matrix1 matrix2'
[../]
[]
[Preconditioning]
active = basic
[./mumps_is_best_for_parallel_jobs]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[./basic]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu NONZERO 2 '
[../]
[]
[Executioner]
type = Steady
solve_type = NEWTON
# controls for nonlinear iterations
nl_abs_tol = 1e-9
nl_rel_tol = 1e-10
[]
[Outputs]
exodus = true
execute_on = 'timestep_end'
[]
modules/porous_flow/test/tests/pressure_pulse/pressure_pulse_1d_2phasePSVG2.i
# Pressure pulse in 1D with 2 phases, 2components - transient
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 100
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./ppwater]
initial_condition = 2e6
[../]
[./sgas]
initial_condition = 0.3
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[./ppgas]
family = MONOMIAL
order = FIRST
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = ppwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
variable = ppwater
fluid_component = 0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sgas
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
variable = sgas
fluid_component = 1
[../]
[]
[AuxKernels]
[./ppgas]
type = PorousFlowPropertyAux
property = pressure
phase = 1
variable = ppgas
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater sgas'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1e-4
sat_lr = 0.3
pc_max = 1e9
log_extension = true
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 2e7
density0 = 1
thermal_expansion = 0
viscosity = 1e-5
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = ppwater
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1e-15 0 0 0 1e-15 0 0 0 1e-15'
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 0
[../]
[./relperm_gas]
type = PorousFlowRelativePermeabilityCorey
n = 1
phase = 1
[../]
[]
[BCs]
[./leftwater]
type = DirichletBC
boundary = left
value = 3e6
variable = ppwater
[../]
[./rightwater]
type = DirichletBC
boundary = right
value = 2e6
variable = ppwater
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-20 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1e3
end_time = 1e4
[]
[VectorPostprocessors]
[./pp]
type = LineValueSampler
sort_by = x
variable = 'ppwater ppgas'
start_point = '0 0 0'
end_point = '100 0 0'
num_points = 11
[../]
[]
[Outputs]
file_base = pressure_pulse_1d_2phasePSVG2
print_linear_residuals = false
[./csv]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/fluids/simple_fluid_dy.i
# Test the properties calculated by the simple fluid Material
# Time unit is chosen to be days
# Pressure 10 MPa
# Temperature = 300 K (temperature unit = K)
# Density should equal 1500*exp(1E7/1E9-2E-4*300)=1426.844 kg/m^3
# Viscosity should equal 1.27E-8 Pa.dy
# Energy density should equal 4000 * 300 = 1.2E6 J/kg
# Specific enthalpy should equal 4000 * 300 + 10e6 / 1426.844 = 1.207008E6 J/kg
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 2.0E-4
cv = 4000.0
cp = 5000.0
bulk_modulus = 1.0E9
thermal_conductivity = 1.0
viscosity = 1.1E-3
density0 = 1500.0
[../]
[../]
[]
[Mesh]
type = GeneratedMesh
dim = 1
nx = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp T'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Variables]
[./pp]
initial_condition = 10E6
[../]
[./T]
initial_condition = 300.0
[../]
[]
[Kernels]
[./dummy_p]
type = Diffusion
variable = pp
[../]
[./dummy_T]
type = Diffusion
variable = T
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = T
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
temperature_unit = Kelvin
time_unit = days
fp = the_simple_fluid
phase = 0
[../]
[]
[Postprocessors]
[./pressure]
type = ElementIntegralVariablePostprocessor
variable = pp
[../]
[./temperature]
type = ElementIntegralVariablePostprocessor
variable = T
[../]
[./density]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_density_qp0'
[../]
[./viscosity]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_viscosity_qp0'
[../]
[./internal_energy]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_internal_energy_qp0'
[../]
[./enthalpy]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_enthalpy_qp0'
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
execute_on = 'timestep_end'
csv = true
[]
modules/porous_flow/examples/tutorial/10.i
# Unsaturated Darcy-Richards flow without using an Action
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[./make3D]
input = annular
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
[../]
[./shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[../]
[./aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[../]
[./injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomain_ids = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[../]
[./rename]
type = RenameBlockGenerator
old_block_id = '0 1'
new_block_name = 'caps aquifer'
input = 'injection_area'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = pp
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
alpha = 1E-6
m = 0.6
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[]
[Kernels]
[./time_derivative]
type = PorousFlowMassTimeDerivative
variable = pp
[../]
[./flux]
type = PorousFlowAdvectiveFlux
variable = pp
gravity = '0 0 0'
[../]
[]
[AuxVariables]
[./sat]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./saturation]
type = PorousFlowPropertyAux
variable = sat
property = saturation
[../]
[]
[BCs]
[./production]
type = PorousFlowSink
variable = pp
fluid_phase = 0
flux_function = 1E-2
use_relperm = true
boundary = injection_area
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1E-14 0 0 0 1E-14 0 0 0 1E-14'
[../]
[./permeability_caps]
type = PorousFlowPermeabilityConst
block = caps
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-16'
[../]
[./saturation_calculator]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./temperature]
type = PorousFlowTemperature
temperature = 293
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = the_simple_fluid
phase = 0
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 3
s_res = 0.1
sum_s_res = 0.1
phase = 0
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_abs_tol = 1E-7
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/sinks/PorousFlowPiecewiseLinearSink_BC_eg1.i
## This is an example input file showing how to set a Type I (Dirichlet) BC with PorousFlowPiecewiseLinearSink
##
## Problem setup:
## - The boundaries are set to P(x = 0) = 2e6 Pa, P(x = 1) = 1e6 and run to steady state.
## - The 2d domain is 1 m x 1 m
## - The permeability is set to 1E-15 m2, fluid viscosity = 1E-3 Pa-s
## - The steady state flux is calculated q = -k/mu*grad(P) = 1e-6 m/s
##
## Problem verification (in csv output):
## - The flux in and out of the domain are 1e-6 m/s (matching steady state solution)
## - The pressure at the left and right boundaries are set to 2e6 and 1e6 Pa, respectively
[Mesh]
type = GeneratedMesh
dim = 2
nx = 5
xmin = 0
xmax = 1
ny = 2
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./porepressure]
initial_condition = 1.5e6 # initial pressure in domain
[../]
[]
[PorousFlowBasicTHM]
porepressure = porepressure
coupling_type = Hydro
gravity = '0 0 0'
fp = the_simple_fluid
[]
[AuxVariables]
[./fluxes_out]
[../]
[./fluxes_in]
[../]
[]
[BCs]
[./in_left]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
boundary = 'left'
pt_vals = '-1e9 1e9' # x coordinates defining g
multipliers = '-1e9 1e9' # y coordinates defining g
PT_shift = 2.E6 # BC pressure
flux_function = 1E-5 # Variable C
fluid_phase = 0
save_in = fluxes_out
[../]
[./out_right]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
boundary = 'right'
pt_vals = '-1e9 1e9' # x coordinates defining g
multipliers = '-1e9 1e9' # y coordinates defining g
PT_shift = 1.E6 # BC pressure
flux_function = 1E-6 # Variable C
fluid_phase = 0
save_in = fluxes_in
[../]
[]
[Postprocessors]
[./left_flux]
type = NodalSum
boundary = 'left'
variable = fluxes_out
execute_on = 'timestep_end'
[../]
[./right_flux]
type = NodalSum
boundary = 'right'
variable = fluxes_in
execute_on = 'timestep_end'
[../]
[./left_pressure]
type = SideAverageValue
boundary = 'left'
variable = porepressure
execute_on = 'timestep_end'
[../]
[./right_pressure]
type = SideAverageValue
boundary = 'right'
variable = porepressure
execute_on = 'timestep_end'
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0
viscosity = 1.0E-3
density0 = 1000.0
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.8
solid_bulk_compliance = 2E-7
fluid_bulk_modulus = 1E7
[../]
[./permeability_aquifer]
type = PorousFlowPermeabilityConst
permeability = '1E-15 0 0 0 1E-15 0 0 0 1E-15'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_abs_tol = 1E-10
[]
[Outputs]
csv = true
[]
modules/porous_flow/examples/tutorial/07.i
# Darcy flow with a tracer that precipitates causing mineralisation and porosity changes and permeability changes
[Mesh]
[annular]
type = AnnularMeshGenerator
nr = 10
rmin = 1.0
rmax = 10
growth_r = 1.4
nt = 4
dmin = 0
dmax = 90
[]
[./make3D]
input = annular
type = MeshExtruderGenerator
extrusion_vector = '0 0 12'
num_layers = 3
bottom_sideset = 'bottom'
top_sideset = 'top'
[../]
[./shift_down]
type = TransformGenerator
transform = TRANSLATE
vector_value = '0 0 -6'
input = make3D
[../]
[./aquifer]
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 0 -2'
top_right = '10 10 2'
input = shift_down
[../]
[./injection_area]
type = ParsedGenerateSideset
combinatorial_geometry = 'x*x+y*y<1.01'
included_subdomain_ids = 1
new_sideset_name = 'injection_area'
input = 'aquifer'
[../]
[./rename]
type = RenameBlockGenerator
old_block_id = '0 1'
new_block_name = 'caps aquifer'
input = 'injection_area'
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./porepressure]
[../]
[./tracer_concentration]
[../]
[]
[PorousFlowFullySaturated]
porepressure = porepressure
coupling_type = Hydro
gravity = '0 0 0'
fp = the_simple_fluid
mass_fraction_vars = tracer_concentration
number_aqueous_kinetic = 1
temperature = 283.0
[]
[AuxVariables]
[./eqm_k]
initial_condition = 0.1
[../]
[./mineral_conc]
family = MONOMIAL
order = CONSTANT
[../]
[./initial_and_reference_conc]
initial_condition = 0
[../]
[./porosity]
family = MONOMIAL
order = CONSTANT
[../]
[./permeability]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./mineral_conc]
type = PorousFlowPropertyAux
property = mineral_concentration
mineral_species = 0
variable = mineral_conc
[../]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
[../]
[./permeability]
type = PorousFlowPropertyAux
property = permeability
column = 0
row = 0
variable = permeability
[../]
[]
[Kernels]
[./precipitation_dissolution]
type = PorousFlowPreDis
mineral_density = 1000.0
stoichiometry = 1
variable = tracer_concentration
[../]
[]
[BCs]
[./constant_injection_of_tracer]
type = PorousFlowSink
variable = tracer_concentration
flux_function = -5E-3
boundary = injection_area
[../]
[./constant_outer_porepressure]
type = DirichletBC
variable = porepressure
value = 0
boundary = rmax
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
viscosity = 1.0E-3
density0 = 1000.0
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
chemical = true
initial_mineral_concentrations = initial_and_reference_conc
reference_chemistry = initial_and_reference_conc
[../]
[./permeability_aquifer]
type = PorousFlowPermeabilityKozenyCarman
block = aquifer
k0 = 1E-14
m = 2
n = 3
phi0 = 0.1
poroperm_function = kozeny_carman_phi0
[../]
[./permeability_caps]
type = PorousFlowPermeabilityKozenyCarman
block = caps
k0 = 1E-15
k_anisotropy = '1 0 0 0 1 0 0 0 0.1'
m = 2
n = 3
phi0 = 0.1
poroperm_function = kozeny_carman_phi0
[../]
[./precipitation_dissolution]
type = PorousFlowAqueousPreDisChemistry
reference_temperature = 283.0
activation_energy = 1 # irrelevant because T=Tref
equilibrium_constants = eqm_k # equilibrium tracer concentration
kinetic_rate_constant = 1E-8
molar_volume = 1
num_reactions = 1
primary_activity_coefficients = 1
primary_concentrations = tracer_concentration
reactions = 1
specific_reactive_surface_area = 1
[../]
[./mineral_concentration]
type = PorousFlowAqueousPreDisMineral
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1E6
dt = 1E5
nl_abs_tol = 1E-10
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/jacobian/line_sink04.i
# PorousFlowPolyLineSink with 2-phase, 3-components, with enthalpy, internal_energy, and thermal_conductivity
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 2
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[./massfrac_ph0_sp0]
[../]
[./massfrac_ph0_sp1]
[../]
[./massfrac_ph1_sp0]
[../]
[./massfrac_ph1_sp1]
[../]
[./temp]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp ppwater ppgas massfrac_ph0_sp0 massfrac_ph0_sp1 massfrac_ph1_sp0 massfrac_ph1_sp1'
number_fluid_phases = 2
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[./dummy_outflow]
type = PorousFlowSumQuantity
[../]
[]
[ICs]
[./temp]
type = RandomIC
variable = temp
min = 1
max = 2
[../]
[./ppwater]
type = RandomIC
variable = ppwater
min = -1
max = 0
[../]
[./ppgas]
type = RandomIC
variable = ppgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 1
[../]
[./massfrac_ph0_sp1]
type = RandomIC
variable = massfrac_ph0_sp1
min = 0
max = 1
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 1
[../]
[./massfrac_ph1_sp1]
type = RandomIC
variable = massfrac_ph1_sp1
min = 0
max = 1
[../]
[]
[Kernels]
[./dummy_temp]
type = TimeDerivative
variable = temp
[../]
[./dummy_ppwater]
type = TimeDerivative
variable = ppwater
[../]
[./dummy_ppgas]
type = TimeDerivative
variable = ppgas
[../]
[./dummy_m00]
type = TimeDerivative
variable = massfrac_ph0_sp0
[../]
[./dummy_m01]
type = TimeDerivative
variable = massfrac_ph0_sp1
[../]
[./dummy_m10]
type = TimeDerivative
variable = massfrac_ph1_sp0
[../]
[./dummy_m11]
type = TimeDerivative
variable = massfrac_ph1_sp1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
cv = 1.1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
viscosity = 1.4
cv = 1.8
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph0_sp1 massfrac_ph1_sp0 massfrac_ph1_sp1'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '0.1 0.2 0.3 0.2 0 0.1 0.3 0.1 0.1'
[../]
[]
[DiracKernels]
[./dirac0]
type = PorousFlowPolyLineSink
fluid_phase = 0
variable = ppwater
point_file = one_point.bh
line_length = 1
SumQuantityUO = dummy_outflow
p_or_t_vals = '-0.9 1.5'
fluxes = '-1.1 2.2'
[../]
[./dirac1]
type = PorousFlowPolyLineSink
fluid_phase = 1
variable = ppgas
line_length = 1
use_relative_permeability = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow
p_or_t_vals = '-1.9 1.5'
fluxes = '1.1 -2.2'
[../]
[./dirac2]
type = PorousFlowPolyLineSink
fluid_phase = 0
variable = massfrac_ph0_sp0
line_length = 1.3
use_mobility = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow
p_or_t_vals = '-1.9 1.5'
fluxes = '1.1 -0.2'
[../]
[./dirac3]
type = PorousFlowPolyLineSink
fluid_phase = 0
variable = massfrac_ph0_sp1
line_length = 1.3
use_enthalpy = true
mass_fraction_component = 0
point_file = one_point.bh
SumQuantityUO = dummy_outflow
p_or_t_vals = '-1.9 1.5'
fluxes = '1.1 -0.2'
[../]
[./dirac4]
type = PorousFlowPolyLineSink
fluid_phase = 1
variable = massfrac_ph1_sp0
function_of = temperature
line_length = 0.9
mass_fraction_component = 1
use_internal_energy = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow
p_or_t_vals = '-1.9 1.5'
fluxes = '1.1 -0.2'
[../]
[./dirac5]
type = PorousFlowPolyLineSink
fluid_phase = 1
variable = temp
line_length = 0.9
mass_fraction_component = 2
use_internal_energy = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow
p_or_t_vals = '-1.9 1.5'
fluxes = '1.1 -0.2'
[../]
[./dirac6]
type = PorousFlowPolyLineSink
fluid_phase = 1
variable = massfrac_ph0_sp0
use_mobility = true
function_of = temperature
mass_fraction_component = 1
use_relative_permeability = true
use_internal_energy = true
point_file = ten_points.bh
SumQuantityUO = dummy_outflow
p_or_t_vals = '-1.9 1.5'
fluxes = '0 -0.2'
[../]
[]
[Preconditioning]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
file_base = line_sink04
[]
modules/porous_flow/test/tests/chemistry/except14.i
# Exception test.
# Incorrect number of initial concentrations
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = Diffusion
variable = a
[../]
[./b]
type = Diffusion
variable = b
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 1E-6
[../]
[./ini_conc_0]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'a b'
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = 'a b'
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = '1 1'
reactions = '1 1'
specific_reactive_surface_area = 1.0
kinetic_rate_constant = 1.0e-8
activation_energy = 1.5e4
molar_volume = 1
[../]
[./mineral]
type = PorousFlowAqueousPreDisMineral
initial_concentrations = 'ini_conc_0 ini_conc_0'
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/jacobian/disp02.i
# Test the Jacobian of the dispersive contribution to the diffusive component of
# the PorousFlowDisperiveFlux kernel along with a non-zero diffusion.
# By setting disp_long and disp_trans to the same non-zero value, the purely
# dispersive component of the flux is zero, and the only flux is due to diffusion
# and its contribution from disp_trans.
[Mesh]
type = GeneratedMesh
dim = 2
nx = 3
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./massfrac0]
[../]
[]
[ICs]
[./pp]
type = RandomIC
variable = pp
max = 2e1
min = 1e1
[../]
[./massfrac0]
type = RandomIC
variable = massfrac0
min = 0
max = 1
[../]
[]
[Kernels]
[./diff0]
type = PorousFlowDispersiveFlux
fluid_component = 0
variable = pp
gravity = '1 0 0'
disp_long = 0.1
disp_trans = 0.1
[../]
[./diff1]
type = PorousFlowDispersiveFlux
fluid_component = 1
variable = massfrac0
gravity = '1 0 0'
disp_long = 0.1
disp_trans = 0.1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1e7
density0 = 10
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temp]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac0'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./poro]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./diff]
type = PorousFlowDiffusivityConst
diffusion_coeff = '1e-2 1e-1'
tortuosity = '0.1'
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[]
[Preconditioning]
active = smp
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/poro_elasticity/pp_generation_action.i
# Same as pp_generation.i, but using an Action
#
# A sample is constrained on all sides and its boundaries are
# also impermeable. Fluid is pumped into the sample via a
# volumetric source (ie kg/second per cubic meter), and the
# rise in porepressure is observed.
#
# Source = s (units = kg/m^3/second)
#
# Expect:
# fluid_mass = mass0 + s*t
# stress = 0 (remember this is effective stress)
# Porepressure = fluid_bulk*log(fluid_mass_density/density_P0), where fluid_mass_density = fluid_mass*porosity
# porosity = biot+(phi0-biot)*exp(pp(biot-1)/solid_bulk)
#
# Parameters:
# Biot coefficient = 0.3
# Phi0 = 0.1
# Solid Bulk modulus = 2
# fluid_bulk = 13
# density_P0 = 1
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = -0.5
xmax = 0.5
ymin = -0.5
ymax = 0.5
zmin = -0.5
zmax = 0.5
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.0
bulk_modulus = 13.0
viscosity = 1.0
density0 = 1.0
[../]
[../]
[]
[PorousFlowUnsaturated]
coupling_type = HydroMechanical
displacements = 'disp_x disp_y disp_z'
porepressure = porepressure
biot_coefficient = 0.3
gravity = '0 0 0'
fp = the_simple_fluid
van_genuchten_alpha = 1.0
van_genuchten_m = 0.8
relative_permeability_type = Corey
relative_permeability_exponent = 0.0
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./confinez]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back front'
[../]
[]
[Kernels]
[./source]
type = BodyForce
function = 0.1
variable = porepressure
[../]
[]
[AuxVariables]
[./porosity]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./porosity]
type = PorousFlowPropertyAux
variable = porosity
property = porosity
[../]
[]
[Materials]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '1 1.5'
# bulk modulus is lambda + 2*mu/3 = 1 + 2*1.5/3 = 2
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
porosity_zero = 0.1
biot_coefficient = 0.3
solid_bulk = 2
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 1 0 0 0 1' # unimportant
[../]
[]
[Functions]
[./porosity_analytic]
type = ParsedFunction
value = 'biot+(phi0-biot)*exp(pp*(biot-1)/bulk)'
vars = 'biot phi0 pp bulk'
vals = '0.3 0.1 p0 2'
[../]
[]
[Postprocessors]
[./fluid_mass]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'initial timestep_end'
use_displaced_mesh = true
[../]
[./porosity]
type = PointValue
outputs = 'console csv'
point = '0 0 0'
variable = porosity
[../]
[./p0]
type = PointValue
outputs = csv
point = '0 0 0'
variable = porepressure
[../]
[./porosity_analytic]
type = FunctionValuePostprocessor
function = porosity_analytic
[../]
[./zdisp]
type = PointValue
outputs = csv
point = '0 0 0.5'
variable = disp_z
[../]
[./stress_xx]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_xx
[../]
[./stress_yy]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_yy
[../]
[./stress_zz]
type = PointValue
outputs = csv
point = '0 0 0'
variable = stress_zz
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-14 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 10
dt = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = pp_generation_action
csv = true
[]
modules/porous_flow/test/tests/jacobian/pls01.i
# PorousFlowPiecewiseLinearSink with 1-phase, 1-component
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1
ny = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pp]
type = RandomIC
variable = pp
max = 0
min = -1
[../]
[]
[Kernels]
[./dummy]
type = TimeDerivative
variable = pp
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 1
thermal_expansion = 0
viscosity = 1.1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.1 0 0 0 2.2 0 0 0 3.3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[BCs]
[./flux]
type = PorousFlowPiecewiseLinearSink
boundary = 'left'
pt_vals = '-1 -0.5 0'
multipliers = '1 2 4'
variable = pp
fluid_phase = 0
use_relperm = true
use_mobility = true
flux_function = 'x*y'
[../]
[]
[Preconditioning]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 2
[]
[Outputs]
file_base = pls01
[]
modules/porous_flow/test/tests/jacobian/denergy05.i
# 2phase, 1 component, with solid displacements, time derivative of energy-density, THM porosity wth _ensure_positive = true, and compressive strains
[Mesh]
type = GeneratedMesh
dim = 3
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./pgas]
[../]
[./pwater]
[../]
[./temp]
[../]
[]
[ICs]
[./disp_x]
type = RandomIC
variable = disp_x
min = -0.1
max = 0.0
[../]
[./disp_y]
type = RandomIC
variable = disp_y
min = -0.1
max = 0.0
[../]
[./disp_z]
type = RandomIC
variable = disp_z
min = -0.1
max = 0.0
[../]
[./pgas]
type = RandomIC
variable = pgas
max = 0.01
min = 0.0
[../]
[./pwater]
type = RandomIC
variable = pwater
max = 0.0
min = -0.01
[../]
[./temp]
type = RandomIC
variable = temp
max = 1.0
min = 0.0
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./dummy_pgas]
type = Diffusion
variable = pgas
[../]
[./dummy_pwater]
type = Diffusion
variable = pwater
[../]
[./energy_dot]
type = PorousFlowEnergyTimeDerivative
variable = temp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pgas temp pwater disp_x disp_y disp_z'
number_fluid_phases = 2
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
cv = 1.3
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
cv = 0.7
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '0.5 0.75'
# bulk modulus is lambda + 2*mu/3 = 0.5 + 2*0.75/3 = 1
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
thermal = true
porosity_zero = 0.7
thermal_expansion_coeff = 0.7
biot_coefficient = 0.9
solid_bulk = 10
[../]
[./p_eff]
type = PorousFlowEffectiveFluidPressure
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 1.1
density = 0.5
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = pwater
phase1_porepressure = pgas
capillary_pressure = pc
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/actions/addjoiner.i
# Tests that including PorousFlowJoiner materials doesn't cause the simulation
# to fail due to the PorousFlowAddMaterialJoiner action adding duplicate
# PorousFlowJoiner materials
[GlobalParams]
PorousFlowDictator = dictator
[]
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./p0]
[../]
[./p1]
[../]
[]
[Kernels]
[./p0]
type = Diffusion
variable = p0
[../]
[./p1]
type = Diffusion
variable = p1
[../]
[]
[Modules]
[./FluidProperties]
[./fluid0]
type = SimpleFluidProperties
[../]
[./fluid1]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
at_nodes = true
[../]
[./temperature_qp]
type = PorousFlowTemperature
[../]
[./ppss_nodal]
type = PorousFlow2PhasePP
at_nodes = true
phase0_porepressure = p0
phase1_porepressure = p1
capillary_pressure = pc
[../]
[./ppss_qp]
type = PorousFlow2PhasePP
phase0_porepressure = p0
phase1_porepressure = p1
capillary_pressure = pc
[../]
[./fluid0_nodal]
type = PorousFlowSingleComponentFluid
fp = fluid0
at_nodes = true
phase = 0
[../]
[./fluid1_nodal]
type = PorousFlowSingleComponentFluid
fp = fluid1
at_nodes = true
phase = 1
[../]
[./fluid0_qp]
type = PorousFlowSingleComponentFluid
fp = fluid0
phase = 0
[../]
[./fluid1_qp]
type = PorousFlowSingleComponentFluid
fp = fluid1
phase = 1
[../]
[./density_nodal]
type = PorousFlowJoiner
at_nodes = true
material_property = PorousFlow_fluid_phase_density_nodal
[../]
[./density_qp]
type = PorousFlowJoiner
material_property = PorousFlow_fluid_phase_density_qp
[../]
[./viscosity_nodal]
type = PorousFlowJoiner
material_property = PorousFlow_viscosity_nodal
at_nodes = true
[../]
[./viscosity_qp]
type = PorousFlowJoiner
material_property = PorousFlow_viscosity_qp
[../]
[./energy_ndoal]
type = PorousFlowJoiner
at_nodes = true
material_property = PorousFlow_fluid_phase_internal_energy_nodal
[../]
[./energy_qp]
type = PorousFlowJoiner
material_property = PorousFlow_fluid_phase_internal_energy_qp
[../]
[./enthalpy_nodal]
type = PorousFlowJoiner
material_property = PorousFlow_fluid_phase_enthalpy_nodal
at_nodes = true
[../]
[./enthalpy_qp]
type = PorousFlowJoiner
material_property = PorousFlow_fluid_phase_enthalpy_qp
[../]
[./relperm0_nodal]
type = PorousFlowRelativePermeabilityConst
at_nodes = true
kr = 0.5
phase = 0
[../]
[./relperm1_nodal]
type = PorousFlowRelativePermeabilityConst
at_nodes = true
kr = 0.8
phase = 1
[../]
[./relperm_nodal]
type = PorousFlowJoiner
at_nodes = true
material_property = PorousFlow_relative_permeability_nodal
[../]
[]
[Executioner]
type = Steady
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'p0 p1'
number_fluid_phases = 2
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
pc = 0
[../]
[]
modules/porous_flow/test/tests/flux_limited_TVD_pflow/pffltvd_1D_adaptivity.i
# Using flux-limited TVD advection ala Kuzmin and Turek, mploying PorousFlow Kernels and UserObjects, with superbee flux-limiter
# 1D version with adaptivity
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 1
[]
[Adaptivity]
initial_steps = 1
initial_marker = tracer_marker
marker = tracer_marker
max_h_level = 1
[./Markers]
[./tracer_marker]
type = ValueRangeMarker
variable = tracer
lower_bound = 0.02
upper_bound = 0.98
[../]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./porepressure]
[../]
[./tracer]
[../]
[]
[ICs]
[./porepressure]
type = FunctionIC
variable = porepressure
function = '1 - x'
[../]
[./tracer]
type = FunctionIC
variable = tracer
function = 'if(x<0.1,0,if(x>0.3,0,1))'
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = tracer
[../]
[./flux0]
type = PorousFlowFluxLimitedTVDAdvection
variable = tracer
advective_flux_calculator = advective_flux_calculator_0
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = porepressure
[../]
[./flux1]
type = PorousFlowFluxLimitedTVDAdvection
variable = porepressure
advective_flux_calculator = advective_flux_calculator_1
[../]
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1
boundary = left
[../]
[./no_tracer_on_left]
type = DirichletBC
variable = tracer
value = 0
boundary = left
[../]
[./remove_component_1]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 1
use_mobility = true
flux_function = 1E3
[../]
[./remove_component_0]
type = PorousFlowPiecewiseLinearSink
variable = tracer
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 0
use_mobility = true
flux_function = 1E3
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
thermal_expansion = 0
viscosity = 1.0
density0 = 1000.0
[../]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure tracer'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[./advective_flux_calculator_0]
type = PorousFlowAdvectiveFluxCalculatorSaturatedMultiComponent
flux_limiter_type = superbee
fluid_component = 0
[../]
[./advective_flux_calculator_1]
type = PorousFlowAdvectiveFluxCalculatorSaturatedMultiComponent
flux_limiter_type = superbee
fluid_component = 1
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = tracer
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = the_simple_fluid
phase = 0
[../]
[./relperm]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-2 0 0 0 1E-2 0 0 0 1E-2'
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[VectorPostprocessors]
[./tracer]
type = LineValueSampler
start_point = '0 0 0'
end_point = '1 0 0'
num_points = 11
sort_by = x
variable = tracer
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 6
dt = 6E-2
nl_abs_tol = 1E-8
timestep_tolerance = 1E-3
[]
[Outputs]
[./out]
type = CSV
execute_on = final
[../]
[]
modules/porous_flow/test/tests/jacobian/hcs01.i
# apply a half-cubic sink flux and observe the correct behavior
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 2
xmin = -1
xmax = 1
ymin = -1
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[./massfrac_ph0_sp0]
[../]
[./massfrac_ph1_sp0]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas massfrac_ph0_sp0 massfrac_ph1_sp0'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[ICs]
[./ppwater]
type = RandomIC
variable = ppwater
min = -1
max = 0
[../]
[./ppgas]
type = RandomIC
variable = ppgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 1
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 1
[../]
[]
[Kernels]
[./dummy_ppwater]
type = TimeDerivative
variable = ppwater
[../]
[./dummy_ppgas]
type = TimeDerivative
variable = ppgas
[../]
[./dummy_m00]
type = TimeDerivative
variable = massfrac_ph0_sp0
[../]
[./dummy_m10]
type = TimeDerivative
variable = massfrac_ph1_sp0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
viscosity = 1.4
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[]
[BCs]
[./flux_w]
type = PorousFlowHalfCubicSink
boundary = 'left'
center = 0.1
cutoff = -1.1
max = 2.2
variable = ppwater
mass_fraction_component = 0
fluid_phase = 0
use_relperm = true
use_mobility = true
flux_function = 'x*y'
[../]
[./flux_g]
type = PorousFlowHalfCubicSink
boundary = 'top left front'
center = 0.5
cutoff = -1.1
max = -2.2
mass_fraction_component = 0
variable = ppgas
fluid_phase = 1
use_relperm = true
use_mobility = true
flux_function = '-x*y'
[../]
[./flux_1]
type = PorousFlowHalfCubicSink
boundary = 'right'
center = -0.1
cutoff = -1.1
max = 1.2
mass_fraction_component = 1
variable = massfrac_ph0_sp0
fluid_phase = 1
use_relperm = true
use_mobility = true
flux_function = '-1.1*x*y'
[../]
[./flux_2]
type = PorousFlowHalfCubicSink
boundary = 'bottom'
center = 3.2
cutoff = -1.1
max = 1.2
mass_fraction_component = 1
variable = massfrac_ph1_sp0
fluid_phase = 1
use_relperm = true
use_mobility = true
flux_function = '0.5*x*y'
[../]
[]
[Preconditioning]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 2
[]
[Outputs]
file_base = hcs01
[]
modules/porous_flow/test/tests/jacobian/fflux08.i
# 1phase, 1component, constant viscosity, Kozeny-Carman permeability
# density with constant bulk, Corey relative perm, nonzero gravity, unsaturated with vanGenuchten
[Mesh]
type = GeneratedMesh
dim = 3
[]
[GlobalParams]
PorousFlowDictator = dictator
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./pp]
[../]
[]
[ICs]
[./disp_x]
type = RandomIC
variable = disp_x
min = -0.1
max = 0.1
[../]
[./disp_y]
type = RandomIC
variable = disp_y
min = -0.1
max = 0.1
[../]
[./disp_z]
type = RandomIC
variable = disp_z
min = -0.1
max = 0.1
[../]
[./pp]
type = RandomIC
variable = pp
min = -1
max = 1
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = pp
gravity = '-1 -0.1 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '0.5 0.75'
# bulk modulus is lambda + 2*mu/3 = 0.5 + 2*0.75/3 = 1
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
porosity_zero = 0.1
biot_coefficient = 0.5
solid_bulk = 1
[../]
[./p_eff]
type = PorousFlowEffectiveFluidPressure
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./permeability]
type = PorousFlowPermeabilityKozenyCarman
poroperm_function = kozeny_carman_phi0
k_anisotropy = '1 0 0 0 2 0 0 0 3'
phi0 = 0.1
n = 1.0
m = 2.0
k0 = 2
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/examples/coal_mining/coarse_with_fluid.i
# Strata deformation and fluid flow aaround a coal mine - 3D model
#
# A "half model" is used. The mine is 400m deep and
# just the roof is studied (-400<=z<=0). The mining panel
# sits between 0<=x<=150, and 0<=y<=1000, so this simulates
# a coal panel that is 300m wide and 1000m long. The outer boundaries
# are 1km from the excavation boundaries.
#
# The excavation takes 0.5 years.
#
# The boundary conditions for this simulation are:
# - disp_x = 0 at x=0 and x=1150
# - disp_y = 0 at y=-1000 and y=1000
# - disp_z = 0 at z=-400, but there is a time-dependent
# Young modulus that simulates excavation
# - wc_x = 0 at y=-1000 and y=1000
# - wc_y = 0 at x=0 and x=1150
# - no flow at x=0, z=-400 and z=0
# - fixed porepressure at y=-1000, y=1000 and x=1150
# That is, rollers on the sides, free at top,
# and prescribed at bottom in the unexcavated portion.
#
# A single-phase unsaturated fluid is used.
#
# The small strain formulation is used.
#
# All stresses are measured in MPa, and time units are measured in years.
#
# The initial porepressure is hydrostatic with P=0 at z=0, so
# Porepressure ~ - 0.01*z MPa, where the fluid has density 1E3 kg/m^3 and
# gravity = = 10 m.s^-2 = 1E-5 MPa m^2/kg.
# To be more accurate, i use
# Porepressure = -bulk * log(1 + g*rho0*z/bulk)
# where bulk=2E3 MPa and rho0=1Ee kg/m^3.
# The initial stress is consistent with the weight force from undrained
# density 2500 kg/m^3, and fluid porepressure, and a Biot coefficient of 0.7, ie,
# stress_zz^effective = 0.025*z + 0.7 * initial_porepressure
# The maximum and minimum principal horizontal effective stresses are
# assumed to be equal to 0.8*stress_zz.
#
# Material properties:
# Young's modulus = 8 GPa
# Poisson's ratio = 0.25
# Cosserat layer thickness = 1 m
# Cosserat-joint normal stiffness = large
# Cosserat-joint shear stiffness = 1 GPa
# MC cohesion = 2 MPa
# MC friction angle = 35 deg
# MC dilation angle = 8 deg
# MC tensile strength = 1 MPa
# MC compressive strength = 100 MPa
# WeakPlane cohesion = 0.1 MPa
# WeakPlane friction angle = 30 deg
# WeakPlane dilation angle = 10 deg
# WeakPlane tensile strength = 0.1 MPa
# WeakPlane compressive strength = 100 MPa softening to 1 MPa at strain = 1
# Fluid density at zero porepressure = 1E3 kg/m^3
# Fluid bulk modulus = 2E3 MPa
# Fluid viscosity = 1.1E-3 Pa.s = 1.1E-9 MPa.s = 3.5E-17 MPa.year
#
[GlobalParams]
perform_finite_strain_rotations = false
displacements = 'disp_x disp_y disp_z'
Cosserat_rotations = 'wc_x wc_y wc_z'
PorousFlowDictator = dictator
biot_coefficient = 0.7
[]
[Mesh]
[file]
type = FileMeshGenerator
file = mesh/coarse.e
[]
[./xmin]
type = SideSetsAroundSubdomainGenerator
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16'
new_boundary = xmin
normal = '-1 0 0'
input = file
[../]
[./xmax]
type = SideSetsAroundSubdomainGenerator
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16'
new_boundary = xmax
normal = '1 0 0'
input = xmin
[../]
[./ymin]
type = SideSetsAroundSubdomainGenerator
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16'
new_boundary = ymin
normal = '0 -1 0'
input = xmax
[../]
[./ymax]
type = SideSetsAroundSubdomainGenerator
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16'
new_boundary = ymax
normal = '0 1 0'
input = ymin
[../]
[./zmax]
type = SideSetsAroundSubdomainGenerator
block = 16
new_boundary = zmax
normal = '0 0 1'
input = ymax
[../]
[./zmin]
type = SideSetsAroundSubdomainGenerator
block = 2
new_boundary = zmin
normal = '0 0 -1'
input = zmax
[../]
[./excav]
type = SubdomainBoundingBoxGenerator
input = zmin
block_id = 1
bottom_left = '0 0 -400'
top_right = '150 1000 -397'
[../]
[./roof]
type = SideSetsBetweenSubdomainsGenerator
master_block = 3
paired_block = 1
input = excav
new_boundary = roof
[../]
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./wc_x]
[../]
[./wc_y]
[../]
[./porepressure]
scaling = 1E-5
[../]
[]
[ICs]
[./porepressure]
type = FunctionIC
variable = porepressure
function = ini_pp
[../]
[]
[Kernels]
[./cx_elastic]
type = CosseratStressDivergenceTensors
use_displaced_mesh = false
variable = disp_x
component = 0
[../]
[./cy_elastic]
type = CosseratStressDivergenceTensors
use_displaced_mesh = false
variable = disp_y
component = 1
[../]
[./cz_elastic]
type = CosseratStressDivergenceTensors
use_displaced_mesh = false
variable = disp_z
component = 2
[../]
[./x_couple]
type = StressDivergenceTensors
use_displaced_mesh = false
variable = wc_x
displacements = 'wc_x wc_y wc_z'
component = 0
base_name = couple
[../]
[./y_couple]
type = StressDivergenceTensors
use_displaced_mesh = false
variable = wc_y
displacements = 'wc_x wc_y wc_z'
component = 1
base_name = couple
[../]
[./x_moment]
type = MomentBalancing
use_displaced_mesh = false
variable = wc_x
component = 0
[../]
[./y_moment]
type = MomentBalancing
use_displaced_mesh = false
variable = wc_y
component = 1
[../]
[./gravity]
type = Gravity
use_displaced_mesh = false
variable = disp_z
value = -10E-6 # remember this is in MPa
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
use_displaced_mesh = false
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
use_displaced_mesh = false
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
use_displaced_mesh = false
component = 2
variable = disp_z
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
use_displaced_mesh = false
fluid_component = 0
variable = porepressure
[../]
[./flux]
type = PorousFlowAdvectiveFlux
use_displaced_mesh = false
variable = porepressure
gravity = '0 0 -10E-6'
fluid_component = 0
[../]
[./poro_vol_exp]
type = PorousFlowMassVolumetricExpansion
use_displaced_mesh = false
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16'
variable = porepressure
fluid_component = 0
[../]
[]
[AuxVariables]
[./saturation]
order = CONSTANT
family = MONOMIAL
[../]
[./darcy_x]
order = CONSTANT
family = MONOMIAL
[../]
[./darcy_y]
order = CONSTANT
family = MONOMIAL
[../]
[./darcy_z]
order = CONSTANT
family = MONOMIAL
[../]
[./porosity]
order = CONSTANT
family = MONOMIAL
[../]
[./wc_z]
[../]
[./stress_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_xz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zx]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zy]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_xy]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_xz]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_yx]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_yz]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_zx]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_zy]
order = CONSTANT
family = MONOMIAL
[../]
[./total_strain_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_xx]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./perm_zz]
order = CONSTANT
family = MONOMIAL
[../]
[./mc_shear]
order = CONSTANT
family = MONOMIAL
[../]
[./mc_tensile]
order = CONSTANT
family = MONOMIAL
[../]
[./wp_shear]
order = CONSTANT
family = MONOMIAL
[../]
[./wp_tensile]
order = CONSTANT
family = MONOMIAL
[../]
[./wp_shear_f]
order = CONSTANT
family = MONOMIAL
[../]
[./wp_tensile_f]
order = CONSTANT
family = MONOMIAL
[../]
[./mc_shear_f]
order = CONSTANT
family = MONOMIAL
[../]
[./mc_tensile_f]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./saturation_water]
type = PorousFlowPropertyAux
variable = saturation
property = saturation
phase = 0
execute_on = timestep_end
[../]
[./darcy_x]
type = PorousFlowDarcyVelocityComponent
variable = darcy_x
gravity = '0 0 -10E-6'
component = x
[../]
[./darcy_y]
type = PorousFlowDarcyVelocityComponent
variable = darcy_y
gravity = '0 0 -10E-6'
component = y
[../]
[./darcy_z]
type = PorousFlowDarcyVelocityComponent
variable = darcy_z
gravity = '0 0 -10E-6'
component = z
[../]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
execute_on = timestep_end
[../]
[./stress_xx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xx
index_i = 0
index_j = 0
execute_on = timestep_end
[../]
[./stress_xy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xy
index_i = 0
index_j = 1
execute_on = timestep_end
[../]
[./stress_xz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_xz
index_i = 0
index_j = 2
execute_on = timestep_end
[../]
[./stress_yx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yx
index_i = 1
index_j = 0
execute_on = timestep_end
[../]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
execute_on = timestep_end
[../]
[./stress_yz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yz
index_i = 1
index_j = 2
execute_on = timestep_end
[../]
[./stress_zx]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zx
index_i = 2
index_j = 0
execute_on = timestep_end
[../]
[./stress_zy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zy
index_i = 2
index_j = 1
execute_on = timestep_end
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 2
index_j = 2
execute_on = timestep_end
[../]
[./total_strain_xx]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_xx
index_i = 0
index_j = 0
execute_on = timestep_end
[../]
[./total_strain_xy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_xy
index_i = 0
index_j = 1
execute_on = timestep_end
[../]
[./total_strain_xz]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_xz
index_i = 0
index_j = 2
execute_on = timestep_end
[../]
[./total_strain_yx]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_yx
index_i = 1
index_j = 0
execute_on = timestep_end
[../]
[./total_strain_yy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_yy
index_i = 1
index_j = 1
execute_on = timestep_end
[../]
[./total_strain_yz]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_yz
index_i = 1
index_j = 2
execute_on = timestep_end
[../]
[./total_strain_zx]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_zx
index_i = 2
index_j = 0
execute_on = timestep_end
[../]
[./total_strain_zy]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_zy
index_i = 2
index_j = 1
execute_on = timestep_end
[../]
[./total_strain_zz]
type = RankTwoAux
rank_two_tensor = total_strain
variable = total_strain_zz
index_i = 2
index_j = 2
execute_on = timestep_end
[../]
[./perm_xx]
type = PorousFlowPropertyAux
property = permeability
variable = perm_xx
row = 0
column = 0
execute_on = timestep_end
[../]
[./perm_yy]
type = PorousFlowPropertyAux
property = permeability
variable = perm_yy
row = 1
column = 1
execute_on = timestep_end
[../]
[./perm_zz]
type = PorousFlowPropertyAux
property = permeability
variable = perm_zz
row = 2
column = 2
execute_on = timestep_end
[../]
[./mc_shear]
type = MaterialStdVectorAux
index = 0
property = mc_plastic_internal_parameter
variable = mc_shear
execute_on = timestep_end
[../]
[./mc_tensile]
type = MaterialStdVectorAux
index = 1
property = mc_plastic_internal_parameter
variable = mc_tensile
execute_on = timestep_end
[../]
[./wp_shear]
type = MaterialStdVectorAux
index = 0
property = wp_plastic_internal_parameter
variable = wp_shear
execute_on = timestep_end
[../]
[./wp_tensile]
type = MaterialStdVectorAux
index = 1
property = wp_plastic_internal_parameter
variable = wp_tensile
execute_on = timestep_end
[../]
[./mc_shear_f]
type = MaterialStdVectorAux
index = 6
property = mc_plastic_yield_function
variable = mc_shear_f
execute_on = timestep_end
[../]
[./mc_tensile_f]
type = MaterialStdVectorAux
index = 0
property = mc_plastic_yield_function
variable = mc_tensile_f
execute_on = timestep_end
[../]
[./wp_shear_f]
type = MaterialStdVectorAux
index = 0
property = wp_plastic_yield_function
variable = wp_shear_f
execute_on = timestep_end
[../]
[./wp_tensile_f]
type = MaterialStdVectorAux
index = 1
property = wp_plastic_yield_function
variable = wp_tensile_f
execute_on = timestep_end
[../]
[]
[BCs]
[./no_x]
type = DirichletBC
variable = disp_x
boundary = 'xmin xmax'
value = 0.0
[../]
[./no_y]
type = DirichletBC
variable = disp_y
boundary = 'ymin ymax'
value = 0.0
[../]
[./no_z]
type = DirichletBC
variable = disp_z
boundary = zmin
value = 0.0
[../]
[./no_wc_x]
type = DirichletBC
variable = wc_x
boundary = 'ymin ymax'
value = 0.0
[../]
[./no_wc_y]
type = DirichletBC
variable = wc_y
boundary = 'xmin xmax'
value = 0.0
[../]
[./fix_porepressure]
type = FunctionDirichletBC
variable = porepressure
boundary = 'ymin ymax xmax'
function = ini_pp
[../]
[./roof_porepressure]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
pt_vals = '-1E3 1E3'
multipliers = '-1 1'
fluid_phase = 0
flux_function = roof_conductance
boundary = roof
[../]
[./roof_bcs]
type = StickyBC
variable = disp_z
min_value = -3.0
boundary = roof
[../]
[]
[Functions]
[./ini_pp]
type = ParsedFunction
vars = 'bulk p0 g rho0'
vals = '2E3 0.0 1E-5 1E3'
value = '-bulk*log(exp(-p0/bulk)+g*rho0*z/bulk)'
[../]
[./ini_xx]
type = ParsedFunction
vars = 'bulk p0 g rho0 biot'
vals = '2E3 0.0 1E-5 1E3 0.7'
value = '0.8*(2500*10E-6*z+biot*(-bulk*log(exp(-p0/bulk)+g*rho0*z/bulk)))'
[../]
[./ini_zz]
type = ParsedFunction
vars = 'bulk p0 g rho0 biot'
vals = '2E3 0.0 1E-5 1E3 0.7'
value = '2500*10E-6*z+biot*(-bulk*log(exp(-p0/bulk)+g*rho0*z/bulk))'
[../]
[./excav_sideways]
type = ParsedFunction
vars = 'end_t ymin ymax minval maxval slope'
vals = '0.5 0 1000.0 1E-9 1 60'
# excavation face at ymin+(ymax-ymin)*min(t/end_t,1)
# slope is the distance over which the modulus reduces from maxval to minval
value = 'if(y<ymin+(ymax-ymin)*min(t/end_t,1),minval,if(y<ymin+(ymax-ymin)*min(t/end_t,1)+slope,minval+(maxval-minval)*(y-(ymin+(ymax-ymin)*min(t/end_t,1)))/slope,maxval))'
[../]
[./density_sideways]
type = ParsedFunction
vars = 'end_t ymin ymax minval maxval'
vals = '0.5 0 1000.0 0 2500'
value = 'if(y<ymin+(ymax-ymin)*min(t/end_t,1),minval,maxval)'
[../]
[./roof_conductance]
type = ParsedFunction
vars = 'end_t ymin ymax maxval minval'
vals = '0.5 0 1000.0 1E7 0'
value = 'if(y<ymin+(ymax-ymin)*min(t/end_t,1),maxval,minval)'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1 # MPa^-1
[../]
[./mc_coh_strong_harden]
type = TensorMechanicsHardeningExponential
value_0 = 1.99 # MPa
value_residual = 2.01 # MPa
rate = 1.0
[../]
[./mc_fric]
type = TensorMechanicsHardeningConstant
value = 0.61 # 35deg
[../]
[./mc_dil]
type = TensorMechanicsHardeningConstant
value = 0.15 # 8deg
[../]
[./mc_tensile_str_strong_harden]
type = TensorMechanicsHardeningExponential
value_0 = 1.0 # MPa
value_residual = 1.0 # MPa
rate = 1.0
[../]
[./mc_compressive_str]
type = TensorMechanicsHardeningCubic
value_0 = 100 # Large!
value_residual = 100
internal_limit = 0.1
[../]
[./wp_coh_harden]
type = TensorMechanicsHardeningCubic
value_0 = 0.05
value_residual = 0.05
internal_limit = 10
[../]
[./wp_tan_fric]
type = TensorMechanicsHardeningConstant
value = 0.26 # 15deg
[../]
[./wp_tan_dil]
type = TensorMechanicsHardeningConstant
value = 0.18 # 10deg
[../]
[./wp_tensile_str_harden]
type = TensorMechanicsHardeningCubic
value_0 = 0.05
value_residual = 0.05
internal_limit = 10
[../]
[./wp_compressive_str_soften]
type = TensorMechanicsHardeningCubic
value_0 = 100
value_residual = 1
internal_limit = 1.0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E3
density0 = 1000
thermal_expansion = 0
viscosity = 3.5E-17
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity_bulk]
type = PorousFlowPorosity
fluid = true
mechanical = true
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16'
ensure_positive = true
porosity_zero = 0.02
solid_bulk = 5.3333E3
[../]
[./porosity_excav]
type = PorousFlowPorosityConst
block = 1
porosity = 1.0
[../]
[./permeability_bulk]
type = PorousFlowPermeabilityKozenyCarman
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16'
poroperm_function = kozeny_carman_phi0
k0 = 1E-15
phi0 = 0.02
n = 2
m = 2
[../]
[./permeability_excav]
type = PorousFlowPermeabilityConst
block = 1
permeability = '0 0 0 0 0 0 0 0 0'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 4
s_res = 0.4
sum_s_res = 0.4
phase = 0
[../]
[./elasticity_tensor_0]
type = ComputeLayeredCosseratElasticityTensor
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16'
young = 8E3 # MPa
poisson = 0.25
layer_thickness = 1.0
joint_normal_stiffness = 1E9 # huge
joint_shear_stiffness = 1E3 # MPa
[../]
[./elasticity_tensor_1]
type = ComputeLayeredCosseratElasticityTensor
block = 1
young = 8E3 # MPa
poisson = 0.25
layer_thickness = 1.0
joint_normal_stiffness = 1E9 # huge
joint_shear_stiffness = 1E3 # MPa
elasticity_tensor_prefactor = excav_sideways
[../]
[./strain]
type = ComputeCosseratIncrementalSmallStrain
eigenstrain_names = ini_stress
[../]
[./ini_stress]
type = ComputeEigenstrainFromInitialStress
eigenstrain_name = ini_stress
initial_stress = 'ini_xx 0 0 0 ini_xx 0 0 0 ini_zz'
[../]
[./stress_0]
type = ComputeMultipleInelasticCosseratStress
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16'
inelastic_models = 'mc wp'
cycle_models = true
relative_tolerance = 2.0
absolute_tolerance = 1E6
max_iterations = 1
tangent_operator = nonlinear
perform_finite_strain_rotations = false
[../]
[./stress_1]
type = ComputeMultipleInelasticCosseratStress
block = 1
inelastic_models = ''
relative_tolerance = 2.0
absolute_tolerance = 1E6
max_iterations = 1
tangent_operator = nonlinear
perform_finite_strain_rotations = false
[../]
[./mc]
type = CappedMohrCoulombCosseratStressUpdate
warn_about_precision_loss = false
host_youngs_modulus = 8E3
host_poissons_ratio = 0.25
base_name = mc
tensile_strength = mc_tensile_str_strong_harden
compressive_strength = mc_compressive_str
cohesion = mc_coh_strong_harden
friction_angle = mc_fric
dilation_angle = mc_dil
max_NR_iterations = 100000
smoothing_tol = 0.1 # MPa # Must be linked to cohesion
yield_function_tol = 1E-9 # MPa. this is essentially the lowest possible without lots of precision loss
perfect_guess = true
min_step_size = 1.0
[../]
[./wp]
type = CappedWeakPlaneCosseratStressUpdate
warn_about_precision_loss = false
base_name = wp
cohesion = wp_coh_harden
tan_friction_angle = wp_tan_fric
tan_dilation_angle = wp_tan_dil
tensile_strength = wp_tensile_str_harden
compressive_strength = wp_compressive_str_soften
max_NR_iterations = 10000
tip_smoother = 0.05
smoothing_tol = 0.05 # MPa # Note, this must be tied to cohesion, otherwise get no possible return at cone apex
yield_function_tol = 1E-11 # MPa. this is essentially the lowest possible without lots of precision loss
perfect_guess = true
min_step_size = 1.0E-3
[../]
[./undrained_density_0]
type = GenericConstantMaterial
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16'
prop_names = density
prop_values = 2500
[../]
[./undrained_density_1]
type = GenericFunctionMaterial
block = 1
prop_names = density
prop_values = density_sideways
[../]
[]
[Preconditioning]
[./SMP]
type = SMP
full = true
[]
[]
[Postprocessors]
[./min_roof_disp]
type = NodalExtremeValue
boundary = roof
value_type = min
variable = disp_z
[../]
[./min_roof_pp]
type = NodalExtremeValue
boundary = roof
value_type = min
variable = porepressure
[../]
[./min_surface_disp]
type = NodalExtremeValue
boundary = zmax
value_type = min
variable = disp_z
[../]
[./min_surface_pp]
type = NodalExtremeValue
boundary = zmax
value_type = min
variable = porepressure
[../]
[./max_perm_zz]
type = ElementExtremeValue
block = '2 3 4 5 6 7 8 9 10 11 12 13 14 15 16'
variable = perm_zz
[../]
[]
[Executioner]
type = Transient
solve_type = 'NEWTON'
petsc_options = '-snes_converged_reason'
# best overall
# petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
# petsc_options_value = ' lu mumps'
# best if you do not have mumps:
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu superlu_dist'
# best if you do not have mumps or superlu_dist:
#petsc_options_iname = '-pc_type -pc_asm_overlap -sub_pc_type -ksp_type -ksp_gmres_restart'
#petsc_options_value = ' asm 2 lu gmres 200'
# very basic:
#petsc_options_iname = '-pc_type -ksp_type -ksp_gmres_restart'
#petsc_options_value = ' bjacobi gmres 200'
line_search = bt
nl_abs_tol = 1e-3
nl_rel_tol = 1e-5
l_max_its = 200
nl_max_its = 30
start_time = 0.0
dt = 0.014706
end_time = 0.014706 #0.5
[]
[Outputs]
interval = 1
print_linear_residuals = true
exodus = true
csv = true
console = true
[]
modules/porous_flow/test/tests/poro_elasticity/mandel_constM.i
# Mandel's problem of consolodation of a drained medium
#
# A sample is in plane strain.
# -a <= x <= a
# -b <= y <= b
# It is squashed with constant force by impermeable, frictionless plattens on its top and bottom surfaces (at y=+/-b)
# Fluid is allowed to leak out from its sides (at x=+/-a)
# The porepressure within the sample is monitored.
#
# As is common in the literature, this is simulated by
# considering the quarter-sample, 0<=x<=a and 0<=y<=b, with
# impermeable, roller BCs at x=0 and y=0 and y=b.
# Porepressure is fixed at zero on x=a.
# Porepressure and displacement are initialised to zero.
# Then the top (y=b) is moved downwards with prescribed velocity,
# so that the total force that is inducing this downwards velocity
# is fixed. The velocity is worked out by solving Mandel's problem
# analytically, and the total force is monitored in the simulation
# to check that it indeed remains constant.
#
# Here are the problem's parameters, and their values:
# Soil width. a = 1
# Soil height. b = 0.1
# Soil's Lame lambda. la = 0.5
# Soil's Lame mu, which is also the Soil's shear modulus. mu = G = 0.75
# Soil bulk modulus. K = la + 2*mu/3 = 1
# Drained Poisson ratio. nu = (3K - 2G)/(6K + 2G) = 0.2
# Soil bulk compliance. 1/K = 1
# Fluid bulk modulus. Kf = 8
# Fluid bulk compliance. 1/Kf = 0.125
# Soil initial porosity. phi0 = 0.1
# Biot coefficient. alpha = 0.6
# Biot modulus. M = 1/(phi0/Kf + (alpha - phi0)(1 - alpha)/K) = 4.705882
# Undrained bulk modulus. Ku = K + alpha^2*M = 2.694118
# Undrained Poisson ratio. nuu = (3Ku - 2G)/(6Ku + 2G) = 0.372627
# Skempton coefficient. B = alpha*M/Ku = 1.048035
# Fluid mobility (soil permeability/fluid viscosity). k = 1.5
# Consolidation coefficient. c = 2*k*B^2*G*(1-nu)*(1+nuu)^2/9/(1-nuu)/(nuu-nu) = 3.821656
# Normal stress on top. F = 1
#
# The solution for porepressure and displacements is given in
# AHD Cheng and E Detournay "A direct boundary element method for plane strain poroelasticity" International Journal of Numerical and Analytical Methods in Geomechanics 12 (1988) 551-572.
# The solution involves complicated infinite series, so I shall not write it here
[Mesh]
type = GeneratedMesh
dim = 3
nx = 10
ny = 1
nz = 1
xmin = 0
xmax = 1
ymin = 0
ymax = 0.1
zmin = 0
zmax = 1
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.8
alpha = 1e-5
[../]
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./roller_xmin]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left'
[../]
[./roller_ymin]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom'
[../]
[./plane_strain]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'back front'
[../]
[./xmax_drained]
type = DirichletBC
variable = porepressure
value = 0
boundary = right
[../]
[./top_velocity]
type = FunctionDirichletBC
variable = disp_y
function = top_velocity
boundary = top
[../]
[]
[Functions]
[./top_velocity]
type = PiecewiseLinear
x = '0 0.002 0.006 0.014 0.03 0.046 0.062 0.078 0.094 0.11 0.126 0.142 0.158 0.174 0.19 0.206 0.222 0.238 0.254 0.27 0.286 0.302 0.318 0.334 0.35 0.366 0.382 0.398 0.414 0.43 0.446 0.462 0.478 0.494 0.51 0.526 0.542 0.558 0.574 0.59 0.606 0.622 0.638 0.654 0.67 0.686 0.702'
y = '-0.041824842 -0.042730269 -0.043412712 -0.04428867 -0.045509181 -0.04645965 -0.047268246 -0.047974749 -0.048597109 -0.0491467 -0.049632388 -0.050061697 -0.050441198 -0.050776675 -0.051073238 -0.0513354 -0.051567152 -0.051772022 -0.051953128 -0.052113227 -0.052254754 -0.052379865 -0.052490464 -0.052588233 -0.052674662 -0.052751065 -0.052818606 -0.052878312 -0.052931093 -0.052977751 -0.053018997 -0.053055459 -0.053087691 -0.053116185 -0.053141373 -0.05316364 -0.053183324 -0.053200724 -0.053216106 -0.053229704 -0.053241725 -0.053252351 -0.053261745 -0.053270049 -0.053277389 -0.053283879 -0.053289615'
[../]
[]
[AuxVariables]
[./stress_yy]
order = CONSTANT
family = MONOMIAL
[../]
[./tot_force]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./stress_yy]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_yy
index_i = 1
index_j = 1
[../]
[./tot_force]
type = ParsedAux
args = 'stress_yy porepressure'
execute_on = timestep_end
variable = tot_force
function = '-stress_yy+0.6*porepressure'
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
component = 2
variable = disp_z
[../]
[./poro_vol_exp]
type = PorousFlowMassVolumetricExpansion
variable = porepressure
fluid_component = 0
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = porepressure
[../]
[./flux]
type = PorousFlowAdvectiveFlux
variable = porepressure
gravity = '0 0 0'
fluid_component = 0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 8
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '0.5 0.75'
# bulk modulus is lambda + 2*mu/3 = 0.5 + 2*0.75/3 = 1
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityHMBiotModulus
porosity_zero = 0.1
biot_coefficient = 0.6
solid_bulk = 1
constant_fluid_bulk_modulus = 8
constant_biot_modulus = 4.7058823529
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.5 0 0 0 1.5 0 0 0 1.5'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0 # unimportant in this fully-saturated situation
phase = 0
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = csv
point = '0.0 0 0'
variable = porepressure
[../]
[./p1]
type = PointValue
outputs = csv
point = '0.1 0 0'
variable = porepressure
[../]
[./p2]
type = PointValue
outputs = csv
point = '0.2 0 0'
variable = porepressure
[../]
[./p3]
type = PointValue
outputs = csv
point = '0.3 0 0'
variable = porepressure
[../]
[./p4]
type = PointValue
outputs = csv
point = '0.4 0 0'
variable = porepressure
[../]
[./p5]
type = PointValue
outputs = csv
point = '0.5 0 0'
variable = porepressure
[../]
[./p6]
type = PointValue
outputs = csv
point = '0.6 0 0'
variable = porepressure
[../]
[./p7]
type = PointValue
outputs = csv
point = '0.7 0 0'
variable = porepressure
[../]
[./p8]
type = PointValue
outputs = csv
point = '0.8 0 0'
variable = porepressure
[../]
[./p9]
type = PointValue
outputs = csv
point = '0.9 0 0'
variable = porepressure
[../]
[./p99]
type = PointValue
outputs = csv
point = '1 0 0'
variable = porepressure
[../]
[./xdisp]
type = PointValue
outputs = csv
point = '1 0.1 0'
variable = disp_x
[../]
[./ydisp]
type = PointValue
outputs = csv
point = '1 0.1 0'
variable = disp_y
[../]
[./total_downwards_force]
type = ElementAverageValue
outputs = csv
variable = tot_force
[../]
[./dt]
type = FunctionValuePostprocessor
outputs = console
function = if(0.15*t<0.01,0.15*t,0.01)
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu 1E-14 1E-10 10000'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 0.7
[./TimeStepper]
type = PostprocessorDT
postprocessor = dt
dt = 0.001
[../]
[]
[Outputs]
execute_on = 'timestep_end'
file_base = mandel_constM
[./csv]
interval = 3
type = CSV
[../]
[]
modules/porous_flow/test/tests/heterogeneous_materials/constant_poroperm2.i
# Assign porosity and permeability variables from constant AuxVariables to create
# a heterogeneous model
[Mesh]
type = GeneratedMesh
dim = 3
nx = 3
ny = 3
nz = 3
xmin = 1
xmax = 4
ymin = 1
ymax = 4
zmin = 1
zmax = 4
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 -10'
[]
[Variables]
[./ppwater]
initial_condition = 1e6
[../]
[]
[AuxVariables]
[./poro]
family = MONOMIAL
order = CONSTANT
[../]
[./permxx]
family = MONOMIAL
order = CONSTANT
[../]
[./permxy]
family = MONOMIAL
order = CONSTANT
[../]
[./permxz]
family = MONOMIAL
order = CONSTANT
[../]
[./permyx]
family = MONOMIAL
order = CONSTANT
[../]
[./permyy]
family = MONOMIAL
order = CONSTANT
[../]
[./permyz]
family = MONOMIAL
order = CONSTANT
[../]
[./permzx]
family = MONOMIAL
order = CONSTANT
[../]
[./permzy]
family = MONOMIAL
order = CONSTANT
[../]
[./permzz]
family = MONOMIAL
order = CONSTANT
[../]
[./poromat]
family = MONOMIAL
order = CONSTANT
[../]
[./permxxmat]
family = MONOMIAL
order = CONSTANT
[../]
[./permxymat]
family = MONOMIAL
order = CONSTANT
[../]
[./permxzmat]
family = MONOMIAL
order = CONSTANT
[../]
[./permyxmat]
family = MONOMIAL
order = CONSTANT
[../]
[./permyymat]
family = MONOMIAL
order = CONSTANT
[../]
[./permyzmat]
family = MONOMIAL
order = CONSTANT
[../]
[./permzxmat]
family = MONOMIAL
order = CONSTANT
[../]
[./permzymat]
family = MONOMIAL
order = CONSTANT
[../]
[./permzzmat]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./poromat]
type = PorousFlowPropertyAux
property = porosity
variable = poromat
[../]
[./permxxmat]
type = PorousFlowPropertyAux
property = permeability
variable = permxxmat
column = 0
row = 0
[../]
[./permxymat]
type = PorousFlowPropertyAux
property = permeability
variable = permxymat
column = 1
row = 0
[../]
[./permxzmat]
type = PorousFlowPropertyAux
property = permeability
variable = permxzmat
column = 2
row = 0
[../]
[./permyxmat]
type = PorousFlowPropertyAux
property = permeability
variable = permyxmat
column = 0
row = 1
[../]
[./permyymat]
type = PorousFlowPropertyAux
property = permeability
variable = permyymat
column = 1
row = 1
[../]
[./permyzmat]
type = PorousFlowPropertyAux
property = permeability
variable = permyzmat
column = 2
row = 1
[../]
[./permzxmat]
type = PorousFlowPropertyAux
property = permeability
variable = permzxmat
column = 0
row = 2
[../]
[./permzymat]
type = PorousFlowPropertyAux
property = permeability
variable = permzymat
column = 1
row = 2
[../]
[./permzzmat]
type = PorousFlowPropertyAux
property = permeability
variable = permzzmat
column = 2
row = 2
[../]
[]
[ICs]
[./poro]
type = RandomIC
seed = 0
variable = poro
max = 0.5
min = 0.1
[../]
[./permxx]
type = FunctionIC
function = permxx
variable = permxx
[../]
[./permxy]
type = FunctionIC
function = permxy
variable = permxy
[../]
[./permxz]
type = FunctionIC
function = permxz
variable = permxz
[../]
[./permyx]
type = FunctionIC
function = permyx
variable = permyx
[../]
[./permyy]
type = FunctionIC
function = permyy
variable = permyy
[../]
[./permyz]
type = FunctionIC
function = permyz
variable = permyz
[../]
[./permzx]
type = FunctionIC
function = permzx
variable = permzx
[../]
[./permzy]
type = FunctionIC
function = permzy
variable = permzy
[../]
[./permzz]
type = FunctionIC
function = permzz
variable = permzz
[../]
[]
[Functions]
[./permxx]
type = ParsedFunction
value = '(x*x)*1e-11'
[../]
[./permxy]
type = ParsedFunction
value = '(x*y)*1e-11'
[../]
[./permxz]
type = ParsedFunction
value = '(x*z)*1e-11'
[../]
[./permyx]
type = ParsedFunction
value = '(y*x)*1e-11'
[../]
[./permyy]
type = ParsedFunction
value = '(y*y)*1e-11'
[../]
[./permyz]
type = ParsedFunction
value = '(y*z)*1e-11'
[../]
[./permzx]
type = ParsedFunction
value = '(z*x)*1e-11'
[../]
[./permzy]
type = ParsedFunction
value = '(z*y)*1e-11'
[../]
[./permzz]
type = ParsedFunction
value = '(z*z)*1e-11'
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
variable = ppwater
[../]
[./flux0]
type = PorousFlowAdvectiveFlux
variable = ppwater
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9
density0 = 1000
viscosity = 1e-3
thermal_expansion = 0
cv = 2
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = ppwater
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = poro
[../]
[./permeability]
type = PorousFlowPermeabilityConstFromVar
perm_xx = permxx
perm_xy = permxy
perm_xz = permxz
perm_yx = permyx
perm_yy = permyy
perm_yz = permyz
perm_zx = permzx
perm_zy = permzy
perm_zz = permzz
[../]
[./relperm_water]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[Postprocessors]
[./mass_ph0]
type = PorousFlowFluidMass
fluid_component = 0
execute_on = 'initial timestep_end'
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol'
petsc_options_value = 'bcgs bjacobi 1E-12 1E-10'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 100
dt = 100
[]
[Outputs]
execute_on = 'initial timestep_end'
exodus = true
perf_graph = true
[]
modules/porous_flow/test/tests/poroperm/poro_hm.i
# Test that porosity is correctly calculated.
# Porosity = biot + (phi0 - biot) * exp(-vol_strain + (biot - 1) / solid_bulk * (porepressure - ref_pressure))
# The parameters used are:
# biot = 0.7
# phi0 = 0.5
# vol_strain = 0.5
# solid_bulk = 0.3
# porepressure = 2
# ref_pressure = 3
# which yield porosity = 0.370255745860
[Mesh]
type = GeneratedMesh
dim = 3
[]
[GlobalParams]
PorousFlowDictator = dictator
displacements = 'disp_x disp_y disp_z'
biot_coefficient = 0.7
[]
[Variables]
[./porepressure]
initial_condition = 2
[../]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[]
[ICs]
[./disp_x]
type = FunctionIC
function = '0.5 * x'
variable = disp_x
[../]
[]
[Kernels]
[./dummy_p]
type = TimeDerivative
variable = porepressure
[../]
[./dummy_x]
type = TimeDerivative
variable = disp_x
[../]
[./dummy_y]
type = TimeDerivative
variable = disp_y
[../]
[./dummy_z]
type = TimeDerivative
variable = disp_z
[../]
[]
[AuxVariables]
[./porosity]
order = CONSTANT
family = MONOMIAL
[../]
[]
[AuxKernels]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
[../]
[]
[Postprocessors]
[./porosity]
type = PointValue
variable = porosity
point = '0 0 0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = 3
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
ensure_positive = false
porosity_zero = 0.5
solid_bulk = 0.3
reference_porepressure = 3
[../]
[]
[Executioner]
solve_type = Newton
type = Transient
num_steps = 1
[]
[Outputs]
csv = true
[]
modules/porous_flow/test/tests/chemistry/except8.i
# Exception test.
# Incorrect number of reactive surface areas
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = Diffusion
variable = a
[../]
[./b]
type = Diffusion
variable = b
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 1E-6
[../]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'a b'
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = 'a b'
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = '1 1'
reactions = '1 1'
specific_reactive_surface_area = '1.0 1.0'
kinetic_rate_constant = '1.0e-8'
activation_energy = '1.5e4'
molar_volume = 1
[../]
[./mineral]
type = PorousFlowAqueousPreDisMineral
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/chemistry/precipitation_porosity_change.i
# Test to illustrate porosity evolution due to precipitation
#
# The precipitation reaction
#
# a <==> mineral
#
# produces "mineral". Using theta = 1 = eta, the DE that describes the prcipitation is
# reaction_rate = rate * surf_area * molar_vol (1 - (1 / eqm_const) * (act_coeff * a)^stoi)
#
# The following parameters are used
#
# T_ref = 0.5 K
# T = 1 K
# activation_energy = 3 J/mol
# gas_constant = 6 J/(mol K)
# kinetic_rate_at_ref_T = 0.60653 mol/(m^2 s)
# These give rate = 0.60653 * exp(1/2) = 1 mol/(m^2 s)
#
# surf_area = 0.5 m^2/L
# molar_volume = 2 L/mol
# These give rate * surf_area * molar_vol = 1 s^-1
#
# equilibrium_constant = 0.5 (dimensionless)
# primary_activity_coefficient = 2 (dimensionless)
# stoichiometry = 1 (dimensionless)
# This means that 1 - (1 / eqm_const) * (act_coeff * a)^stoi = 1 - 4 a, which is negative (ie precipitation) for a > 0.25
#
# a is held fixed at 0.5, so
# reaction_rate = - (1 - 2) = 1
#
# The mineral volume fraction evolves according to
# Mineral = mineral_old + dt * porosity_old * reaction_rate = mineral_old + dt * porosity_old
#
# Porosity evolves according to
# porosity = porosity(t=0) - (mineral - mineral(t=0))
# = porosity(t=0) - (mineral_old + dt * porosity_old * reaction_rate - mineral(t=0))
#
# Specifically:
# time mineral porosity
# 0 0.2 0.6
# 0.1 0.26 0.54
# 0.2 0.314 0.486
# 0.3 0.3626 0.4374
# 0.4 0.40634 0.39366
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./dummy]
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 0.5
[../]
[./a]
initial_condition = 0.5
[../]
[./ini_mineral_conc]
initial_condition = 0.2
[../]
[./mineral]
family = MONOMIAL
order = CONSTANT
[../]
[./porosity]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./mineral]
type = PorousFlowPropertyAux
property = mineral_concentration
mineral_species = 0
variable = mineral
[../]
[./porosity]
type = PorousFlowPropertyAux
property = porosity
variable = porosity
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./dummy]
type = Diffusion
variable = dummy
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = dummy
number_fluid_phases = 1
number_fluid_components = 2
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = 1
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = dummy
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = a
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = 2
reactions = 1
specific_reactive_surface_area = 0.5
kinetic_rate_constant = 0.6065306597126334
activation_energy = 3
molar_volume = 2
gas_constant = 6
reference_temperature = 0.5
[../]
[./mineral_conc]
type = PorousFlowAqueousPreDisMineral
initial_concentrations = ini_mineral_conc
[../]
[./porosity]
type = PorousFlowPorosity
chemical = true
porosity_zero = 0.6
reference_chemistry = ini_mineral_conc
initial_mineral_concentrations = ini_mineral_conc
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
nl_abs_tol = 1E-10
dt = 0.1
end_time = 0.4
[]
[Postprocessors]
[./porosity]
type = PointValue
point = '0 0 0'
variable = porosity
[../]
[./c]
type = PointValue
point = '0 0 0'
variable = mineral
[../]
[]
[Outputs]
csv = true
perf_graph = true
[]
modules/porous_flow/test/tests/mass_conservation/mass06.i
# Checking that the mass postprocessor correctly calculates the mass
# of each component in each phase, as well as the total mass of each
# component in all phases. Also tests that optional saturation threshold
# gives the correct mass
# 2phase, 2component, constant porosity
# saturation_threshold set to 0.6 for phase 1
[Mesh]
type = GeneratedMesh
dim = 1
nx = 10
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./sat]
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp0]
initial_condition = 1
[../]
[./massfrac_ph1_sp0]
initial_condition = 0
[../]
[]
[ICs]
[./pinit]
type = ConstantIC
value = 1
variable = pp
[../]
[./satinit]
type = FunctionIC
function = 1-x
variable = sat
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[./mass1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = sat
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp sat'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
pc = 0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 1
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 1
density0 = 0.1
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = pp
phase1_saturation = sat
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Postprocessors]
[./comp0_phase0_mass]
type = PorousFlowFluidMass
fluid_component = 0
phase = 0
[../]
[./comp0_phase1_mass]
type = PorousFlowFluidMass
fluid_component = 0
phase = 1
[../]
[./comp0_total_mass]
type = PorousFlowFluidMass
fluid_component = 0
[../]
[./comp1_phase0_mass]
type = PorousFlowFluidMass
fluid_component = 1
phase = 0
[../]
[./comp1_phase1_mass]
type = PorousFlowFluidMass
fluid_component = 1
phase = 1
[../]
[./comp1_total_mass]
type = PorousFlowFluidMass
fluid_component = 1
[../]
[./comp1_phase1_threshold_mass]
type = PorousFlowFluidMass
fluid_component = 1
phase = 1
saturation_threshold = 0.6
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
nl_abs_tol = 1e-16
dt = 1
end_time = 1
[]
[Outputs]
execute_on = 'timestep_end'
file_base = mass06
csv = true
[]
modules/porous_flow/test/tests/sinks/s05.i
# apply a half-gaussian sink flux and observe the correct behavior
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 1
xmin = 0
xmax = 1
ymin = 0
ymax = 1
zmin = 0
zmax = 2
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1.1
[../]
[]
[Variables]
[./pp]
[../]
[]
[ICs]
[./pp]
type = FunctionIC
variable = pp
function = y+1.4
[../]
[]
[Kernels]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = pp
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1.3
density0 = 1.1
thermal_expansion = 0
viscosity = 1.1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = pp
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-5 0 0 0 1E-5 0 0 0 1E-5'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[]
[AuxVariables]
[./flux_out]
[../]
[]
[Functions]
[./mass10]
type = ParsedFunction
value = 'vol*por*dens0*exp(pp/bulk)*if(pp>=0,1,pow(1+pow(-al*pp,1.0/(1-m)),-m))'
vars = 'vol por dens0 pp bulk al m'
vals = '0.25 0.1 1.1 p10 1.3 1.1 0.5'
[../]
[./rate10]
type = ParsedFunction
value = 'if(pp>center,fcn,fcn*exp(-0.5*(pp-center)*(pp-center)/sd/sd))'
vars = 'fcn pp center sd'
vals = '6 p10 0.9 0.5'
[../]
[./mass10_expect]
type = ParsedFunction
value = 'mass_prev-rate*area*dt'
vars = 'mass_prev rate area dt'
vals = 'm10_prev m10_rate 0.5 2E-3'
[../]
[./mass11]
type = ParsedFunction
value = 'vol*por*dens0*exp(pp/bulk)*if(pp>=0,1,pow(1+pow(-al*pp,1.0/(1-m)),-m))'
vars = 'vol por dens0 pp bulk al m'
vals = '0.25 0.1 1.1 p11 1.3 1.1 0.5'
[../]
[./rate11]
type = ParsedFunction
value = 'if(pp>center,fcn,fcn*exp(-0.5*(pp-center)*(pp-center)/sd/sd))'
vars = 'fcn pp center sd'
vals = '6 p11 0.9 0.5'
[../]
[./mass11_expect]
type = ParsedFunction
value = 'mass_prev-rate*area*dt'
vars = 'mass_prev rate area dt'
vals = 'm11_prev m11_rate 0.5 2E-3'
[../]
[]
[Postprocessors]
[./flux10]
type = PointValue
variable = flux_out
point = '1 0 0'
[../]
[./p00]
type = PointValue
point = '0 0 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./p10]
type = PointValue
point = '1 0 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./m10]
type = FunctionValuePostprocessor
function = mass10
execute_on = 'initial timestep_end'
[../]
[./m10_prev]
type = FunctionValuePostprocessor
function = mass10
execute_on = 'timestep_begin'
outputs = 'console'
[../]
[./m10_rate]
type = FunctionValuePostprocessor
function = rate10
execute_on = 'timestep_end'
[../]
[./m10_expect]
type = FunctionValuePostprocessor
function = mass10_expect
execute_on = 'timestep_end'
[../]
[./p01]
type = PointValue
point = '0 1 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./p11]
type = PointValue
point = '1 1 0'
variable = pp
execute_on = 'initial timestep_end'
[../]
[./m11]
type = FunctionValuePostprocessor
function = mass11
execute_on = 'initial timestep_end'
[../]
[./m11_prev]
type = FunctionValuePostprocessor
function = mass11
execute_on = 'timestep_begin'
outputs = 'console'
[../]
[./m11_rate]
type = FunctionValuePostprocessor
function = rate11
execute_on = 'timestep_end'
[../]
[./m11_expect]
type = FunctionValuePostprocessor
function = mass11_expect
execute_on = 'timestep_end'
[../]
[]
[BCs]
[./flux]
type = PorousFlowHalfGaussianSink
boundary = 'right'
max = 6
sd = 0.5
center = 0.9
variable = pp
use_mobility = false
use_relperm = false
fluid_phase = 0
flux_function = 1
save_in = flux_out
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_max_it -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = 'gmres asm lu 10000 NONZERO 2'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 2E-3
end_time = 6E-2
nl_rel_tol = 1E-12
nl_abs_tol = 1E-12
[]
[Outputs]
file_base = s05
[./console]
type = Console
execute_on = 'nonlinear linear'
interval = 5
[../]
[./csv]
type = CSV
execute_on = 'timestep_end'
interval = 3
[../]
[]
modules/porous_flow/examples/thm_example/2D.i
# Two phase, temperature-dependent, with mechanics, radial with fine mesh, constant injection of cold co2 into a overburden-reservoir-underburden containing mostly water
# species=0 is water
# species=1 is co2
# phase=0 is liquid, and since massfrac_ph0_sp0 = 1, this is all water
# phase=1 is gas, and since massfrac_ph1_sp0 = 0, this is all co2
#
# The mesh used below has very high resolution, so the simulation takes a long time to complete.
# Some suggested meshes of different resolution:
# nx=50, bias_x=1.2
# nx=100, bias_x=1.1
# nx=200, bias_x=1.05
# nx=400, bias_x=1.02
# nx=1000, bias_x=1.01
# nx=2000, bias_x=1.003
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2000
bias_x = 1.003
xmin = 0.1
xmax = 5000
ny = 1
ymin = 0
ymax = 11
[]
[Problem]
coord_type = RZ
[]
[GlobalParams]
displacements = 'disp_r disp_z'
PorousFlowDictator = dictator
gravity = '0 0 0'
biot_coefficient = 1.0
[]
[Variables]
[./pwater]
initial_condition = 18.3e6
[../]
[./sgas]
initial_condition = 0.0
[../]
[./temp]
initial_condition = 358
[../]
[./disp_r]
[../]
[]
[AuxVariables]
[./rate]
[../]
[./disp_z]
[../]
[./massfrac_ph0_sp0]
initial_condition = 1 # all H20 in phase=0
[../]
[./massfrac_ph1_sp0]
initial_condition = 0 # no H2O in phase=1
[../]
[./pgas]
family = MONOMIAL
order = FIRST
[../]
[./swater]
family = MONOMIAL
order = FIRST
[../]
[./stress_rr]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_tt]
order = CONSTANT
family = MONOMIAL
[../]
[./stress_zz]
order = CONSTANT
family = MONOMIAL
[../]
[]
[Kernels]
[./mass_water_dot]
type = PorousFlowMassTimeDerivative
fluid_component = 0
use_displaced_mesh = false
variable = pwater
[../]
[./flux_water]
type = PorousFlowAdvectiveFlux
fluid_component = 0
use_displaced_mesh = false
variable = pwater
[../]
[./mass_co2_dot]
type = PorousFlowMassTimeDerivative
fluid_component = 1
use_displaced_mesh = false
variable = sgas
[../]
[./flux_co2]
type = PorousFlowAdvectiveFlux
fluid_component = 1
use_displaced_mesh = false
variable = sgas
[../]
[./energy_dot]
type = PorousFlowEnergyTimeDerivative
use_displaced_mesh = false
variable = temp
[../]
[./advection]
type = PorousFlowHeatAdvection
use_displaced_mesh = false
variable = temp
[../]
[./conduction]
type = PorousFlowExponentialDecay
use_displaced_mesh = false
variable = temp
reference = 358
rate = rate
[../]
[./grad_stress_r]
type = StressDivergenceRZTensors
temperature = temp
thermal_eigenstrain_name = thermal_contribution
variable = disp_r
use_displaced_mesh = false
component = 0
[../]
[./poro_r]
type = PorousFlowEffectiveStressCoupling
variable = disp_r
use_displaced_mesh = false
component = 0
[../]
[]
[AuxKernels]
[./rate]
type = FunctionAux
variable = rate
execute_on = timestep_begin
function = decay_rate
[../]
[./pgas]
type = PorousFlowPropertyAux
property = pressure
phase = 1
variable = pgas
[../]
[./swater]
type = PorousFlowPropertyAux
property = saturation
phase = 0
variable = swater
[../]
[./stress_rr]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_rr
index_i = 0
index_j = 0
[../]
[./stress_tt]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_tt
index_i = 2
index_j = 2
[../]
[./stress_zz]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_zz
index_i = 1
index_j = 1
[../]
[]
[Functions]
[./decay_rate]
# Eqn(26) of the first paper of LaForce et al.
# Ka * (rho C)_a = 10056886.914
# h = 11
type = ParsedFunction
value = 'sqrt(10056886.914/t)/11.0'
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp pwater sgas disp_r'
number_fluid_phases = 2
number_fluid_components = 2
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
pc = 0
[../]
[]
[Modules]
[./FluidProperties]
[./water]
type = SimpleFluidProperties
bulk_modulus = 2.27e14
density0 = 970.0
viscosity = 0.3394e-3
cv = 4149.0
cp = 4149.0
porepressure_coefficient = 0.0
thermal_expansion = 0
[../]
[./co2]
type = SimpleFluidProperties
bulk_modulus = 2.27e14
density0 = 516.48
viscosity = 0.0393e-3
cv = 2920.5
cp = 2920.5
porepressure_coefficient = 0.0
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./ppss]
type = PorousFlow2PhasePS
phase0_porepressure = pwater
phase1_saturation = sgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph1_sp0'
[../]
[./water]
type = PorousFlowSingleComponentFluid
fp = water
phase = 0
[../]
[./gas]
type = PorousFlowSingleComponentFluid
fp = co2
phase = 1
[../]
[./porosity_reservoir]
type = PorousFlowPorosityConst
porosity = 0.2
[../]
[./permeability_reservoir]
type = PorousFlowPermeabilityConst
permeability = '2e-12 0 0 0 0 0 0 0 0'
[../]
[./relperm_liquid]
type = PorousFlowRelativePermeabilityCorey
n = 4
phase = 0
s_res = 0.200
sum_s_res = 0.405
[../]
[./relperm_gas]
type = PorousFlowRelativePermeabilityBC
phase = 1
s_res = 0.205
sum_s_res = 0.405
nw_phase = true
lambda = 2
[../]
[./thermal_conductivity_reservoir]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '0 0 0 0 1.320 0 0 0 0'
wet_thermal_conductivity = '0 0 0 0 3.083 0 0 0 0'
[../]
[./internal_energy_reservoir]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 1100
density = 2350.0
[../]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
shear_modulus = 6.0E9
poissons_ratio = 0.2
[../]
[./strain]
type = ComputeAxisymmetricRZSmallStrain
eigenstrain_names = 'thermal_contribution ini_stress'
[../]
[./ini_strain]
type = ComputeEigenstrainFromInitialStress
initial_stress = '-12.8E6 0 0 0 -51.3E6 0 0 0 -12.8E6'
eigenstrain_name = ini_stress
[../]
[./thermal_contribution]
type = ComputeThermalExpansionEigenstrain
temperature = temp
stress_free_temperature = 358
thermal_expansion_coeff = 5E-6
eigenstrain_name = thermal_contribution
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./eff_fluid_pressure]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[]
[BCs]
[./outer_pressure_fixed]
type = DirichletBC
boundary = right
value = 18.3e6
variable = pwater
[../]
[./outer_saturation_fixed]
type = DirichletBC
boundary = right
value = 0.0
variable = sgas
[../]
[./outer_temp_fixed]
type = DirichletBC
boundary = right
value = 358
variable = temp
[../]
[./fixed_outer_r]
type = DirichletBC
variable = disp_r
value = 0
boundary = right
[../]
[./co2_injection]
type = PorousFlowSink
boundary = left
variable = sgas
use_mobility = false
use_relperm = false
fluid_phase = 1
flux_function = 'min(t/100.0,1)*(-2.294001475)' # 5.0E5 T/year = 15.855 kg/s, over area of 2Pi*0.1*11
[../]
[./cold_co2]
type = DirichletBC
boundary = left
variable = temp
value = 294
[../]
[./cavity_pressure_x]
type = Pressure
boundary = left
variable = disp_r
component = 0
postprocessor = p_bh # note, this lags
use_displaced_mesh = false
[../]
[]
[Postprocessors]
[./p_bh]
type = PointValue
variable = pwater
point = '0.1 0 0'
execute_on = timestep_begin
use_displaced_mesh = false
[../]
[]
[VectorPostprocessors]
[./ptsuss]
type = LineValueSampler
use_displaced_mesh = false
start_point = '0.1 0 0'
end_point = '5000 0 0'
sort_by = x
num_points = 50000
outputs = csv
variable = 'pwater temp sgas disp_r stress_rr stress_tt'
[../]
[]
[Preconditioning]
active = 'mumps'
[./smp]
type = SMP
full = true
#petsc_options = '-snes_converged_reason -ksp_diagonal_scale -ksp_diagonal_scale_fix -ksp_gmres_modifiedgramschmidt -snes_linesearch_monitor'
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'gmres asm lu NONZERO 2 1E2 1E-5 500'
[../]
[./mumps]
type = SMP
full = true
petsc_options = '-snes_converged_reason -ksp_diagonal_scale -ksp_diagonal_scale_fix -ksp_gmres_modifiedgramschmidt -snes_linesearch_monitor'
petsc_options_iname = '-ksp_type -pc_type -pc_factor_mat_solver_package -pc_factor_shift_type -snes_rtol -snes_atol -snes_max_it'
petsc_options_value = 'gmres lu mumps NONZERO 1E-5 1E2 50'
[../]
[]
[Executioner]
type = Transient
solve_type = NEWTON
end_time = 1.5768e8
#dtmax = 1e6
[./TimeStepper]
type = IterationAdaptiveDT
dt = 1
growth_factor = 1.1
[../]
[]
[Outputs]
print_linear_residuals = false
sync_times = '3600 86400 2.592E6 1.5768E8'
perf_graph = true
exodus = true
[./csv]
type = CSV
sync_only = true
[../]
[]
modules/porous_flow/test/tests/chemistry/dissolution_limited_2phase.i
# Using a two-phase system (see dissolution_limited.i for the single-phase)
# The saturation and porosity are chosen so that the results are identical to dissolution_limited.i
#
# The dissolution reaction, with limited initial mineral concentration
#
# a <==> mineral
#
# produces "mineral". Using mineral_density = fluid_density, theta = 1 = eta, the DE is
#
# a' = -(mineral / (porosity * saturation))' = rate * surf_area * molar_vol (1 - (1 / eqm_const) * (act_coeff * a)^stoi)
#
# The following parameters are used
#
# T_ref = 0.5 K
# T = 1 K
# activation_energy = 3 J/mol
# gas_constant = 6 J/(mol K)
# kinetic_rate_at_ref_T = 0.60653 mol/(m^2 s)
# These give rate = 0.60653 * exp(1/2) = 1 mol/(m^2 s)
#
# surf_area = 0.5 m^2/L
# molar_volume = 2 L/mol
# These give rate * surf_area * molar_vol = 1 s^-1
#
# equilibrium_constant = 0.5 (dimensionless)
# primary_activity_coefficient = 2 (dimensionless)
# stoichiometry = 1 (dimensionless)
# This means that 1 - (1 / eqm_const) * (act_coeff * a)^stoi = 1 - 4 a, which is positive for a < 0.25, ie dissolution for a(t=0) < 0.25
#
# The solution of the DE is
# a = eqm_const / act_coeff + (a(t=0) - eqm_const / act_coeff) exp(-rate * surf_area * molar_vol * act_coeff * t / eqm_const)
# = 0.25 + (a(t=0) - 0.25) exp(-4 * t)
# c = c(t=0) - (a - a(t=0)) * porosity * saturation
#
# However, c(t=0) is small, so that the reaction only works until c=0, then a and c both remain fixed
#
# This test checks that (a + c / (porosity * saturation)) is time-independent, and that a follows the above solution, until c=0 and thereafter remains fixed.
#
# Aside:
# The exponential curve is not followed exactly because moose actually solves
# (a - a_old)/dt = rate * surf_area * molar_vol (1 - (1 / eqm_const) * (act_coeff * a)^stoi)
# which does not give an exponential exactly, except in the limit dt->0
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
initial_condition = 0.05
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 0.5
[../]
[./pressure0]
[../]
[./saturation1]
initial_condition = 0.25
[../]
[./b]
initial_condition = 0.123
[../]
[./ini_mineral_conc]
initial_condition = 0.015
[../]
[./mineral]
family = MONOMIAL
order = CONSTANT
[../]
[./should_be_static]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./mineral]
type = PorousFlowPropertyAux
property = mineral_concentration
mineral_species = 0
variable = mineral
[../]
[./should_be_static]
type = ParsedAux
args = 'mineral a'
function = 'a + mineral / 0.1'
variable = should_be_static
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./mass_a]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = a
[../]
[./pre_dis]
type = PorousFlowPreDis
variable = a
mineral_density = 1000
stoichiometry = 1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = a
number_fluid_phases = 2
number_fluid_components = 2
number_aqueous_kinetic = 1
aqueous_phase_number = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureConst
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9 # huge, so mimic chemical_reactions
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = 1
[../]
[./ppss]
type = PorousFlow2PhasePS
capillary_pressure = pc
phase0_porepressure = pressure0
phase1_saturation = saturation1
[../]
[./mass_frac]
type = PorousFlowMassFraction
mass_fraction_vars = 'b a'
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = a
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = 2
reactions = 1
specific_reactive_surface_area = 0.5
kinetic_rate_constant = 0.6065306597126334
activation_energy = 3
molar_volume = 2
gas_constant = 6
reference_temperature = 0.5
[../]
[./mineral_conc]
type = PorousFlowAqueousPreDisMineral
initial_concentrations = ini_mineral_conc
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.4
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
nl_abs_tol = 1E-10
dt = 0.01
end_time = 1
[]
[Postprocessors]
[./a]
type = PointValue
point = '0 0 0'
variable = a
[../]
[./should_be_static]
type = PointValue
point = '0 0 0'
variable = should_be_static
[../]
[]
[Outputs]
interval = 10
csv = true
perf_graph = true
[]
modules/porous_flow/test/tests/jacobian/mass05.i
# 2phase (PP)
# vanGenuchten, constant-bulk density for each phase, constant porosity, 3components (that exist in both phases)
# unsaturated
[Mesh]
type = GeneratedMesh
dim = 2
nx = 1
ny = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[./massfrac_ph0_sp0]
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp1]
[../]
[./massfrac_ph1_sp0]
[../]
[./massfrac_ph1_sp1]
[../]
[]
[ICs]
[./ppwater]
type = RandomIC
variable = ppwater
min = -1
max = 0
[../]
[./ppgas]
type = RandomIC
variable = ppgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 0.4
[../]
[./massfrac_ph0_sp1]
type = RandomIC
variable = massfrac_ph0_sp1
min = 0
max = 0.4
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 0.4
[../]
[./massfrac_ph1_sp1]
type = RandomIC
variable = massfrac_ph1_sp1
min = 0
max = 0.4
[../]
[]
[Kernels]
[./mass_sp0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = ppwater
[../]
[./mass_sp1]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = ppgas
[../]
[./mass_sp2]
type = PorousFlowMassTimeDerivative
fluid_component = 2
variable = massfrac_ph0_sp0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas massfrac_ph0_sp0'
number_fluid_phases = 2
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph0_sp1 massfrac_ph1_sp0 massfrac_ph1_sp1'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/poro_elasticity/terzaghi.i
# Terzaghi's problem of consolodation of a drained medium
#
# A saturated soil sample sits in a bath of water.
# It is constrained on its sides, and bottom.
# Its sides and bottom are also impermeable.
# Initially it is unstressed.
# A normal stress, q, is applied to the soil's top.
# The soil then slowly compresses as water is squeezed
# out from the sample from its top (the top BC for
# the porepressure is porepressure = 0).
#
# See, for example. Section 2.2 of the online manuscript
# Arnold Verruijt "Theory and Problems of Poroelasticity" Delft University of Technology 2013
# but note that the "sigma" in that paper is the negative
# of the stress in TensorMechanics
#
# Here are the problem's parameters, and their values:
# Soil height. h = 10
# Soil's Lame lambda. la = 2
# Soil's Lame mu, which is also the Soil's shear modulus. mu = 3
# Soil bulk modulus. K = la + 2*mu/3 = 4
# Soil confined compressibility. m = 1/(K + 4mu/3) = 0.125
# Soil bulk compliance. 1/K = 0.25
# Fluid bulk modulus. Kf = 8
# Fluid bulk compliance. 1/Kf = 0.125
# Fluid mobility (soil permeability/fluid viscosity). k = 1.5
# Soil initial porosity. phi0 = 0.1
# Biot coefficient. alpha = 0.6
# Soil initial storativity, which is the reciprocal of the initial Biot modulus. S = phi0/Kf + (alpha - phi0)(1 - alpha)/K = 0.0625
# Consolidation coefficient. c = k/(S + alpha^2 m) = 13.95348837
# Normal stress on top. q = 1
# Initial porepressure, resulting from instantaneous application of q, assuming corresponding instantaneous increase of porepressure (Note that this is calculated by MOOSE: we only need it for the analytical solution). p0 = alpha*m*q/(S + alpha^2 m) = 0.69767442
# Initial vertical displacement (down is positive), resulting from instantaneous application of q (Note this is calculated by MOOSE: we only need it for the analytical solution). uz0 = q*m*h*S/(S + alpha^2 m)
# Final vertical displacement (down in positive) (Note this is calculated by MOOSE: we only need it for the analytical solution). uzinf = q*m*h
#
# The solution for porepressure is
# P = 4*p0/\pi \sum_{k=1}^{\infty} \frac{(-1)^{k-1}}{2k-1} \cos ((2k-1)\pi z/(2h)) \exp(-(2k-1)^2 \pi^2 ct/(4 h^2))
# This series converges very slowly for ct/h^2 small, so in that domain
# P = p0 erf( (1-(z/h))/(2 \sqrt(ct/h^2)) )
#
# The degree of consolidation is defined as
# U = (uz - uz0)/(uzinf - uz0)
# where uz0 and uzinf are defined above, and
# uz = the vertical displacement of the top (down is positive)
# U = 1 - (8/\pi^2)\sum_{k=1}^{\infty} \frac{1}{(2k-1)^2} \exp(-(2k-1)^2 \pi^2 ct/(4 h^2))
#
# FINAL NOTE: The above solution assumes constant Biot Modulus.
# In porous_flow this is not true. Therefore the solution is
# a little different than in the paper. This test was therefore
# validated against MOOSE's poromechanics, which can choose either
# a constant Biot Modulus (which has been shown to agree with
# the analytic solution), or a non-constant Biot Modulus (which
# gives the same results as porous_flow).
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 1
nz = 10
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = 0
zmax = 10
[]
[GlobalParams]
displacements = 'disp_x disp_y disp_z'
PorousFlowDictator = dictator
block = 0
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'porepressure disp_x disp_y disp_z'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.8
alpha = 1
[../]
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[]
[BCs]
[./confinex]
type = DirichletBC
variable = disp_x
value = 0
boundary = 'left right'
[../]
[./confiney]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'bottom top'
[../]
[./basefixed]
type = DirichletBC
variable = disp_z
value = 0
boundary = back
[../]
[./topdrained]
type = DirichletBC
variable = porepressure
value = 0
boundary = front
[../]
[./topload]
type = NeumannBC
variable = disp_z
value = -1
boundary = front
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./poro_x]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
variable = disp_x
component = 0
[../]
[./poro_y]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
variable = disp_y
component = 1
[../]
[./poro_z]
type = PorousFlowEffectiveStressCoupling
biot_coefficient = 0.6
component = 2
variable = disp_z
[../]
[./poro_vol_exp]
type = PorousFlowMassVolumetricExpansion
variable = porepressure
fluid_component = 0
[../]
[./mass0]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = porepressure
[../]
[./flux]
type = PorousFlowAdvectiveFlux
variable = porepressure
gravity = '0 0 0'
fluid_component = 0
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 8
density0 = 1
thermal_expansion = 0
viscosity = 0.96
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '2 3'
# bulk modulus is lambda + 2*mu/3 = 2 + 2*3/3 = 4
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./eff_fluid_pressure_qp]
type = PorousFlowEffectiveFluidPressure
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./ppss]
type = PorousFlow1PhaseP
porepressure = porepressure
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosity
fluid = true
mechanical = true
ensure_positive = false
porosity_zero = 0.1
biot_coefficient = 0.6
solid_bulk = 4
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1.5 0 0 0 1.5 0 0 0 1.5'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityCorey
n = 0 # unimportant in this fully-saturated situation
phase = 0
[../]
[]
[Postprocessors]
[./p0]
type = PointValue
outputs = csv
point = '0 0 0'
variable = porepressure
use_displaced_mesh = false
[../]
[./p1]
type = PointValue
outputs = csv
point = '0 0 1'
variable = porepressure
use_displaced_mesh = false
[../]
[./p2]
type = PointValue
outputs = csv
point = '0 0 2'
variable = porepressure
use_displaced_mesh = false
[../]
[./p3]
type = PointValue
outputs = csv
point = '0 0 3'
variable = porepressure
use_displaced_mesh = false
[../]
[./p4]
type = PointValue
outputs = csv
point = '0 0 4'
variable = porepressure
use_displaced_mesh = false
[../]
[./p5]
type = PointValue
outputs = csv
point = '0 0 5'
variable = porepressure
use_displaced_mesh = false
[../]
[./p6]
type = PointValue
outputs = csv
point = '0 0 6'
variable = porepressure
use_displaced_mesh = false
[../]
[./p7]
type = PointValue
outputs = csv
point = '0 0 7'
variable = porepressure
use_displaced_mesh = false
[../]
[./p8]
type = PointValue
outputs = csv
point = '0 0 8'
variable = porepressure
use_displaced_mesh = false
[../]
[./p9]
type = PointValue
outputs = csv
point = '0 0 9'
variable = porepressure
use_displaced_mesh = false
[../]
[./p99]
type = PointValue
outputs = csv
point = '0 0 10'
variable = porepressure
use_displaced_mesh = false
[../]
[./zdisp]
type = PointValue
outputs = csv
point = '0 0 10'
variable = disp_z
use_displaced_mesh = false
[../]
[./dt]
type = FunctionValuePostprocessor
outputs = console
function = if(0.5*t<0.1,0.5*t,0.1)
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
start_time = 0
end_time = 10
[./TimeStepper]
type = PostprocessorDT
postprocessor = dt
dt = 0.0001
[../]
[]
[Outputs]
execute_on = 'timestep_end'
file_base = terzaghi
[./csv]
type = CSV
[../]
[]
modules/porous_flow/test/tests/jacobian/disp03.i
# Test the Jacobian of the dispersive contribution to the PorousFlowDisperiveFlux
# kernel by setting the diffusive component to zero (tortuosity = 0).
[Mesh]
type = GeneratedMesh
dim = 2
nx = 3
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./massfrac0]
[../]
[]
[ICs]
[./pp]
type = RandomIC
variable = pp
max = 2e1
min = 1e1
[../]
[./massfrac0]
type = RandomIC
variable = massfrac0
min = 0
max = 1
[../]
[]
[Kernels]
[./diff0]
type = PorousFlowDispersiveFlux
fluid_component = 0
variable = pp
gravity = '1 0 0'
disp_long = 0.2
disp_trans = 0.1
[../]
[./diff1]
type = PorousFlowDispersiveFlux
fluid_component = 1
variable = massfrac0
gravity = '1 0 0'
disp_long = 0.2
disp_trans = 0.1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1e7
density0 = 10
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temp]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac0'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./poro]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./diff]
type = PorousFlowDiffusivityConst
diffusion_coeff = '1e-2 1e-1'
tortuosity = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[]
[Preconditioning]
active = smp
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/chemistry/2species_equilibrium.i
# PorousFlow analogy of chemical_reactions/test/tests/aqueous_equilibrium/2species.i
#
# Simple equilibrium reaction example to illustrate the use of PorousFlowMassFractionAqueousEquilibriumChemistry
#
# In this example, two primary species a and b are transported by diffusion and convection
# from the left of the porous medium, reacting to form two equilibrium species pa2 and pab
# according to the equilibrium reaction:
#
# reactions = '2a = pa2 rate = 10^2
# a + b = pab rate = 10^-2'
#
[Mesh]
type = GeneratedMesh
dim = 2
nx = 10
[]
[Variables]
[./a]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = BoundingBoxIC
x1 = 0.0
y1 = 0.0
x2 = 1.0e-10
y2 = 1
inside = 1.0e-2
outside = 1.0e-10
[../]
[../]
[./b]
order = FIRST
family = LAGRANGE
[./InitialCondition]
type = BoundingBoxIC
x1 = 0.0
y1 = 0.0
x2 = 1.0e-10
y2 = 1
inside = 1.0e-2
outside = 1.0e-10
[../]
[../]
[]
[AuxVariables]
[./eqm_k0]
initial_condition = 1E2
[../]
[./eqm_k1]
initial_condition = 1E-2
[../]
[./pressure]
[../]
[./pa2]
family = MONOMIAL
order = CONSTANT
[../]
[./pab]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./pa2]
type = PorousFlowPropertyAux
property = secondary_concentration
secondary_species = 0
variable = pa2
[../]
[./pab]
type = PorousFlowPropertyAux
property = secondary_concentration
secondary_species = 1
variable = pab
[../]
[]
[ICs]
[./pressure]
type = FunctionIC
variable = pressure
function = 2-x
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Kernels]
[./mass_a]
type = PorousFlowMassTimeDerivative
fluid_component = 0
variable = a
[../]
[./flux_a]
type = PorousFlowFullySaturatedDarcyFlow
variable = a
fluid_component = 0
[../]
[./diff_a]
type = PorousFlowDispersiveFlux
variable = a
fluid_component = 0
disp_trans = 0
disp_long = 0
[../]
[./mass_b]
type = PorousFlowMassTimeDerivative
fluid_component = 1
variable = b
[../]
[./flux_b]
type = PorousFlowFullySaturatedDarcyFlow
variable = b
fluid_component = 1
[../]
[./diff_b]
type = PorousFlowDispersiveFlux
variable = b
fluid_component = 1
disp_trans = 0
disp_long = 0
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_equilibrium = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2e9 # huge, so mimic chemical_reactions
density0 = 1000
thermal_expansion = 0
viscosity = 1e-3
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFractionAqueousEquilibriumChemistry
mass_fraction_vars = 'a b'
num_reactions = 2
equilibrium_constants = 'eqm_k0 eqm_k1'
primary_activity_coefficients = '1 1'
secondary_activity_coefficients = '1 1'
reactions = '2 0
1 1'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./porosity]
type = PorousFlowPorosityConst
porosity = 0.2
[../]
[./permeability]
type = PorousFlowPermeabilityConst
# porous_flow permeability / porous_flow viscosity = chemical_reactions conductivity = 1E-4
permeability = '1E-7 0 0 0 1E-7 0 0 0 1E-7'
[../]
[./relp]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[./diff]
type = PorousFlowDiffusivityConst
# porous_flow diffusion_coeff * tortuousity * porosity = chemical_reactions diffusivity = 1E-4
diffusion_coeff = '5E-4 5E-4 5E-4'
tortuosity = 1.0
[../]
[]
[BCs]
[./a_left]
type = DirichletBC
variable = a
boundary = left
value = 1.0e-2
[../]
[./b_left]
type = DirichletBC
variable = b
boundary = left
value = 1.0e-2
[../]
[]
[Preconditioning]
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 10
end_time = 100
[]
[Outputs]
print_linear_residuals = true
exodus = true
perf_graph = true
[]
modules/porous_flow/test/tests/thm_rehbinder/fixed_outer_rz.i
# A version of fixed_outer.i that uses the RZ cylindrical coordinate system
[Mesh]
type = GeneratedMesh
dim = 2
nx = 40 # this is the r direction
ny = 1 # this is the height direction
xmin = 0.1
xmax = 1
bias_x = 1.1
ymin = 0.0
ymax = 1.0
[]
[Problem]
coord_type = RZ
[]
[GlobalParams]
displacements = 'disp_r disp_z'
PorousFlowDictator = dictator
biot_coefficient = 1.0
[]
[Variables]
[./disp_r]
[../]
[./disp_z]
[../]
[./porepressure]
[../]
[./temperature]
[../]
[]
[BCs]
[./plane_strain]
type = DirichletBC
variable = disp_z
value = 0
boundary = 'top bottom'
[../]
[./cavity_temperature]
type = DirichletBC
variable = temperature
value = 1000
boundary = left
[../]
[./cavity_porepressure]
type = DirichletBC
variable = porepressure
value = 1E6
boundary = left
[../]
[./cavity_zero_effective_stress_x]
type = Pressure
component = 0
variable = disp_r
function = 1E6
boundary = left
use_displaced_mesh = false
[../]
[./outer_temperature]
type = DirichletBC
variable = temperature
value = 0
boundary = right
[../]
[./outer_pressure]
type = DirichletBC
variable = porepressure
value = 0
boundary = right
[../]
[./fixed_outer_disp]
type = DirichletBC
variable = disp_r
value = 0
boundary = right
[../]
[]
[AuxVariables]
[./stress_rr]
family = MONOMIAL
order = CONSTANT
[../]
[./stress_pp]
family = MONOMIAL
order = CONSTANT
[../]
[]
[AuxKernels]
[./stress_rr]
type = RankTwoAux
rank_two_tensor = stress
variable = stress_rr
index_i = 0
index_j = 0
[../]
[./stress_pp] # hoop stress
type = RankTwoAux
rank_two_tensor = stress
variable = stress_pp
index_i = 2
index_j = 2
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 0.0
bulk_modulus = 1E12
viscosity = 1.0E-3
density0 = 1000.0
cv = 1000.0
cp = 1000.0
porepressure_coefficient = 0.0
[../]
[../]
[]
[PorousFlowBasicTHM]
coupling_type = ThermoHydroMechanical
multiply_by_density = false
add_stress_aux = true
porepressure = porepressure
temperature = temperature
thermal_eigenstrain_name = thermal_contribution
gravity = '0 0 0'
fp = the_simple_fluid
[]
[Materials]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 1E10
poissons_ratio = 0.2
[../]
[./strain]
type = ComputeAxisymmetricRZSmallStrain
eigenstrain_names = thermal_contribution
[../]
[./thermal_contribution]
type = ComputeThermalExpansionEigenstrain
temperature = temperature
thermal_expansion_coeff = 1E-6
eigenstrain_name = thermal_contribution
stress_free_temperature = 0.0
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./porosity]
type = PorousFlowPorosityConst # only the initial value of this is ever used
porosity = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
solid_bulk_compliance = 1E-10
fluid_bulk_modulus = 1E12
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-12 0 0 0 1E-12 0 0 0 1E-12' # note this is ordered: rr, zz, angle-angle
[../]
[./thermal_expansion]
type = PorousFlowConstantThermalExpansionCoefficient
fluid_coefficient = 1E-6
drained_coefficient = 1E-6
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '1E6 0 0 0 1E6 0 0 0 1E6' # note this is ordered: rr, zz, angle-angle
[../]
[]
[VectorPostprocessors]
[./P]
type = LineValueSampler
start_point = '0.1 0 0'
end_point = '1.0 0 0'
num_points = 10
sort_by = x
variable = porepressure
[../]
[./T]
type = LineValueSampler
start_point = '0.1 0 0'
end_point = '1.0 0 0'
num_points = 10
sort_by = x
variable = temperature
[../]
[./U]
type = LineValueSampler
start_point = '0.1 0 0'
end_point = '1.0 0 0'
num_points = 10
sort_by = x
variable = disp_r
[../]
[]
[Preconditioning]
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -sub_pc_type -snes_rtol'
petsc_options_value = 'gmres asm lu 1E-8'
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
file_base = fixed_outer_rz
execute_on = timestep_end
csv = true
[]
modules/porous_flow/test/tests/jacobian/disp01.i
# Test the Jacobian of the dispersive contribution to the diffusive component of
# the PorousFlowDisperiveFlux kernel. By setting disp_long and disp_trans to the same
# non-zero value, and diffusion to zero (by setting tortuosity to zero), the purely
# dispersive component of the flux is zero, and the only flux is due to the contribution
# from disp_trans on the diffusive flux.
[Mesh]
type = GeneratedMesh
dim = 2
nx = 3
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./pp]
[../]
[./massfrac0]
[../]
[]
[ICs]
[./pp]
type = RandomIC
variable = pp
max = 2e1
min = 1e1
[../]
[./massfrac0]
type = RandomIC
variable = massfrac0
min = 0
max = 1
[../]
[]
[Kernels]
[./diff0]
type = PorousFlowDispersiveFlux
fluid_component = 0
variable = pp
gravity = '1 0 0'
disp_long = 0.1
disp_trans = 0.1
[../]
[./diff1]
type = PorousFlowDispersiveFlux
fluid_component = 1
variable = massfrac0
gravity = '1 0 0'
disp_long = 0.1
disp_trans = 0.1
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp massfrac0'
number_fluid_phases = 1
number_fluid_components = 2
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 1e7
density0 = 10
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temp]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac0'
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[./poro]
type = PorousFlowPorosityConst
porosity = 0.1
[../]
[./diff]
type = PorousFlowDiffusivityConst
diffusion_coeff = '1e-2 1e-1'
tortuosity = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm]
type = PorousFlowRelativePermeabilityConst
phase = 0
[../]
[]
[Preconditioning]
active = smp
[./smp]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/jacobian/denergy03.i
# 2phase, 1 component, with solid displacements, time derivative of energy-density, TM porosity
[Mesh]
type = GeneratedMesh
dim = 3
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
displacements = 'disp_x disp_y disp_z'
[]
[Variables]
[./disp_x]
[../]
[./disp_y]
[../]
[./disp_z]
[../]
[./pgas]
[../]
[./pwater]
[../]
[./temp]
[../]
[]
[ICs]
[./disp_x]
type = RandomIC
variable = disp_x
min = -0.1
max = 0.1
[../]
[./disp_y]
type = RandomIC
variable = disp_y
min = -0.1
max = 0.1
[../]
[./disp_z]
type = RandomIC
variable = disp_z
min = -0.1
max = 0.1
[../]
[./pgas]
type = RandomIC
variable = pgas
max = 1.0
min = 0.0
[../]
[./pwater]
type = RandomIC
variable = pwater
max = 0.0
min = -1.0
[../]
[./temp]
type = RandomIC
variable = temp
max = 1.0
min = 0.0
[../]
[]
[Kernels]
[./grad_stress_x]
type = StressDivergenceTensors
variable = disp_x
component = 0
[../]
[./grad_stress_y]
type = StressDivergenceTensors
variable = disp_y
component = 1
[../]
[./grad_stress_z]
type = StressDivergenceTensors
variable = disp_z
component = 2
[../]
[./dummy_pgas]
type = Diffusion
variable = pgas
[../]
[./dummy_pwater]
type = Diffusion
variable = pwater
[../]
[./energy_dot]
type = PorousFlowEnergyTimeDerivative
variable = temp
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pgas temp pwater disp_x disp_y disp_z'
number_fluid_phases = 2
number_fluid_components = 1
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
cv = 1.3
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
cv = 0.7
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./elasticity_tensor]
type = ComputeElasticityTensor
C_ijkl = '0.5 0.75'
# bulk modulus is lambda + 2*mu/3 = 0.5 + 2*0.75/3 = 1
fill_method = symmetric_isotropic
[../]
[./strain]
type = ComputeSmallStrain
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[./vol_strain]
type = PorousFlowVolumetricStrain
[../]
[./porosity]
type = PorousFlowPorosity
thermal = true
mechanical = true
porosity_zero = 0.7
thermal_expansion_coeff = 0.5
[../]
[./p_eff]
type = PorousFlowEffectiveFluidPressure
[../]
[./rock_heat]
type = PorousFlowMatrixInternalEnergy
specific_heat_capacity = 1.1
density = 0.5
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = pwater
phase1_porepressure = pgas
capillary_pressure = pc
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/jacobian/line_sink02.i
# PorousFlowPolyLineSink with 2-phase, 3-components, with enthalpy, internal_energy, and thermal_conductivity
[Mesh]
type = GeneratedMesh
dim = 3
nx = 1
ny = 2
nz = 1
xmin = -1
xmax = 1
ymin = -1
ymax = 1
zmin = -1
zmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[./massfrac_ph0_sp0]
[../]
[./massfrac_ph0_sp1]
[../]
[./massfrac_ph1_sp0]
[../]
[./massfrac_ph1_sp1]
[../]
[./temp]
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'temp ppwater ppgas massfrac_ph0_sp0 massfrac_ph0_sp1 massfrac_ph1_sp0 massfrac_ph1_sp1'
number_fluid_phases = 2
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[./dummy_outflow]
type = PorousFlowSumQuantity
[../]
[]
[ICs]
[./temp]
type = RandomIC
variable = temp
min = 1
max = 2
[../]
[./ppwater]
type = RandomIC
variable = ppwater
min = -1
max = 0
[../]
[./ppgas]
type = RandomIC
variable = ppgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 1
[../]
[./massfrac_ph0_sp1]
type = RandomIC
variable = massfrac_ph0_sp1
min = 0
max = 1
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 1
[../]
[./massfrac_ph1_sp1]
type = RandomIC
variable = massfrac_ph1_sp1
min = 0
max = 1
[../]
[]
[Kernels]
[./dummy_temp]
type = TimeDerivative
variable = temp
[../]
[./dummy_ppwater]
type = TimeDerivative
variable = ppwater
[../]
[./dummy_ppgas]
type = TimeDerivative
variable = ppgas
[../]
[./dummy_m00]
type = TimeDerivative
variable = massfrac_ph0_sp0
[../]
[./dummy_m01]
type = TimeDerivative
variable = massfrac_ph0_sp1
[../]
[./dummy_m10]
type = TimeDerivative
variable = massfrac_ph1_sp0
[../]
[./dummy_m11]
type = TimeDerivative
variable = massfrac_ph1_sp1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
cv = 1.1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
viscosity = 1.4
cv = 1.8
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = temp
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph0_sp1 massfrac_ph1_sp0 massfrac_ph1_sp1'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '0.1 0.2 0.3 0.2 0 0.1 0.3 0.1 0.1'
[../]
[]
[DiracKernels]
[./dirac0]
type = PorousFlowPolyLineSink
fluid_phase = 0
variable = ppwater
point_file = one_point.bh
line_length = 1
SumQuantityUO = dummy_outflow
p_or_t_vals = '-0.9 1.5'
fluxes = '-1.1 2.2'
[../]
[./dirac1]
type = PorousFlowPolyLineSink
fluid_phase = 1
variable = ppgas
line_length = 1
use_relative_permeability = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow
p_or_t_vals = '-1.9 1.5'
fluxes = '1.1 -2.2'
[../]
[./dirac2]
type = PorousFlowPolyLineSink
fluid_phase = 0
variable = massfrac_ph0_sp0
line_length = 1.3
use_mobility = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow
p_or_t_vals = '-1.9 1.5'
fluxes = '1.1 -0.2'
[../]
[./dirac3]
type = PorousFlowPolyLineSink
fluid_phase = 0
variable = massfrac_ph0_sp1
line_length = 1.3
use_enthalpy = true
mass_fraction_component = 0
point_file = one_point.bh
SumQuantityUO = dummy_outflow
p_or_t_vals = '-1.9 1.5'
fluxes = '1.1 -0.2'
[../]
[./dirac4]
type = PorousFlowPolyLineSink
fluid_phase = 1
variable = massfrac_ph1_sp0
function_of = temperature
line_length = 0.9
mass_fraction_component = 1
use_internal_energy = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow
p_or_t_vals = '-1.9 1.5'
fluxes = '1.1 -0.2'
[../]
[./dirac5]
type = PorousFlowPolyLineSink
fluid_phase = 1
variable = temp
line_length = 0.9
mass_fraction_component = 2
use_internal_energy = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow
p_or_t_vals = '-1.9 1.5'
fluxes = '1.1 -0.2'
[../]
[./dirac6]
type = PorousFlowPolyLineSink
fluid_phase = 1
variable = massfrac_ph0_sp0
use_mobility = true
function_of = temperature
mass_fraction_component = 1
use_relative_permeability = true
use_internal_energy = true
point_file = one_point.bh
SumQuantityUO = dummy_outflow
p_or_t_vals = '-1.9 1.5'
fluxes = '0 -0.2'
[../]
[]
[Preconditioning]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
file_base = line_sink02
[]
modules/porous_flow/test/tests/fluids/simple_fluid_MPa.i
# Test the properties calculated by the simple fluid Material
# Pressure unit is chosen to be MPa
# Pressure 10 MPa
# Temperature = 300 K (temperature unit = K)
# Density should equal 1500*exp(1E7/1E9-2E-4*300)=1426.844 kg/m^3
# Viscosity should equal 1.1E-9 MPa.s
# Energy density should equal 4000 * 300 = 1.2E6 J/kg
# Specific enthalpy should equal 4000 * 300 + 10e6 / 1426.844 = 1.207008E6 J/kg
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
thermal_expansion = 2.0E-4
cv = 4000.0
cp = 5000.0
bulk_modulus = 1.0E9
thermal_conductivity = 1.0
viscosity = 1.1E-3
density0 = 1500.0
[../]
[../]
[]
[Mesh]
type = GeneratedMesh
dim = 1
nx = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'pp T'
number_fluid_phases = 1
number_fluid_components = 1
[../]
[]
[Variables]
[./pp]
initial_condition = 10
[../]
[./T]
initial_condition = 300.0
[../]
[]
[Kernels]
[./dummy_p]
type = Diffusion
variable = pp
[../]
[./dummy_T]
type = Diffusion
variable = T
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
temperature = T
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pp
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
temperature_unit = Kelvin
pressure_unit = MPa
fp = the_simple_fluid
phase = 0
[../]
[]
[Postprocessors]
[./pressure]
type = ElementIntegralVariablePostprocessor
variable = pp
[../]
[./temperature]
type = ElementIntegralVariablePostprocessor
variable = T
[../]
[./density]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_density_qp0'
[../]
[./viscosity]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_viscosity_qp0'
[../]
[./internal_energy]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_internal_energy_qp0'
[../]
[./enthalpy]
type = ElementIntegralMaterialProperty
mat_prop = 'PorousFlow_fluid_phase_enthalpy_qp0'
[../]
[]
[Executioner]
type = Steady
solve_type = Newton
[]
[Outputs]
execute_on = 'timestep_end'
csv = true
[]
modules/porous_flow/test/tests/actions/basicthm_thm.i
# PorousFlowBasicTHM action with coupling_type = ThermoHydroMechanicalGenerator
[Mesh]
[gen]
type = GeneratedMeshGenerator
dim = 2
nx = 10
ny = 3
xmax = 10
ymax = 3
[]
[./aquifer]
input = gen
type = SubdomainBoundingBoxGenerator
block_id = 1
bottom_left = '0 1 0'
top_right = '10 2 0'
[../]
[./injection_area]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'injection_area'
normal = '-1 0 0'
input = 'aquifer'
[../]
[./outflow_area]
type = SideSetsAroundSubdomainGenerator
block = 1
new_boundary = 'outflow_area'
normal = '1 0 0'
input = 'injection_area'
[../]
[./rename]
type = RenameBlockGenerator
old_block_id = '0 1'
new_block_name = 'caprock aquifer'
input = 'outflow_area'
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
displacements = 'disp_x disp_y'
biot_coefficient = 1.0
[]
[Variables]
[./porepressure]
initial_condition = 1e6
[../]
[./temperature]
initial_condition = 293
scaling = 1e-6
[../]
[./disp_x]
scaling = 1e-6
[../]
[./disp_y]
scaling = 1e-6
[../]
[]
[PorousFlowBasicTHM]
porepressure = porepressure
temperature = temperature
coupling_type = ThermoHydroMechanical
gravity = '0 0 0'
fp = simple_fluid
thermal_eigenstrain_name = thermal_contribution
use_displaced_mesh = false
add_stress_aux = false
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1.5e6
boundary = injection_area
[../]
[./constant_injection_temperature]
type = DirichletBC
variable = temperature
value = 313
boundary = injection_area
[../]
[./constant_outflow_porepressure]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
boundary = outflow_area
pt_vals = '0 1e9'
multipliers = '0 1e9'
flux_function = 1e-6
PT_shift = 1e6
[../]
[./constant_outflow_temperature]
type = DirichletBC
variable = temperature
value = 293
boundary = outflow_area
[../]
[./top_bottom]
type = DirichletBC
variable = disp_y
value = 0
boundary = 'top bottom'
[../]
[./right]
type = DirichletBC
variable = disp_x
value = 0
boundary = right
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./biot_modulus]
type = PorousFlowConstantBiotModulus
biot_coefficient = 0.8
solid_bulk_compliance = 2e-7
fluid_bulk_modulus = 1e7
[../]
[./permeability_aquifer]
type = PorousFlowPermeabilityConst
block = aquifer
permeability = '1e-13 0 0 0 1e-13 0 0 0 1e-13'
[../]
[./permeability_caprock]
type = PorousFlowPermeabilityConst
block = caprock
permeability = '1e-15 0 0 0 1e-15 0 0 0 1e-15'
[../]
[./thermal_expansion]
type = PorousFlowConstantThermalExpansionCoefficient
drained_coefficient = 0.003
fluid_coefficient = 0.0002
[../]
[./rock_internal_energy]
type = PorousFlowMatrixInternalEnergy
density = 2500.0
specific_heat_capacity = 1200.0
[../]
[./thermal_conductivity]
type = PorousFlowThermalConductivityIdeal
dry_thermal_conductivity = '10 0 0 0 10 0 0 0 10'
block = 'caprock aquifer'
[../]
[./elasticity_tensor]
type = ComputeIsotropicElasticityTensor
youngs_modulus = 5e9
poissons_ratio = 0.0
[../]
[./strain]
type = ComputeSmallStrain
eigenstrain_names = thermal_contribution
[../]
[./thermal_contribution]
type = ComputeThermalExpansionEigenstrain
temperature = temperature
thermal_expansion_coeff = 0.001
eigenstrain_name = thermal_contribution
stress_free_temperature = 293
[../]
[./stress]
type = ComputeLinearElasticStress
[../]
[]
[Preconditioning]
[./basic]
type = SMP
full = true
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1e4
dt = 1e3
nl_abs_tol = 1e-12
nl_rel_tol = 1E-10
[]
[Outputs]
exodus = true
[]
modules/porous_flow/test/tests/chemistry/except13.i
# Exception test.
# Incorrect number of eta exponents
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = Diffusion
variable = a
[../]
[./b]
type = Diffusion
variable = b
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 1E-6
[../]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'a b'
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = 'a b'
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = '1 1'
reactions = '1 1'
specific_reactive_surface_area = 1.0
kinetic_rate_constant = 1.0e-8
activation_energy = 1.5e4
molar_volume = 1
eta_exponent = '1 1'
[../]
[./mineral]
type = PorousFlowAqueousPreDisMineral
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/chemistry/except16.i
# Exception test
# Incorrect number of stoichiometry
[Mesh]
type = GeneratedMesh
dim = 1
[]
[Variables]
[./a]
[../]
[./b]
[../]
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Kernels]
[./a]
type = PorousFlowPreDis
variable = a
mineral_density = 1
stoichiometry = '2 3'
[../]
[./b]
type = PorousFlowPreDis
variable = b
mineral_density = 1
stoichiometry = 3
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'a b'
number_fluid_phases = 1
number_fluid_components = 3
number_aqueous_kinetic = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid]
type = SimpleFluidProperties
[../]
[../]
[]
[AuxVariables]
[./eqm_k]
initial_condition = 1E-6
[../]
[./pressure]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow1PhaseFullySaturated
porepressure = pressure
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'a b'
[../]
[./predis]
type = PorousFlowAqueousPreDisChemistry
primary_concentrations = 'a b'
num_reactions = 1
equilibrium_constants = eqm_k
primary_activity_coefficients = '1 1'
reactions = '2 3'
specific_reactive_surface_area = 1.0
kinetic_rate_constant = 1.0e-8
activation_energy = 1.5e4
molar_volume = 1
[../]
[./mineral]
type = PorousFlowAqueousPreDisMineral
[../]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./simple_fluid]
type = PorousFlowSingleComponentFluid
fp = simple_fluid
phase = 0
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 1
[]
modules/porous_flow/test/tests/jacobian/fflux13.i
# 2phase (PP), 3components (that exist in both phases), constant viscosity, constant insitu permeability
# density with constant bulk, Corey relative perm, nonzero gravity, unsaturated with vanGenuchten
# using harmonic-mean mobility
[Mesh]
type = GeneratedMesh
dim = 2
nx = 2
xmin = 0
xmax = 1
ny = 1
ymin = 0
ymax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
[]
[Variables]
[./ppwater]
[../]
[./ppgas]
[../]
[./massfrac_ph0_sp0]
[../]
[]
[AuxVariables]
[./massfrac_ph0_sp1]
[../]
[./massfrac_ph1_sp0]
[../]
[./massfrac_ph1_sp1]
[../]
[]
[ICs]
[./ppwater]
type = RandomIC
variable = ppwater
min = -1
max = 0
[../]
[./ppgas]
type = RandomIC
variable = ppgas
min = 0
max = 1
[../]
[./massfrac_ph0_sp0]
type = RandomIC
variable = massfrac_ph0_sp0
min = 0
max = 0.4
[../]
[./massfrac_ph0_sp1]
type = RandomIC
variable = massfrac_ph0_sp1
min = 0
max = 0.4
[../]
[./massfrac_ph1_sp0]
type = RandomIC
variable = massfrac_ph1_sp0
min = 0
max = 0.4
[../]
[./massfrac_ph1_sp1]
type = RandomIC
variable = massfrac_ph1_sp1
min = 0
max = 0.4
[../]
[]
[Kernels]
[./flux0]
type = PorousFlowAdvectiveFlux
fluid_component = 0
variable = ppwater
gravity = '-1 -0.1 0'
full_upwind_threshold = 0
[../]
[./flux1]
type = PorousFlowAdvectiveFlux
fluid_component = 1
variable = ppgas
gravity = '-1 -0.1 0'
full_upwind_threshold = 0
fallback_scheme = harmonic
[../]
[./flux2]
type = PorousFlowAdvectiveFlux
fluid_component = 2
variable = massfrac_ph0_sp0
gravity = '-1 -0.1 0'
full_upwind_threshold = 0
fallback_scheme = harmonic
[../]
[]
[UserObjects]
[./dictator]
type = PorousFlowDictator
porous_flow_vars = 'ppwater ppgas massfrac_ph0_sp0'
number_fluid_phases = 2
number_fluid_components = 3
[../]
[./pc]
type = PorousFlowCapillaryPressureVG
m = 0.5
alpha = 1
[../]
[]
[Modules]
[./FluidProperties]
[./simple_fluid0]
type = SimpleFluidProperties
bulk_modulus = 1.5
density0 = 1
thermal_expansion = 0
viscosity = 1
[../]
[./simple_fluid1]
type = SimpleFluidProperties
bulk_modulus = 0.5
density0 = 0.5
thermal_expansion = 0
viscosity = 1
[../]
[../]
[]
[Materials]
[./temperature]
type = PorousFlowTemperature
[../]
[./ppss]
type = PorousFlow2PhasePP
phase0_porepressure = ppwater
phase1_porepressure = ppgas
capillary_pressure = pc
[../]
[./massfrac]
type = PorousFlowMassFraction
mass_fraction_vars = 'massfrac_ph0_sp0 massfrac_ph0_sp1 massfrac_ph1_sp0 massfrac_ph1_sp1'
[../]
[./simple_fluid0]
type = PorousFlowSingleComponentFluid
fp = simple_fluid0
phase = 0
[../]
[./simple_fluid1]
type = PorousFlowSingleComponentFluid
fp = simple_fluid1
phase = 1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1 0 0 0 2 0 0 0 3'
[../]
[./relperm0]
type = PorousFlowRelativePermeabilityCorey
n = 2
phase = 0
[../]
[./relperm1]
type = PorousFlowRelativePermeabilityCorey
n = 3
phase = 1
[../]
[]
[Preconditioning]
active = check
[./andy]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000'
[../]
[./check]
type = SMP
full = true
petsc_options_iname = '-ksp_type -pc_type -snes_atol -snes_rtol -snes_max_it -snes_type'
petsc_options_value = 'bcgs bjacobi 1E-15 1E-10 10000 test'
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
dt = 1
end_time = 1
[]
[Outputs]
exodus = false
[]
modules/porous_flow/test/tests/numerical_diffusion/pffltvd_action.i
# Using flux-limited TVD advection ala Kuzmin and Turek, employing PorousFlow Kernels and UserObjects, with superbee flux-limiter
# Using the PorousFlowFullySaturated Action
[Mesh]
type = GeneratedMesh
dim = 1
nx = 100
xmin = 0
xmax = 1
[]
[GlobalParams]
PorousFlowDictator = dictator
gravity = '0 0 0'
[]
[Variables]
[./porepressure]
[../]
[./tracer]
[../]
[]
[ICs]
[./porepressure]
type = FunctionIC
variable = porepressure
function = '1 - x'
[../]
[./tracer]
type = FunctionIC
variable = tracer
function = 'if(x<0.1,0,if(x>0.3,0,1))'
[../]
[]
[PorousFlowFullySaturated]
porepressure = porepressure
coupling_type = Hydro
fp = the_simple_fluid
mass_fraction_vars = tracer
stabilization = KT
flux_limiter_type = superbee
[]
[BCs]
[./constant_injection_porepressure]
type = DirichletBC
variable = porepressure
value = 1
boundary = left
[../]
[./no_tracer_on_left]
type = DirichletBC
variable = tracer
value = 0
boundary = left
[../]
[./remove_component_1]
type = PorousFlowPiecewiseLinearSink
variable = porepressure
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 1
use_mobility = true
flux_function = 1E3
[../]
[./remove_component_0]
type = PorousFlowPiecewiseLinearSink
variable = tracer
boundary = right
fluid_phase = 0
pt_vals = '0 1E3'
multipliers = '0 1E3'
mass_fraction_component = 0
use_mobility = true
flux_function = 1E3
[../]
[]
[Modules]
[./FluidProperties]
[./the_simple_fluid]
type = SimpleFluidProperties
bulk_modulus = 2E9
thermal_expansion = 0
viscosity = 1.0
density0 = 1000.0
[../]
[../]
[]
[Materials]
[./porosity]
type = PorousFlowPorosity
porosity_zero = 0.1
[../]
[./permeability]
type = PorousFlowPermeabilityConst
permeability = '1E-2 0 0 0 1E-2 0 0 0 1E-2'
[../]
[]
[Preconditioning]
active = basic
[./basic]
type = SMP
full = true
petsc_options = '-ksp_diagonal_scale -ksp_diagonal_scale_fix'
petsc_options_iname = '-pc_type -sub_pc_type -sub_pc_factor_shift_type -pc_asm_overlap'
petsc_options_value = ' asm lu NONZERO 2'
[../]
[./preferred_but_might_not_be_installed]
type = SMP
full = true
petsc_options_iname = '-pc_type -pc_factor_mat_solver_package'
petsc_options_value = ' lu mumps'
[../]
[]
[VectorPostprocessors]
[./tracer]
type = LineValueSampler
start_point = '0 0 0'
end_point = '1 0 0'
num_points = 101
sort_by = x
variable = tracer
[../]
[]
[Executioner]
type = Transient
solve_type = Newton
end_time = 6
dt = 6E-2
nl_abs_tol = 1E-8
timestep_tolerance = 1E-3
[]
[Outputs]
file_base = pffltvd_out
[./out]
type = CSV
execute_on = final
[../]
[]