Shallow Foundation

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.

This tutorial is provided for the new user who wishes to begin experimenting with PFC applied to a geotechnical scenario. The example involves the determination of the bearing capacity of a rough strip footing resting on an assembly of balls.

In this example, a constant vertical velocity is applied to the footing for a fixed duration and the resulting load is monitored. For demonstration purposes, the model is coarse and the ball assembly is limited in spatial extent.

../../../../../../../_images/footingView3D.png

Figure 1: 3D model of a footing over a ball assembly.

In the second stage, the presence of a shallow tunnel in proximity to the foundation is simulated. Two configurations are discussed: with and without the installation of tunnel reinforcement.

Preparation of the Ball Assembly

All of the lines contained in the file “Footing.dat (3D)” are discussed. The user can also run this problem interactively by typing the commands from the keyboard, pressing Enter at the end of each command line, and seeing the results directly. Additionally, the user can open these data files in the PFC editor, highlight the lines of the data file to be run, and press Ctrl+Shift+E to execute the selected lines of code.

model new
model large-strain on

;Set the domain extent and condition
model domain extent (-1,25) (-6,6) (-6,20)
model domain condition destroy

A domain is created, and its dimensions are defined. During the simulation, the balls and walls must stay inside the specified domain. If a ball or wall facet touches the domain, it will be destroyed since the destroy condition is specified (see the model domain command for further details).

wall generate box (0,24) (-5,5) (0,17)
model random 10001
ball generate box (0,24) (-5,5) (0,10) number 2000 radius 0.40

The wall generate command is used to generate the specimen boundaries. A box is created and its dimensions are specified. Inside this box, a cloud of equally sized balls is generated using the ball generate command. The random seed is set to 10001 prior to eliciting the ball generate command so that the ball positions and radii are identical whenever this model is run.

contact cmat default type ball-ball model linearpbond ...
        property fric 0.577 kn 1e8 ks 1e8             ...
        pb_kn 1e8 pb_ks 1e8 pb_ten 1e6                ...
        pb_coh 1e6 pb_rmul 0.8 dp_nratio 0.2

contact cmat default type ball-facet model linear     ...
        property fric 0.09 kn 1e8 ks 1e8              ...
        dp_nratio 0.2

The Contact Model Assignment Table (CMAT) must be filled in each PFC model for model objects to interact, as each contact is assigned a contact model when created via the CMAT. The default slots of the CMAT are defined for ball-ball and ball-facet contacts. Ball-facet contacts are filled with the linear contact model. The linear parallel bond contact model fills the ball-ball contacts, though. Parallel bonds are installed after the contact method bond is called, once the assembly has reached equilibrium. This action allows for the ball assembly to approximate a solid material.

ball attribute density 2000 radius multiply 1.4

The density attribute of the balls is finally assigned and the ball radii are modified. The ball attribute command assigns mechanical ball attributes (i.e., position, velocity, density, etc.). The ball property command, on the other hand, assigns surface properties that can be used to assign contact model properties (i.e., kn, ks, fric) through the inheritance mechanism. This mechanism is not used in the current model. The ball radii are increased by multiplying the original radii by a factor greater than one (using the multiply keyword).

history interval 5
ball history velocity-z position 12 0 5
model history mechanical unbalanced-maximum

During initial equilibration, the \(z\)-velocity of the ball nearest the center of the specimen and the unbalanced force are tracked (see the “History” section). This information can be useful when assessing the stability of the system during a static analysis. These quantities are tabulated every five calculation cycles (see the history interval command).

model mechanical timestep scale
model gravity 0 0 -9.81
model cycle 1000 calm 50
model solve ratio-average 1e-5

Timestep scaling is activated via the model mechanical timestep command with the scale keyword. This logic scales the masses and velocities of the balls to reach an equilibrium configuration quickly. Note that gravitational forces are not affected by timestep scaling, and that the stress path may not be realistic. Subsequent to gravity initialization, a number of calculation steps are done. Note the use of the calm keyword in the model cycle command. This action nulls the translational and rotational velocities of the balls every 50 calculation steps; it is a convenient way to avoid large velocities due to significant overlaps. Finally an equilibrium state is achieved via a model solve to an average ratio of 1e-5.

