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

add Neo-Hookean solid #559

Open
wants to merge 10 commits into
base: master
Choose a base branch
from

Conversation

richardschu
Copy link
Contributor

this adds a first version of the Neo-Hookean solid to the material library. It is quasi incompressible, meaning the Poisson ratio can be chosen closer to 0.5 compared to other displacement-based formulations and locking is reduced. I tested it in the structure/bar application, where the QuasiStatic solver performed rather well. In general we immediately see the increased integration effort and increased iteration counts (linear solver, depending on the problem also nonlinear solver) -- both of these aspects should be tackled in the future. For now, we focus on the functionality. Also, I added some tests, taking the nonlinear rod solution as reference.

scalar I_1 = trace(C);

tensor F_inv = invert(deformation_gradient);
tensor C_inv = invert(C);
Copy link
Contributor Author

Choose a reason for hiding this comment

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

use tensor C_inv = F_inv * transpose(F_inv);


scalar one_over_J_times_Dd_J = trace(F_inv * gradient_increment);
tensor Dd_F_inv = -F_inv * (gradient_increment * F_inv);
tensor Dd_C_inv = Dd_F_inv * transpose(F_inv) + F_inv * transpose(Dd_F_inv);
Copy link
Contributor Author

Choose a reason for hiding this comment

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

use scalar Dd_I_1 = 2.0 * trace(transpose(gradient_increment) * deformation_gradient);


scalar one_over_J_times_Dd_J = trace(F_inv * gradient_increment);
tensor Dd_F_inv = -F_inv * (gradient_increment * F_inv);
tensor Dd_C_inv = Dd_F_inv * transpose(F_inv) + F_inv * transpose(Dd_F_inv);
Copy link
Contributor Author

Choose a reason for hiding this comment

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

use tensor Dd_F_inv_times_transpose_F_inv = -F_inv * (gradient_increment * F_inv) * transpose(F_inv);
and then tensor Dd_C_inv = Dd_F_inv_times_transpose_F_inv + transpose(Dd_F_inv_times_transpose_F_inv);

* and
*
* Psi_iso = shear_modulus / 2 * ( I_1_bar - 3 )
*
Copy link
Contributor Author

Choose a reason for hiding this comment

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

this 3 should be trace(I)

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

Successfully merging this pull request may close these issues.

None yet

1 participant