====== 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 [[doc:user:elements:general:def_element_properties|ElementProperties definition]]). for example, the associated [[doc:user:elements:general:materials|material number]], the integration method chosen ((SRI/EAS)), ... They are also used to apply boundary conditions (pressure, thermal flux, ...) or to impose contact between two parts. === Notes === * In [[doc:user:geometry:import:tuto2|Bacon]], an ''ElementProperties'' number is similar to an attribute number. * The use of an ''ElementProperties'' is really similar to the use of a [[doc:user:elements:general:materials|material]] (internally, in Metafor, a material is an adapter towards a ''MaterialProperties'') or a [[doc:user:elements:volumes:start|material law]] (''MaterialLawProperties''). For those who know about [[doc:user:general:glossaire#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, “''[[doc:user:start#interactions|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: {{ doc:user:interact.gif |Interactions}} __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 ''[[doc:user:start#interactions|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) )