As shown in Figure Figure #unbalancedforce, the model achieves an equilibrium state relatively quickly.

../../../../../../../_images/unbalanced.png

Figure 2: Evolution of the unbalanced force.

wall delete range set id 2
wall generate group 'footing' box (0,5) (-5,5) (12,20)

The top facets of the box are removed (using the wall delete command). The footing is created above the specimen with the wall generate command. Note that the group keyword is used to assign a group identifier to the newly created facets. The resulting configuration is shown in Figure Figure #footingview.

contact method bond gap 0.0

model save 'Assembly'

As mentioned above, the contact method bond is used to install parallel bonds in contacts where the gap condition is satisfied. In this case, the upper bound of the gap is 0.0, meaning that parallel bonds are installed at all ball-ball contacts where balls overlap. Had the linear parallel bond model also been applied to ball-facet contacts, parallel bonds would also have been installed in these contacts. Unlike PFC 4.0, balls can be bonded to wall facets in PFC 6.0. The simulation is saved at this point for later use.

Installation of the Foundation

wall attribute velocity-z -0.25 range group 'footing'
wall history force-contact-z id 7

; The timestep is set to its automatic value for dynamic simulations and
; an additional 5 seconds are simulated. The model is saved at the end of 
; the simulation.
model mechanical timestep auto
model solve time 10.0

; Solve to an equilibrium state again
wall attribute velocity-z 0.0
model solve ratio-average 1e-5

The vertical velocity of the footing is constant, and the resulting load on the ball assembly is monitored. The vertical contact force is also monitored via a history. The timestep is set to automatic mode since the stress path is important to gauge the loading response; this is a dynamic phenomenon. An additional 10 seconds of model time are simulated using the time solve limit (see the model solve command). Once the foundation has been installed, the wall velocity is nulled and the model is solved to equilibrium once again.

Figure Figure #forces shows the distribution of contact forces in the ball assembly as a consequence of loading.

../../../../../../../_images/forces.png

Figure 3: Distribution of contact forces in the ball assembly after loading.

Excavation of a Shallow Tunnel

The files “Tunnel.dat (3D)” and “Lining.dat (3D)” are discussed below. In order to excavate the tunnel from the equilibrated model, one must model restore the model before a number of balls are deleted in a spatial range.

; The state prior to the footing load is restored
model restore 'Assembly'

; A cylinder-shaped tunnel is excavated through the 'delete' 
; and the 'range group' commands
ball group 'Tunnel' range cylinder end-1 (16.0,-6.0,6.0) ...
     end-2 (16.0,6.0,6.0) radius 3.0
ball delete range group 'Tunnel'

; A number of cycles are done in order to verify that the model is 
; stable after excavation of the tunnel. The model is saved at this stage.
model cycle 1
model solve ratio-average 1e-5

model save 'StableTunnel'

