Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Benchmark for PermeabilityMohrCoulombFailureIndexModel #2995

Closed
wants to merge 5 commits into from

Conversation

wenqing
Copy link
Member

@wenqing wenqing commented Jun 9, 2020

as titled. Temporally, this PR contains the commits of PR # #2989.

  1. Feature description was added to the changelog Not yet.

  2. Tests covering your feature were added? Yes.
    hm_perm

  3. Any new feature or behavior change was documented? Not yet.

@wenqing wenqing force-pushed the apply_permeability_stress branch 3 times, most recently from 05f61a5 to 6689da3 Compare June 10, 2020 15:45
@wenqing
Copy link
Member Author

wenqing commented Jun 10, 2020

HM has cell wise permeability output. The following figure shows the permeability output of this test
k_test

@wenqing wenqing force-pushed the apply_permeability_stress branch 10 times, most recently from 957ee91 to 5668d82 Compare June 16, 2020 08:59
@wenqing wenqing force-pushed the apply_permeability_stress branch 5 times, most recently from 8ed46ce to 1fa184f Compare June 18, 2020 07:47
Comment on lines +237 to +238
// TODO (wenqing): get a model type, and use it to avoid the following
// assignment if no stress dependent permeability model is used.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to get your idea, how would you do it? How would you find out if an arbitrary permeability model is stress dependent?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we add a member to Property to return its type?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't quite get it. Would you elaborate?
So there will be a member in the Property class, let's say x(). It would return what?
How would you use the result here to find out if an arbitrary permeability model is stress dependent?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For example:

virtual bool Property::hasStressVariable() const {return false;}

 bool PermeabilityMohrCoulombFailureIndexModel::hasStressVariable() const override {return true;}

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This does not scale well, because for every new variable like stress etc. the Property interface has to be updated. So, then one would add a new enum value, two string conversions (back and forth), and additionally a test function and an if-condition to every process which is going to use it. Also how do you find out for MFront materials if there is dependency on a particular variable?
I'd drop the comment. Keeping things simple is an advantage. How much time would it save for each assembly?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The major computation is a two vector (with a size of 4 or 6) addition at the integration points. I have not compared the time increases in the local assembler for large problems. I think, it may increase the local assembly time for the maximum magnitude of 1%.

An enum type might be good. This would be put to another PR if an if-condition for passing stress to Property is needed.

Comment on lines 407 to 408
static_cast<SymmetricTensor>(_ip_data[ip].sigma_eff -
alpha * identity2 * p_int_pt)));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why the cast?
The type of the sigma_eff*alpha*I*p is KelvinVector. Conversion to SymmetricTensor requires sqrt(2) multiplications.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why the cast?

If only sigma_eff, no cast is needed. identity2 needs a cast.

The type of the sigma_eff*alpha*I*p is KelvinVector. Conversion to SymmetricTensor requires sqrt(2) multiplications.

Please take a look at my new PR, #3010, about kelvinVectorToSymmetricTensor. I assumed that function handles that multiplier correctly.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As discussed in the closed PR #3010, kelvinVectorToSymmetricTensor converts the Kelvin stress to conventional stress correctly.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The kelvinVectorToSymmetricTensor handles the sqrt(2) multiplier correctly. static_cast is wrong way to bend the types. Use eval.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use .eval().

<property>
<name>density</name>
<type>Constant</type>
<value>1</value>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Density in the documentation is 1000. And also other values are not the same. This should be fixed.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Corrected. Since the gravity term in the Darcy is omitted, it only makes a tiny change in permeability and stresses, which cannot be distinguished in the contour plot.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did you check all of the other values?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes.
HM_k

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what about solid density?

Copy link
Member Author

@wenqing wenqing Jun 18, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed to 2.65e+3. I see that you means the input parameters.

please read [the PDF](../PermeabilityMohrCoulombFailureIndexModel.pdf).

For a full document of the failure index dependent
permeability model, benchmark and its the implementation in ogs6, etc.,
Copy link
Member Author

@wenqing wenqing Jun 18, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@OlafKolditz
The link to the document on Overleaf was added. Please see Preview

@wenqing
Copy link
Member Author

wenqing commented Jun 18, 2020

@endJunction: @nagelt asked you a question in his comment about the comment by @OlafKolditz about use Overleaf in web/doc. These comments was detached due to the update of this PR.

Copy link
Member

@endJunction endJunction left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The documentation and the project file should describe exactly same problems.

@wenqing wenqing force-pushed the apply_permeability_stress branch 2 times, most recently from 35ff8b4 to 90bd0a8 Compare June 19, 2020 08:51
@wenqing
Copy link
Member Author

wenqing commented Jun 19, 2020

The documentation and the project file should describe exactly same problems.

Changes in doc:

  1. added parameters for the permeability model,
  2. added the description of the initial conditions of pore pressure and stress.
  3. corrected a typo in row 2 of Table 2, tau_x=-15 MPa instead of \tau_y

Changes in prj:
porosity -> 0.15. The ref. result file and the figures for the doc. were updated accordingly.

@ogsbot ogsbot closed this Jun 19, 2020
@ogsbot
Copy link
Member

ogsbot commented Jun 19, 2020

OpenGeoSys development has been moved to GitLab.

See this pull request on GitLab.

This issue / pull request was open before the GitLab migration.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants