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

Update coordinates for gravitational stresses #661

Open
willic3 opened this issue Oct 18, 2023 · 3 comments
Open

Update coordinates for gravitational stresses #661

willic3 opened this issue Oct 18, 2023 · 3 comments

Comments

@willic3
Copy link
Contributor

willic3 commented Oct 18, 2023

Description

We need an approximate method to represent the changes in body forces due to gravity when deformation occurs.

Desired Solution

I believe we can do this by updating the coordinates at each time step prior to computing stresses and body forces.

Alternatives

The alternative is to solve the finite strain problem, which introduces nonlinearity.

Additional context

I will outline a procedure for doing this.

@baagaard-usgs
Copy link
Contributor

baagaard-usgs commented Oct 25, 2023

Proposed solution

  1. Decide precisely what PetscVec objects are needed to implement updating the coordinates at the end of each time step and at each iteration of the solve (with the current guess of the solution).
  2. Create problems::TimeDependentUpdateCoords object that derives from problems::TimeDependent. This object will hold the PetscVec objects as private data members.
  3. Whenever we make use of the solution values in updating the coordinates, we need to project the solution into the FE space of the coordinates.

Update steps

  1. Initialization - store original coordinates
  2. Poststep - BEFORE output - update PetscVec storing the displacement field relative to the original coordinates
  3. Residual + Jacobian calculations (static methods in TimeDependent.cc) - update coordinates PetscVec with current coordinates = original + displacement(t) + solution_displacement [Make a separate function to do this, so the change to computeRHSResidual(), etc is just adding this one function call.]

poststep()

We want to temporarily update the solution field with the total displacement field, so that the output of the displacement field is relative to the original coordinates AND the Cauchy strain and stress are computed using the total displacement field.

The coordinate field should be the original coordinates, not the updated coordinates.

@willic3
Copy link
Contributor Author

willic3 commented Jan 30, 2024

Vectors needed

  1. coordinates (existing PetscVec). This now contains the updated coordinates: coordinates = originalCoordinates + displacementT + solution_displacement.
  2. solution_displacement (existing PetscVec). This now contains the increment in displacement relative to the previous time step.
  3. originalCoordinates (new PetscVec). This keeps a copy of the original coordinates.
  4. displacementT (new PetscVec). This is the total displacement at the end of the previous time step. At the end of each time step it is updated by the current solution (increment). I am a bit confused about how this will work, since our current solution represents a displacement increment, but we want stress and strain calculations to be done using the total displacement. Can we pass displacementT into these functions?

@willic3
Copy link
Contributor Author

willic3 commented Mar 13, 2024

This method of approximating gravitational stresses requires the solution be an increment (displacement increment). This is incompatible with our boundary conditions and interface conditions that rely on the solution field NOT being an increment. Thus, this approach seems like a dead end as it would require rewriting the boundary conditions and interface conditions as well as updating the coordinates and solution.

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

No branches or pull requests

2 participants