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

Neumann_point BC type #128

Open
beauof opened this issue Mar 12, 2018 · 3 comments
Open

Neumann_point BC type #128

beauof opened this issue Mar 12, 2018 · 3 comments

Comments

@beauof
Copy link
Contributor

beauof commented Mar 12, 2018

The Neumann_point BC type gives unexpected results.

For a simple uniaxial extension test, the results look as if one does not apply consistent nodal forces, however, that's what this BC type is supposed to compute.

Needs debugging or proper documentation on how to use this BC type!

@chrispbradley
Copy link
Member

Hi Andreas,
do you have an example of zip file that you could attach that shows the problem. What RHS values are you expecting?

@beauof
Copy link
Contributor Author

beauof commented Mar 12, 2018

The example that I am currently working on is this one:
https://github.com/beauof/iron-tests/blob/master/examples/example-0201-u/src/iron/example.F90
and it is documented (sparsely at the moment) here:
https://github.com/beauof/iron-tests/blob/master/tests.pdf

It's for a 3D uniaxial test:

  • left surface is fixed in x-direction
  • center node of left surface is fixed in x-/y-/z-direction
  • right surface has displacements or a traction applied (tractions are computed using the analytic solution for a given stretch)

It uses the following variables to set up the simulation:

! defaults for input arguments
WIDTH = 1.0_CMISSRP
HEIGHT = 0.2_CMISSRP
LENGTH = 0.2_CMISSRP
NumberGlobalXElements = 2
NumberGlobalYElements = 2
NumberGlobalZElements = 2
SolverIsDirect = 1 ! direct solver by default
JACOBIAN_FD = 1 ! finite-difference Jacobian by default
MooneyRivlin1 = 0.5_CMISSRP*35.7_CMISSRP ! see note above for Neo-Hookean solid
MooneyRivlin2 = 0.0_CMISSRP ! If MooneyRivlin2 == 0 --> Neo-Hookean solid
useGeneratedMesh = 1 ! generated mesh by default
BCDISP_MAX = 0.2_CMISSRP
bcType = 0 ! 0 - Dirichlet BC by default; else: 1 - Neumann_integrated, 2 - Neumann_point

A BCDISP_MAX=0.2 corresponds to a stretch of 1.2.

A bcType=0 will run the displacement-driven problem. A bcType=1 will run the problem with Neumann_integrated BC and bcType=2 is meant to use the Neumann_point BC.

There are a few routines that read user-defined meshes if requested, that you can comment out.
There is also a routine that computes the nodal weights for the Neumann_integrated BC necessary to run bcType=1. The routines are here at the moment:
https://github.com/beauof/meshReader/blob/master/src/meshReader.F90
But you won't need them if you run the problem with generated meshes and bcType=1 or bcType=2.

Thanks for having a look!

@lorenzo-mechbau
Copy link

For this type of traction-BC the trick is to use Neumann_point on the traction surface (with input force values given in the current configuration) AND apply 0. Neumann_integrated_only conditions everywhere else. This way, integration happens only on the required Neumann surface, otherwise it occurs on ALL faces adjacent to every Neumann node.

The way Neumann_point has been coded is meant to deal with forces applied in one point, but affecting the whole surface. In case of distributed forces you can either use this workaround or re-code the Neumann integration (I have a branch for that).

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

No branches or pull requests

3 participants