FE PorousFlow applying mechanical stress and units #21313
-
|
Hello All, Second question, the exact same input file with the following units does not converge. |
Beta Was this translation helpful? Give feedback.
Replies: 10 comments 3 replies
-
to be a quicker way of determining roughly the correct scaling. That page will also tell you reasonable tolerances. Eg, if you use mm rather than m, probably your residuals will increase by 1E9, so absolute tolerances have to be modified. By the way, i'm not a super fan of autoscaling, because often i set absolute tolerances in my models. |
Beta Was this translation helpful? Give feedback.
-
|
Regarding, the stress part, assuming I have a train sitting on the rock,
then the pressure bc that is commented out in the input file should work as
a total stress applied on the skeleton, but the model when run with those
lines uncommented, seems to produce stresses I cannot understand or
interpret. Can you help with t hi is ?
Regarding units, thanks for your suggestion. Just to be clear I scaled the
problem in tutorial 8 of the porous flow middle module and replaced them
with the scaling I have detailed and that seemed to work just fine.
Regarding scaling, I have a much more complicated problem and several
blocks with different physics I need to solve,nor which auto scaling with
reference residual problem eliminates some of the need for abs tolerances
and I can deal with relative ones. Hence the auto scaling..the input file
is the simplest picture of porous flow that I could present
…On Wed, Jun 15, 2022, 7:22 PM Andy Wilkins ***@***.***> wrote:
- A constant mechanical stress... This depends on what exactly you
want to achieve. There are some examples in the "Barometric and ocean
loading" section of
https://mooseframework.inl.gov/modules/porous_flow/tidal.html . Note
that all stresses in porousflow are effective stresses, *except* the
boundary conditions, which are in terms of the total stress. Physically,
the total stresses are brought about by something pushing on the rock
skeleton. There are two distinct cases. (1) If your constant mechanical
stress is due to some object pushing on the rock skeleton (eg, a train
sitting on the ground surface), then you should use a FunctionNeumannBC
or a PressureBC applied to the appropriate disp variable. On the other
hand, (2), if your constant mechanical stress is due to *fluid*
pushing on the rock skeleton (eg, a borehole pressure), then you should use
the aforementioned FunctionNeumannBC or PressureBC, along with an
appropriate boundary condition for the fluid porepressure, such as
DirichletBC on the porepressure variable.
- Using different units is sometimes tricky. Please see the essay at
"An essay on Pascals, kilograms and densities" of
https://mooseframework.inl.gov/source/materials/PorousFlowSingleComponentFluid.html
. Once you're sure of the numerical quantities in your input file, any
nonconvergence must come from inappropriately scaled variables or
tolerances. There is an old page on scaling here
https://mooseframework.inl.gov/modules/porous_flow/convergence.html
but now i find
[Debug]
show_var_residual_norms = True
[]
to be a quicker way of determining roughly the correct scaling. That page
will also tell you reasonable tolerances. Eg, if you use mm rather than m,
probably your residuals will increase by 1E9, so absolute tolerances have
to be modified. By the way, i'm not a super fan of autoscaling, because
often i set absolute tolerances in my models.
—
Reply to this email directly, view it on GitHub
<#21313 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACYC6LLCOLKN3NNES6WUWQ3VPJQTXANCNFSM5Y4TGQ7Q>
.
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
|
So just the sun of the output value and pore pressure should do the trick
??
…On Wed, Jun 15, 2022, 7:59 PM Andy Wilkins ***@***.***> wrote:
Remember that the output stresses (in paraview or postprocessors) are
effective stresses, not total stresses. Does that help?
—
Reply to this email directly, view it on GitHub
<#21313 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACYC6LKLUDDRE46SYX572WDVPJU5VANCNFSM5Y4TGQ7Q>
.
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
|
Andy,
More questions regarding the simple model i have presented.
1) Let us assume an initially empty reservoir (porous skeleton) at
atmospheric pressure. I want to start pumping fluid into this skeleton. I
am using a porousflowsink to do this. What should be the boundary
conditions on the end away from the pumping ? I want to model how long it
will take to fill this reservoir. So shpuld the initial condition be
porepressure = -1e5 (patm) ?
2) For the same situation, i would like to apply a mechanical stress on the
end away from the pumping. So in effect the skeleton will exert a pressure
on the pump. In the thought experiment, the filling of the reservoir should
not be affected by this external mechanical stress, since the only thing
that governs the flow is the pressure gradient. Presumably the
initial condition here will be porepressure = -\sigma will be the boundary
condition at the pumping site.
Now the question on how to apply this initial condition. I read the
documentation and there documentation on applying postprocessor values to
the porepressure. What post-processor value am i going to be choosing here
?
Cheers
Srinath
On Wed, Jun 15, 2022 at 9:44 PM Srinath Chakravarthy ***@***.***>
wrote:
… Perfect that works. Thanks
On Wed, Jun 15, 2022, 8:07 PM Andy Wilkins ***@***.***>
wrote:
> effective = total + biot_coefficient * porepressure (see
> https://mooseframework.inl.gov/modules/porous_flow/governing_equations.html
> ). So you want effective - biot_coefficient * porepressure (since your
> biot_coefficient = 1, you need effective - porepressure).
>
> —
> Reply to this email directly, view it on GitHub
> <#21313 (reply in thread)>,
> or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/ACYC6LK5NPTDNO67WIWMVYDVPJV5TANCNFSM5Y4TGQ7Q>
> .
> You are receiving this because you authored the thread.Message ID:
> ***@***.***>
>
|
Beta Was this translation helpful? Give feedback.
-
|
Andy,
Thanks a lot. Let me explain a little more about the problem.
We have a micro scale porous media attached to a permeabeable membrane,
below which there is a comical chemical pump, pumping constant rate of
fluid thru the membrane into the porous skeleton. Above certain values of
the rate we observe separation between the membrane and the skeleton. One
solution to this problem is applying a mechanical pressure to prevent the
delamination of the membrane. While absolute values of the stress/pressure
does not affect the fluid flow, absolute values do affect the delamination.
I have already implemented a cohesive zone type model for the mass flux to
stop if the interface separation is greater than a certain value. This is
why I need displacement coupling to the fluid flow.
Capillary curve : completely understood about what 0 saturation is, and I
was just giving you an example of what the choice of initial conditions
will be.
Pumping end BCS, are currently fixed displacementn in direction normal to
the flow. The pore pressure will presumably come from a post processor. I
am however confused as to how one can apply a Neumann and a Dirichlet bc
for the same variable at the same boundary. In this instance we have a
porousflowsink and a pressure bc. I see the physical need for it, but
cannot quite understand the implementation.
Thanks for your help to a newbie on porous flow mechanics.
Cheers
Srinath
…On Thu, Jun 16, 2022, 6:48 PM Andy Wilkins ***@***.***> wrote:
- Fluid boundary conditions at the "far end".... My initial thought
was to use PorousFlowOutflowBC
https://mooseframework.inl.gov/source/bcs/PorousFlowOutflowBC.html .
However, that is really designed to model an infinite reservoir (see the
documentation for a discussion). I suspect you're got a finite reservoir,
given that you're applying a mechanical stress at the "far end". In that
case, you should probably use a PorousFlowSink, as discussed in
https://mooseframework.inl.gov/modules/porous_flow/boundaries.html .
- Initially unsaturated configuration could be p=-1E5 Pascals, as
you've indicated. But that depends on your capillary curve. "initially
unsaturated" can mean different things to different people. Viz, there is
usually residual water that exists in natural systems - perhaps 5% water,
perhaps even 20% water, depending on the capillarity and the history of the
material (eg, if it has been dried using high temperature and then kept in
a vacuum, it'd have tiny saturation).
- Assuming the mechanical stress and strain don't impact porosity or
permeability (this is usually a reasonable assumption but you may wish to
relax it) then mechanical stress won't impact fluid flow. But if that's the
case then you might like to consider whether there's any point building a
model with both displacements and fluid: why not build two separate models
(one for the fluid flow, one for the mechanics).
- The boundary condition at the pumping site will be compressive
normal total stress = pumping porepressure, and porepressure = pumping
pressure.
- Sorry, i'm not 100% sure what the postprocessor is for. Are you
injecting at a known rate, but don't know the porepressure? If so, then
study the "Boundary conditions" section of
https://mooseframework.inl.gov/modules/porous_flow/thm_example.html
—
Reply to this email directly, view it on GitHub
<#21313 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACYC6LPLDULQMW2Q5QVKOHTVPOVLBANCNFSM5Y4TGQ7Q>
.
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
|
Andy, [injection_area] [] [Problem] [GlobalParams] [Variables] [PorousFlowUnsaturated] temperature = temperature [BCs] [external_pressure] [pumping_site_pp] [constant_injection_flux] [ICs] [mass_flow] [] [AuxVariables] [AuxKernels] [] [Modules] [Materials] [biot_modulus] [thermal_expansion] [elasticity_tensor] [Preconditioning] [Executioner] compute_scaling_once = falsepetsc_options_iname = '-pc_type -pc_factor_mat_solver_package -snes_force_iteration' solve_type = Newton end_time = 36000dt = 0.1 num_steps = 10[TimeStepper] [] [Outputs] |
Beta Was this translation helpful? Give feedback.
-
|
Just check your BCs. For instance, it looks like you're applying a a |
Beta Was this translation helpful? Give feedback.
-
|
Sorry about the cut and paste error. So silly, I was barking up the wrong
tree... Thanks a lot. Will check with correct BCS in a little bit.
Cheers
Srinath
…On Sun, Jun 19, 2022, 6:46 PM Andy Wilkins ***@***.***> wrote:
Hi @srinath-chakravarthy <https://github.com/srinath-chakravarthy> ,
Just check your BCs. For instance, it looks like you're applying a
Pressure *and* a DirichletBC on top to the Variable disp_z. Perhaps a
copy-and-paste error and your roller BCs aren't really what you wanted?
Does this help or am i way off?
a
—
Reply to this email directly, view it on GitHub
<#21313 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACYC6LJCEAH6X3UOWVPJV7DVP6PNPANCNFSM5Y4TGQ7Q>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
|
Perfect that works. Thanks
…On Wed, Jun 15, 2022, 8:07 PM Andy Wilkins ***@***.***> wrote:
effective = total + biot_coefficient * porepressure (see
https://mooseframework.inl.gov/modules/porous_flow/governing_equations.html
). So you want effective - biot_coefficient * porepressure (since your
biot_coefficient = 1, you need effective - porepressure).
—
Reply to this email directly, view it on GitHub
<#21313 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACYC6LK5NPTDNO67WIWMVYDVPJV5TANCNFSM5Y4TGQ7Q>
.
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
Hi @srinath-chakravarthy ,
Just check your BCs. For instance, it looks like you're applying a
Pressureand aDirichletBContopto the Variabledisp_z. Perhaps a copy-and-paste error and your roller BCs aren't really what you wanted? Does this help or am i way off?a