You are on page 1of 11

Simulación de elementos discretos

Explicación Liggghts versión 3

Ejecución del programa

En primer lugar es necesario tener Linux como sistema operativo.


Windows tiene tantas ventajas como desventajas, en este caso la desventaja principal es la necesidad de instalar
una maquina virtual en Windows como Cygwin para simular una interfaz en Linux.
Ademas de los problemas asociados al querer simular en paralelo con varios procesadores con software mpi, de
forma correcta
Todo esto existe en Windows, pero no es lo mas optimo.
Al igual que Windows, Linux tiene distintas versiones y cual utilizar depende del gusto del usuario o de las
prestaciones especificas que requiera el trabajo a realizar.

En particular el desarrollador de este tutorial prefiere Ubuntu en su versión 16.04 la cual se puede descargar
gratuitamente desde la pagina del creador, como también se pueden realizar donaciones voluntarias.
Que versión de ubuntu instalar también es importante ya que los software desarrollados tienen compatibilidades
e incompatibilidades con las versiones mas antiguas o mas recientes.
En particular la versión 16.04 de Ubuntu al ser presentada en el año 2016 tiene la antigüedad suficiente para
encontrar todos los tutoriales, ayudas o problemas en Internet, tanto en foros como en comunidades de
desarrolladores.
Cuando se instala a Ubuntu en conjunto con Windows se debe asegurar que el bootloader este disponible, en el
caso del equipo utilizado para estas simulaciones al presionar el botón de encendido, rápidamente hay que
teclear la tecla supr
Aparece un menú con tres opciones, donde hay que seleccionar la tercera correspondiente al disco donde esta
instalado el sistema operativo.

Si la instalación se realiza desde cero, con Windows primero y ubuntu después se tiene un acceso mas rápido

Figura 1: Bootloader al tener dos sistemas operativos

Donde las opciones para arrancar el sistema operativo se ven como en la figura 1
Para mas detalle de como instalar estos dos sistemas existen numerosos tutoriales en internet.
Al tener ubuntu ya instalado hay que instalar Liggghts y Paraview
Para Liggghts se debe seguir el tutorial de la siguiente pagina, es bastante extenso por lo que se debe tener
paciencia, la versión a utilizar es Liggghts-Public version 3 ya que con otras versiones las instrucciones pueden

https://www.cfdem.com/media/DEM/docu/Section_intro.html

La parte mas importante es llegar a obtener el archivo lmp_auto y que compile sin arrojar errores.
En el tutorial se puede llegar a la sección Running Liggghts®-public en ese punto se pide realizar un tutorial de
prueba correspondiente al chute, si la instalación fue exitosa no habrá problema en visualizar los resultados.

Para instalar Paraview se utiliza la versión compatible para ubuntu 16.04 que corresponde a la versión 5.01
Es necesario tener el archivo lmp_auto en la carpeta de cada caso de simulación que se realice ya que este
contiene todas las directivas y direcciones de compilación y computo del programa.

En la carpeta del caso de estudio se realizan los siguientes pasos:

ctrl + alt + t
en la terminal se debe escribir mpirun -np 4 lmp_auto<in.script
donde script es el nombre del caso particular

Simulación de una geometría rotatoria para Liggghts versión 3

En este ejemplo se utiliza in.mill


Las lineas que empiecen con # son comentarios, todo lo que no este comentado y en negrita es parte del código
atom_style sphere
# Define que estilo de átomos a usar en una simulación los mas comunes son granular y sphere
# Para el estilo esfera, las partículas son esferas y cada una almacena un diámetro y una masa por
partícula. Si el diámetro es> 0.0, la partícula es una esfera de tamaño finito. Si el diámetro = 0.0, es
una partícula puntual. Esto se usa generalmente para modelos granulares. En lugar de esfera, se
puede usar la palabra clave granular.

atom_modify map array


