Rigid Block Model of Flying Buttresses

Problem Statement


The project file for this example may be viewed/run in PFC.[1] The data file used appears at the end of this example.

The flying buttress is a specific form of buttress composed of an arched structure that extends from the upper portion of a wall to a pier of great mass, in order to convey to the ground the lateral forces that push a wall outward. These forces arise from vaulted ceilings of stone, and from wind-loading on roofs [Curls1999]. The flying buttresses of Notre-Dame Cathedral (Paris, France) and a schematic cross section are shown below. The Notre Dame Cathedral Paris didn’t originally have flying buttresses included in its design. But after the construction of the cathedral began, the thinner walls (popularized in the Gothic style) grew ever higher and stress fractures began to occur as the walls pushed outward. The cathedral’s architects, to fix the problem, built supports around the outside walls. Later additions continued the pattern. The Notre-Dame Cathedral was among the first buildings in the world to use the flying buttress [Notredame].


Figure 1: Buttresses of Notre-Dame Cathedral.


Figure 2: Cross-section of flying buttresses of Notre-Dame Cathedral from [Tallon2011].

This problem analyzed here is an example of a simple buttress with span approximately 11 m and the height is 34 m. The buttresses are modeled as 1 m thick blocks (approximately equal to the true thickness). The Gothic arch at the top represents the continuous vault. As a result, its weight is multiplied by 6 m, the bay spacing, so that the correct outward push is applied to the pillars. The geometry is simplified compared to the true geometry. The figure below shows the rigid block model geometry.

The density of the blocks is set to 2500 kg/m3. As explained above, the density of the arch is set to six times this value (15,000 kg/m3). The friction coefficient is set to 0.7. The contacts that exist between the pillars and the buttresses are bonded, though.

Simulation Results

The model is run with both local and normal viscous damping active. Gravity is turned on and the model with buttresses is solved to the default average ratio of 1e-5. Displacements and contacts are shown below. Note that as a single contact exists between rigid blocks they show clearly the line of action. The same model is then run without buttresses for 2 seconds to show clearly that failure ensues.


Figure 3: Initial buttress configuration.


Figure 4: The buttress after settling.


Figure 5: Arch without buttresses after 2 seconds.



Curls, J.S. Editor, A Dictionary of Architecture, Oxford, 113-114, 1999.


Tallon, A.J., “Rethinking Medieval Structure,” in New Approaches to Medieval Architecture, R. O. Bork, W. W. Clark, A. McGehee (eds.), Routledge, 2011.

Data File


model new
model large-strain on 

; blocks created in Rhino and exported to 3DEC commands using vtpt program.
program call 'rigid_blocks.dat'
; Block properties, stress units of MPa

; pillars and base
rblock group 'arch' range position-z 25 100
rblock attribute density 0.0025 damp 0.7 range group 'arch' not

; arch
rblock attribute density 0.015 damp 0.7 range group 'arch' 

; set gravity
model gravity 0 0 -10

; fix the bottom blocks 
rblock fix vel spin range position-z -2 0

; set up the cmat
contact cmat default model linearpbond method deformability            ...
             emod 1e5 kratio 0.5 pb_deformability emod 1e5 kratio 0.5  ...
             property fric 0.7 pb_ten 1e2 pb_coh 1e2 lin_mode 1 dp_nratio 0.2

; slightly increase the size of the rigid blocks to be bonded so that
; they overlap: this needs to happen so the bonds are created
rblock scale relative 1.001 range id-list 19 28 29 36 77 84 85 94

; create the contacts
model clean all

; bond the contacts 
contact group 'glued' range plane dip 90 dip-direction 90 ...
                            origin -6.5 0.5 24.5 dist 0.01 position-z 15 100
contact group 'glued' range plane dip 90 dip-direction 90 ...
                            origin 6.5 0.5 24.5 dist 0.01 position-z 15 100
contact group 'glued' range plane dip 90 dip-direction 90 ...
                            origin -18.7 0.5 16.6 dist 0.01 position-z 15 100
contact group 'glued' range plane dip 90 dip-direction 90 ...
                            origin 18.7 0.5 16.6  dist 0.01 position-z 15 100
contact method bond range group 'glued'
model save 'buttress_ini'
plot 'the_system' export bitmap filename 'initial_buttress'

; cycle the model with the pillars
model restore 'buttress_ini'
model solve 
plot 'the_system' export bitmap filename 'settled_buttress'

; cycle the model without pillars
model restore 'buttress_ini'
rblock delete range position-x -100 -6.5
rblock delete range position-x 6.5 100
model solve time-total 2.0
plot 'the_system' export bitmap filename 'failing_buttress'