Attributes and Properties
Introduction
Note
The project file for this example may be viewed/run in PFC.[1] The data files used are shown at the end of this example.
The distinction between an attribute and a property is central to command processing and plotting.
Attributes are intrinsic characteristics of model components such as position, velocity, size, etc. The list of attributes is unchanging. Bodies (balls, clumps, and walls), pieces (balls, pebbles, and facets) and contacts have attributes. See the
ball attribute
,clump attribute
, andwall attribute
documentation for lists of modifiable attributes. Attributes can also be listed in PFC with theball list attribute
,clump list attribute
, andwall list attribute
commands.Properties apply exclusively to pieces and are lists of string/value pairs specified by the user. By default, pieces are devoid of properties. These string/value pairs are meant to represent the surface conditions of the pieces and may be used by contact models to determine how pieces interact.
Mistaken Property Assignment
The proper assignment of attributes and properties is very important. The following
example demonstrates a common pitfall: a select range of balls is assigned a nonzero velocity in
the \(x\)-direction using the ball attribute
command, while a new property with name velocity-x
and a
value of 1.0 is assigned to the remaining balls via the ball property
command. Since velocity-x
can
refer to a keyword of the ball attribute
command, a warning occurs.
; fname: attributes_and_properties.dat (3D)
;
; Demonstrate the distinction between ball attributes and ball properties
;==============================================================================
model new
model large-strain on
model title 'Attributes and Properties'
; generate a loose assembly of balls
model domain extent -10.0 10.0
model random 10001
ball generate number 10 radius 0.5 box -0.5 0.5 -0.5 0.5 -9.0 9.0
; set a nonzero x-velocity to part of the balls
ball attribute velocity-x 1.0 range position-z -10.0 0.0
; create a property with name 'xvelocity' to the other balls
ball property 'velocity-x' 1.0 range position-z 0.0 10.0
; set density and cycle - note that only part of the balls actually moved
ball attribute density 1.0
model mechanical timestep fix 1e-2
model solve time 2
program return
;==============================================================================
; eof: attributes_and_properties.dat (3D)
Ten balls are created in a column. The top five balls are assigned the velocity-x
property, while the velocity attribute of the bottom five balls is modified. A fixed timestep is set, and the model is solved for a specified time interval. Figure 1 shows the final state of the system with balls and ball velocity arrows plotted (see the Ball Plot Item for plotting details). Balls are colored by their velocity-x
property. The bottom five balls are not rendered since they have no velocity-x
property. On the other hand, no arrows are rendered for the top five balls, since no velocity has been assigned to these balls. As a result, the balls with the property assignment do not move once cycling begins.
Property Assignment for Contact Inheritance
The following example illustrates the intended use of the property concept, namely for contact model property assignment.
; fname: properties_in_contacts.dat
;
; Demonstrate ball properties being used to set contact model properties
;=============================================================================
model new
model large-strain on
model title 'Properties in Contacts'
; create the domain
model domain extent -10.0 10.0 -5.0 5.0 -10.0 10.0 condition reflect
; use the linear contact model
contact cmat default model linear
; generate an assembly
model random 10001
ball generate number 140 radius 1.0 box -10 0 -5 5 -10 10 tries 300000
ball generate number 140 radius 1.0 box 0 10 -5 5 -10 10 tries 300000
; assign the density and local damping
ball attribute density 1000 damp 0.7
;set gravity
model gravity 10
; assign properties balls for the linear contact model to use
ball property 'kn' 1e8 range position-x -10 0
ball property 'kn' 5e5 range position-x 0 10
ball property 'fric' 0.7
; put a partition between the two sides
wall generate plane dip 90 dip-direction 90
wall property 'kn' 1e7
; let them drop
model solve time 10
program return
;=============================================================================
; eof: properties_in_contacts.dat
In this case, equal numbers of balls are generated on either side of a wall partition. The
linear contact model
is assigned as the default contact model for all contact types (see the contact cmat default
command), but no properties are specified in the CMAT. Instead, the
ball property
command is used to assign the surface property kn to balls on either side of the
partition. Note that balls on the left have 200 times higher kn values than balls on the right.
The linear contact model supports inheritance where contact model properties are
determined from piece properties. The linear contact model documentation discusses
the details of inheritance for this contact model. As the final configuration reveals, there
is significantly more compaction on the right side under the force of gravity as a result of less-stiff
interactions between the balls.
Discussion
This tutorial demonstrates the differences between attributes and properties. These differences are central to command processing and plotting in PFC.
Data Files
attributes_and_properties.dat (3D)
1; fname: attributes_and_properties.dat (3D)
2;
3; Demonstrate the distinction between ball attributes and ball properties
4;==============================================================================
5model new
6model large-strain on
7model title 'Attributes and Properties'
8
9; generate a loose assembly of balls
10model domain extent -10.0 10.0
11model random 10001
12ball generate number 10 radius 0.5 box -0.5 0.5 -0.5 0.5 -9.0 9.0
13
14; set a nonzero x-velocity to part of the balls
15ball attribute velocity-x 1.0 range position-z -10.0 0.0
16
17; create a property with name 'xvelocity' to the other balls
18ball property 'velocity-x' 1.0 range position-z 0.0 10.0
19
20; set density and cycle - note that only part of the balls actually moved
21ball attribute density 1.0
22model mechanical timestep fix 1e-2
23model solve time 2
24
25program return
26;==============================================================================
27; eof: attributes_and_properties.dat (3D)
properties_in_contacts.dat (3D)
1; fname: properties_in_contacts.dat
2;
3; Demonstrate ball properties being used to set contact model properties
4;=============================================================================
5model new
6model large-strain on
7model title 'Properties in Contacts'
8
9; create the domain
10model domain extent -10.0 10.0 -5.0 5.0 -10.0 10.0 condition reflect
11
12; use the linear contact model
13contact cmat default model linear
14
15; generate an assembly
16model random 10001
17ball generate number 140 radius 1.0 box -10 0 -5 5 -10 10 tries 300000
18ball generate number 140 radius 1.0 box 0 10 -5 5 -10 10 tries 300000
19
20; assign the density and local damping
21ball attribute density 1000 damp 0.7
22
23;set gravity
24model gravity 10
25
26; assign properties balls for the linear contact model to use
27ball property 'kn' 1e8 range position-x -10 0
28ball property 'kn' 5e5 range position-x 0 10
29ball property 'fric' 0.7
30
31; put a partition between the two sides
32wall generate plane dip 90 dip-direction 90
33wall property 'kn' 1e7
34
35; let them drop
36model solve time 10
37
38program return
39;=============================================================================
40; eof: properties_in_contacts.dat
attributes_and_properties.dat (2D)
1; fname: attributes_and_properties.dat (2D)
2;
3; Demonstrate the distinction between ball attributes and ball properties
4;==============================================================================
5model new
6model large-strain on
7model title 'Attributes and Properties'
8
9; generate a loose assembly of balls
10model domain extent -10.0 10.0
11model random 10001
12ball generate id 1 10 box -1.0 1.0 -10.0 10.0
13
14; set a non-zero velocity-x to part of the balls
15ball attribute velocity-x 1.0 range position-y -10.0 0.0
16
17; create a property with name 'xvelocity' to the other balls
18ball property 'xvelocity' 1.0 range position-y 0.0 10.0
19
20; set density and cycle - note that only part of the balls actually moved
21ball attribute density 1.0
22model mechanical timestep fix 1e-5
23model cycle 10
24
25program return
26;==============================================================================
27; eof: attributes_and_properties.dat (2D)
Endnote
Was this helpful? ... | Itasca Software © 2024, Itasca | Updated: Dec 14, 2024 |