boundary fff
#Condiciones de contorno, existe del tipo m, f y p
#m (minimum) es de no periódica y fija con un valor mínimo
#f (fix) no periódica y fija
#p (periodic) condición periódica
#s (shrink-wraped) condición escogida, poco utilizada
newton off
#Determina si se debe calcular las interacciones entre partícula-partícula, es usado en simulaciones donde las
interacciones de corto alcance son importantes
communicate single vel yes
#Fija el estilo en que un procesador intercambia información con sus procesadores vecinos y como guarda la
información de átomos fantasmas.
units si
#Sistemas de unidades
region domain block -0.3 0.3 0.0 0.2 -0.3 0.3 units box
#Este es un parámetro bastante importante ya que define una región en donde se realizara la simulación, todas
las geometrías, mallas e inserción de partículas debe estar contenida dentro de este dominio. En general no es
bueno sobredimensionarla ya que se utiliza mas memoria, si esta bien definida cuando las partículas cruzan este
dominio, desaparecen.
create_box 2 domain
# Crea el dominio definido anteriormente, si se utilizan dos tipos de materiales se cambia el numero
neighbor 0.05 bin
neigh_modify delay 0
# Para cada partícula existen partículas vecinas, Liggghts crea una lista de las partículas con sus vecinas y con
frecuencia es necesario re-calcular las interacciones entre ambas, estas lineas definen lo anteriormente descrito.
El valor predeterminado para unidades del SI es 0.001[m], pero se puede ampliar al tamaño para tener mayor
eficiencia, generalmente se toman un valor de igual orden de magnitud que el tamaño de las particulas.

#Propiedades del material


#Cuando se ocupan mas de 1 material las propiedades son especificadas secuencialmente

#Material properties
fix m1 all property/global youngsModulus peratomtype 5.e6 5.6e6
fix m2 all property/global poissonsRatio peratomtype 0.45 0.45
fix m3 all property/global coefficientRestitution peratomtypepair 2 0.1 0.1 0.1 0.1
fix m4 all property/global coefficientFriction peratomtypepair 2 0.05 0.05 0.05 0.05
fix m6 all property/global cohesionEnergyDensity peratomtypepair 2 300000 30000 30000
30000

#Hay que destacar que existen propiedades definidas con matrices ya que las interacciones en distintas
direcciones cambian al tener propiedades no isotropicas, esto en especial para el coeficiente de restitución, el
coeficiente de fricción, la densidad de energía de cohesión y otras.
La densidad de energía de cohesión permite visualizar la interacción entre las partículas, si se dejan todos los
valores iguales es posible no notar la interacción wall-particle por lo que se recomienda cambiar estos valores y
ver que ocurre.

#pair style
pair_style gran model hertz tangential history cohesion sjkr #Hertzian with cohesion
pair_style gran model hertz tangential history cohesion sjkr #Hertzian with cohesion
pair_coeff **

#El estilo de pares define como es la interacción entre las partículas, se tienen dos lineas ya que se utilizan dos
materiales
#Paso temporal para las iteraciones
timestep 0.00005

#Forces of gravity
fix gravi all gravity 9.81 vector 0.0 0.0 -1.0

#box walls
#Crea las paredes que no son parte de la malla, en este caso las paredes son necesarias para que las partículas no
salgan del dominio
# fix wall/gran permite definir como interactúan las partículas con las paredes, una explicación detallada y los
tipos de interacciones se explican en el siguiente enlace

https://www.cfdem.com/media/DEM/docu/Section_gran_models.html

fix boxwalls_1 all wall/gran model hooke tangential history primitive type 1 yplane 0.0
fix boxwalls_2 all wall/gran model hooke tangential history primitive type 1 yplane 0.2

#import mesh from cad


#importa las mallas en formato stl, define sus características de interacción y define una cara de inserción de las
partículas
fix cad1 all mesh/surface file meshes/cilindro.stl type 1
fix bucket_wall all wall/gran model hertz tangential history mesh n_meshes 1 meshes cad1
fix inface all mesh/surface file meshes/insertion_face.stl type 1

#distributions for insertion


#Aquí se definen los tamaños y densidades de las partículas a insertar
# Grava 40[mm] -> radio 0.020[m]
# Gravilla 20[mm] -> radio 0.010[m]
# Arena 10[mm] -> radio 0.005[m]
fix pts1 all particletemplate/sphere 15485863 atom_type 2 density constant 1450 radius constant 0.02
fix pts2 all particletemplate/sphere 15485867 atom_type 2 density constant 1550 radius constant 0.01
fix pts3 all particletemplate/sphere 49979693 atom_type2 density constant 1650 radius constant 0.005
fix pdd1 all particledistribution/discrete 32452843 3 pts1 0.44 pts2 0.19 pts3 0.37

