IRIS user manual
Table of Contents
- 1. Installing IRIS
- 2. IRIS basics
- 3. Ancillary commands
- 4. The analysis
- 5. Defining the model
- 6. Describing the solution
- 7. Controlling the output
- 8. The makefile
- 9. Element types
- 9.1. Type
advectiondiffusion - 9.2. Type
bar - 9.3. Type
beam - 9.4. Type
drod - 9.5. Type
dummy - 9.6. Type
euler - 9.7. Type
fmembrane - 9.8. Type
fpoisson - 9.9. Type
frod - 9.10. Type
fshell - 9.11. Type
fsolid - 9.12. Type
ftcm - 9.13. Type
fthermorod - 9.14. Type
fthermoelerod - 9.15. Type
ftm - 9.16. Type
ftmc - 9.17. Type
fmm - 9.18. Type
fmechmass - 9.19. Type
hydrogen - 9.20. Type
lagfluid - 9.21. Type
lineardiffusion - 9.22. Type
macro - 9.23. Type
mixed - 9.24. Type
navierstokes - 9.25. Type
nonlineardiffusion - 9.26. Type
pointmass - 9.27. Type
poisson - 9.28. Type
smm - 9.29. Type
phasefield - 9.30. Type
phasefracture - 9.31. Type
rigidlink - 9.32. Type
rigidbody - 9.33. Type
slave - 9.34. Type
solid - 9.35. Type
spring - 9.36. Type
stm - 9.37. Type
stokes - 9.38. Type
taylorhood - 9.39. Type
thermalwire - 9.40. Type
trlink
- 9.1. Type
- 10. Material types
- 11. An input file
- 12. A log file
- 13. Bibliography
IRIS is a general purpose program developed with the purpose of providing a flexible, easy to understand, and extensible framework for research in Computational Solid, Fluid, and Structural Mechanics.
The motivation for writing this code was, and still is, to provide a tool to learn and work with the finite element method — and similar methods — allowing researchers to develop specific parts of the method without the need to modify the rest of it. In this way, someone could develop a new equation solver, other a new material model, yet another some type of error estimator, and all of them find that their code will still work together at the end. At this moment, this goal has not been fully attained but special effort has been put in maintaining the structure of the code and the interfaces of the different modules as clear as possible.
The main parts of the code were written in a couple of years of part time dedication. In the last years, the program has been enhanced to include several types of elements, of solvers, of matrix formats, etc. Still, cleaning and documenting is in progress. It is a formidable tasks and both time and people resources are scarce.
The philosophy of the code has always been to favor clarity over speed, yet to render a final code that is fast enough to deal with moderately large problems (in the order of tens of thousands of equations). To achieve this goal the most time consuming part of the solution in large problems — solving large systems of linear equations — employs “high performance” libraries programmed by somebody else, and taken from the internet. The same principle applies to other CPU intensive linear algebra computations (eigenvalue computation, preconditioning, etc). In this way, IRIS developers can concentrate in writing, and maintaining, the tasks more directly related to the finite element method.
The program has been written with the programmer, as well as the user, in mind. Hence, many tools are available for debugging and testing the code as it is written. In particular, problems can be run in “interactive” mode, where the programmer can request specific information from the code at run time.
IRIS started as a pure C code but it grew up to a point where data structures were becoming so complex that it was becoming difficult to understand, which clearly invalidated the original goals. In 2005, the code started to have C structures which contained pointers to functions whose arguments were pointers to structures and pointers to functions too. At this moment, it became clear that the programming language was not suitable for the things that the code wanted to accomplish. And so the code was re-written in C++. Again this major transformation took more than two years and was done in such a way that a working version had to exist at all times. The code was not written from scratch, and some C parts were reused. The outcome is a smaller code, much cleaner, clearer, understandable, maintainable, and extensible. Some of the features of the “old” IRIS have not been ported to the “new” one yet, but most have.
As of today, IRIS can solve a wide variety of problems. Some of its salient features are:
- it can deal with linear and nonlinear problems;
- it includes quasistatic and transient integrators;
- solid elements for small strain and finite, including displacement, mixed and enhanced formulations;
- fluid elements for the Stokes and Navier-Stokes equations, including stabilized elements;
- thermal elements for the (nonlinear) Poisson equation;
- specific analyses exist for topology optimization, mode computation, calculation of dispersion diagrams;
- linear and nonlinear elastic, elastoplastic, thermal and fluid material models.
As explained above, the code makes use of open source libraries. These include:
- Intel Threading Building Blocks (TBB), providing the templates for multithreading programming.
- BLAS and LAPACK are used throughout.
- Large systems of linear equations can be solved using libraries such as SuperLU, LDL, Pardiso, WSMP, HSL. Some of these require specific licences so they are not distributed with IRIS.
- Finally, IRIS might make use of
Petsc. This is a huge project that provides an interface to many other sparse linear solvers that can be used in the code.
As for the rest, all the code is original and has been written from scratch mainly by the author and students of his research groups at UPM and IMDEA Materials Institute.
1. Installing IRIS
IRIS is a medium-sized program which depends on several libraries for complex operations in numerical algebra. To build a fully operational binary, one must link at least some of these libraries; the remaining ones can be added for additional features or improved performance. Since the code is designed to take advantage of shared-memory multi-core microprocessors, special (external) libraries must be linked to harness this feature. In addition, IRIS may be compiled to run on distributed memory computers, and this requires a special installation.
1.1. External libraries
As explained above, IRIS depends on several external — some of them optional —
libraries which enable special type of computations. We describe each of
them indicating what type of capabilities they enable and some
instructions for their installation. The source files for the libraries
are not distributed with IRIS, but mut be downloaded directly from the
internet and installed in user-readable directories. It is not easy to
explain all the possible solution for different machines and operating systems: IRIS
makefile is simple enough to allow for customization.
The following table summarizes the requirements for external libraries
| Name | Mandatory / optional | Tested version |
|---|---|---|
| BLAS | Mandatory | |
| GMSH | Optional (reduced functionality) | 4.11 |
| HSL | Optional | 1.02 |
| Intel TBB | Optional | 4.0 |
| LDL | Optional | 2.1 |
| LAPACK | Mandatory | |
| MUESLI | Mandatory | 2025 |
| Pardiso | Optional | 6.0.0 |
| PETSC | Optional | |
| SuperLU | Mandatory | MT 3.1 |
| WSMP | Optional |
1.1.1. BLAS and LAPACK
The standard Basic Linear Algebra Subroutines (BLAS) and Linear Algebra Package (LAPACK)
can be downloaded from the netlib repository in the internet, where instructions for their installation are provided. Given
they widespread usage, most operating systems provide pre-compiled libraries, or even optimized ones. For Linux, there is a precompiled
library for rpm-based distributions. For Mac OS X, the framework Accelerate contains all BLAS and LAPACK functions so there is no need
to install from scratch the library for either operating system.
1.1.2. Intel TBB
This is a library of C++ classes that simplifies the implementation of multi-threading code. It can be downloaded from
https://www.threadingbuildingblocks.org. In the case of Linux or MacOs
operating systems, it can be installed using apt-get and brew, respectively.
Since 2025, IRIS does not require the Intel TBB library to carry out multi-threaded computations. Leveraging on the C++11 multi-threading standard library, IRIS is fully functional without Intel TBB, at the expense of some performance. This is because Intel TBB library is highly efficient and still faster than the standard multi-threading implementation. However, in the future the Intel TBB library will be removed from IRIS because it is difficult to install and link with the main code.
1.1.3. SuperLU
This is a free general purpose direct linear solver for unsymmetric sparse systems (See = http://crd-legacy.lbl.gov/~xiaoye/SuperLU=). At the current moment, the shared memory, multithreaded version of this solver is employed in IRIS.
1.1.4. LDL
This is another linear solver for general sparse systems of equations that has the virtue of being very compact. It is not extremely efficient, however.
1.1.5. WSMP
This an extremely fast library for sparse systems of equations that takes advantage of multi-processor computers. It includes specific Cholesky, symmetric, and unsymmetric solvers. Developed at IBM, it is non-free software. To include it in IRIS, and compile the necessary code to interface with it, an option needs to be set in the makefile.
1.1.6. Pardiso
Simiarly to the WSMP, this library is extremely fast and takes advantage of share-memory parallelism, providing a wide range of specialized solvers. At this moment it is not free software and no included by default in IRIS. A single option in the makefile can be set to link the library and compile the interface.
1.1.7. HSL solvers
This is a suite of sparse linear solvers developed at the Science and Technology Facilities Council of the UK that offers a free, non-commercial library to academic/research institutions. We have obtained one and its source code is currently shipped with IRIS.
1.1.8. MUESLI
This is a library that includes the most common material models for
continuum problems and was developed side by side with IRIS. It can be
downloaded from http://www.materials.imdea.org/Muesli.
1.1.9. GMSH
The software Gmsh is a freely available, open-source, pre- and post-processor for finite element models (web page). IRIS can take advantage of its capabilities to create solid models from a scripting language that allows for parametric mesh generation.
1.1.10. PETSC
Petsc is a very large library for serial and parallel numerical
computations. It is written in C, but its interface with C++ is simple,
providing access to many linear direct and sparse linear solvers,
nonlinear solvers, preconditioners, ODE integrators, etc. It can be
downloaded form http://www.mcs.anl.gov/petsc/. Petsc can be built in
serial and parallel fashion, and has many options which are explained in
its web page. Four our purposes, a simple configuration script is
provided in the directory Blue/Makefiles/buildpetsc64. To use it,
uncompress Petsc in, for example, usr/local/petsc. Then, copy
buildpetsc64 to this directory and execute buildpetsc64 serial to
build the serial version of the library or buildpetsc64 parallel, for
the parallel version. We note that, in the configuration file provided,
the Superlu library is downloaded, so that this step is simplified.
The user might need to tweak this configuration file for his/her own
specific system.
1.2. Building IRIS
The final stage consists in building the finite element code IRIS and linking it with all the external libraries. The code ships with a makefile that should take care of all the building process (see the Appendix).
The building process starts by selected which optional modules should be linked with the code.
After uncompressing the
files, issuing the command make should take care of everything and build the final binary. If the building process fails, one should look into the makefile, and modify it to suit the computer needs.
If the building process completes, a binary iris will be created. The user then needs to move it to a directory in the correct path, such as /usr/local/bin.
2. IRIS basics
IRIS is a simulation code that an carry out a wide variety of simulation
types, for many different materials, under many conditions. The
definition of these problems is performed using a plain text input file
that provides all the necessary details for describing the model and the
analysis. The input files use, by default, the extension .iris; the code
however, if instructed, can run files with any name.
2.1. Invoking IRIS
IRIS is started from a terminal by the command:
iris [--help] [–-debug] [--save] [-–test] [-–threads t]
[-–version] [filename]
The arguments can be entered in any order and are all optional. Their use is as follows:
filenameis the name (and path) of the analysis file, can be avoided if there is only one file with extension.irisin the directory where IRIS is run.help: Displays the complete list of (optional) arguments to the IRIS command.debug: Activates debug messages in runtime. This option is useful to track the flow of the program and help to identify possible errors. In addition, when the debug option is activated, the amount of data written in the IRISlog file will be increased.save: saves the log file of the previous IRIS run so that it is not overwritten when running again.test: forces IRIS to run a suite of tests that verifies element, materials, mesh functions, etc. The full syntaxis of the command is:
iris –-test all | cad | elements | materials | solvers |
topology | math | meshing
Errors in the tests are shown in the console and no messages are dumped if all the tests are passed.
threads: IRIS is designed to run in multiprocessor computers. By default, the code selects an optimal number of threads into which the processing effort is split. However, the user might want to limit the resources available to the code by using this option. Iftis larger than the number of cores available at runtime, this option is ignored.version: IRIS shows its version and exits.
2.2. The input file
The input file describes the fundamental characteristics of the analysis such as its name, its type, the integrator, the solver, the materials, the element types, etc. Each of these options is defined through lines of commands, which are just assignments separated by commas:
<command> [, <command>] [, <command>] [, <command>] [, ...]
Each <command> is an expression of the form:
<keyword> = <value>
where <keyword> is an alphanumeric string without quotes and <value> might be numeric, alphanumeric or a string delimited
by single or double quotes. Symbolic expressions can be given within
quotes, such as in
radius = "sin(4.0*_pi)+log(43.25*sqrt(10.0))"
A line ending with a backslash character \ indicates that the command is continued in the following line. A command
can span as many lines as needed, as long as each line (except the last
one) is terminated with the continuation character. The program does not
distinguishes lower or upper case, except for data in strings. The
character #, and everything coming after it until the end of the
line, is ignored, thus serving to introduce comments in the input file.
A command line is recognized by its first keyword. In most cases, the order in which the remaining commands are input is not relevant. A few exceptions exist, mostly due to the need to introduce pairs of data. For example, in the tabular scaling factors, a sequence of pairs \((t_i,f_i)\) might be given to indicate the time evolution of a function in tabular form. In this case, and in some others, the value of the function is linked to the time instant prior to it.
Some of the commands are mandatory and some are optional. Generally speaking, the input file serves to create the model, run some type of analysis on it, and finally generate output data than can be postprocessed using external software (more on this later). Strictly speaking, the ordering of the commands is irrelevant since IRIS first reads all of them and later process them according to the most logical order (fist the geometry, then mechanics, finally the output).
The program IRIS is distributed with a directory of examples that illustrate all the capacities of the code. In this directory, subdirectories are included whose names refer to the commands or facilities illustrated by the specific example.
2.3. IRIS process in a nutshell
IRIS is a command-line code that takes a text file as input, creates a model and runs an analysis based on it. The code provides a log file with all the details of the analysis and — optionally — creates all the necessary files for the graphical postprocessing of the results and additional text files with specific output data of the solution. Figure 1 illustrates this overall structure in its simplest form.
2.4. The input file
As previously indicated, the input file is responsible for describing completely the analysis that IRIS must perform when executed. It is based on a language that has been evolving through the years to include, at the moment, a wide range of possibilities as we will describe in subsequent chapters. The IRIS parser reads the input file and the sorts its content to obtain all the information required to run the analysis. Hence, there is a fair amount of freedom in the order with which the analysis is described. Figure 2 describes the main sections of the input file, ordered in a standard fashion.
In the following chapters, each of these blocks will be described with detail
3. Ancillary commands
Before describing the main commands that serve to precisely define the model that is run in IRIS, let us explain some auxiliary commands that might be useful to use at some point in the .iris file, usually to make it more clear or give it a better structure.
3.1. Comments
Let us start by mentioning, once again, that comments are available in the IRIS input file: everything after the character ’\’ is ignored by IRIS parser and does not even appear in the log file. For this reason, many input files — for instance, the ones in the examples directory of IRIS’ distribution — start with a block of the form
# block.iris # Transient simulation of a hyperelastic block # author: i. romero # creation date: 1/7/2022
3.2. Global parameters
In addition to choosing the type of analysis that IRIS must run, users may define global parameters that can be later employed in the input file. By using the command constants, new alphanumeric paramters can be introduced that can later be used as arguments for other commands such as material contants, mesh dimensions, time step size, etc. The syntax of these definitions is
constants, <name> = <value> [, <name> = <value> ] [...]
Like everything other command in IRIS, constant names are case-insensitive. Values can be numeric or symbolic; in the latter case, the symbolic expression must be enclosed in quotes and may contain previously defined constants. The constants command can be used as many times as desired, and in any place of the input file.
3.3. Runtime messages
In some instances, it might be useful to output messages to the screen while running IRIS. The command echo provides precisely this functionality and its syntax is:
echo, <string>
3.4. Including files
IRIS allows users to split the input file among several text files. The main file, the one that is sent in the command line to IRIS, can include all the necessary blocks by using the include command. Its syntax is:
include, file = <string>
4. The analysis
The most fundamental command in an IRIS input file is the one that selects the type of analysis to be executed and it is often the first line of the .iris file, below some comments and text that (optionally) describes the analysis, identifies the author, date, etc.
The command line that selects the type of analysis is of the form:
analysis, type = [controlled | dispersion | eigenvalue
| harmonic | infsup | spectral | staggered | stationary
| topopt | transient ] [, options]
where the [options] depend on the type.
In fact, it is possible to define more than one analysis type in a single input file. In this case, after one analysis is concluded, the next one starts using as initial data the output of the previous one.
4.1. Controlled analysis
4.2. Dispersion analysis
This analysis type allows to calculate the dispersion diagram of a periodic domain along a curve in wave-number space.
4.3. Eigenvalue analysis
This analysis type calculates the eigenvalues and eigenvector of a stiffness or the generalized eigenvalues for a dynamical problem. The commands in the command line are:
| keyword | Data type | Default value |
|---|---|---|
| nmin | <integer> | 0 |
| generalized | <boolean> | False |
| shift | <double> | 0.0 |
| solver | <keyword> | subspace |
In this analysis, IRIS finds the nmin smallest eigenvalues and eigenvectors of the stiffness matrix using the subspace iteration method. When the keyword generalized is included, this type of eigenpairs are calculated instead of the standard ones.
4.4. Harmonic analysis
4.5. Inf-sup analysis
IRIS can be employed to ascertain the well-posedness of a discretization by calculating and writing to disk the main operators that define the problem and its norms. The command line of this type of analysis is of the form
analysis, type = infsup, primal = <string>, dual = <string>
To understand what the analysis does, consider first a irreducible formulation of small strain solid mechanics in which the only variable is, for example, the displacements u. Then, the inf-sup analysis will be launched with the command line
analysis, type = infsup, primal = "u"
The analysis will calculate the stiffness matrix of the problem and write it on the file K.hwb, a sparse storage format known as Harwell-Boeing. The natural norm of this problem is the \(H^1\) norm and one has that \(\|u_h\|_{H^1} = U\cdot N U\), where \(U\) are the nodal values of the displacement field \(u_h\). The inf-sup analysis writes to disk the matrix \(N\) as well.
Consider next a mixed formulation. For example, one could analyze Stokes problem with primal variable v and dual p. The inf-sup analysis of this problem would be defined with the command
analysis, type = infsup, primal = "v", dual = "p"
The analysis will write to disk K.hwb, the global stiffness matrix. However, in this case the stiffness matrix has a block structure \(K=[A B^T; B C]\) and the three blocks will be also written to disk in the files A.hwb, B.hwb and C.hwb. Also, in addition to the natural norm for the velocities which is the \(H^1\) norm, the natural norm for the dual variables is the \(L^2\) norm. The inf-sup analysis will write to disk these two norms with the names PN.hwb and DN.hwb which correspond to the primal norm and dual norm.
4.6. Spectral analysis
4.7. Staggered analysis
4.8. Stationary analysis
A stationary analysis is one where all rate effects are ignored (this includes damping or inertial contributions). These analyses include those in which the loading is applied slowly, meaning precisely that the rate effect have a negligible effect on the solution.
In stationary analyses time must be understood as a dimensionless parameter that indicates how the solution evolves as the loading is (“slowly”) applied. The precise term for this kind of analyses is “quasistatic”
The optional commands that can be provided in a stationary analysis are:
| keyword | Data type | Default value |
|---|---|---|
| final_time | double | 1.0 |
4.9. Topology optimization analysis
4.10. Transient analysis
Transient analysis are designed to solve initial boundary value problems. The equations can be of order 1 or 2 in time. The optional commands that might be given in the analysis command line are:
| keyword | Data type | Default value |
|---|---|---|
| final_time | double | 1.0 |
One should ensure that in a transient analysis the correct integrator is provided. In fact, this choise sets the order of the time derivatives as explained below.
5. Defining the model
An analysis runs always on a model that combines geometry and mechanics. The first step is thus the definition of one or more modelparts, that is, geometrical entities, whose mechanical behavior will be specified later in the input file. These parts are purely geometrical entities: the have (possibly) volume, surfaces, edges, vertices, that live in
\(\mathbb{R}^3\) and can be generated with a CAD program. In order to solve boundary value problems defined on them, at some point a spatial discretization will have to be introduced: maybe the bodies are partitioned into disjoint polyhedra, or maybe filled with particles. In either case, there is no mechanics nor equation on these entities.
There are two ways of defining modelparts. In the first type, simple bodies can be used that are internally built and meshed in IRIS; in the second type, input files from external pre-processing software can be imported. In either case, the modelpart is not only responsible for creating nodes and elements (or particles, in a meshless method), but also all the necessary manifolds where boundary conditions and/or loads might be later applied. Manifolds are named sets of dimension 0 (vertices), 1 (edges), 2 (surfaces), or 3 (volumes). Depending on the shape of the body, the number of manifolds of a particular dimension changes. In some cases, there might not even be a single manifold for a given body (for instance, a sphere has no edges nor vertices).
The available template solids are described next.
5.1. Pre-defined bodies
5.1.1. The brick
This body is a parallelepiped or the image of one of this bodies by a smooth map. Like any other body, it is mandatory to indicate its name and the integer label eltype for the type of elements that it will generate. The name is a string that will identify the body when applying, for example, boundary conditions, or loads on it.
modelpart, type = body, shape = brick, name = <string>, eltype = <integer>, [, lx = <double>] [, ly = <double>] [, lz = <double>] [, divx = <integer>] [, divy = <integer>] [, divz = <integer>] [, centerx = <double>] [, centery = <double>] [, centerz = <double>] [, rotx = <double>] [, roty = <double>] [, rotz = <double>] [, xuvw = <string>] [, yuvw = <string>][, zuvw = <string>] [, subdivisions = <integer>] [, interpolation = p1 | p1p0 | p2 | p2p0 | p2p1 ]
By default, the body has dimensions \(1\times1\times1\), however, these three lengths can be modified with the optional commands lx, ly, lz. The number of divisions along each of the three axes are given by divx,divy,divz. The center of the body can be shifted using the optional parameters centerx, centery, centerz; also, the body is oriented with its axes parallel to the cartesian ones, but this orientation can also be modified by rotating the body with the optional vector rotx, roty, rotz. As indicated before, the parallelepiped can be mapped smoothly to another solid by using the parametric equations
where the three maps are given with the commands xuvw, yuvw, zuvw. The brick generates the following named
manifolds:
| Dimension | Name |
|---|---|
| 0 | vertex0 .. vertex7 |
| 1 | edge0 .. edge11 |
| 2 | surface0 .. surface5 |
| 3 | volume0 |
If the interpolation is selected to be p1 or if it is not used, the brick will generate a mesh of tetrahedra. If other interpolation options are provided, mixed-type meshes will be created. Notice that when a mixed method ( p2p0 or p2p1 ) is selected, a nodeset with name pressurenode will be automatically created that is linked to a pressure node.
Figure 1: A brick generated by IRIS
5.1.2. The qbrick
The parallelepided of the previous section can be meshed with quadrilateral elements simply by replacing the shape brick with qbrick. The options for this new body are identical to those of the brick and are not explained here. Also, the vertices, edges and surfaces are the same.
5.1.3. The qdome
A spherical dome can be generated and meshed with quadrilateral elements. The syntax for creating such a body is:
modelpart, type = body, shape = qdome, name = <string>, eltype = <integer>, [, radius = <double>], [, centerx = <double>] [, centery = <double>] [, centerz = <double>] [, rotx = <double>] [, roty = <double>] [, rotz = <double>] [, subdivisions = <integer>]
By default, the body has radius \(1\), but there is an option to modify it. The center of the body can be shifted using the optional parameters centerx, centery, centerz; also, the body is oriented with its axes parallel to the Cartesian ones, but this orientation can also be modified by rotating the body with the optional vector rotx, roty, rotz. The surface has the following named sets defined:
| Dimension | Name |
|---|---|
| 1 | edge0 |
| 2 | surface0 |
Figure 2: A spherical dome generated by IRIS
5.1.4. The cylinder
This body is a cylinder with default height 1 and radius \(1/2\), meshed with tetrahedra. Like any other body, it is mandatory to indicate its name and the integer label eltype for the type of elements that it
will generate. The commandline for this body is:
modelpart, type = body, shape = cylinder, name = <string>, eltype = <integer> [, radius = <double>] [, height = <double>]\ [, centerx = <double>] [, centery = <double>] [, centerz = <double>]\ [, rotx = <double>][, roty = <double>][, rotz = <double>]\ [, subdivisions = <integer>]
The cylinder generates the following named manifolds:
| Dimension | Name |
|---|---|
| 1 | edge0, edge1 |
| 2 | surface0, surface1, surface2 |
| 3 | volume0 |
Figure 3: A cylinder generated by IRIS
5.1.5. The spherical cap
This body is one eighth of a hollow sphere. More precisely, it is the fraction of the hollow sphere in the positive orthant and it is meshed with tetrahedra. The commandline for this body is:
modelpart, type = body, shape = cap, name = <string>, eltype = <integer> [, rint = <double>] [, rext = <double>]\ [, centerx = <double>] [, centery = <double>] [, centerz = <double>]\ [, rotx = <double>][, roty = <double>][, rotz = <double>]\ [, subdivisions = <integer>]
The code is set to generate \(6*n\) elements subdivisions along the \(\phi\) and \(\theta\) directions, where \(n\) is the number of subdivisions. The cap has the following named manifolds:
| Dimension | Name |
|---|---|
| 0 | vertex0, … , vertex 5 |
| 1 | edge0, …, edge8 |
| 2 | surface0 \((r=r_{int})\) |
| 2 | surface1 \((r=r_{ext})\) |
| 2 | surface2 \((\phi=\pi/2)\) |
| 2 | surface3 \((\phi=0)\) |
| 2 | surface4 \((\theta=0)\) |
| 3 | volume0 |
Figure 4: A spherical cap generated by IRIS
5.1.6. The polycrystal
In IRIS, a polycrystal refers to a parallelepiped with some internal structure, meshed with regular tetrahedra. Similarly, the modelpart qpolycrystal refers to the same type of solid, now meshed with regular hexahedra. These two bodies have the same manifolds of the brick and the qbrick, respectively, and are designed to work with periodic boundary conditions. See the example files 3115_Polyhedra and 3116_Polyhedra2.
The general syntax of this body is similar to that of the brick, but some options have been removed. Specifically, the polycrystal is defined by:
modelpart, type = body, shape = polycrystal, geometry = <string>, name = <string>, [, lx = <double>] [, ly = <double>] [, lz = <double>] [, divx = <integer>] [, divy = <integer>] [, divz = <integer>] [, subdivisions = <integer>]
There are several types of polycrystals, and selected with the option geometry. Each of them may require additional input data to be provided. This is summarized in the following table:
| geometry | Description |
|---|---|
| spheres | Box with a periodic spherical inclusions, each of a different eltype |
| blocks | Box consisting of brick-shaped blocks, each one of a different eltype |
The geometries have options that can be used to tailor the “microstructure” of the polycrystal. In the case of the spheres geometry, the user must define, one by one, the center, radius and eltype of each of the included spheres as in
modelpart, type = body, shape = polycrystal, geometry = spheres, name = <string>, ... [, centerx = <double>] [, centery = <double>] [, centerx = <double>], radius = <double>, eltype = <int>, [, centerx = <double>] [, centery = <double>] [, centerx = <double>], radius = <double>, eltype = <int>,
| Parameter | Default | Description |
|---|---|---|
| centerx | 0.0 | x-coordinate of the sphere center |
| centery | 0.0 | y-coordinate of the sphere center |
| centerz | 0.0 | z-coordinate of the sphere center |
| radius | - | Radius of the spherical inclusion |
| eltype | - | Element type for the inclusion (\(\ge1\)) |
In this polycrystal, the element type with label 1 is reserved for the matrix, and must be defined in the element type list. Note that all data must be defined for each spherical inclusion and also that the eltype might be shared among two or more inclusions.
For the blocks microstructure, the additional option is
| Parameter | Default | Description |
|---|---|---|
| ncrystals | 1 | Cubic root of the number of crystals |
At the moment, the polycrystal does not generate the element types that are required to generate all the elements in the polycrystal. For that, the user is responsible for adding them to the analysis file beforehand.
5.1.7. The sphere
A sphere is, by default, a solid body of radius 1 and it is meshed with tetrahedra. The syntax for including a sphere in IRIS is:
modelpart, type = body, shape = sphere, name = <string>, eltype = <integer> [, radius = <double>] [, centerx = <double>] [, centery = <double>] [, centerz = <double>]\ [, rotx = <double>][, roty = <double>][, rotz = <double>]\ [, subdivisions = <integer>]
The manifolds that are automatically generated for the sphere are:
| Dimension | Name |
|---|---|
| 2 | surface0 |
| 3 | volume0 |
5.1.8. The torus
5.1.9. The rectangle
5.2. Interactions
After two or more model parts have been defined, interactions can be introduced among them. These include contact pairs, glueing parts, embedding parts, etc.
The contact interaction has the following syntax:
contact, penalty = <double>, type = mebody_to_plane, body = <string>,
[, pi0 = <double>] [, pi1 = <double>] [, pi2 = <double>] [, pi3 = <double>]
contact, penalty = <double>, type = nodeset_to_plane, nodeset = <string>,
[, pi0 = <double>] [, pi1 = <double>] [, pi2 = <double>] [, pi3 = <double>]
contact, penalty = <double>, type = nodeset_to_elset, nodeset = <string>, elset = <string>
contact, penalty = <double>, type = elset_to_elset, elset1 = <string>, elset2 = <string>
contact, penalty = <double>, type = body_to_body, body = <string>,
body = <string> [, body = <string>, ...]
contact, penalty = <double>, type = all_bodies
contact, penalty = <double>, type = rigid_wall
5.3. Nodesets and elsets
As its name indicates, nodesets and elsets are collections of nodes and elements, respectively. They enables the use of functions that operate on sets, enormously simplifying the manipulation of large sets of objects.
There are two ways to define a nodeset. First, in some low-level mesh files, nodesets are defined by providing lists of nodes. This includes the imf mesh files and also the meshes imported from Abaqus, gmsh, etc.
Second, in the .iris files one can extract sets of nodes from existing parts and give them a unique name. For example, one can create a Cartesian coordinate system and the select all nodes whose value of one or more coordinates is fixed, or whose value is within a given range (modulo some tolerance). Specifically, the nodeset selection would be obtained by issueing:
nodeset, name = <string>, modelpart = <string>, select = cartesian [, tolerance = <double>] [, centerx = <double>] [, centery = <double>] [, centerz = <double>] [, x = <double>] [, y = <double>] [, z = <double>] [, minx = <double>] [, miny = <double>] [, minz = <double>] [, maxx = <double>] [, maxy = <double>] [, maxz = <double>]
The default values for centerx, centery, centerz are \((0,0,0)\). Similarly, one can select nodes based on their cylindrical coordinates.
nodeset, name = <string>, modelpart = <string>, select = cylindrical [, tolerance = <double>] [, r = <double>] [, theta = <double>] [, z = <double>] [, centerr = <double>] [, centert = <double>] [, centerz = <double>] [, minr = <double>] [, mint = <double>] [, minz = <double>] [, maxr = <double>] [, maxt = <double>] [, maxz = <double>]
Also, one can also select the nodes on a plane with the command
nodeset, name = <string>, modelpart = <string>, select = plane [, tolerance = <double>] [, pi0 = <double>] [, pi1 = <double>] [, pi2 = <double>] [, pi3 = <double>]
Finally, one can define a nodeset directly by providing the node labels. This is not the most desirable strategy because node labels change when the mesh is refined, but can be nevertheless be useful sometimes. The syntax is:
nodeset, name = <string>, modelpart = <string>, select = labels [, label = <integer>] [, label = <integer>] [, label = <integer>]
Elsets are less used in IRIS at, at the moment, can only be defined in mesh files.
5.4. Creating finite element models from mesh files
IRIS can create parts from (low level) mesh files containing only geometrical information of the model and following a syntax originally designed for IRIS in its first versions. The way to import such parts is using the command:
modelpart, type = mesh, filename = <string>, name = <string>, dimension = <integer>
In this type of input, the filename has node positions, elements, nodeset and elset and the maximum dimension of the modelpart is also indicated. This way of describing parts is still operational but is too poor for more advanced applications so it is being superseded by the new format, referred to as imf, or IRIS mesh format, described below.
The imf syntax has the following commands:
nodes: this part of the file lists all the nodes in the part, giving each one a label and its coordinates.elements: describing groups of similar elements.nodeset: collecting nodes in such a way that they can be later used for boundary conditions or other needs.We describe next with more detail each of the parts.
5.4.1. Nodes
Each modelpart must include a list of nodes, where the degrees of
freedom of the problem will be stored. These could be used to generate
nodes in a finite element discretization or particles, in a
particle-based method. In all cases, nodes can be input in one or more
blocks, each of them of the form
nodes label1 x1 y1 z1 label2 x2 y2 z2 ... labeln xn yn zn <empty line>
In each of the lines, the first integer is the label. Then, three
decimal numbers indicate its coordinates. The node labels must be unique
in the model part, although there can be defined in arbitrary order and
need not be sequential. Between numbers the imf format uses one or
more spaces.
5.4.2. Element
Parts can have elements of many different types, all of them connecting one or more nodes. Each element block must be of the form
elements, geometry = volume | surface | curve | point, setname = <string>, eltype = <integer>, [other commands] label1 nodelabel11 nodelabel12 nodelabel13 ... label2 nodelabel21 nodelabel22 nodelabel23 ... label3 nodelabel31 nodelabel32 nodelabel33 ... <empty line>
Following the keyword elements, the rest of the options can be given
in any order. Since the number of nodes does not determine whether the
element is a surface one, a line, etc., the geometry indicates this,
and its value must be one of volume, surface, curve, point. The
setname is a string that might allow in the future to refer to the
whole set of elements; the eltype is a non-negative integer that
corresponds to IRIS eltype numbering. Finally, other keywords can be
used with any value that will help the importer deal with the
peculiarities of the mesh file used as input for the imf format. For
example, the Abaqus importer creates command lines that have the
additional keyword abaqustype = <string>.
After the header, one line of data is provided for each element. The first integer is the element label; then, the node labels for this element follow. Since all the elements in the block are of the same type, all the lines in this block should have the same number of nodes. Finally, the block closes with an empty line.
The element labels must be unique for the whole part, although they need not be consecutively defined and might be given in an arbitrary order.
The number of element blocks is, in the new imf data structure,
important. For every part that describes a finite element model, the
highest dimension among all element blocks determines the type or part,
whether it is a volume, a surface, a curve, o simply a point. Once this
set is defined, the sets of lower dimensions are used to describe its
boundaries. For example, if the set of the highest dimension is a
volume, the remaining sets can be used to describe the elements on the
external surfaces, the edges between two surfaces, the vertices at the
intersection of edges, etc. Similarly, if the set of the highest
dimension is a surface, then the remaining element blocks would allow
the definition of the edges and vertices.
5.4.3. Nodesets
Finally, the nodeset blocks allow to collect a group of nodes under a
common name that can be used later to refer to them and apply boundary
conditions, contact conditions, etc. Several ways are provided to define
a node set. The simplest syntax is
nodeset, name = <string>, type = list label1 label2 label3 label4 label5 label6 label7:label8 label9 ... <empty line>
Except for the first keyword, the remaining fields can be provided in an
arbitrary order. For a nodeset of type list, the node labels are
given in one or more lines separated by spaces and the block ends with
an empty line. Also, the notation i:j, with \(i\le j\), selects all
nodes with labels numbers between \(i\) and \(j\), both included.
There is a second type of nodeset blocks that can be defined by
selecting those nodes already defined in the part that verify certain
geometric conditions. For example, in order to select nodes using their
cartesian coordinates the following command can be used
nodeset, name = <string>, type = cartesian, centerx = <double>, centery = <double>, centerz = <double> [, x = <double>] [, y = <double>] [, z <double>]
Likewise, to select nodes using cylindrical coordinates we use
nodeset, name = <string>, type = cylindrical, centerx = <double>, centery = <double>, centerz = <double> [, r = <double>] [, theta = <double>] [, z = <double>]
5.5. Importing meshes from external other programs
IRIS has also a few importers. Each of them can take input files for other codes, such as Ansys or Abaqus, and generate an intermediate mesh file that can be later read by IRIS. In the past, the intermediate file generated by the importer had the old mesh format; in the future, these auxiliary files should adhere to the new imf syntax.
To import models from other codes IRIS still employs the command modelpart but now with the following syntax
modelpart, type = [abaqus | geo | tecplot | xml], filename = <string>, name = <string>, dimension = <integer>
The name is the tag employed later in the loading and boundary conditions to refer to this model. The filename is a text file with the native format of either of these codes. IRIS will process the input file, create a new imf file, and the use the latter as the input file. The dimension indicates the largest dimension of the manifold of the model part (3 for a volume, 2 for a surface, 1 for a curve), even if all nodes must be in three-dimensional space.
5.5.1. Using Gmsh to generate mesh files
Gmsh is a powerful, open-source, free software for the pre- and post-processing of finite element models. It has a powerful scripting language that can generate meshes from high-level primitives. IRIS can read these Gmsh files, send them to this program, generate a mesh file, and finally import it. To enable this feature, IRIS must be linked with the gmsh library.
modelpart, type = geo, filename = <string>, name = <string>
5.5.2. Importing Abaqus mesh files
Abaqus analyses can be run either from a script file (a files with the extension .inp) or from the graphical user interface (GUI). In the latter case, Abaqus creates the script file and it is always the latter what gets analyzed ultimately and the GUI can then be understood as a tool to generate input files in a convenient way.
In IRIS, when a model part is imported form Abaqus, an .inp text file is expected and then converted to the imf format.
IRIS does not process all the information contained in the inp file. Instead, it extracts from it the nodes coordinates, the elements sets (ELSET), and the node sets (NSET). To be compatible with IRIS, it is important that the Abaqus input file describes element sets for all the volumes, surfaces, edges, and vertices that will be later required for the mesh and the boundary conditions. Since the modelpart command line in IRIS includes a dimension option, only one element set with maximal dimension should be defined in the input file.
6. Describing the solution
Once the model has been described, the features of the mechanical problem can be assigned to it and the controls of the analysis, determined.
6.1. Scaling factors
Before defining how boundary conditions and loads can be input into IRIS, let us introduce the concept of scaling functions and their implementation within the input file language. The code allows to introduce both of these in a way that they vary in time. For example, this would allow to shake the supports of a structure or to apply wind loads whose value and direction depend on time.
A scaling function is thus a scalar-valued function \(F\) that depends on time and space. IRIS allows to define as many as desired, even if they are never used. These functions have all additive form: they are built by simpler contributions \(f_i\) that are added before evaluation. In this way,
In IRIS, we define a scaling function by describing its elementary contributions as in
scaling, combination = <integer>,
type = constant | gaussian | linear | sine | symbolic | tablefile | tabular | triangle
[,options]
Here, the combination refers to the label of the scaling function \(F\), since the individual components can not be used by themselves. Each type of scaling factor has different options as described in the table
| Scaling type | option | default | option | default | option | default | option | default |
|---|---|---|---|---|---|---|---|---|
| constant | value | 1.0 | ||||||
| gaussian | mean | 1.0 | variance | 1.0 | ||||
| linear | initial | 0.0 | slope | 1.0 | ||||
| sine | amplitude | 1.0 | frequency | 0.0 | period | 0.0 | phase | 0.0 |
| symbolic | value | “t” | ||||||
| tablefile | filename | - | ||||||
| tabular | time | value | ||||||
| triangular | peak | height | 1.0 | |||||
| laguerre | lambda0 | 1.0 | n | 1 |
All the scaling contributions, in addition, have two common options
| option | default value |
|---|---|
| start | 0.0 |
| end | infinite |
The tabular scaling factor is slightly different to the rest and its syntax is:
scaling, combination = <integer>, type = tabular, [time = <double>, value = <double>]
[, time = <double>, value = <double>]
[, time = <double>, value = <double>] ...
With this syntax, the user can introduce pairs of time value \((t_i,v_i)\) and the tabular factor will interpolate in intermediate instants.
The tablefile uses an external file that has two columns, the first one for the time, the second one for the value of the scaling factor. Optionally, the file might have comment lines that start with the character “\#”. The syntax of this scaling factor is
scaling, combination = <integer>, type = tablefile, filename = <string>
The symbolic scaling factor allows the user to define analytical expressions of the variables \((t,x,y,z,\phi,\theta,r,\rho)\) that are evaluated at every point of space and instant of time in the simulation. Here, \((x,y,z)\) are the Cartesian coordinates, \((\rho,\phi,z)\) are the cylindrical coordinates, and \((r,\phi,\theta)\) refer to the spherical coordinates. This is a very powerful command that can be used, for example, to create filters. Using the C if block syntax, one can apply loads only on certain regions of the space without the need to define new element set nor manifolds. For example, the command
scaling, combination = 1, type = symbolic, value = "x*y > 0 ? t : 0.0"
defines the scaling combination number 1 to be proportional to time in the region \(xy>0\) and zero elsewhere. The variables phi,theta,r correspond to the three spherical coordinates.
By default, IRIS creates the scaling factor with label 0, a linear factor whose value is identical to the time variable.
6.2. Boundary and initial conditions
Boundary conditions for initial and boundary value problems are defined with the command bc. There exist severa ways to use it for reasons of backward compatibility. A major difficulty derives from the fact that IRIS now can work with multi-field problems and the name of the degree of freedom changes from problem to problem, precisely to allow combinations.
The preferable way to use bc is on manifolds. As described before, every part has manifolds defined precisely for this purpose. By using manifolds, the user does not need to know about node numbering or any other detail of the discretization but can, instead, focus on the true geometrical aspects of the model. The syntax of this version of the command is:
bc, [part | body] = <string>, setname = <string>,
variable = <char> [, value = <double>]
[, valuex = <double>] [, valuey = <double>] [, valuez = <double>]
[, scaling = <integer>]
In this command, first the model part is seleted; then, the manifold is selected using the name with which each of them were defined. Then, the letter of the variable on which the boundary condition is to be applied must be given. If the varible is scalar, is suffices to give its value. If, instead, it is a vector field, then its values on the \(x,y,z\) directions can be given independently. Finally, the scaling factor can be added. If the latter is not given, it is assumed that the boundary condition is scaled by the default scaling factor (with label 0).
Boundary conditions can also be applied directly to nodesets. The syntax in this case is as follows:
bc, nodeset = <string> [, ux = <double>] [, uy = <double>] [, uz = <double>] [, p = <double>] [, e = <double>] [, rotx = <double>] [, roty = <double>] [, rotz = <double>] [, dirx = <double>] [, diry = <double>] [, scaling = <integer>]
This old way of applying initial conditions has an important limitation: it only works with mechanical problems in which the unknown fields have names u, p, e, are rotations or directors. It should be avoided when possible.
Initial conditions are applied on the model in a similar fashion. The syntax is
ic, [part | body] = <string>, setname = <string>,
variable = <char> [, value = <double>]
[, valuex = <double>] [, valuey = <double>] [, valuez = <double>]
[, filter = <option>] [, filtertype = <option>]
[, noise = <double>] [, noisevariance = <double>]
Alternatively, the initial condition can be given, but on a nodeset directly using
ic, nodeset = <string>,
variable = <char> [, value = <double>]
[, valuex = <double>] [, valuey = <double>] [, valuez = <double>]
[, filter = <option>] [, filtertype = <option>]
[, noise = <double>] [, noisevariance = <double>]
Finally, for second order problems, initial rates can be set using the same syntax, just modifying the keyword. Specifically, we must employ the following:
initialrate, [part | body] = <string>, setname = <string>,
variable = <char> [, value = <double>]
[, valuex = <double>] [, valuey = <double>] [, valuez = <double>]
[, filter = <option>] [, filtertype = <option>]
or
initialrate, nodeset = <string>,
variable = <char> [, value = <double>]
[, valuex = <double>] [, valuey = <double>] [, valuez = <double>]
[, filter = <option>] [, filtertype = <option>]
The option for the keyword filter is a symbolic expression in terms of the Cartesian coordinates \((x,y,z)\) , the cylindrical coordinates \((\rho,\phi,z)\) or the spherical ones \((r,\phi,\theta)\). The noise add a Gaussian noise on the initial condition that proportional noise, has a zero mean and variance noisevariance.
6.3. Linear multipoint constraints
Linear multi-point constraints (MPC) allow to link the displacement degrees of freedom of different nodes with linear relations. These constraints do not reduce the number of degrees of freedom of the problem; on the contrary, each of them adds one Lagrange multiplier to the global problem, so they should be used with care.
The syntax is as follows. Given some nodes with labels \(\mathcal{L}=\{l\}\), with \(\dim(\mathcal{L})=n\), and parameters \(\{\alpha_i,\beta_i,\gamma_i \}_{i=1}^n\), the linear constraint
\begin{equation*} \mbs{\phi}(\{\mbs{u}_i\}_{i\in \mathcal{L}}) \equiv \sum_{i\in \mathcal{L}} \mbs{w}_i\cdot \mbs{u}_i - C(t) = 0\ , \qquad\mathrm{with weights}\qquad \mbs{w}_i = \langle \alpha_i , \beta_i , \gamma_i \rangle^{T} \end{equation*}is imposed using the command line:
linmpc, node = l0, [, alpha = <double>] [, beta = <double>] [, gamma = <double>]
[, node = l1, , alpha = <double> , beta = <double> , gamma = <double>]
[, node = l2, , alpha = <double> , beta = <double> , gamma = <double>]
[, c= <double>] [, scaling = <int>]
The scaling option allows to use a pre-defined scaling factor to multiply the constant c so that, in the constraint, \(C(t) = c\; S_i(t)\), where \(i\) is the index of the scaling function. If no scaling is provided, it is assumed that \(S_i(t)\equiv 1\).
The user is cautioned not to constrain degrees of freedom that are already constrained with the standard boundary conditions.
See example 51_Constraints/5109_linmpc.
6.4. Periodic boundary conditions
IRIS includes some facilities to impose periodic boundary conditions, but they can only be used with prismatic blocks. To impose them, one starts by defining a model part of type brick or qbrick, as usual. Then, the following command line identifies the faces that have periodic boundary conditions
periodic, body = <string>,
master = <string>, slave = <string>
[, master = <string>, slave = <string>]
[, master = <string>, slave = <string>]
, epsxx = <double>, epsxy = <double>, epsxz = <double>
, epsyx = <double>, epsyy = <double>, epsyz = <double>
, epszx = <double>, epszy = <double>, epszz = <double>, \
scaling = <int>, preconditioner = <double>
The periodic boundary conditions can be applied (on the brick surfaces) onto one, two or three face pairs. These pairs are identified by the sequence master / slave keywords. Then, at most six components of the strain operator can be defined . Finally, the scaling refers to a scaling factor that can be employed to impose gradually the deformation. If the scaling keyword is not employed, the deformation is imposed at time \(t=0\).
For other bodies, IRIS allows to impose periodic boundary conditions, although this feature should be handled with care. The user is required to define six nodesets and then use the slightly modified command:
periodic, body = <string>,
master = <string>, slave = <string>
[, masternodeset = <string>, slavenodeset = <string>]
[, masternodeset = <string>, slavenodeset = <string>]
, epsxx = <double>, epsxy = <double>, epsxz = <double>
, epsyx = <double>, epsyy = <double>, epsyz = <double>
, epszx = <double>, epszy = <double>, epszz = <double>, \
scaling = <int>, preconditioner = <double>
As in the case of the master/slave surfaces, the nodesets defined above must be paired by opposing ones, and should include nodes that are exactly symmetric to each other.
The periodic boundary conditions define a Neumann problem. To make it well-posed, infinitesimal rigid body modes need to be constrained. To to so, one option is to select six degrees of freedom that are independent, and constrain them. Another option is to use the perturbed technique proposed by Kaleen and Romero. See the solid element.
The condition number of the stiffness of a mechanical problem with the periodic boundary conditions just described is not good. A remarkable improvement can be obtained if a preconditioner is employed of the order of \(E\,h\). If employed, the condition number improves significantly at the expense of the multipliers losing their physical interpretation: instead of forces, they will have dimension of length, so they need to be scaled back by \(E\,h\) to recover their physical meaning.
See example 51_Constraints/5110_periodic.
6.5. Applying loads
The way loads can be applied on IRIS has also evolved during the years and two methods currently co-exist. In the old, low-level, scheme, loads can be applied on nodesets, which can be selected either by their name or by the manifold that contain them. In the first case, the syntax is
loading, nodeset = <string> [,fx = <double>] [,fy = <double>] [,fz = <double>]
[,f = <double>] [,frotx = <double>] [,froty = <double>] [,frotz = <double>]
[,scaling = <integer>]
Here, the nodal forces \(f_x,f_y,f_z\) are conjugate to the degrees of freedom \(u_x,u_y,u_z\), while the loads \(frot_x,frot_y,frot_z\) are the moments conjugate to the rotational degrees of freedom. This command is too limited because it does not accept loads on general degrees of freedom. Alternatively, the following command can also be employed:
loading, nodeset = <string> variable = <char>] [,value = <double>]
[,value0 = <double>] [,value1 = <double>] [,value2 = <double>]
[,scaling = <integer>]
This latter form is more general and allows to apply loads on scalar and vector degrees of freedom, following the same syntax as the boundary conditions. Similarly, one can replace the nodeset option with the name of a model part and the manifold on which the load has to be applied. The syntax is thus
loading, [part | body] = <string>, vertex | edge | surface | volume = <integer>,
variable = <char>] [,value = <double>]
[,value0 = <double>] [,value1 = <double>] [,value2 = <double>]
[,scaling = <integer>]
The previous commands apply on the nodes of the selected nodeset identical loads. This is inconsisent with variational methods where loads must be distributed according to the measure assigned to each node. For example, if a uniform load is applied to a surface, nodes on the edges and the corners should be loaded with a smaller load. To accommodate this general loading type, IRIS has a more advanced loading command with the following syntax
superloading, [part | body] = <string>, setname = <string>
[, eltype = <int>]
variable = <char>] [,scaling = <integer>]
[,option = <double>] ...
In this, preferable, command, the manifold where the load has to be applied is the given by the setname on a particular body or part. The option(s) keyword(s) depends on the analysis (mechanical, thermal, fluid, etc.) as described in the appendix.
6.6. Elements and materials
In a finite element analysis, every element has a type and a material. A model part can have elements of a single type, although it is possible to mix types. Each type must be defined with a command such as
eltype, label = <integer>, type = <keyword> [, material = <integer>] [, <command>] [, <command>] ...
The label is a unique integer label that is used, for example, in the model part definition or in the mesh files. Often the element types are linked to a material which itself is assigned to a unique label and referenced with the command material = <integer>. Element types might possess other commands that are appended to the list. Each element type is slightly different. We refer to the Appendix for the specific options of each type.
A material is defined in a similar fashion. A command line is used that gives the material a name, a label, a type, and potentially other parameters as in:
material, label = <integer>, name = <string>, type = <keyword>, [, <command>] [, <command>] ...
6.7. Step solvers
Depending on the analysis type, it might be the case that the solution is obtained in a step-by-step fashion. This is true for quasistatic, transient, staggered and topology optimization problems. For the solution of each step, there exist several methods where IRIS can choose from. The command line that takes care of this is:
stepsolver, type = [adr | arclength | explicit | fractional | linear | newton | nlcg | quasinewton] [, <command>] [...]
The keywords correspond to the following methds
| Keyword | Method name |
|---|---|
| adr | Adaptive dynamic relaxation |
| explicit | Explicit solver |
| fraction | Fractional step solver |
| linear | Solver of linear equations |
| newton | Newton-Raphson |
| nlcg | Nonlinear conjugate gradient |
| quasinewton | Quasi-Newton nonlinear solver |
6.7.1. Adaptive dynamic relaxation
6.7.2. The Newton-Raphson method
The Newton-Raphson method is the most common solution strategy for nonlinear problems. It is so common that in IRIS it is programmed with a certain amount of complexity to encompass different situations.
Fist, let us recall the complete syntax for its definition, before explaining in detail how the solver works:
stepsolver, type = newton [, maxiterations = <integer>]
[, maxtrials = <integer>] [, update = <integer>]
[, tolerance = <double>] [, abstolerance = <double>]
The Newton-Raphson attempts to solve a nonlinear problem by iterating until the energy error in the (residual) equation is below certain value (abstlerance) or it is reduced from its initial value to a relative number (tolerance). The method will attempt to converge in a number of iterations that is, at most, maxiterations. If the procedure fails, the time step control is automatic, then the method will restart, now with a smaller time step size. This restarting strategy can be performed, at most, maxtrials times.
6.8. Linear solvers
In many of the analyses that IRIS can carry out there will be, at some point, a large system of linear equations that needs to be solved. The following command selects which of the available solvers will be used for this task:
linsolver, type = [superlu | hsl | pcg | ldl | wsmp | pardiso] [, <command>] [...]
6.8.1. SuperLU solver
The SuperLU solver is a direct solver for sparse systems of equations. Currently, the shared-memory version of the library is employed. For this library, there are keywords that activate options in the solver. For example, the nopivoting keyword blocks all pivoting in the factorization, nprocs can modulate the number of threads opened for the solution of the system of equations, the keywords unsymmetric/symmetric select what type of profile the matrix has, the keyword printinfo activates writing information about the matrix on IRIS log file; finally, the dumpmatrix keyword, when present, forces the matrix to be written in a file for latter postprocessing. The keyword printinfo activates some output messages, such as the condition number (written to the log file).
The solver works in symmetric and unsymmetric modes.
| keyword | Data type | Default |
|---|---|---|
| nopivoting | - | - |
| nprocs | <integer> | max in computer |
| unsymmetric | - | - |
| symmetric | - | - |
| printinfo | - | - |
| dumpmatrix | - | - |
6.8.2. HSL solver
The HSL family of solvers includes several multithreaded specific solutions that are suited to special matrix types. In the input file, the syntax should be:
linsolver, type = hsl, subtype = [cholesky | symmetric | unsymmetric | indefinite]
By default, if no subtype is selected, the unsymmetric solver will be selected. The sparse matrix can be written to a file using the dumpmatrix option.
| keyword | Data type | Default |
|---|---|---|
| subtype | <keyword> | unsymmetric |
| dumpmatrix |
| subtype | Matrix type |
|---|---|
| cholesky | Symmetric, positive definite matrix |
| symmetric | Symmetric, indefinite matrix |
| unsymmetric | General matrix |
| indefinite |
6.9. Time integration method
In step-by-step solution, in addition to the solver, a time integration method must be provided. This is the algorithm that will take care of integrating the equations in time (for a transient problem) or in pseudo-time for a stationary problem. The command line to drive this option is
integrator, type = [quasistatic | cd | newmark | hht | midpoint] [, <command>] ...
Time stepping methods are responsible for updating the state variables after every iteration — if the step solver is nonlinear — and after the end of a time step, before starting a new one. The keywords in the command line correspond to the following methods
| Keyword | Method’s name | Time order |
|---|---|---|
backwardeuler |
Backward Euler | One |
cd |
Central differences method | Second |
forwardeuler |
Forward Euler | One |
hyperpara |
Hyperbolic/parabolic | One + two |
newmark |
Newmark’s method for second order equations | Second |
hht |
Hilber, Hughes & Taylor | Second |
midpoint |
Midpoint rule | One/two |
quasistatic |
Quasistatic integrator | Zero |
verlet |
Verlet method | Two |
6.9.1. Quasistatic
The quasistatic integrator is really not a time integrator; it is just the standard method to push the degrees of freedom during iterations and steps in a quasistatic solution. This method has no options.
6.9.2. Newmark method
Newmark’s method is the most common integration scheme for solid and structural mechanics (Newmark, N M., 1956). The method has two parameters, usually referred to as \(\beta,\gamma\) that determine the stability, accuracy, artificial damping of each of the members of the family. The options of the method in IRIS are
| Keyword | Value |
|---|---|
beta |
double |
gamma |
double |
predictor |
integer in \([1,2]\) |
The most common algorithm within the Newmark’s family is the trapezoidal rule, as second order accurate method that is unconditionally stable for linear problems and has no algorithmic damping. It corresponds to \(\gamma = 2\beta = 1/2\). In IRIS, when the integrator command line selects the Newmark’s method and no additional options are given, the code chooses the parameters of the trapezoidal rule.
When \(\gamma>1/2\) is given, IRIS selects automatically the parameter \(\beta\) so that the resulting method has maximum algorithmic dissipation while preserving the unconditional stability for linear problems. As a drawback, the method becomes only first order accurate.
In nonlinear problems, the choice of predictor in a solution step might have a non-negligible effect. By default, IRIS chooses as predictor for the displacements field the one obtained in the last converged solution, effectively setting the velocity to zero. If predictor is set to 2, the velocity at the beginning of the step is set fixed, and thus the initial displacement does not corresponds to the previously converged one.
6.9.3. The HHT method
The Hilber-Hughes-Taylor method is a second order implicit method for structural dynamics that possesses controllable artificial dissipation (Hilber, H. M. and Hughes, T. J. R. and Taylor, R. L., 1977). The options of the method are:
| Parameter | Value |
|---|---|
alpha |
double in \([0.7,1]\) |
When the parameter alpha is set equal to 1, the method will be identical to the trapezoidal rule and thus it will add not high-frequency damping. The amount of dissipation increases monotonically while alpha is reduced until 0.7.
6.10. Time stepping control
An important ingredient of a step-by-step is the selection of the time step size. In IRIS, this quantity can be fixed by the user, or allow the code to select it adaptatively.
tscontrol, type = [automatic | cfl | fixed] [, <command>] [...]
If a time step control is not provided, the default fixed will be employed.
6.10.1. Automatic time step selection
| keyword | Data type | Default value |
|---|---|---|
| dt | <double> | 1.0 |
| maxdt | <double> | Infinite |
| mindt | <double | 0.0 |
| target | <integer> | 8 |
6.10.2. CFL selection
In this method, the time step size is selected according to the Courant, Friedrich, Levy’s bound (CFL) for explicit methods
| keyword | Data type | Default value |
|---|---|---|
| dt | <double> | 1.0 |
| scaledt | <double> | 1.0 |
| update | <int> | 100 |
6.10.3. Fixed time step
This is the most basic time stepping control in which the user sets the value of the time step and the code keeps it constant during the whole analysis. The syntax of options for this control is
| keyword | Data type | Default value |
|---|---|---|
| dt | <double> | 1.0 |
It must be noted that if the analysis is nonlinear and IRIS is unable to converge to a solution during a step, the code will exit since, under this control, the time step size can not be modified.
7. Controlling the output
IRIS produces three types of outputs:
- Log files with information about the progress of the analysis.
- Postprocessing information for graphical output.
- Results files with data obtained in the analysis.
7.1. The log files
IRIS generates a few files automaticall. These are
iris.log: This is the main log file of the code. IRIS writes here all the information generated at runtime. First, IRIS writes all the information gathered from the input file (the characteristics of the analysis and the parts, the boundary conditions, the loading, materials, etc.). Then it gives information about the progress of the analysis (convergence, errors, etc.). This file is key to understand the sucdess or failure of an analysis.iris.warnings
Every time the code is run, it looks for the files iris.log and iris.warnings in the directory where it is being executed and deletes them if they exist. If, for any reason, the user wants to preserve the log file, IRIS should be run with the flag --save.
7.2. The postprocessing files
IRIS has the ability to dump the results obtained to files that can later be read by specialized postprocessing software. This is accomplished with the command line
postprocessor, type = [paraview | gmsh ] [, compress = <yes|no>] [, frequency = <double>]
[smoother = <lumped|leastsquares>] [, result = <keyword>], [, result = <keyword>] [, ...],
[,elementresult = <keyword>] [,elementresult = <keyword>] [...]
First, the user might select if the format of the postprocessing files is the one required by either Paraview or Gmsh, two programs capable of displaying graphically complex finite element solutions and related ones. The user can select as well if the output files are to be written in compressed (gzipped) format and the frequency in which the code will dump them (by default, they will be written at the end of every solution step).
The postprocessor commands writes to files the values of the degrees of freedom of them. Additionally, the user might want to obtain other results (stresses, heat fluxes, etc.) that are smoothed to the nodes or left (unsmoothed) in the elements. The commands result and elementresult serve this purpose and there can be as many as desired.
7.3. The results files
IRIS allows the user to write results obtained from the solution to text files. The syntax that needs to be employed to generate these reports is:
logger, variable = [dof | mass | reaction | bodies | stress | gradient | rate | velo | acce | energy | scaling],
settype = [element | elset | node | nodeset],
[, nodeset = <string> | body = <string>, setname = <string>]
[, varlabel = <integer>]
[, filename = <string>] [, frequency = <double>]
[, droptol = <double>] [, precision = <integer>]
The command variable selects which information should be dumped in the log file. In case the information is a degree of freedom, the variable label varlabel should be provided. The information will be extracted from a set selected using either a settype/setlabel pair or, alternatively, a named setname from a body. In the latter case the two strings should be provided.
A report will have a default name that will be replaced if a filename is provided. The data will be written to a file at every step of the solution, unless a frequency is indicated. Values smaller than droptol will be written as zero. The precission of the output can be controlled with the option that has that name.
In the case of scaling log files, they record the value in time of a given scaling combination. The syntax is as follows:
logger, variable = scaling, label = <integer>, [, filename = <string>] [, frequency = <double>]
[, droptol = <double>] [, precision = <integer>]
and the value of the scaling combination with number label will be output to a file.
7.3.1. Reaction logs
IRIS can save the sum of the reactions on a group of nodes. The syntax for this output file is one of these two:
logger, variable = reaction, body = <string>, setname = <string> [, <options>]
or
logger, variable = reaction, nodeset = <string> [, <options>]
8. The makefile
9. Element types
Element types define the equations that are solved by the code. They must select a unique label that will be referenced by the modelpart and the superloading. The syntax for all element types is as follows:
eltype, label = <integer> [, options ...]
We describe next each of the element types as well as their options.
9.1. Type advectiondiffusion
This element type implements the equations of the linear advection-diffusion problem. The options of the type are
| Option | Value type | Explanation |
|---|---|---|
| ax | double | \(x\) component of advection |
| ay | double | \(y\) component of advection |
| az | double | \(z\) component of advection |
| supg | activate SUPG formulation | |
| gls | activate GLS formulation | |
| vms | activate VMS formulation | |
| oss | activate OSS formulation | |
| heatsupply | double | source term |
It is known that the advection-diffusion problem is prone to instabilities and special formulations must be employed to ensure the well-posedness of the discrete problem. In particular, this implementation includes several stabilized methods, more precisely,
| keyword | Name | Reference |
|---|---|---|
| supg | Streamline Upwind Petrov Galerkin | (Brooks, A N and Hughes, T. J. R., 1982) |
| gls | Galerkin Least Squares | (Hughes, T. J. R. and Franca, L. P. and Hulbert, G. M., 1988) |
| vms | Variational Multiscale | (Hughes, T. J. R. and Feijoo, G. R. and Mazzei, L. and Quincy, J.-B., 1998) |
| oss | Orthogonal Subgrid Scales | (Codina, R., 2000) |
9.2. Type bar
9.3. Type beam
9.4. Type drod
9.5. Type dummy
9.6. Type euler
9.7. Type fmembrane
9.8. Type fpoisson
9.9. Type frod
9.10. Type fshell
9.11. Type fsolid
9.12. Type ftcm
9.13. Type fthermorod
9.14. Type fthermoelerod
9.15. Type ftm
9.16. Type ftmc
9.17. Type fmm
9.18. Type fmechmass
9.19. Type hydrogen
9.20. Type lagfluid
9.21. Type lineardiffusion
9.22. Type macro
9.23. Type mixed
The mixed formulation of small strain solid mechanics provides a stable formulation for incompressible and quasi-incompressible materials, both with simplicial as well as tensor-product elements. As a result of its mixed character every node would have the following degrees of freedom:
| Symbol | Meaning | Dimension |
|---|---|---|
| u | Displacement | 3 |
| p | Pressure | 1 |
At the moment, the formulation works only for linear tetrahedra and tri-linear hexahedra. The input record is simple and include only the options
| Option | Value type |
|---|---|
| material | integer |
The loading for this element type includes volumetric loading and surface loading. Note that pressure should be applied by selecting a value of the pressure variable, not by a loading. The options for the superloading on this element type are
superloading, body = <string>, setname = <string>
[, fx = <double>] [, fy = <double>] [, fz = <double>]
[, scaling = <integer>]
superloading, body = <string>, setname = <string>
[, tx = <double>] [, ty = <double>] [, tz = <double>]
[, scaling = <integer>]
| label | explanation |
|---|---|
| fx | force/volume direction x |
| fy | force/volume direction y |
| fz | force/volume direction z |
| tx | force/area direction x |
| ty | force/area direction y |
| tz | force/area direction z |
9.24. Type navierstokes
9.25. Type nonlineardiffusion
9.26. Type pointmass
9.27. Type poisson
This element type is designed to model continuum thermal problems. It works with stationary as well as transient solutions. The command line can have the following options:
| Option | Value type |
|---|---|
| material | integer |
| tref | double |
| lumped | double in \([0,1]\) |
The solution to this problem is a temperature increment field but the material properties might depend on the absolute temperature. For this reason a reference temperature might be provided and otherwise set to 0. The element allows to use a high-order mass matrix by combining a consistent mass matrix (\(lumped=0\)), with a completely lumped mass (\(lumped=1\)) or intermediate values.
The only degree of freedom of this element type is indicated as h.
The kind of volumetric and surface heat supply that element accepts is given by the following keywords:
superloading, body = <string>, setname = <string>
[, q = <double>] [, h = <double>] [, convection = <double>]
[, radiation = <double>]
[, scaling = <integer>]
| label | explanation |
|---|---|
| q | volumetric heat supply |
| h | surface heat supply |
| convection | convection coefficient |
| radiation | radiation coefficient |
9.28. Type smm
9.29. Type phasefield
9.30. Type phasefracture
9.31. Type rigidlink
9.32. Type rigidbody
9.33. Type slave
9.34. Type solid
Elements of type solid are designed to model three-dimensional small strain solid mechanics. Currently they work with tetrahera and hexahedra. The following options are available:
| Option | Value type | Explanation |
|---|---|---|
| material | integer | |
| formulation | string | |
| quadpoints | integer | |
| alpha | double | Stabilization parameter |
| epsilon | double | Regularization for Neumann problems |
Most element types, although not all, are linked to a material with its label. The formulation can be standard, mixed, stabilized, or bbar. The first one, selected also if the keyword formulation is not included, corresponds to the isoparametric formualation of the primal form of the problem. The second one uses a Q1/P0 interpolation for displacement and pressure and is only available for hexahedra. The third one is a stablized U/P formulation where alpha is the stabilization parameter. The bbar option implements the assumed strain method of Hughes. The degrees of freedom in all the formulation are just the nodal displacements u, except for the stabilized case, that has both displacements u as well as pressures p.
| Formulation | Dof |
|---|---|
| standard | u |
| mixed | u |
| stabilized | u,p |
| bbar | u |
Volumetric and surface loading can be applied on solid with the superloading command. In the case of volume loads, the syntax is as follows:
superloading, body = <string>, setname = <string>
[, fx = <double>] [, fy = <double>] [, fz = <double>]
[, scaling = <integer>]
If the loads are defined per unit mass, the syntax changes to
superloading, body = <string>, setname = <string>
[, bx = <double>] [, by = <double>] [, bz = <double>]
[, scaling = <integer>]
Surface loads can also be applied with the superloading command. The syntax in this case is
superloading, body = <string>, setname = <string>
[, tx = <double>] [, ty = <double>] [, tz = <double>]
[, scaling = <integer>]
where tx,ty,tz are the cartesian components of the taraction vector field. Finally, a pressure can be directly applied to a surface with the command
superloading, body = <string>, setname = <string>
[, pressure = <double>] [, scaling = <integer>]
To sum up, these are the possible superloading options for the solid element:
| label | explanation |
|---|---|
| fx | force/volume direction x |
| fy | force/volume direction y |
| fz | force/volume direction z |
| bx | force/mass direction x |
| by | force/mass direction y |
| bz | force/mass direction z |
| tx | force/area direction x |
| ty | force/area direction y |
| tz | force/area direction z |
| pressure | normal force/area (inwards) |
9.35. Type spring
9.36. Type stm
This is the element type for small strain thermomechanical simulations. The degrees of freedom are the corresponding problems are, thus, the displacement u and the temperature m . The mechanical problem can be formulation in standard (isoparametric) form or using the bbar assumed strain form.
| Formulation | Dof |
|---|---|
| standard | u, m |
| bbar | u, m |
Surface and volume loading can be applied on solids describe with stm equations. The syntax is similar to the one of the solid element types but has, additionally, volumetric heating and surface heat flux. The commands for the volumetric loads are:
superloading, body = <string>, setname = <string>
[, fx = <double>] [, fy = <double>] [, fz = <double>]
[, bx = <double>] [, by = <double>] [, bz = <double>]
[, hvol = <double>
[, scaling = <integer>]
where hvol refers to the supplied heat per unit volume and time. The surface loads are given by
superloading, body = <string>, setname = <string>
[, tx = <double>] [, ty = <double>] [, tz = <double>]
[, hsurf = <double>]
[, pressure = <double>]
[, scaling = <integer>]
where tx,ty,tz are the cartesian components of the traction vector field, hsurf is the heat flux applied through the surface, and pressure is, as in the solid element type the (inward) pressure.
9.37. Type stokes
9.38. Type taylorhood
This element implements mixed formulation of the Stokes flow. As such, it employs different interpolation spaces for the velocity and pressure fields. Right now, this is provided by both the brick and the qbrick mesh generators, but might be extended in the future. The command line can have the following options:
| Option | Value type |
|---|---|
| material | integer |
| stabilization | double |
| bx | body force/mass in x direction |
| by | body force/mass in y direction |
| bz | body force/mass in z direction |
The formulation uses a weak penalty for the pressure term so that no pressure needs to be imposed to avoid the pressure lack of uniqueness. If the user does not provide a stabilization value, a default small parameter is used.
9.39. Type thermalwire
9.40. Type trlink
10. Material types
Material types select constitutive behaviors from the available models in MUESLI. The syntax of these commands is always of the form:
material, label = <integer>, type = <string> [, options ...]
We summarize next the available material models and the parameters that need to be defined (with defaults)
10.1. Type elastic
This model represents the elastic, isotropic behavior for small strain mechanics.
| Option | Meaning | Default |
|---|---|---|
| young | Young’s modulus | 0.0 |
| poisson | Poisson’s ratio | 0.0 |
| lambda | Lamé parameter | 0.0 |
| mu | Lamé parameter | 0.0 |
| density | 1.0 | |
| tref | Reference temperature | 273.0 |
10.2. Type splastic
This is the model for small strain elastoplastic behavior
| Option | Meaning | Default |
|---|---|---|
| young | Young’s modulus | 0.0 |
| poisson | Poisson’s ratio | 0.0 |
| lambda | Lamé parameter | 0.0 |
| mu | Lamé parameter | 0.0 |
| isotropich | Isotrophic hardening par | 0.0 |
| kinematich | Kinematic hardening par | 0.0 |
| yieldstress | 0.0 | |
| density | 1.0 | |
| model | von_mises or tresca or drucker | von_mises |
| alphac | drucker’s cone semiangle | 0.0 |
| tref | Reference temperature | 273.0 |
10.3. Type conductor
Conductor materials are employed in thermal calculations. More precisely, the condutor defines a Fourier’s type relationship between heat flux and temperature gradient which is isotropic. The options are:
| Option | Meaning | Default |
|---|---|---|
| conductivity | (isotropic) conductivity | 0.0 |
| capacity | Heat capacity | 0.0 |
11. An input file
We include here, as an example, the quasistatic analysis of the mechanical response of a cube-shaped body.
# # Analysis file for IRIS # # Description: a simple cube # # Author: i. romero # Date: jul 2006 # #---------------------------------------------------------------------------- # # 1 - Basic description of the analysis # #---------------------------------------------------------------------------- analysis, type = static, final_time = 1.0 modelpart, type = body, shape = qcube, name = "mycube", eltype = 1, \ centerx = 0.2, centery = 0.3, centerz = -0.1, \ lx = 1.1, ly = 0.9, lz = 0.7, \ rotz = 0.2, roty = 0.1, rotz = -0.3, \ divx = 5, divy = 4, divz = 5 #---------------------------------------------------------------------------- # # 2 - Integrator and solver # #---------------------------------------------------------------------------- integrator, type = quasistatic stepsolver, type = newton linsolver, type = pcg stepping, type = fixed, dt=0.2 superloading, body = mycube, surface = 5, tx = 200.0, ty = 300.00, tz = 400.0 #---------------------------------------------------------------------------- # # 3 - Element types and materials # #---------------------------------------------------------------------------- material, label = 1, type = neohookean, young = 1e4, poisson = 0.3, density = 4241.0 eltype, label = 1, type = fsolid, material = 1 bc, body = mycube, surface = 4, variable=u, ux = 0.0, uy = 0.0, uz = 0.0 #---------------------------------------------------------------------------- # # 6 - Output data # #---------------------------------------------------------------------------- #postprocessor, type = paraview output, variable = energy
12. A log file
We show in this appendix one example of a log file obtained after running a simulation in IRIS. The file shows, first, the information that the code obtains or generates from the input file. If some aspects of the analysis are not provided, the code supplements the information with default procedures. Then, the output of the analysis is reported illustrating the convergence in the nonlinear procedure.
=============================================================================
| |
| I R I S |
| |
=============================================================================
A general purpose finite element analysis program
Copyright Ignacio Romero, ignacio.romero@upm.es
Universidad Politecnica de Madrid
IMDEA Materials Institute
version 9.1 (November 2023)
R u n t i m e o p t i o n s
Available threads : 10
Activated threads : 10
Debug mode : inactive
[ Model checked ]
[ Stepsolver checked ]
[ Stepsize control checked ]
A n a l y s i s i n f o r m a t i o n
General properties:
Name : cube.iris
Analysis type : Quasistatic analysis
Final time : 1
Started on : Fri Dec 22 15:10:38 2023
Hostname : IROMERO.local
Username : ignacio
S t e p S o l v e r
Remesh after steps : Never
Newton-Raphson non-linear solver
Maximum number of iterations allowed : 10
Recompute tangent frequency : 1
Relative energy error for convergence : 1e-16
Absolute value of energy for convergence: 1e-20
Number of pre-iterations : 0
Maximum number of allowed trials : 4
Linesearch : false
T i m e s t e p s i z e s e l e c t i o n
No time step adaptation.
The first failure in a NR solution will cause the analysis to halt.
Time step size : 2.000000e-01
S o l v e r f o r l i n e a r e q u a t i o n s
Preconditioned conjugate gradient solver.
Iterative solver for symmetric positive definte systems.
Diagonal preconditioner.
Relative tolerance for convergence = 1.000000e-10
Absolute tolerance for convergence = 1.000000e-14
S c a l i n g f a c t o r s (1)
Scaling factor number 0: 1 component(s)
+linear factor active in (0.000000e+00, infinite]
initial value = 0.000000e+00, slope = 1.000000e+00
V a r i a b l e L o g s
Variable logger information
Var type : Energy, entropy, and volume.
In set : the whole domain.
Filename : iris_energy.vlog
Log frequency : every time step
Last log time : 0.000000e+00
Precision : 4
Drop tolerance: 1.000000e-08
Graphic output: none.
S y s t e m o f e q u a t i o n s
Sparse matrix
Format : Symmetric Compressed Sparse Column (SCSC)
Number of rows : 450
Number of columns : 450
Number of profile terms : 12393
Band size : 42
Condition number : 0.000000e+00
Factorized : 0
Data type : double
Incorrect format (try hb or mm)
I n t e g r a t o r
Incremental quasistatic integrator.
Time is only a parameter to describe the progress of the analysis.
E l e m e n t T y p e s (1)
Element type 1 : FSOLID
Degrees of freedom:
Variable name : u, type : vector
Linked to material with label 1
Finite strain, deformable solid model.
Implementation : convected
Finite strain, standard displacement formulation.
M a t e r i a l s (1)
Material #1:
Elastic Neo-Hookean material for finite deformation analysis
Stored energy function:
W(I1,J) = U(J) + mu/2 ( I1_C - 3) - mu log J
U(J) = lambda/2 * (log J)^2
Young modulus: E = 1.000000e+04
Poisson ratio: nu = 3.000000e-01
Lame constants: Lambda = 5.769231e+03
Mu = 3.846154e+03
Bulk modulus: k = 8.333333e+03
Density = 4.241000e+03
Wave velocities C_p = 1.781612e+00
C_s = 9.523119e-01
M o d e l i n f o r m a t i o n
Number of bodies : 1
Number of raw meshes : 0
Number of meshlessbodies : 0
Number of control volumes : 0
Number of crystals : 0
Number of interactions : 0
Number of elements : 100
Number of evalspots : 0
Number of nodes : 180
Number of slave nodes : 0
Number of elsets : 0
Number of nodesets : 1
Number of point loads : 0
Number of constraints : 1
Number of unknowns : 450
Max. dofs/node : 3
Dofset dictionary:
Variable name: u, type: vector
B o d i e s (1)
Body name : mycube
Manifold dimension : 3
Center : (2.000000e-01, 3.000000e-01, -1.000000e-01)
Orientation : (0.000000e+00, 1.000000e-01, -3.000000e-01)
Number of elements : 100
Number of nodes : 180
Number of spots : 0
Type : Brick with hexahedral elements
Name : mycube
Dimension : 3
Subdivisions x : 5
Subdivisions y : 4
Subdivisions z : 5
Length x : 1.100000e+00
Length y : 9.000000e-01
Length z : 7.000000e-01
Center : 2.0000000000e-01 3.0000000000e-01 -1.0000000000e-01
Orientation : 0.0000000000e+00 1.0000000000e-01 -3.0000000000e-01
distorted : no
Named sets of dimension 0:
vertex0, vertex1, vertex2, vertex3, vertex4,
vertex5, vertex6, vertex7,
Named sets of dimension 1:
edge0, edge1, edge10, edge11, edge2,
edge3, edge4, edge5, edge6, edge7,
edge8, edge9,
Named sets of dimension 2:
surface0, surface1, surface2, surface3, surface4,
surface5,
Named sets of dimension 3:
volume0,
N o d e S e t s (1)
Nodeset : a_brick_external_nodes (0 nodes) (internal)
C o n s t r a i n t s (1)
Constraint on a body boundary
Name of the body : mycube
Boundary dimension : 2
Boundary label : 4
Number of nodes : 30
variable u[0] : 0.0000000000e+00
variable u[1] : 0.0000000000e+00
variable u[2] : 0.0000000000e+00
scaling : 0 (default)
S u p e r L o a d s (1)
* Loading on body mycube
Manifold dimension : 2
Manifold label : 5
Eltype label : 0
Scaling factor label : 0
Number of elements: : 20
S t a r t i n g A n a l y s i s
----------------------------------
Solution at (pseudo) time = 2.000000e-01, dt = 2.000000e-01, Step = 1
Scaling factor 0 = +2.000000e-01
[ System Size: 450
[ PCG Iteration 117 , residual: +1.4942e-09, rel: +7.0623e-11, PCG total_time: +1.3e-02
Opt: -4.6456e+01, Res: 2.1158e+01, EErr: 2.0947e+00 (1.0000e+00), Mflps: 283
[ System Size: 450
[ PCG Iteration 128 , residual: 2.7530e-10, rel: 9.4898e-11, PCG total_time: 1.4e-02
Opt: -4.7489e+01, Res: 2.9010e+00, EErr: 3.5563e-03 (1.6978e-03), Mflps: 287
[ System Size: 450
[ PCG Iteration 134 , residual: 1.5069e-13, rel: 7.1394e-11, PCG total_time: 1.4e-02
Opt: -4.7490e+01, Res: 2.1107e-03, EErr: 1.8973e-08 (9.0578e-09), Mflps: 286
[ System Size: 450
[ PCG Iteration 86 , residual: 9.5341e-15, rel: 1.4094e-07, PCG total_time: 9.1e-03
Opt: -4.7490e+01, Res: 6.7648e-08, EErr: 1.2756e-18 (6.0897e-19), Mflps: 290
Solution at (pseudo) time = 4.000000e-01, dt = 2.000000e-01, Step = 2
Scaling factor 0 = +4.000000e-01
[ System Size: 450
[ PCG Iteration 131 , residual: +2.1151e-09, rel: +9.9965e-11, PCG total_time: +1.4e-02
Opt: -9.6002e+01, Res: 2.1158e+01, EErr: 2.0166e+00 (1.0000e+00), Mflps: 285
[ System Size: 450
[ PCG Iteration 126 , residual: 2.3666e-10, rel: 9.2062e-11, PCG total_time: 1.3e-02
Opt: -9.6996e+01, Res: 2.5707e+00, EErr: 2.9055e-03 (1.4408e-03), Mflps: 286
[ System Size: 450
[ PCG Iteration 131 , residual: 1.6833e-13, rel: 9.5683e-11, PCG total_time: 1.4e-02
Opt: -9.6998e+01, Res: 1.7592e-03, EErr: 1.2883e-08 (6.3888e-09), Mflps: 286
[ System Size: 450
[ PCG Iteration 84 , residual: 8.1029e-15, rel: 1.8650e-07, PCG total_time: 8.9e-03
Opt: -9.6998e+01, Res: 4.3447e-08, EErr: 5.3771e-19 (2.6665e-19), Mflps: 288
Solution at (pseudo) time = 6.000000e-01, dt = 2.000000e-01, Step = 3
Scaling factor 0 = +6.000000e-01
[ System Size: 450
[ PCG Iteration 130 , residual: +2.0613e-09, rel: +9.7422e-11, PCG total_time: +1.4e-02
Opt: -1.4749e+02, Res: 2.1158e+01, EErr: 1.9449e+00 (1.0000e+00), Mflps: 284
[ System Size: 450
[ PCG Iteration 126 , residual: 2.0611e-10, rel: 9.0541e-11, PCG total_time: 1.4e-02
Opt: -1.4845e+02, Res: 2.2764e+00, EErr: 2.3792e-03 (1.2233e-03), Mflps: 286
[ System Size: 450
[ PCG Iteration 130 , residual: 1.3530e-13, rel: 9.1245e-11, PCG total_time: 1.4e-02
Opt: -1.4845e+02, Res: 1.4828e-03, EErr: 8.7881e-09 (4.5186e-09), Mflps: 287
[ System Size: 450
[ PCG Iteration 80 , residual: 9.6738e-15, rel: 3.4211e-07, PCG total_time: 8.5e-03
Opt: -1.4845e+02, Res: 2.8277e-08, EErr: 2.3287e-19 (1.1973e-19), Mflps: 288
Solution at (pseudo) time = 8.000000e-01, dt = 2.000000e-01, Step = 4
Scaling factor 0 = +8.000000e-01
[ System Size: 450
[ PCG Iteration 130 , residual: +1.5216e-09, rel: +7.1918e-11, PCG total_time: +1.4e-02
Opt: -2.0085e+02, Res: 2.1158e+01, EErr: 1.8792e+00 (1.0000e+00), Mflps: 284
[ System Size: 450
[ PCG Iteration 125 , residual: 1.9420e-10, rel: 9.6413e-11, PCG total_time: 1.4e-02
Opt: -2.0178e+02, Res: 2.0143e+00, EErr: 1.9528e-03 (1.0391e-03), Mflps: 284
[ System Size: 450
[ PCG Iteration 130 , residual: 1.1979e-13, rel: 9.4827e-11, PCG total_time: 1.4e-02
Opt: -2.0178e+02, Res: 1.2632e-03, EErr: 6.0123e-09 (3.1994e-09), Mflps: 286
[ System Size: 450
[ PCG Iteration 79 , residual: 8.5411e-15, rel: 4.5973e-07, PCG total_time: 8.4e-03
Opt: -2.0178e+02, Res: 1.8578e-08, EErr: 1.0305e-19 (5.4839e-20), Mflps: 289
Solution at (pseudo) time = 1.000000e+00, dt = 2.000000e-01, Step = 5
Scaling factor 0 = +1.000000e+00
[ System Size: 450
[ PCG Iteration 129 , residual: +1.9586e-09, rel: +9.2570e-11, PCG total_time: +1.4e-02
Opt: -2.5604e+02, Res: 2.1158e+01, EErr: 1.8192e+00 (1.0000e+00), Mflps: 284
[ System Size: 450
[ PCG Iteration 124 , residual: 1.6665e-10, rel: 9.3584e-11, PCG total_time: 1.3e-02
Opt: -2.5693e+02, Res: 1.7808e+00, EErr: 1.6067e-03 (8.8318e-04), Mflps: 284
[ System Size: 450
[ PCG Iteration 130 , residual: 9.4280e-14, rel: 8.6776e-11, PCG total_time: 1.4e-02
Opt: -2.5694e+02, Res: 1.0865e-03, EErr: 4.1197e-09 (2.2645e-09), Mflps: 286
[ System Size: 450
[ PCG Iteration 78 , residual: 8.6368e-15, rel: 7.0408e-07, PCG total_time: 8.3e-03
Opt: -2.5694e+02, Res: 1.2267e-08, EErr: 4.6308e-20 (2.5455e-20), Mflps: 287
End of computations.
Analysis finished correctly.
-----------------------------------------------------------------------------
Solver report
-----------------------------------------------------------------------------
Total number of solution steps : 5
Total time in solver : 0
Total number of iterations : 20
Total number of solution steps : 5
Average iterations/step : 4
Setup time (wall) : 0.000 seconds
Preprocess time (wall) : 0.010 seconds
Parsing time : 0.000 seconds
Postprocessing time (wall | CPU): 0.000 seconds ||0.000 seconds
Solution time (wall | CPU) : 0.263 seconds (71.9%) || 0.263 seconds
Assembler time (wall | CPU) : 0.1 seconds (23.0%) || 0.085 seconds
Total wall time : 0.366 seconds
Analysis finished on Fri Dec 22 15:10:39 2023
13. Bibliography
Brooks, A N and Hughes, T. J. R. (1982). Streamline upwind/Petrov-Galerkin formulations for convection dominated flows with particular emphasis in the incompressible Navier-Stokes equations, Computer Methods in Applied Mechanics and Engineering.
Codina, R. (2000). Stabilization of incompressibility and convection through orthogonal sub-scales in finite element methods, Computer Methods in Applied Mechanics and Engineering.
Hilber, H. M. and Hughes, T. J. R. and Taylor, R. L. (1977). Improved numerical dissipation for time integration algorithms in structural dynamics.
Hughes, T. J. R. and Feijoo, G. R. and Mazzei, L. and Quincy, J.-B. (1998). The variational multiscale method — a paradigm for computational mechanics, Computer Methods in Applied Mechanics and Engineering.
Hughes, T. J. R. and Franca, L. P. and Hulbert, G. M. (1988). A new finite element formulation for computational fluid mechanics: VIII. The Galerkin/Least-Squares method for advective-diffusive equations, Computer Methods in Applied Mechanics and Engineering.
Newmark, N M. (1956). A method of computation for structural dynamics, Journal of the Engineering Mechanics division. ASCE.