servo walls maintaining a specified confining pressure

Asked by ceguo

Hello, everyone!

I am running a triaxial compression simulation, and I want to add a constant confining pressure to the side walls. So how to write the runnable script? Or do I have to add the pressure in the interaction group?

Tks

Question information

Language:
English Edit question
Status:
Solved
For:
ESyS-Particle Edit question
Assignee:
No assignee Edit question
Solved by:
Dion Weatherley
Solved:
Last query:
Last reply:
Revision history for this message
Best Dion Weatherley (d-weatherley) said :
#1

Hi Ceguo,

ESyS-Particle provides a subroutine LsmMpi.applyForceToWall(..) that implements a servo wall for assigning a constant force to a given wall. It is quite similar to the LsmMpi.moveWallBy(..) subroutine, used in the WallLoader Runnable in the tutorial on uniaxial compression.

To implement a servo wall, you need to do three things:

1) add a wall to your simulation script e.g.

   sim.createWall(
      name = "servoWall",
      posn = Vec3(0.0,0.0,0.0),
      normal = Vec3(1.0,0.0,0.0)
   )

2) define the type of interactions between that wall and particles in your simulation script e.g.

    wp1=NRotElasticWallPrms(
       name = "servoWallInteraction",
       wallName = "servoWall",
       normalK = 1.0
    )
    sim.createInteractionGroup(wp1)

3) write a runnable containing a run(..) subroutine in which you assign a constant force to the wall via its Interaction Group e.g.

class ServoWallLoading (Runnable):
   def __init__(self, sim=None):
      Runnable.__init__(self)
      self.sim = sim

   def run (self):
      self.sim.applyForceToWall(
         interactionName = "servoWallInteraction",
         force = Vec3(100.0,0.0,0.0)
      )

N.B. applyForceToWall(..) expects the name of a wall's Interaction Group (e.g. servoWallInteraction) not the name of the wall itself.

Of course for a triaxial test you will need to define four walls, four interaction groups and your Runnable will need four calls to LsmMpi.applyForceToWall(...) to implement servo walls for all four sides of the model.

Good luck and have fun!

Cheers,

Dion.

Revision history for this message
Diego Peinado Martín (diego-peinado) said :
#2

There is a function to:

LsmMpi::applyForceToWall()

wall is displaced in the normal direction so that the total force applied to the wall attains a specified value.
Parameters:

        * interactionName (str) - Name of the interaction group governing interactions between the wall and particles.
        * force (Vec3) - Wall is displaced in the direction of the normal, so that net wall force is force.n.

This function is in the documentation: http://esys.esscc.uq.edu.au/esys-particle_python_doc/current/pythonapi/html/index.html,
in: Package esys :: Package lsm :: Module LsmPy :: Class LsmMpi

So one force can be specified. If you want to specify the pressure, then if you know the area of the contact surface you can calculate the force as pressure times area.

I must say that I did not use it yet.

Revision history for this message
ceguo (hhh-guo) said :
#3

Thanks Dion Weatherley, that solved my question.