All of the balls with centers inside the specified cylinder are assigned the group identifier Tunnel and deleted. Alternatively, one could have given the cylindrical range directly in the ball delete command. A single model cycle must be taken, for the contact forces resulting from this change in the model configuration to be accumulated to the balls. (If this cycle is not taken, the subsequent model solve command will stop immediately since the forces applied to the balls by the contacts will be in equilibrium.) The configuration is now stable (see Figure Figure #tunnelview) and further experiments can be undertaken.

../../../../../../../_images/tunnelView.png

Figure 4: Model configuration with an excavated tunnel.

;The assembly is finally loaded by the footing. What happens to the tunnel?
wall attribute velocity-z -0.25 range group 'footing'

model mechanical timestep auto
model solve time 10.0

; Solve to an equilibrium state again
wall attribute velocity-z 0.0
model solve ratio-average 1e-5

Application of load from the footing results in catastrophic failure of the unreinforced tunnel. Figure Figure #tunnelclosed shows the failed configuration.

../../../../../../../_images/tunnelclosed.png

Figure 5: Configuration after installation of the footing near an unreinforced and shallow tunnel.

In the second stage of the simulation, a lining is introduced to reinforce the tunnel.

model restore 'StableTunnel'

; A lining support is installed around the excavation by specifying a higher 
; cohesion and tensile strength to contacts around the Tunnel.

; A group of contacts named 'Lining' is created
contact group 'Lining' range cylinder end-1 (16.0,-6.0,6.0) ...
        end-2 (16.0,6.0,6.0) radius 4.0

; A new set of properties is defined for the contacts of the group 'Lining'
contact property fric 0.18 kn 1e8 ks 1e8            ...
        pb_kn 1e8 pb_ks 1e8 pb_ten 1e10             ...
        pb_coh 1e10 pb_rmul 1.0 dp_nratio 0.2       ...
        range group 'Lining'

; The assembly is loaded again by the footing. Which differences with respect
; to the case of the unlined tunnel?
wall attribute velocity-z -0.25 range group 'footing'

model save 'Lining'

model mechanical timestep auto
model solve time 10.0

; Solve to an equilibrium state again
wall attribute velocity-z 0.0
model solve ratio-average 1e-5

model save 'LinedTunnel'

The tunnel lining is simulated by changing the contact properties for those contacts directly adjacent to the excavation. When contacts are assigned group identifiers based on a range, a number of different criteria can be used to decide whether or not the contacts fall within the group. One can specify that a contact falls within a group if either or both of its ends fall within the specified range. Figure Figure #lining shows the effect of this procedure by showing the cohesive strengths of the parallel bonds.

../../../../../../../_images/lining.png

Figure 6: Lining reinforcement for the shallow tunnel.

As with the previous experiments, the footing is given a constant \(z\)-velocity for a fixed duration, its velocity is nulled, and the system is solved to equilibrium. Figure Figure #linedtunnel shows the result of the reinforcement. The larger cohesive strengths along the tunnel boundary allows the configuration to remain stable in spite of the additional load.

../../../../../../../_images/linedtunnel.png

Figure 7: Model configuration after the installation of the footing near a reinforced and shallow tunnel.

Discussion

This simple tutorial illustrates how one might use PFC to investigate a geotechnical problem. An assembly of balls is equilibrated in a box and bonded to make a simple material. A footing is installed to test the stability of three separate configurations: 1) the undisturbed configuration; 2) the configuration with a shallow, unreinforced tunnel; and 3) the configuration with a shallow, reinforced tunnel.

Data Files

Footing.dat (3D)

; fname: Footing.dat (3D)
;
;  Create a balls assembly and install a shallow foundation
;=========================================================================

; excerpt-drmx-start
model new
model large-strain on

;Set the domain extent and condition
model domain extent (-1,25) (-6,6) (-6,20)
model domain condition destroy
; excerpt-drmx-end

;generate a box and a cloud of 2000 equally sized balls
; excerpt-gpnp-start
wall generate box (0,24) (-5,5) (0,17)
model random 10001
ball generate box (0,24) (-5,5) (0,10) number 2000 radius 0.40
; excerpt-gpnp-end

; Modify the default slots of the Contact Model Assignement Table
; Here we choose the linear contact model (with kn=1e8) for all contact
; types but ball-ball contacts, to which we assign the linearpbond model.
; Note that only the linear part of the linearpbond model is activated as
; long as the contact method bond is not called, which is done later
; excerpt-dfof-start
contact cmat default type ball-ball model linearpbond ...
        property fric 0.577 kn 1e8 ks 1e8             ...
        pb_kn 1e8 pb_ks 1e8 pb_ten 1e6                ...
        pb_coh 1e6 pb_rmul 0.8 dp_nratio 0.2

contact cmat default type ball-facet model linear     ...
        property fric 0.09 kn 1e8 ks 1e8              ...
        dp_nratio 0.2
; excerpt-dfof-end

;define the density and increase their radii
; excerpt-wpbs-start
ball attribute density 2000 radius multiply 1.4
; excerpt-wpbs-end

;define some history to plot the velocity of a ball of the assembly and
;of the unbalanced force. Histories are stored each 5 cycles.
; excerpt-wpmn-start
history interval 5
ball history velocity-z position 12 0 5
model history mechanical unbalanced-maximum
; excerpt-wpmn-end

; To reach a stable configuration faster, density scaling is activated.
; Gravity is introduced
; excerpt-fohe-start
model mechanical timestep scale
model gravity 0 0 -9.81
model cycle 1000 calm 50
model solve ratio-average 1e-5
; excerpt-fohe-end

; creation of a box-shaped foundation
; the name 'footing' is associated to the respective group of walls
; excerpt-yiex-start
wall delete range set id 2
wall generate group 'footing' box (0,5) (-5,5) (12,20)
; excerpt-yiex-end


; parallel bonds are finally installed. LinearPBond model is active
; for ball-ball contacts. The simulation is saved at this stage
; so that further restoring is possible
; excerpt-incx-start
contact method bond gap 0.0

model save 'Assembly'
; excerpt-incx-end

; The foundation is supposed to settle with a constant velocity
; The contact force at the base of the foundation is 
; stored during the simulation
; excerpt-oybj-start
wall attribute velocity-z -0.25 range group 'footing'
wall history force-contact-z id 7

; The timestep is set to its automatic value for dynamic simulations and
; an additional 5 seconds are simulated. The model is saved at the end of 
; the simulation.
model mechanical timestep auto
model solve time 10.0

; Solve to an equilibrium state again
wall attribute velocity-z 0.0
model solve ratio-average 1e-5
; excerpt-oybj-end

model save 'Footing'

;=========================================================================
; eof: Footing.dat (3D)

Tunnel.dat (3D)

; fname: Tunnel.dat (3D)
;
;  Excavation of an unsupported tunnel
;=========================================================================

; excerpt-hldb-start
; The state prior to the footing load is restored
model restore 'Assembly'

; A cylinder-shaped tunnel is excavated through the 'delete' 
; and the 'range group' commands
ball group 'Tunnel' range cylinder end-1 (16.0,-6.0,6.0) ...
     end-2 (16.0,6.0,6.0) radius 3.0
ball delete range group 'Tunnel'

; A number of cycles are done in order to verify that the model is 
; stable after excavation of the tunnel. The model is saved at this stage.
model cycle 1
model solve ratio-average 1e-5

model save 'StableTunnel'
; excerpt-hldb-end

; excerpt-tiwq-start
;The assembly is finally loaded by the footing. What happens to the tunnel?
wall attribute velocity-z -0.25 range group 'footing'

model mechanical timestep auto
model solve time 10.0

; Solve to an equilibrium state again
wall attribute velocity-z 0.0
model solve ratio-average 1e-5
; excerpt-tiwq-end


model save 'UnlinedTunnel'

;=========================================================================
; eof: Tunnel.dat (3D)

Lining.dat (3D)

; fname: Lining.dat (3D)
;
;  Installation of a lining support for the tunnel
;=========================================================================

; excerpt-phqs-start
model restore 'StableTunnel'

; A lining support is installed around the excavation by specifying a higher 
; cohesion and tensile strength to contacts around the Tunnel.

; A group of contacts named 'Lining' is created
contact group 'Lining' range cylinder end-1 (16.0,-6.0,6.0) ...
        end-2 (16.0,6.0,6.0) radius 4.0

; A new set of properties is defined for the contacts of the group 'Lining'
contact property fric 0.18 kn 1e8 ks 1e8            ...
        pb_kn 1e8 pb_ks 1e8 pb_ten 1e10             ...
        pb_coh 1e10 pb_rmul 1.0 dp_nratio 0.2       ...
        range group 'Lining'

; The assembly is loaded again by the footing. Which differences with respect
; to the case of the unlined tunnel?
wall attribute velocity-z -0.25 range group 'footing'

model save 'Lining'

model mechanical timestep auto
model solve time 10.0

; Solve to an equilibrium state again
wall attribute velocity-z 0.0
model solve ratio-average 1e-5

model save 'LinedTunnel'
; excerpt-phqs-end

;=========================================================================
; eof: Lining.dat (3D)

Footing.dat (2D)

; fname: Footing.dat (2D)
;
;  Create an assembly and install a shallow foundation
;=========================================================================

model new
model large-strain on

;Set the domain extent and condition
model domain extent (-1,25) (-6,20)
model domain condition destroy

;generate a box and a cloud of 2000 equally sized balls
wall generate name 'box' box (0,24) (0,17) one-wall
model random 10001
ball generate box (0,24) (0,10) number 2000 radius 0.1250

; Modify the default slots of the Contact Model Assignement Table
; Here we choose the linear contact model (with kn=1e6) for all contact 
; types but ball-ball contacts, to which we assign the linearpbond model.
; Note that only the linear part of the linearpbond model is activated as 
; long as the contact method bond is not called, which is done later
contact cmat default type ball-ball model linearpbond   ...
                          property fric 0.577 kn 1e8 ks 1e8       ...
                          pb_kn 1e8 pb_ks 1e8 pb_ten 1e6          ...
                          pb_coh 1e6 pb_rmul 0.8 dp_nratio 0.2

contact cmat default type ball-facet model linear       ...
                          property kn 1e8 ks 1e8 fric 0.09  ...
                          dp_nratio 0.2

;define the density of the balls and increase their radius
ball attribute density 2000 radius multiply 1.4

;define some history to plot the velocity of a ball of the assembly and 
;of the unbalanced force. Histories are stored each 5 cycles.
history interval 5
ball history velocity-y position (12,5)
model history mechanical unbalanced-maximum

; To reach a stable configuration faster, density scaling is activated.
; Gravity is introduced
model mechanical timestep scale
model gravity 0 -9.81
model cycle 1000 calm 50
model solve ratio-average 1e-5

; creation of a box-shaped foundation
; the name 'footing' is associated to the respective group of walls
wall delete range set id 3
wall generate name 'footing' group 'footing' box (0,5) (11,20) one-wall

; parallel bonds are finally installed. LinearPBond model is active
; for ball-ball contacts. The simulation is saved at this stage
; so that further restoring is possible
contact method bond gap 0.0

model save 'Assembly'

; The foundation is supposed to settle with a constant velocity
; The contact force at the base of the foundation is stored during 
; the simulation.
wall attribute velocity-y -0.25 range group 'footing'
wall history name 'reaction force' force-contact-y name 'footing' 

; The timestep is set to its automatic value for dynamic simulations and
; an additional 5 seconds are simulated. The model is saved at the end of 
; the simulation.
model mechanical timestep auto
model solve time 10.0

; Solve to an equilibrium state again
wall attribute velocity-y 0.0
model solve ratio-average 1e-4

model save 'Footing'

;=========================================================================
; eof: Footing.dat (2D)

Tunnel.dat (2D)

; fname: Tunnel.dat (2D)
;
;  Excavation of an unsupported tunnel
;=========================================================================

; The state prior to the footing load is restored
model restore 'Assembly'

ball group 'Tunnel' range circle center 16.0 5.0 radius 3.0
ball delete range group 'Tunnel'

; A number of cycles are done in order to verify that the model is stable 
; after excavation of the tunnel. The model is saved at this stage.
model cycle 1
model solve ratio-average 1e-4

model save 'StableTunnel'

;The assembly is finally loaded by the footing. What happens to the tunnel?
wall attribute velocity-y -0.25 range group 'footing'

model mechanical timestep auto
model solve time 10.0

; Solve to an equilibrium state again
wall attribute velocity-y 0.0
model solve ratio-average 1e-4

model save 'UnlinedTunnel'

;=========================================================================
; eof: Tunnel.dat (2D)

Lining.dat (2D)

; fname: Lining.dat (2D)
;
;  Installation of a lining support for the tunnel
;=========================================================================
model restore 'StableTunnel'

contact group 'Lining' range circle center 16.0 5.0 radius 4.0

contact property fric 0.18 kn 1e8 ks 1e8        ...
        pb_kn 1e8 pb_ks 1e8 pb_ten 1e10         ...
        pb_coh 1e10 pb_rmul 1.0 dp_nratio 0.2   ...
        range group 'Lining'

wall attribute velocity-y -0.25 range group 'footing'

model save 'Lining'

model mechanical timestep auto
model solve time 10.0

wall attribute velocity-y 0.0
model solve ratio-average 1e-4

model save 'LinedTunnel'

;=========================================================================
; eof: Lining.dat (2D)

Endnotes