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.
ElementProperties
number is similar to an attribute number.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
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
.
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) )