LibMultiScale & AMEL User Guide

Guillaume ANCIAUX

Chapitre 1  Introduction

The LibMultiScale Library has been designed to be a high performance tool to study the mutiscale methods currently employed on material simulations. The component design of the project distinct the base code components (Continuum mechanics code implemented through finite element, meshless, XFEM or molecular dynamics codes) from the coupling components. Other services like dumpers ( logging the state of the simulated system on files or memory, enabling filtering based on values averaging or geometrical criterion...), or stimulators that implement initial conditions (temperature, initial displacements) are provided.

At this day, the only stable coupling method is based on the Bridging Method. The molecular dynamics component can be implemented by Lammps or Stamp while the Continuum mechanics component use a constitutive law based on the Cauchy-Born Rule and is implemented by a code developed in our team. The project is actually maintained by Guillaume ANCIAUX.

Chapitre 2  Getting LibMultiScale and Compiling

Please consult the INSTALL.txt page for details on how to fully install LibMultiScale and its client AMEL (Atomistic Multi-domain coupling with External finite elements for LibMultiScale) that is downloadable at the page:
http://gforge.inria.fr/docman/?group_id=915
The LibMultiScale Project is actually maintained by Guillaume ANCIAUX in a collaboration between the ScalApplix Project, INRIA Futurs, and the CEA Ile-de-France (contract CEA/DIF N4600084494/P6H32). The license that governs the LibMultiScale rights is a CECILL-C which can be consulted at the address :
http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html

Chapitre 3  Preprocessing of the models

In order to use the LibMultiScale and its client AMEL, one should prepare the models wanted to be coupled. For instance, in the actual case, a mesh should be prepared and a mono-atomic crystal. In order to illustrate the discussion, we will describe the construction of a concrete case. The case studied will be a simple rectangular piece of material with a planar and circular(composed geometries) bridged zone. The figure 3.1 present the global aspect of such a coupled domain. It is a square domain with a side of L = 1000 ⋅ r0 where r0 is the averaged inter-atomic distance. We firstly want to build an mono-atomic crystal of argon, meaning that r0 = 1.22452143391761666.10−10. The bridged zone placed in the center of the domain would have an height size h = L/10 while length is l = L/3. Bridged zone size should not be smaller than 10 r0 in order to avoid wave reflexions. Thus it represents a bridging size of L/100. In order to prevent reflexions, we use here a bridged size of 2 L /100.
First we prepare the set of atoms constituting the crystal we want to modelize. Then we build the mesh using the appropriate tools. The numerical models are associated with configuration files that will be described in the following.



Figure 3.1:



The different stages of this tutorial can be found in the examples directory of LibMultiScale release. In order to build the model we create a file casCustom that will initially contain the useful values we defined. The key words are not defined systematically in the following. For a full description, one should report to the glossary at the end of the document. Firstofall, we need a global section where models, and other important data will be assigned. This is done by opening a section block:
#general section
Section MultiScale RealUnits
...
endSection
The syntax is Section NAME UNITS, where the name is identified by the MultiScale and the units declare the units used in the section. Inside of that block, we set the declaration of reusable variables. We naturally define the dimensions of the system by:
#definition of the global numbers
#inter-atomic distance
LET r0 = 1.2245214339176166619211e-10
#total domain size
LET L = 1000 * r0
#height of molecular domain
LET h = L / 10
#square width of molecular domain
LET l = L / 3
#the size of the bridged zone
LET bridgedSize = 2 * L / 100
#the dimensions of the coarsed zone
LET l2 = l + bridgedSize + h
LET h2 = bridgedSize + h
Any simulation will have to define its system dimension by:
DIMENSION 2
and the internal units system used by the codes. This precision is important as the base code components for molecular mechanics have restricted unity systems.
UNITCODE RealUnits
The next section will explain how to configure the atomic section before the continuum section and its mesh.

3.1  preparing the crystal

In order to prepare the atomic zone, the first step in the construction is to build a squared/cubic zone full of atoms adequately disposed. Then we will carve into that cubic zone to obtain the desired geometry. In our concrete case we want to modelize 2D Argon crystalline. We need to define a Bravais lattice. There are two atoms in the reference Lattice, with coordinates (in reduced unities):

0.0 0.0 0.5
0.5 0.5 0.5
The lattice is rectangular and follows the vectors:
1.22452143391761666e-10 0.0  
0.0   2.1209333385024e-10 0.0
            



We will describe two ways to obtain that cubic zone. The first one will use Stamp to replicate Bravais Lattice while the second will use a given script to generate input for Lammps.

3.2  Generating with Stamp

In the following we may define by = 2.1209333385024.10−10. The basic information concerning a crystal is synthetized in a file called FAtomes. A more precise description of this Stamp file can be found in the Stamp Documentation. For the desired crystal, this file is:
*******************************************
***** les unites sont le MKS **************
** sauf les masses sont molaires(Kg/mol) **
*******************************************
nbAtomes 1

nom   AR
masse  39.95e-3
sigma  0.11e-9
epsilon  1.6567944e-21
interPotentiel PotentielLJ

****************************
**** coordonnees du motif 1.23157195294235e-10 **
****************************
Motif
1.22452143391761666e-10 0.0   0.0
0.0   2.1209333385024e-10 0.0
0.0   0.0   7e-10
***********************************
**** coordonnees reduires [0..1] **
* X **** Y ***** Z *****At ********
***********************************
Structure
2
0.0 0.0 0.5 AR
0.5 0.5 0.5 AR
Then a Stamp configuration file must be produced. In the same way, the appropriate structure of this file can be found in the Stamp documentation. We give here an example:
FichierAtomes config-stamp/FAtomes2D
LongueurInput  angstrom
TempsInput   ps
TemperatureInput K
EnergieInput  eV
EnergieOutput  eV
Ensemble   NVE
Schema    verlet
Structure   Fichier
Decoupage   474 81 1
Potentiel   LJ
Rcut    2.93885144140227
Trequis    0.0
Deltatemps   0.001
RandSeed   17
ConditionX   Libre
ConditionY   Libre
ConditionZ   Libre
*EcrireStatProc  1
StepLimit   40000
StepAvg    200
Protection   100
The Decoupage keyword control how many times the Bravais lattice is duplicated in each directions. Accounting the bridging zone size, a rectangular zone with dimensions l' × h' needs to be filled with atoms:

l' × h' = (l + bridgedSize + h) × (bridgedSize + h)     (3.1)
  = (L ⋅ 136/300) × (L ⋅ 12 /100)     (3.2)


The rounded-off (ceiled) rectangular zone should be:
l' × h' = 474 r0 × 140 r0


We then determine the lattice factors:

fx = 474      fy = 140 ⋅ 0.5773502691896277986 = 81


3.3  Generating with Script application

That second method will produce an input file for Lammps. In the crystalgen directory there exist scripts helpful to produce crystal input files for Lammps. The interesting one for the described example is gencrystal-lammps.pl. The various scripts for pre/post treatment can be found on the project page1. We first need to provide a bravais lattice basis vectors file:
argon2D.bravais:
   1.22452143391761666 0 0
   0 2.1209333385024 0
   0 0 7
Then we need to provide the list of atoms present in an unity lattice in reduced coordinates:
maille-argon2D.xyz:
   2
   ARGN
   AR 0.0 0.0 0.5
   AR 0.5 0.5 0.5
Then calling the following command generate the input file for Lammps:
./gencrystal-lammps.pl argon2D.bravais maille-argon2D.xyz 474 81 1 > custom.lammps
Then a lammps configuration file must be provided. Let it be in.lj.custom with the following containing:

# 2d Lennard-Jones Argon

units           real
dimension       2
atom_style      atomic
boundary        s s p

read_data       config-lammps/data.custom
#velocity       all create 80.0 87287 loop geom

pair_style      lj/cut 2.93885144140227
pair_coeff      1 1 0.238492861193117 1.1 2.93885144140227

neighbor        0.4 bin
neigh_modify    every 20 check no

fix             1 all nve
restart         1000 restart.lammps
thermo          10
run             50
Remark : here the run keyword is present. For use with LibMultiScale it should not be present as it is LibMultiScale who will performs the integration steps.

3.4  Carving the coarse model geometry

We have prepared a rectangular 2D crystal. We want to control the dimensions using the LibMultiScale facilities. To do that, we must complete our configuration file adding a dedicated section. The coarse geometric description will be a cube described by its corner:
GEOMETRY CUBE 2 -l2/2 l2/2 -h2/2 h2/2 0 0
The syntax is GEOMETRY ID TYPE DIMENSION PARAMETERS. Parameters are described in the glossary. The geometries can be defined anywhere in the configuration files, as well as variables declarations.
#Stamp section
Section Stamp RealUnits
DOMAIN_NAME md
STAMP_FILE config-stamp/CAScfcCustom
GEOMETRY 4 CUBE 2 -l2/2 l2/2 \\ 
               -h2/2 h2/2 0 0
DOMAIN_GEOMETRY 4
DOMAIN_BOUNDARY_GEOMETRY 4
endSection
    
#Lammps section
Section Lammps RealUnits
DOMAIN_NAME md
LAMMPS_FILE config-lammps/in.lj.custom
GEOMETRY 4 CUBE 2 -l2/2 l2/2 \\
               -h2/2 h2/2 0 0
DOMAIN_GEOMETRY 4
DOMAIN_BOUNDARY_GEOMETRY 4
endSection

In this sections we defined the name of the domain by section DOMAIN_NAME name, the configuration file used with STAMP/LAMMPS_FILE filename, and the geometry of the domain by DOMAIN_GEOMETRY ID. The boundary must be provided also, but practically it is used in the coupling process, and then need not to be coherent at this stage. Then the total geometry is assigned also to the boundary. We now have to declare the model in the global section by adding MD_CODE STAMP 0 or MD_CODE LAMMPS 0 (where 0 is the declared ID of the model) giving the global configuration file:
#general section
Section MultiScale RealUnits

#definition of the global numbers
#inter-atomic distance
LET r0 = 1.2245214339176166619211e-10
#total domain size
LET L = 1000 * r0
#height of molecular domain
LET h = L / 10
#square width of molecular domain
LET l = L / 3
#the size of the bridged zone
LET bridgedSize = 2 * L / 100
#the dimensions of the coarsed zone
LET l2 = l + bridgedSize + h
LET h2 = bridgedSize + h

DIMENSION 2
UNITCODE RealUnits
MD_CODE STAMP 0
DUMPER PARAVIEW 1
endSection