#Esta sección es la mas importante ya que define como se insertan las partículas y es la que puede generar mas
problemas.
# En primer lugar es importante que la sección de inserción de partículas sea lo suficientemente grande.
#Particle instertion
fix ins all insert/stream seed 32452867 distributiontemplate pdd1 nparticles 6000 vel constant 0.0 0.0
-1.0 particlerate 1000 overlapcheck yes insertion_face inface extrude_length 0.08
fix integr all nve/sphere

#La siguiente seccion permite definir que datos se guardaran


#make a dump of particles and the stl file
dump dmp all custom/vtk 200 post/movingMesh_*.vtk id type type x y z ix iy iz vx vy vz fx fy fz omegax
omegay omegaz radius
dump dumpstl all mesh/stl 200 post/dump*.stl
dump dumpstress all mesh/gran/VTK 200 post/mesh_*.vtk stress wear cad1

#Esta sección define como son las iteraciones y si alguna malla se mueve o rota

#run with particle insertion


run 10000 upto
unfix ins

#run to let particle settle


run 10001 upto

#now lift the particles up


fix rotatecad1 all move/mesh mesh cad1 rotate origin 0. 0. 0. axis 0. 1. 0. period 1.
run 20000
Ver resultados Paraview

Para ver los resultados se debe estar en la carpeta del caso de simulación en particular y teclear

ctrl +alt +t
paraview

En algunas versiones se debe teclear export LC_ALL=C antes de ingresar paraview ya que existen problemas al
importar las geometrías stl en algunas versiones

Aparece una ventana de este tipo, donde se presiona el icono de la carpeta

Figura 2: Vista primaria Paraview

Figura 3: Selección de la carpeta a visualizar en Paraview


Hay dos opciones, ver la malla y geometría o ver los resultados de la simulación

La carpeta meshes contiene las mallas


La carpeta post contiene los resultados

Figura 4: Archivos de postproceso

Los archivo aquí mostrados son:

dump.stl → tiene terminación stl la cual es la terminación de las mallas que importa Liggghts por lo tanto con
esto se puede ver la geometría
movingMesh_..vtk → vtk es un archivo de salida para postprocesos que muestra los cambios dinámicos en las
partículas
movingMesh_boundingBox_* → Contiene el domino de simulación, esto es importante ya que las partículas se
mantienen encerradas en este dominio. Si este es definido mal, las partículas interpretan que no tienen restricción
de espacio y caen infinitamente.

Se deben seleccionar los tres y presionar ok.

Figura 5: Pestaña de navegación de


archivos cargados en Paraview
Si todo sale bien presionar apply, con lo que aparece la geometría y una caja de lineas blancas que la contiene.

Figura 6: Utilidades básicas de Paraview

Para este problema movingMesh_* contiene la información de las partículas, para poder visualizar los distintos
tamaños de las partículas es necesario activar un plugin que no esta cargado por defecto.

Vamos a la parte superior de paraview, buscamos la pestaña tools e ingresamos a Manage plugins

Figura 7: Lista de Plugins no cargados por defecto en Paraview


Seleccionamos PointSprite_Plugin y presionamos en Load Selected y luego en Close
Con esto esta cargado el paquete que permite visualizar en distintos tamaños las partículas.

De lo contrario las partículas serán puntuales aunque contengan la información de masa y diámetro se verán
puntos separados de otros sin entrar en contacto.

Figura 8: Visualización puntual de los elementos utilizados en Paraview

Se selecciona la pestaña que por defecto muestra surface y se elige la opción Point Sprite
En la pestaña Properties se debe seleccionar en Coloring → radius con lo cual las esferas según sus tamaños
tiene colores distintos

En Scale by se selecciona radius, con esto las esferas se visualizan de tamaños distintos, ademas se debe
presionar Edit Radius Transfer Function y seleccionar Proportionnal para que sean proporcionales al tamaño
determinado
Figura 9: Opciones para la visualización con PointSprite de Paraview

Realizando los pasos anteriormente descritos se puede visualizar lo siguiente

Tutorial realizado por Fernan González Torres → mail: fernan.gonzalez.12@sansano.usm.cl


Anexos

Geometría → cilindro de 0,5[m] de diámetro y de 0,2[m] de ancho. Realizado en FreeCAD


→ Insertion_face Cara por la que entran las particulas
Copiar lo siguiente a un archivo de texto y definir como insertion_face.stl

solid INSERTION_FACE
facet normal 1.0 0.0 0.0
outer loop
vertex -0.2 0.01 0.0
vertex 0.0 0.2 0.0
vertex 0.2 0.0 0.0
endloop
endfacet
endsolid INSERTION_FACE

Malla → Creada con Gmesh


Codigo → Utilizando Geany para la edición de texto

# Main
atom_style sphere
atom_modify map array
boundary fff
newton off

communicate single vel yes


units si
region domain block -0.3 0.3 0.0 0.2 -0.3 0.3 units box
create_box 2 domain
neighbor 0.05 bin
neigh_modify delay 0

#Material properties
fix m1 all property/global youngsModulus peratomtype 5.e6 5.6e6
fix m2 all property/global poissonsRatio peratomtype 0.45 0.45
fix m3 all property/global coefficientRestitution peratomtypepair 2 0.1 0.1 0.1 0.1
fix m4 all property/global coefficientFriction peratomtypepair 2 0.05 0.05 0.05 0.05
fix m5 all property/global cohesionEnergyDensity peratomtypepair 2 30000.0 500000.0 500000.0 0.0
fix m6 all property/global k_finnie peratomtypepair 2 1.0 1.0 1.0 1.0

#pair style
pair_style gran model hertz tangential history cohesion sjkr #Hertzian with cohesion
pair_style gran model hertz tangential history cohesion sjkr #Hertzian with cohesion
pair_coeff **

timestep 0.00005

#Forces of gravity
fix gravi all gravity 9.81 vector 0.0 0.0 -1.0

#box walls
fix boxwalls_1 all wall/gran model hertz tangential history primitive type 1 yplane 0.0
fix boxwalls_2 all wall/gran model hertz tangential history primitive type 1 yplane 0.2
#import mesh from cad:
fix cad1 all mesh/surface file meshes/M77.stl type 1
fix bucket_wall all wall/gran model hertz tangential history cohesion sjkr mesh n_meshes 1 meshes cad1
fix inface all mesh/surface file meshes/insertion_face.stl type 1

#distributions for insertion


#Aqui se definen los tamaños y densidades de las particulas a insertar
# Grava 40[mm] -> radio 0.020[m]
# Gravilla 20[mm] -> radio 0.010[m]
# Arena 10[mm] -> radio 0.005[m]
fix pts1 all particletemplate/sphere 15485863 atom_type 2 density constant 1450 radius constant 0.02
fix pts2 all particletemplate/sphere 15485867 atom_type 2 density constant 1550 radius constant 0.01
fix pts3 all particletemplate/sphere 49979693 atom_type 2 density constant 1650 radius constant 0.005
fix pdd1 all particledistribution/discrete 32452843 3 pts1 0.44 pts2 0.19 pts3 0.37

#Particle instertion
fix ins all insert/stream seed 32452867 distributiontemplate pdd1 nparticles 6000 vel constant 0.0 0.0 -1.0 &
particlerate 1000 overlapcheck yes insertion_face inface extrude_length 0.08
fix integr all nve/sphere

#make a dump of particles and the stl file


dump dmp all custom/vtk 200 post/movingMesh_*.vtk id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay
omegaz radius
dump dumpstl all mesh/stl 200 post/dump*.stl
dump dumpstress all mesh/gran/VTK 200 post/mesh_*.vtk stress wear cad1

#run with particle insertion


run 10000 upto
unfix ins

#run to let particle settle


run 10001 upto

#now lift the particles up


fix rotatecad1 all move/mesh mesh cad1 rotate origin 0. 0. 0. axis 0. 1. 0. period 1.
run 20000

You might also like