### Table of Contents

# Introduction

## ElementProperties

Metafor `ElementProperties`

are used to associate physical properties to the meshed structure (whether with volume or shell elements). Each `ElementProperties`

has a few properties which are associated to the corresponding type of element (see ElementProperties definition). for example, the associated material number, the integration method chosen ^{1)}, … They are also used to apply boundary conditions (pressure, thermal flux, …) or to impose contact between two parts.

#### Notes

- In Bacon, an
`ElementProperties`

number is similar to an attribute number. - The use of an
`ElementProperties`

is really similar to the use of a material (internally, in Metafor, a material is an adapter towards a`MaterialProperties`

) or a material law (`MaterialLawProperties`

). For those who know about C++, these three classes are instances of a single template. They have the same member functions: a`put()`

to define a new entry, and a`depend()`

to associate this value to some parameters

## Interaction

Initially, in Metafor, “`Interaction`

” were objects managing boundary conditions are contact only. The concept was extended to the generation of any type of element, including volume elements. They respect the following scheme:

*Careful*:

Two `Interactions`

cannot have the same user number, even if they are associated to different types of elements. For example, a `FieldApplicator`

(volume interaction) cannot have the same number as a `ContactInteraction`

.

## Links between Interaction and ElementProperties

In practice, an `ElementProperties`

must be associated to each `Interaction`

. Then, Metafor transmits internally the `ElementProperties`

of each element created by this `Interaction`

. In addition, the `Interaction`

reads the type of element to generate from the associated `ElementProperties`

. Interactions are different depending on this type of element, leading to volume interactions, contact interactions, boundary conditions interactions…

This association of an `ElementProperties`

and an `Interaction`

is done by the command `addProperty`

:

interactionset(no).addProperty(prp)

which adds the `ElementProperties`

`prp`

to the `interaction`

number `no`

.

In the data set, the best way to write this is a follow (example given for volume elements):

#1. Definition of the properties of finite volume element #---------------------------------------------------------- prp1 = ElementProperties (Volume2DElement) #Creates a property prp1 for finite volume elements #and defines the type of element ''Volume2DElement'' prp1.put (MATERIAL, 1) #Number of the associated material prp1.put (OMEGA_PT1, 101) #Number of the first point which defines the rotation axis prp1.put (OMEGA_PT2, 102) #Number of the second point which defines the rotation axis prp1.put (OMEGA, Omega) #Sets a value to the rotational speed (in degree/s) fct1 = PieceWiseLinearFunction() #Defines a ramp function for the evolution fct1.setData(0.,0.) #of the rotational speed fct1.setData(1.,1.) prp1.depend (OMEGA, fct1, Field1D(TM,RE)) #The effective rotational speed is equal to Omega*fct1 #(and depends on the time) prp1.put (STIFFMETHOD,STIFF_ANALYTIC) #Sets the calculation method of the stiffness matrix to analytic prp1.put (CAUCHYMECHVOLINTMETH,VES_CMVIM_STD) #Sets the method of integration of stresses in the element #to standard (integrate deviatoric stresses and #pressure for each integration point, careful to locking!) #2. Generation of volume finite elements on the mesh #----------------------------------------------------------- app = FieldApplicator(1) #Creates a generator (number 1) of volume elements (interaction) app.push(sideset(1)) #Sets the side 1 (supposed meshed) as support app.addProperty(prp1) #Assign the property prp1 to the future volume elements of the side 1 interactionset.add(app) #Adds the generator number 1 (interaction) to the interaction set

*Careful:* the command `addProperty`

adds a reference to the `ElementProperties`

in the `Interaction`

and increments its number of references. consequently, modifying the 'p' after using this command will also modify the behavior of the `Interaction`

!

Another way to do this is with the commands:

prp = ElementProperties(typeEl) interactionset(no).addProperty(prp) prp.put(param1, valeur1) prp.depend(param1, fct1, lock1) # optional prp.put(param2, valeur2) prp.depend(param2, fct2, lock2) # optional ...

However, to this day `addProperty`

does not return a reference toward the object. The following line is therefore NOT valid:

prp = interactionset(no).addProperty( ElementProperties(typeEl) )

^{1)}