#Stamp section
Section Stamp RealUnits
DOMAIN_NAME md
STAMP_FILE config-stamp/CAScfcCustom
GEOMETRY 4 CUBE 2 -l2/2 l2/2 -h2/2 h2/2 0 0
DOMAIN_GEOMETRY 4
DOMAIN_BOUNDARY_GEOMETRY 4
endSection



Figure 3.2: Coarsed crystal domain generated at stage 1. Distance unities are angstroems.



We also added a DUMPER keyword to request the creation of a dumper component with implementation through PARAVIEW output (the first parameter is the frequency at which the dumper should generate outputs).

Then, launching the command ./AMEL casCustom 1 would produce in ../analysis directory the initial dumps in VTK Xml format2. The figure 3.2 illustrate what should be obtained at this stage.

Remark: The main difference between Lammps and Stamp component is the internal unit system used. Lammps have an internal system that use angstroem metric system unit. Stamp uses SI metric system unit. The difference is notified by the command UNITCODE option (option = AtomUnits/RealUnits)
In order to refine the geometric description, we have to use composed geometries. In that manner, we can decompose the total atomic geometry in three geometries as presented by the figure 3.3. Two circles with radius h2/2 and centers (−l/2,0) and (l/2,0) respectively, and a rectangle with (−l/2,−h/2), (−l/2,h/2),(l/2,−h/2) and (l/2,h/2) as corners. This can be done by the following definitions:
#Stamp section
Section Stamp RealUnits
DOMAIN_NAME md
STAMP_FILE config-stamp/CAScfcCustom
#definition of sub geometries
#values used to define the half circles and the central square
LET ANGLE1 = pi/2
LET ANGLE2 = 3 * ANGLE1
GEOMETRY 2 BALL 2 -l/2 0 0 h2/2 ANGLE1 ANGLE2
GEOMETRY 3 BALL 2 l/2 0 0 h2/2 ANGLE2 ANGLE1
GEOMETRY 4 CUBE 2 -l/2 l/2 -h2/2 h2/2 0 0
#union of the geometries
GEOMETRY 5 UNION 2 3
GEOMETRY 6 UNION 5 4

DOMAIN_GEOMETRY 6
DOMAIN_BOUNDARY_GEOMETRY 6
endSection



Figure 3.3: refined molecular domain.



We have prepared the crystal for the multi-scale model. We now have to focus on the preparation of the continuum domain.

3.5  Preparing the mesh

The current way used to prepare the final mesh needs the software Gmsh3that can build 2D/3D meshes. We can consider a scale factor that will be passed to LibMultiScale as a parameter. This is an option for convenient build of the mesh. We then consider that L=2.

The first stage of building consists in placing the relevant boundary points of the domain. These points will be added for the external boundary:

(-1,-1)  (-1,1)  (1,-1)  (1,1)

and for the internal boundaries: (-0.33,-0.1)  (-0.33,0.1)  (0.33,-0.1)  (0.33,0.1)

Then we have to introduce the points to define the bridged zone by the points:

(-0.33,-0.14)  (-0.33,0.14)  (0.33,-0.14)  (0.33,0.14)

Finally, in order to describe the curvatures we define the points:

(-0.43,0)  (-0.47,0)  (0.43,0)  (0.47,0)

The Gmsh file you should obtain is:
Point(1) = {-1,-1,0,0.1};
Point(2) = {-1,1,0,0.1};
Point(3) = {1,-1,0,0.1};
Point(4) = {1,1,0,0.1};

Point(5) = {-0.33,-0.1,0,0.1};
Point(6) = {-0.33,0.1,0,0.1};
Point(7) = {0.33,-0.1,0,0.1};
Point(8) = {0.33,0.1,0,0.1};

Point(9) = {-0.33,-0.14,0,0.1};
Point(10) = {-0.33,0.14,0,0.1};
Point(11) = {0.33,-0.14,0,0.1};
Point(12) = {0.33,0.14,0,0.1};

Point(13) = {-0.43,0,0,0.1};
Point(14) = {-0.47,0,0,0.1};
Point(15) = {0.43,0,0,0.1};
Point(16) = {0.47,0,0,0.1};

Point(17) = {-0.33,0,0,0.1};
Point(18) = {0.33,0,0,0.1};



Figure 3.4: skeleton points for the mesh that should be obtained



Now, we have to build the segments, and then the surfaces in order to let Gmsh generate the elements. The following lines constitute the geometric information of the continuum domain (eventually, they can be built using the graphical interface of Gmsh):
Circle(1) = {8,18,15};
Circle(2) = {15,18,7};
Circle(5) = {10,17,14};
Circle(6) = {6,17,13};
Circle(7) = {13,17,5};
Circle(8) = {9,17,14};
Circle(9) = {11,18,16};
Circle(10) = {12,18,16};
Line(11) = {6,8};
Line(12) = {5,7};
Line(13) = {9,11};
Line(14) = {10,12};
Line Loop(15) = {10,-9,-13,8,-5,14};
Line Loop(16) = {11,1,2,-12,-7,-6};
Plane Surface(17) = {15,16};
Line(18) = {4,3};
Line(19) = {1,2};
Line(20) = {2,4};
Line(21) = {3,1};
Line Loop(22) = {18,21,19,20};
Plane Surface(23) = {22,15};



Figure 3.5: segment and surfaces for the mesh that should be obtained



Now, one could play with the weights in order to inform Gmsh of the surfacic constraints on elements we want to maintain. Typically we want the mesh to be well refined near the center of the domain, i.e. the future atomic zone. In that manner we affect weights of 0.01 to points 5 to 12. Now using the Gmsh mesh construction facility we may obtain the result presented on the figure ?? by typing:
gmesh -o mymesh.unv -format unv -2 file.geo
where file.geo is the file containing all the precedent geometric informations. Then a mesh file formatted with UNV standard loadable by LibMesh is produced. This file should be placed in LibMultiScale/run/config-libmesh/ in the standard file tree place.
Remark : one can refine in a different way by playing with the weights placed onto the initial points. Creating other internal surfaces allow refinement to be better controlled. For example, setting the same weight to all points induce the mesh presented by figure ??.



Figure 3.6: Final mesh obtained by Gmsh



We open a new section block with name LibMesh:
#LibMesh section
Section LibMesh RealUnits
...
endSection
Then we need to set the name of the domain:
DOMAIN_NAME mymesh
Then we have to set the size of the domain. The global size has been decided to be L = 1000 r0.

Then we notify the file that the libMesh will have to load:
MESH_FILE config-libmesh/mymesh.unv L/2
The following parameter is the scaling factor. It is set in order to scale the mesh file to the real domain size. As we choose L=2 in the mesh file, we may want to scale by half the real domain size.
We also have to describe the geometry of the domain. This is done using the substraction operator and the shrink operator. The shrink operator takes any basic geometry (no combined geometries) and reduces it following given parameters. The geometry declaration take the form:
#full domain cube
GEOMETRY 17 CUBE 2 -L/2 L/2 -L/2 L/2 0 0
#shrinking the two circles
GEOMETRY 18 SHRINK 5 bridgedSize 0 0
#shrinking the central cube only on the y axis
GEOMETRY 19 SHRINK 4 0 bridgedSize 0

GEOMETRY 20 UNION 18 19
GEOMETRY 21 SUB 17 20
DOMAIN_GEOMETRY 21
DOMAIN_BOUNDARY_GEOMETRY 21
We have to define the constitutive relation that need to be used as well as the mass of the monoatomic crystal. We want to use a constitutive law defined by the Cauchy-Born rule with a lennard-jones potential. We precise the parameters by:
CONSTITUTIVELAW CAUCHY-BORN 2.1*r0
LENNARDJONES r0 1.6567944e-21 0.11e-9 [lattice_file]
MASS 39.95e-3
For the Cauchy-Born constitutive law to work well, one should specify a bravais lattice section into a given file (or in the same file as the LibMesh section if no file name was specified). This section should look like:
#crystal section
Section Lattice RealUnits
LET sqrt3 = 1.732050807568877294
BRAVAIS 0 r0 0.0 0.0
BRAVAIS 1 r0/2 r0/2*sqrt3 0.0
ATOMTYPE Ar 39.95e-3 0
NBATOM 1
ATOM Ar 0.0 0.0 0.0
endSection
which is the declaration of a mono-atomic crystal of Argon with two atoms per lattice.
Also, the atomic mass is required in order to compute the cauchy-born rule. And finally we declare the timestep that will be used:
TIMESTEP 1e-15
In order to dump the finite element domain, the same way that we did for the molecular dynamics model, we have to declare it in the global section adding:
ELAST_CODE LIBMESH 1
At the stage 3, the configuration file should look like:
File Edit Options Buffers Tools Help                                                                                                                                                                               
#global section
Section MultiScale RealUnits

#definition of the global numbers
#inter-atomic distance
LET r0 = 1.2245214339176166619211e-10
#total domain size
LET L = 1000 * r0
#height of molecular domain
LET h = L / 10.
#square width of molecular domain
LET l = L / 3
#the size of the bridged zone
LET bridgedSize = 2 * L / 100
#the dimensions of the coarsed zone
LET l2 = l + bridgedSize + h
LET h2 = 2*bridgedSize + h
DIMENSION 2
UNITCODE RealUnits
MD_CODE STAMP 0
ELAST_CODE LIBMESH 1
DUMPER PARAVIEW 1
endSection

#Stamp section
Section Stamp RealUnits
DOMAIN_NAME md
STAMP_FILE config-stamp/CAScfcCustom
#definition of sub geometries
#values used to define the half circles and the central square
LET ANGLE1 = pi/2
LET ANGLE2 = 3 * ANGLE1
GEOMETRY 2 BALL 2 -l/2 0 0 h2/2 ANGLE1 ANGLE2
GEOMETRY 3 BALL 2 l/2 0 0 h2/2 ANGLE2 ANGLE1
GEOMETRY 4 CUBE 2 -l/2 l/2 -h2/2 h2/2 0 0
#union of the geometries
GEOMETRY 5 UNION 2 3
GEOMETRY 6 UNION 5 4
DOMAIN_GEOMETRY 6
DOMAIN_BOUNDARY_GEOMETRY 6
endSection

#LibMesh section
Section LibMesh RealUnits
CONSTITUTIVELAW CAUCHY-BORN 2.1*r0 
MESH_FILE config-libmesh/mymesh.unv L/2
DOMAIN_NAME mymesh
GEOMETRY 17 CUBE 2 -L/2 L/2 -L/2 L/2 0 0
GEOMETRY 18 SHRINK 5 bridgedSize 0 0
GEOMETRY 19 SHRINK 4 0 bridgedSize 0
GEOMETRY 20 UNION 18 19
GEOMETRY 21 SUB 17 20
DOMAIN_GEOMETRY 21
DOMAIN_BOUNDARY_GEOMETRY 21
LENNARDJONES r0 1.6567944e-21 0.11e-9
TIMESTEP 1e-15
MASS 39.95e-3
endSection

#crystal section
Section Lattice RealUnits
LET sqrt3 = 1.732050807568877294
BRAVAIS 0 r0 0.0 0.0
BRAVAIS 1 r0/2 r0/2*sqrt3 0.0
ATOMTYPE Ar 39.95e-3 0
NBATOM 1
ATOM Ar 0.0 0.0 0.0
endSection
Reusing the command ./AMEL casCustom 1 will now produce one more vtu file describing the continuum model giving the result presented by figure ??.



Figure 3.7: Full domain



3.6  Preparing the bridging zone

At this step of the construction we have defined both models. The coupling is activated by the simple keyword
BRIDGING_CODE TYPE ID1 ID2 OPTIONS...
The bridging that will be described is based on the Bridging Method (the only one stable at this time). We need to manage a Bridged Zone where the DOFs of both domains will be weighted.

The detection of the DOFs involved in the bridging zone is made by a simple test: any DOFs for which its initial position is inside the intersection of both model geometries, is considered as a coupled DOF. The ponderation process has a detached procedure. In order to help the LibMultiScale to know the shape of the weighting gradients, the user have to provide a geometry ID. This geometry can be composed only by operator UNION. All primitive are accepted. We then have to describe the Bridging Zone by four sub geometries:
GEOMETRY 100 CUBE 2 -l/2 l/2 -h2/2 -h/2 0 0
GEOMETRY 101 CUBE 2 -l/2 l/2 h/2 h2/2 0 0
GEOMETRY 102 BALL 2 -l/2 0 h/2 h2/2 ANGLE1 ANGLE2
GEOMETRY 103 BALL 2 l/2 0 h/2 h2/2 ANGLE2 ANGLE1
GEOMETRY 104 UNION 100 101
GEOMETRY 105 UNION 102 103
GEOMETRY 106 UNION 104 105
BRIDGING_CODE BRIDGING 0 1 106
If we submit this configuration file, AMEL generates additional VTU files:
The two first ones are presented by figures ?? and ??. It presents the DOFs that were detected inside of the bridging zone based on the geometric description given. And the color field represents the associated weight.



Figure 3.8: Mesh part detected inside if the bridging zone at stage4






Figure 3.9: Atoms detected inside if the bridging zone at stage4



It can be seen that it did not worked correctly. Due to the curvature of the circles, atoms may have been inside of both domain geometric description, but not inside of the desired elements. Then the LibMultiScale have selected additional elements creating the “elemental picks” around the mesh. Additionally some nodes have a weight of zero indicating that there were not inside the Bridging Zone geometry (default weight is zero).

Then, as a reaction to the problem, one should reduce with a delta parameter the atomic domain and grow equivalently the bridging zone geometry.

The grid VTU dump files are the grids used to speed up the computation of atom-element association.

Concerning the other files, they treat a part of the coupling we did not approach until now. On a geometry like the one presented, boundary conditions cannot be maintained on the free surfaces4. The surface effect involved can be controlled by the coupling component. This is the goal of the boundary geometries in the molecular dynamics cases. One should define a zone where the atoms are concerned by the force field rupture near the free surface. Then the coupling component will detect these atoms and owning elements to impose to these atoms a displacement interpolated by the continuum domain. The two last “fictifs” files present the detection. As we declared the boundary geometry to be the same as the domains, then all the atoms in the bridged zone will have an imposed displacement. We must refine the boundary geometry to conform the wanted atoms (i.e. free surface within a given cutoff radius range).

The total configuration file at stage 5 would be:
#global section
Section MultiScale RealUnits

#definition of the global numbers
#inter-atomic distance
LET r0 = 1.2245214339176166619211e-10
#total domain size
LET L = 1000 * r0
#height of molecular domain
LET h = L / 10.
#square width of molecular domain
LET l = L / 3
#the size of the bridged zone
LET bridgedSize = 2 * L / 100
#the dimensions of the coarsed zone
LET l2 = l + bridgedSize + h
LET h2 = 2*bridgedSize + h
#delta parameter
LET delta = r0/6

DIMENSION 2
UNITCODE RealUnits
MD_CODE STAMP 0
ELAST_CODE LIBMESH 1

GEOMETRY 100 CUBE 2 -l/2 l/2 -h2/2-delta -h/2 0 0
GEOMETRY 101 CUBE 2 -l/2 l/2 h/2 h2/2+delta 0 0
GEOMETRY 102 BALL 2 -l/2 0 h/2 h2/2+delta ANGLE1 ANGLE2
GEOMETRY 103 BALL 2 l/2 0 h/2 h2/2+delta ANGLE2 ANGLE1
GEOMETRY 104 UNION 100 101
GEOMETRY 105 UNION 102 103
GEOMETRY 106 UNION 104 105
BRIDGING_CODE BELYTSCHKO 0 1 106

DUMPER PARAVIEW 1
endSection

#Stamp section
Section Stamp RealUnits
DOMAIN_NAME md
STAMP_FILE config-stamp/CAScfcCustom

#definition of sub geometries
#values used to define the half circles and the central square
LET ANGLE1 = pi/2
LET ANGLE2 = 3 * ANGLE1
GEOMETRY 2 BALL 2 -l/2 0 0 h2/2-delta ANGLE1 ANGLE2
GEOMETRY 3 BALL 2 l/2 0 0 h2/2-delta ANGLE2 ANGLE1
GEOMETRY 4 CUBE 2 -l/2 l/2 -h2/2-delta h2/2-delta 0 0
#union of the geometries
GEOMETRY 5 UNION 2 3
GEOMETRY 6 UNION 5 4

#definition of the boundary
LET rcut = r0 * 2.6
GEOMETRY 7 SHRINK 5 rcut 0 0
GEOMETRY 8 SHRINK 4 0 rcut 0
GEOMETRY 9 UNION 7 8

GEOMETRY 10 GROW 5 r0 0 0
GEOMETRY 11 GROW 4 0 r0 0
GEOMETRY 12 UNION 10 11
GEOMETRY 13 SUB 12 9

DOMAIN_GEOMETRY 6
DOMAIN_BOUNDARY_GEOMETRY 13
endSection

#LibMesh section
Section LibMesh RealUnits
CONSTITUTIVELAW CAUCHY-BORN 2.1*r0 
MESH_FILE config-libmesh/mymesh.unv L/2
DOMAIN_NAME mymesh
GEOMETRY 17 CUBE 2 -L/2 L/2 -L/2 L/2 0 0
GEOMETRY 18 SHRINK 5 bridgedSize 0 0
GEOMETRY 19 SHRINK 4 0 bridgedSize 0
GEOMETRY 20 UNION 18 19
GEOMETRY 21 SUB 17 20
DOMAIN_GEOMETRY 21
DOMAIN_BOUNDARY_GEOMETRY 21
LENNARDJONES r0 1.6567944e-21 0.11e-9
TIMESTEP 1e-15
MASS 39.95e-3
endSection
The user must control that the ponderation is correct, that the surface effect will affect the appropriate atoms. All the configuration of the model was done in a sequential aspect. Simulation can yet be launched changeing the number of step to the desired one:
./AMEL casCustom 10000
The description of the stimulation and dumpers needed to alter and monitor the simulation is given in the glossary. Concerning the processor mapping, the user can consult the next section.

3.7  Configuring the distribution over a cluster of processors

At this day, there is only one type of distribution possible. Two models cannot coexist on the same processor. More precisely, each processor will be the host for one model and only one model as a UNIX processus. Then the option for the user is to decide how many processors are attributed on a given model. This is done by the keyword PROCESSORS. A sample configuration using 4 processors, 3 for the MD model and 1 for the FE model should be:
COM DISTRIBUTED
PROCESSORS 1 3
PROCESSORS 0 1
where the COM keyword expose the mapping solution. As we said, this is actually the only one available.


1
http://gforge.inria.fr/projects/libmultiscale/
2
readable by the opensource software ParaView
3
Any mesh generator software that produce readable formats for LibMesh should work fine with LibMultiScale.
4
in simpler geometries, periodic boundary conditions could be applied, or truncated potential

Chapitre 4  Keyword list

In this chapter are described all the rules and keywords for the parser of AMEL.

4.1  Section syntax

A section should be declared as follow:
Section NAME UNITS
...
endSection
where the name of the section is specified by NAME, and UNITS specify the units that will be used in that section. This is mandatory in order to have an automatic units conversion, ensuring common config files for different internal units (hence for different codes). UNITS can have the value RealUnits (S.I.) and AtomUnits (angstroems,...).

4.2  Variable declaration

LET varname = mathexpression
This is used to declare any reusable variable in the configuration files. The variables are defined in the reading order. If a keyword, like MD_CODE or ELAST_CODE is placed, the variables defined in the called section will be defined for the next line of the currect section.
PRINT var
Used to dump the value of a variable. Debug usage for preparation of the domains, geometry ... etc.

4.3  Geometry keywords

GEOMETRY ID TYPE OPTIONS ...
The description of the different types follows now.
Declaration of a BALL geometry.
GEOMETRY ID BALL 1 CX RMIN RMAX  
GEOMETRY ID BALL 2 CX CY RMIN RMAX TMIN TMAX
GEOMETRY ID BALL 3 CX CY CZ RMIN RMAX TMIN TMAX PMIN PMAX
The declaration is dimension dependant. Considering the spherical coordinates, RMIN,RMAX from the radius offset. TMIN TMAX, the angle offset for teta coordinate. PMIN, PMAX, is the angle offset on the last coordinate.
Declaration of a CUBE geometry
GEOMETRY ID CUBE 1 XMIN XMAX HX
GEOMETRY ID CUBE 2 XMIN XMAX YMIN YMAX HX HY
GEOMETRY ID CUBE 3 XMIN XMAX YMIN YMAX ZMIN ZMAX HX HY HZ
The declaration is demention dependant. The parameters are the coordinates of the bounding box. The last parameters (HX,HY,HZ), specify a possible hole in the bounding box allowing various geometries like presented by figure ??.

    

Figure 4.1: Here are presented the geometries declared for two different use of the hole parameter.



Declaration of an ELLIPSOID geometry
GEOMETRY ID ELLISPOID 1 CX A1
GEOMETRY ID ELLISPOID 2 CX CY A1 A2
GEOMETRY ID ELLISPOID 3 CX CY CZ A1 A2 A3
CX,CY,CZ specify the center of the ellipsoid. the parameters A1, A2 and A3 specify the axis length of the ellipsoid.

Declaration of a composed geometry
GEOMETRY ID INTER ID1 ID2
GEOMETRY ID UNION ID1 ID2
GEOMETRY ID SUB ID1 ID2
INTER produce the intersection of geometries ID1 and ID2 while UNION produce their union. SUB substract the geometry ID2 from the ID1 geometry.

Shrinking/Growing a geometry
GEOMETRY ID SHRINK ID1 FX FY FY
GEOMETRY ID GROW ID1 FX FY FZ
The FX,FY,FZ parameters should positive. Only composed geometries, CUBE and BALL may be used by this operator. In the BALL case, only FX is relevant, modifying the RMAX value. In cube case, the bounding box is reduced in each direction following FX,FY,FZ.

4.4  Atomic domain keywords

Giving the domain name:
DOMAIN_NAME name
Defining the domain geometries:
DOMAIN_GEOMETRY ID
DOMAIN_BOUNDARY_GEOMETRY ID
This is the total domain geometric description and the boundary geometry. The boundary geometry is only used by the coupling components to correct surface effects.
Setting behavior for parallel optimisation (optional).
MIGRATION value
value can be enable or disable. It has sense only for parallel simulations. By default it is enabled. At present time this keyword is deprecated.

4.4.1  Lammps keywords

LAMMPS_FILE config-file

4.4.2  Stamp keywords

STAMP_FILE config-file

4.4.3  MD1D keywords

This model works only in 1D.
RCUT value
Defines the cutoff range for the potential.
R0 value
Defines the interatomic distance of the simulated monoatomic crystal.
NUM_ATOMES value
Defines the number of atoms wanted. The generated crystal will be centered.
MASS value
Defines the atomic mass.
TIMESTEP value
Defines the timestep of simulation.
EPSILON value
SIGMA value
Defines the parameters for the Lennard-Jones potential.

4.4.4  DummyMD keywords

This model is used to replay a saved simulation. Thus a model have to be reloaded and then frames are read instead of calculated.
DUMMY_TYPE type
Specify the type of simulation to reload. It can be LAMMPS, LAMMPS or MD1D.
DUMMY_FILE file
Specify the config file used to initiate the domain. It is hence a STAMP or LAMMPS or MD1D configuration file.

4.5  Continuum keywords

Giving the domain name:
DOMAIN_NAME name
Defining the domain geometries:
DOMAIN_GEOMETRY ID
DOMAIN_BOUNDARY_GEOMETRY ID
This is the total domain geometric description and the boundary geometry. The boundary geometry is only used by the coupling components to correct surface effects.
ELEM_SIZE value value2D value3D 
This specify the uniform size of the elements in each direction. This is used for automatic grid meshing of the continuum domain.
CONSTITUTIVELAW type params
This specify to the constitutive law controller that is wanted. At present time, possible values for type are CAUCHY-BORN and LAME.
For CAUCHY-BORN type, one parameter has to be specified and is a cutoff radius. A command line specifying potential to be used is then required.
For LAME type, lame parameters are required ( Poisson modulus should be precised first ).
TIMESTEP value
Specify the explicit timestep value.
LENNARDJONES r0 epsilon sigma lattice_file
Specify the parameters for the lennard jones parameter. First one is interatomic distance and others are classical lennard-jones parameters. If lattice_file is specified then the Lattice section is searched in that file. Otherwise the lattice section is searched in the current file.
ANALYTIC_EAM a p re ksi q lattice_file
Specify the parameters for the analytic eam potential. The computed potential has the formula:

W = Σi ≠j a exp(-p(r_ij/re -1)) + ksi √Σi≠j exp(-2q(r_ij/re -1))
EAM potential_file lattice_file
Specify the parameters for the eam potential. The potential file has the standard format described at the address http://www4.eas.asu.edu/cms/potentials/main/main.htm
MASS value
Mass used to compute initial density.
MESH_FILE file_name scalefactor
This notify the filename of the mesh to be loaded. Then the mesh will be scaled by the given factor.
SHIFT x y z
This will translate the nodes by the vector (x,y,z), giving opportunity to tune the mesh position with atoms.
RESTART_FILE filename
Specify a file to reload positions, velocity and forces stored at a given state. It should be a zipped xml file with valid tags. Such files can be generated by dumpers (see Dumper section).
RELOAD_PARTITION filename
not yet documented
BOUNDARY_CONDITION geom_id type regexp1D egexp2D regexp3D
The boundary conditions specified by this option affect the geometry given by the geom_id parameter. The boundary conditions can actually be of two types : DISP or PBC.
PRESSION value
This is used to apply a pression onto the X-Z surfaces of a continuum domain. The value of the pression is to be precised in the used code units (no automatic conversion). Obviously this option was created for a really specific job. Not to be used commonly.

4.6  Lattice keywords

This following keywords are to be used into a Lattice section.
BRAVAIS coordinate axisx axisy axisz
Specify a bravais vector identified by coordinate. There should be as much bravais vectors as the dimension of the space.
ATOMTYPE type mass charge
Declare one atom type that is to be associated with mass and charge.
NBATOM value
Specify the number of atoms into the lattice. There should be as use of ATOM keyword (see the following) as NBATOM specify.
ATOM type x y z
Declare one atom into the lattice. The coordinates are lattice relative. Type parameter should refer to a previous declaration by ATOMTYPE.

4.7  Global keywords

This keywords should be used in the MultiScale section (which should be unique for a given case).
UNITCODE value
This command is used to specify the internal units that will be used. The possible values are AtomsUnits and RealUnits.
MD_CODE type ID conffile 
This keyword defines a molecular dynamics domain. The type defines the code that will be used to compute the trajectories of the atoms (MD1D, LAMMPS, STAMP or DUMMY). The ID parameter identify by a number the domain hence declared. The conffile parameter specify where to find the information about the configuration of this domain, which will have to contain a section about that type of domain. If no file is specified, then the current file is parsed for such a section.
ELAST_CODE type ID conffile 
Idem for continuum mechanics code. Values for type can only be LIBMESH at present time.
BRIDGING_CODE TYPE IDMD IDCONTINUUM geomID [GRID_DIVISIONX value] 
                                           [GRID_DIVISIONY value] 
                                           [GRID_DIVISIONZ value] 
This keyword declares a bridging zone coupled by a method of type TYPE. Types can be: IDMD and IDCONTINUUM are domain identifiers that must have been introduced by the command MD_CODE and ELAST_CODE respectively. The geomID identify a geometry that will be used for the description of the weighting functions.

In the computation of the association between atoms and finite elements, a spatial grid is used to speed up the research. The optional GRID_DIVISIONX parameters define the granularity of such a spatial grid along the X-axis. Idem for the GRID_DIVISIONY and GRID_DIVISIONZ parameters.

4.8  Dumper keywords

Declaration of a dump component:
DUMPER TYPE FREQUENCY OPTIONS ...
all dumper have their frequency to be specified. The options may change one to an other. Still, there are general options: The Paraview Dumper:
DUMPER PARAVIEW FREQUENCY [DISP] [VEL] [FORCE] [CONSTRAINT]
                          [BASE64] [TEXT] [ID] [MASS]
                          [PROC] [COMPRESSED] [P0]
the options are explained:
DISP : request dumping the displacements
VEL : request dumpin the velocities
PROC : request dumping the distribution
FORCE : request dumping the force/acceleration field
CONSTRAINT : request dumping the constraint field
DEFORMATION : request dumping the deformation field (only for continuum)
BASE64 : request using in the base64 mode(default)
TEXT : request dumping in the text mode
COMPRESSED : compression of dumped file is activated (only if zlib support has been compiled)
ID : internal identity number of each dof is dumped as a normal field used for debugging only
MASS : mass associated with each dof is dumped
P0 : initial position is dumped 
DUMPER EPSN FREQUENCY xml_file
Unmaintained.
DUMPER DUMPER1D FREQUENCY
Produce 1D dump files analysable via gnuplot scripts. the script analysePVF.pl should be used to produce videos or fig files.
DUMPER FIG FREQUENCY
If libMesh has been compiled with the fig support this should produce (only in sequential) a valid xfig file (helpfull to produce documentation)
DUMPER SCOTCH FREQUENCY
This will produce (in sequential only) scotch graph format files. Mainly used in internal to produce graph taking into account the coupling stage.
DUMPER DUMPERECIN FREQUENCY
This will produce a single txt file with the kinetic energy for each timestep.
DUMPER XYZ FREQUENCY
This will produce an XYZ file for the atoms (only).
DUMPER LAMMPS FREQUENCY
This will produce a lammps file for the atoms (only). This file will be loadable for a simulation using lammps module.
DUMPER RESTART FREQUENCY
This will produce restart files for the used codes. One restart file produced by lammps may not be used with Stamp. The format is xml with dedicated tags and optionally (depend on the compilation of LibMultiScale) gzipped.

4.9  Stimulation keywords

This presents all the stimulation that is possible to inject.
STIMULATION type options
This declares the use of a given stimulation. There are two kinds, initial and permanent stimulation. The following details the principal types.
STIMULATION GAUSS lWave intensity geometryID
This produces an initial displacement with a gaussian expression onto a given geometry. The value at the exponential term is given by lWave while the intensity value modify the factor against the exponential (intensitye−(2π r/lWave)2 where r is the distance to the center of the given geometry).
STIMULATION SIN lWave intensity geometryID
This produces an initial velocity field following a sinusoid function intensitysin(2π r /lWave).
STIMULATION MODULATE lWave intensity geometryID
This produces a modulation over the actual displacement by a given frequency. The applied formula is u += intensitycos(2π r/lWave).
STIMULATION RAZ
This is used when restarting a situation. One may want to reset displacement, velocities, forced to zero. the initial positions are then set
STIMULATION MATIERELANCEE axe intensity geomID
This produce a uniaxial velocity field over the given geometry. The velocity field follows a gradient oriented along a given axes (1=x, 2=y, 3=z) growing from the center of the geometry to the external surfaces. The intensity is the higher value imposed.
STIMULATION STABILISE
This implements the stabilization algorithm of Melh (minimization heuristic that kill velocities which do not follow the potential slope).

4.10  Parallel keywords

In order to declare the distribution over a cluster, one should set the following keywords.
COM DISTRIBUTED
PROCESSOR ID_DOMAIN nb_procs
In the future, other methods of distribution, accounting to the geometrical situation will be available.


Ce document a été traduit de LATEX par HEVEA