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

Semi-Implicit two-phase solver for saturated soil with incompressible flow #688

Open
tianchiTJ opened this issue Aug 11, 2020 · 2 comments

Comments

@tianchiTJ
Copy link
Contributor

Summary

This RFC is to propose the Semi-Implicit two-phase solver in branch solver/two-phase-semiimplicit. The solver utilized semi-implicit Chorin's projection scheme which is mainly to be used for modeling hydraulic-coupled problem in saturated soil with incompressible fluids. This work will be carried out after both the two-phase-explicit and navier-stokes are merged into the develop branch.

Motivation

Use the Semi-Implicit two-phase solver can get a much more stable results for hydraulic-coupled problem. The time step will be free from the limitation of fluid part and almost the same with single phase MPM, then it will increase the computation efficiency. The permeability can also be defined in a wider range than the explicit solver.

Design Detail

The following classes and functionality were implemented:

  1. MPMSemiImplicitTwoPhase solver class
  2. Some necessary functions will be added into the TwoPhaseParticle
  3. The matrix equation parts will be quite similar with the solver/navier-stokes including three parts: 1) Solving the intermediate velocity; 2) Solving the pore pressure (Poisson equation); 3) Correct the velocity

a. The assembler class is made to assemble the global system of equations. First, all nodes will be assigned an active_id to specify the index of each node in the global systems of equations; this id is changing every time step as the particles move over the background grids. Then, when the explicit step is completed, a Intermediate (Momentum equations for mixture and fluid) and laplacian matrix are constructed in all cells. We store this local matrix with size of (nnodes x nnodes) as Eigen matrices in Cell along with the correction_matrix as:

  //! Local Intermediate matrix
  Eigen::MatrixXd K_inter_matrix_;
  //! Local laplacian matrix
  Eigen::MatrixXd laplacian_matrix_;
  //! Local correction matrix
  Eigen::MatrixXd correction_matrix_;

These local matrices are by default has zero sizes, and only initialized when the initialise_element_matrix function is called by the solver. Each time set, the assembler job is to organize all the cell's local stiffness matrix to a global matrix and RHS vector and to apply constraints to the assembled systems through row-column modification.

b. The linear solver solves the given assembled coefficient matrix and corresponding vectors, and it is independent of dimension. The solver_type should be specified in the input .json.

virtual Eigen::VectorXd solve(const Eigen::SparseMatrix<double>& A,
                                const Eigen::VectorXd& b,
                                std::string solver_type) = 0;

Drawbacks

The currecnt eigen solver for the matrix equations may not be efficient especially for 3D cases.

Rationale and Alternatives

After the merge of the Semi-Implicit two-phase solver, we will extend it into the two-layer Semi-Implicit two-phase solver.

Prior Art

Markert B, Heider Y, Ehlers W. Comparison of monolithic and splitting solution schemes for dynamic porous media problems[J]. International journal for numerical methods in engineering, 2010, 82(11): 1341-1383.

@stale
Copy link

stale bot commented Oct 10, 2020

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the wontfix label Oct 10, 2020
@stale stale bot closed this as completed Oct 17, 2020
@bodhinandach bodhinandach reopened this Oct 18, 2020
@stale stale bot removed the wontfix label Oct 18, 2020
@stale
Copy link

stale bot commented Dec 17, 2020

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

@stale stale bot added the wontfix label Dec 17, 2020
@stale stale bot closed this as completed Dec 24, 2020
@bodhinandach bodhinandach reopened this Dec 24, 2020
@stale stale bot removed the wontfix label Dec 24, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment