Implementation of a constitutive model for masonry shells as a stand-alone subroutine



Similar documents
In order to be able to design beams, we need both moments and shears. 1. Moment a) From direct design method or equivalent frame method

Earthquake Loss for Reinforced Concrete Building Structures Before and After Fire damage

Journal of Engineering Science and Technology Review 6 (5) (2013) Research Article

Chapter 1: Introduction

A novel active mass damper for vibration control of bridges

protection p1ann1ng report

) ( )( ) ( ) ( )( ) ( ) ( ) (1)

SHAFTS: TORSION LOADING AND DEFORMATION

A Holistic Method for Selecting Web Services in Design of Composite Applications

Static Fairness Criteria in Telecommunications

Capacity at Unsignalized Two-Stage Priority Intersections

Chapter 1 Microeconomics of Consumer Theory

Chapter 5 Single Phase Systems

10.1 The Lorentz force law

Sebastián Bravo López

Computational Analysis of Two Arrangements of a Central Ground-Source Heat Pump System for Residential Buildings

CHAPTER J DESIGN OF CONNECTIONS

Fig. 1.1 Rectangular foundation plan.

SUBSTRUCTURE EXAMPLE. Full Height Abutment on Spread Footing

Improved SOM-Based High-Dimensional Data Visualization Algorithm

THE PERFORMANCE OF TRANSIT TIME FLOWMETERS IN HEATED GAS MIXTURES

Explanatory Examples on Indian Seismic Code IS 1893 (Part I)

Measurement of Powder Flow Properties that relate to Gravity Flow Behaviour through Industrial Processing Lines

Effects of Inter-Coaching Spacing on Aerodynamic Noise Generation Inside High-speed Trains

Computer Networks Framing

User s Guide VISFIT: a computer tool for the measurement of intrinsic viscosities

ROSE SCHOOL A SIMPLIFIED MECHANICS BASED PROCEDURE FOR THE SEISMIC RISK ASSESSMENT OF UNREINFORCED MASONRY BUILDINGS

FIRE DETECTION USING AUTONOMOUS AERIAL VEHICLES WITH INFRARED AND VISUAL CAMERAS. J. Ramiro Martínez-de Dios, Luis Merino and Aníbal Ollero

Intelligent Measurement Processes in 3D Optical Metrology: Producing More Accurate Point Clouds

A Three-Hybrid Treatment Method of the Compressor's Characteristic Line in Performance Prediction of Power Systems

Channel Assignment Strategies for Cellular Phone Systems

AUDITING COST OVERRUN CLAIMS *

Supply chain coordination; A Game Theory approach

Programming Basics - FORTRAN 77

Recovering Articulated Motion with a Hierarchical Factorization Method

How To Fator

arxiv:astro-ph/ v2 10 Jun 2003 Theory Group, MS 50A-5101 Lawrence Berkeley National Laboratory One Cyclotron Road Berkeley, CA USA

Weighting Methods in Survey Sampling

Granular Problem Solving and Software Engineering

Classical Electromagnetic Doppler Effect Redefined. Copyright 2014 Joseph A. Rybczyk

RATING SCALES FOR NEUROLOGISTS

Findings and Recommendations

CIS570 Lecture 4 Introduction to Data-flow Analysis 3

VOLUME 13, ARTICLE 5, PAGES PUBLISHED 05 OCTOBER DOI: /DemRes

Henley Business School at Univ of Reading. Pre-Experience Postgraduate Programmes Chartered Institute of Personnel and Development (CIPD)

WATER CLOSET SUPPORTS TECHNICAL DATA

Hierarchical Clustering and Sampling Techniques for Network Monitoring

Optimal Sales Force Compensation

HEAT EXCHANGERS-2. Associate Professor. IIT Delhi P.Talukdar/ Mech-IITD

Deadline-based Escalation in Process-Aware Information Systems

Impedance Method for Leak Detection in Zigzag Pipelines


An Enhanced Critical Path Method for Multiple Resource Constraints

Open and Extensible Business Process Simulator

BEARING CAPACITY OF SOIL

WORKFLOW CONTROL-FLOW PATTERNS A Revised View

Relativistic Kinematics -a project in Analytical mechanics Karlstad University

HEAT CONDUCTION. q A q T

A Context-Aware Preference Database System

An integrated optimization model of a Closed- Loop Supply Chain under uncertainty

Price-based versus quantity-based approaches for stimulating the development of renewable electricity: new insights in an old debate

5.2 The Master Theorem

Henley Business School at Univ of Reading. Chartered Institute of Personnel and Development (CIPD)

A Keyword Filters Method for Spam via Maximum Independent Sets

To the Graduate Council:

Performance Analysis of IEEE in Multi-hop Wireless Networks

RISK-BASED IN SITU BIOREMEDIATION DESIGN JENNINGS BRYAN SMALLEY. A.B., Washington University, 1992 THESIS. Urbana, Illinois

THE EFFECT OF WATER VAPOR ON COUNTERFLOW DIFFUSION FLAMES

State of Maryland Participation Agreement for Pre-Tax and Roth Retirement Savings Accounts

10 UNSTEADY FLOW IN OPEN CHANNELS

Neural network-based Load Balancing and Reactive Power Control by Static VAR Compensator

Revista Brasileira de Ensino de Fsica, vol. 21, no. 4, Dezembro, Surface Charges and Electric Field in a Two-Wire

REDUCTION FACTOR OF FEEDING LINES THAT HAVE A CABLE AND AN OVERHEAD SECTION

The Basics of International Trade: A Classroom Experiment

VOLTAGE CONTROL WITH SHUNT CAPACITANCE ON RADIAL DISTRIBUTION LINE WITH HIGH R/X FACTOR. A Thesis by. Hong-Tuan Nguyen Vu

A Robust Optimization Approach to Dynamic Pricing and Inventory Control with no Backorders

i_~f e 1 then e 2 else e 3

Electrician'sMathand BasicElectricalFormulas

4.15 USING METEOSAT SECOND GENERATION HIGH RESOLUTION VISIBLE DATA FOR THE IMPOVEMENT OF THE RAPID DEVELOPPING THUNDERSTORM PRODUCT

TS150 Visible (exposed) fixing with screws on a timber sub-frame

Customer Efficiency, Channel Usage and Firm Performance in Retail Banking

FOOD FOR THOUGHT Topical Insights from our Subject Matter Experts

Algorithm of Removing Thin Cloud-fog Cover from Single Remote Sensing Image

1.3 Complex Numbers; Quadratic Equations in the Complex Number System*

INCOME TAX WITHHOLDING GUIDE FOR EMPLOYERS

UNIVERSITY AND WORK-STUDY EMPLOYERS WEB SITE USER S GUIDE

Finite Element Modelling of Vibro-Acoustic Systems for Active Noise Reduction

Heat Generation and Removal in Solid State Lasers

SOFTWARE ENGINEERING I

Propagation in Lossy Rectangular Waveguides

OpenScape 4000 CSTA V7 Connectivity Adapter - CSTA III, Part 2, Version 4.1. Developer s Guide A31003-G9310-I D1

Transcription:

Implementation of a onstitutive model for masonry shells as a stand-alone subroutine Paulo B. Lourenço, Késio Paláio, Franiso Prieto Report 02-DE/E-13 The present researh has been arried out under ontrat GROW-1999-70420 ISO-BRIK from the European ommission Task 1.1 Date: November 2002 No. of Pages: 50 Keywords: Fortran ode, orthotropi model, validation, masonry shells Esola de Engenharia Departamento de Engenharia ivil Universidade do Minho Azurém, 4800-085 Guimarães - Tel. +351 253 510 200 - Fax +351 253 510 217 - E-mail seg@ivil.uminho.pt

Departamento de Engenharia ivil ontents 1 Introdution... 3 2 Masonry Out-of-Plane Behavior 4 2.1 Uniaxial Behavior. 4 2.2 Biaxial Behavior... 8 3 Desription of the Anisotropi ontinuum Model... 12 3.1 Plates, shells and finite elements... 12 3.2 The Rankine Type riterion. 15 3.3 The Hill Type riterion... 18 3.4 Orientation of the Material Axes... 19 4 Validation... 21 4.1 MMaster University hollow onrete blok panels 21 4.2 University of Plymouth solid brik lay masonry panels.. 25 5 onlusions... 31 6 Referenes... 32 ANNEX A... 34 Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 2/50

Departamento de Engenharia ivil 1 Introdution This report deals with the implementation of a maro-model for the out-of-plane behavior of masonry strutures. The omposite plastiity model proposed in Lourenço (2000) ombines anisotropi elasti behavior with anisotropi plasti behavior and is formulated in modern algorithmi plastiity onepts. These inlude impliit Euler bakward return mapping shemes and onsistent tangent operators for all regimes of the model. The yield riterion ombines the advantages of modern plastiity onepts with a powerful representation of anisotropi material behavior, whih inorporates different hardening/softening behavior along eah material axis. The model is thus apable of reproduing independent (in the sense of ompletely diverse) elasti and inelasti behavior along a presribed set of material axes. The energy-based regularization tehnique, whih is employed to obtain objetive results with respet to mesh refinement, resorts then to four different frature energies. The numerial implementation of the model is evaluated by means of a omparison between numerial results and experimental results for the ase of masonry panels with out-of-plane loading. The performane of the model is evaluated by means of a omparison with experimental results in reinfored masonry shells. Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 3/50

Departamento de Engenharia ivil 2 Masonry Out-of-Plane Behavior 2.1 Uniaxial Behavior The flexural strength of masonry has been mostly investigated in relation to the resistane of wall panels to wind loads. The flexural strength is, of ourse, different for bending perpendiular or parallel to the bed joints, see Figure 2.1, being normally several times larger when bending leads to failure in a plane perpendiular to the bed joints. In general, experimental results have been onerned solely with measurements of the flexural strength and mostly for the ase when the plane of failure ours parallel to the bed joints, while elasti and inelasti properties have usually been ignored. p p p p (a) (b) Figure 2.1 - Four-point bending test in two different diretions: (a) plane of failure parallel to the bed joints vertial bending or bending normal to the bed joints and (b) plane of failure perpendiular to the bed joints horizontal bending or bending parallel to the bed joints In the ase of bending leading to failure in a plane parallel to the bed joints ( vertial bending ), failure is generally aused by the relatively low tensile bond strength between the bed joints and the unit, see Figure 2.2a. In masonry with low strength units and greater tensile bond strength between the bed joints and the unit, e.g. high-strength mortar and units with numerous small perforations, whih produe a dowel effet, failure may our as a result of stresses exeeding the unit tensile strength. In any ase, the typial moment-urvature relation is linear up to 70%-85% of the failure load, Lawrene (1983) Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 4/50

Departamento de Engenharia ivil and van der Pluijm et al (1995), see Figure 2.3a. Beyond this level, miro-raking starts to our, assoiated with unloading ( softening ) of the extreme tensile fibers. For bending leading to failure in a plane perpendiular to the bed joints ( horizontal bending ), two different types of failure are ommon, depending on the relative strength of joints and units, see Figure 2.2b. In the first type of failure raks zigzag through head and bed joints. The post-peak response of the speimen is governed by the frature energy of the head joints and the frition behavior of bed joints. In the seond type of failure raks run almost vertially through the units and head joints. The post-peak response is governed by the frature energy of the units and head joints. In both types of failure, the typial moment-urvature relation indiates a sudden derease of stiffness before non-linear behavior starts to our, see Figure 2.3b. This kind of behavior was originally notied by Ryder (1963). Lawrene (1983) attributed this behavior to the gradual derease of stiffness of the head joints, i.e. the softening behavior, whih has been onfirmed by van der Pluijm et al (1995). It is noted that the above holds true only in the general ase of units with a tensile strength substantially larger than the tensile strength of the head joints. (a) (b1) (b2) Figure 2.2 - Possible failure modes for masonry subjeted to bending along the material axes. Failure in a plane parallel to the bed joints: (a) debonding. Failure in a plane perpendiular to the bed joints: (b1) toothed and (b2) splitting Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 5/50

Departamento de Engenharia ivil M M κ κ (a) (b) Figure 2.3 - Typial moment-urvature (M-k) diagrams for masonry in bending suh that failure ours in a plane (a) parallel and (b) perpendiular to the bed joints The ratio of flexural strength along the two material axes varies signifiantly as an be seen in Figure 2.4a. Nevertheless, a definite trend seems to be distinguished in the orthogonal strength ratio, whih dereases markedly with an inreasing flexural bond strength, see Figure 2.4b and also Baker (1979). It is noted that, a large satter ours and suh a simplified assumption is hardly aeptable. The satter is partly aused by: Different speimen and load onfigurations used to determine flexural strengths; The variability of the masonry onstituents and workmanship. Ideally, eah point should be established by averaging a onvenient number of tests; Different flexural strengths of the units used. Sine failure in bending parallel to the bed joints often ours by unit breaking after degradation of the head joints strength, this parameter is important. This annot be distinguished by suh an empirial urve but a theoretial relationship that takes into aount the flexural strength of the units an be found in Baker (1979). Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 6/50

Departamento de Engenharia ivil 3.0 2.0 1:5 1:3 1:2 M fty f ftx [N/mm 2 ] M ftx 1.0 0.0 B..R.A. 1:1:6 B..R.A. 1:1/4:3 Lawrene Lawrene & Morgan Satti 1:1/4:3 Satti 1:1/:6 0.0 0.2 0.4 0.6 0.8 1.0 1.2 y x f fty [N/mm 2 ] (a) 12.0 8.0 f f ftx fty = 2.17 f fty,lawrene(1975) f f ftx fty 4.0 0.0 0.0 0.2 0.4 0.6 0.8 1.0 1.2 f fty [N/mm 2 ] (b) Figure 2.4 - Flexural tensile strength along the two material axes, Hendry (1990): (a) strength along x-axis vs. strength along y-axis; (b) strength ratio vs. strength along y-axis Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 7/50

Departamento de Engenharia ivil 2.2 Biaxial Behavior There is relatively little knowledge about the flexural strength at different angles to the bed joints or about the interation relationships for biaxial flexural tension. Losberg and Johansson (1969) present, probably, the first paper about four-point bending tests with masonry beams featuring different orientations with respet to the bed joints. This is a very omplete artile and a remarkable work for suh early period. Satti and Hendry (1973) reported that the flexural strength at 45 degrees to the bed joints was approximately one half to a third of the strength in horizontal bending. In ontrast, ajdert and Losberg (1973) found that the diagonal flexural strength was higher than both the vertial and horizontal strengths. However, these early works were based on very few tests and there was a wide satter of results. Reently researhers have tried to gather the neessary experimental insight in biaxial bending, Gazzola and Drysdale (1986), Guggisberg and Thürlimann (1990) and van der Pluijm et al (1995). Gazzola and Drysdale (1986) and van der Pluijm et al (1995) performed similar tests, resorting to four-point bending masonry beams loaded in different orientations with respet to the material axes, but only van der Pluijm et al (1995) was able to measure and report moment-urvature diagrams. Guggisberg and Thürlimann (1990) resorted to a more omplex test set-up apable of applying a general ombination of bending moments. Figure 2.5 illustrates possible flexural tensile failure modes of masonry subjet to out-of-plane loading. (a) debonding (b) stepped () toothed (d) splitting (e) straight Figure 2.5 - Possible flexure failure modes Being masonry an anisotropi material, its omplete out-of-plane behavior must be established in terms of, either, the three moment-omponents (M xx, M yy and M xy ), or, the Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 8/50

Departamento de Engenharia ivil prinipal moments and one angle θ, whih measures the orientation of the prinipal axes with respet to the material axes. It is noted that, in the general ase of shell analysis, the material behavior must be desribed by five stress omponents (the usual assumption of thin strutures assumes the out-of-plane normal stress to remain zero) and a yield riterion established solely in terms of prinipal moments is inadequate. The experimental failure patterns of Gazzola and Drysdale (1986), in hollow onrete blok masonry, are summarized in Figure 2.6. Five tests were arried out, for eah orientation of the prinipal bending moment θ. Failure ourred, generally, in a ombination of tension and shear, exept for some raking through the units observed for bending parallel to the bed joints. The average and standard deviation of the five tests, for eah orientation of loading, are represented in Figure 2.7. It is observed that, in this partiular testing program, the flexural strength for bending parallel to the bed joints is 2.5 times larger than the flexural strength for bending normal to the bed joints. α = 0º α = 15º α = 45º α = 75º α = 90º M α Bed joint Figure 2.6 Failure patterns in masonry wallettes, Gazzola and Drysdale (1986) Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 9/50

Departamento de Engenharia ivil 1.20 0.80 f ft [N/mm 2 ] 0.40 0.00 0 15 30 45 60 75 Bed joint orientation θ [ ] 90 Figure 2.7 - Flexural strength for different orientations of loading, Gazzola and Drysdale (1986) The results from van der Pluijm et al (1995), in solid brik lay masonry and alium siliate blok masonry, are summarized in Figure 2.8 and Figure 2.9 by the average and standard deviation of the tests, for eah orientation of loading. Twelve tests were arried out, for eah orientation of the prinipal bending moment θ. Failure ourred, generally, in a ombination of tension and shear in the head and bed joints, exept for loading making an angle of 70 degrees with the bed joints, where raking through the units was also observed. It an be seen that, in this partiular testing program, the flexural strength for bending parallel to the bed joints is approximately 4.0 times larger than the flexural strength for bending normal to the bed joints. Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 10/50

Departamento de Engenharia ivil 3.0 2.0 f ft [N/mm 2 ] 1.0 0.0 0 15 30 45 60 75 Bed joint orientation θ [ ] 90 Figure 2.8 - Flexural strength for different orientations of loading in solid brik lay masonry, van der Pluijm et al (1995) 2.50 1.67 f ft [N/mm 2 ] 0.83 0.00 0 15 30 45 60 75 Bed joint orientation θ [ ] 90 Figure 2.9 - Flexural strength for different orientations of loading in solid blok alium siliate masonry, van der Pluijm et al (1995) Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 11/50

Departamento de Engenharia ivil 3 Desription of the Anisotropi ontinuum Model In this study, the problem of modeling laminar masonry strutures (plates and shells with one dimension substantially smaller than the other two dimensions) is addressed. A typial hypothesis in this type of elements is zero normal stress. This hypothesis states that the normal stress omponent perpendiular to the plane of the struture equals zero, and simplifies material modeling to a great extent. 3.1 Plates, shells and finite elements Plates and shells are but a partiular form of a three-dimensional solid, the treatment of whih presents no theoretial diffiulties. Owing to the symmetry of the stress and strain tensors, it is normal to ollet the tensors omponents, see Figure 3.1, in vetors as { σ} = { σ, σ, σ, τ, τ, τ } x {} ε = { ε, ε, ε, γ, γ, γ } x y y z z xy xy yz yz xz xz T T (3.1) σ z τ xz τ yz x z y σ x τ zx τ yx τ xy τ zy σ y Figure 3.1 - Stress omponents in a three-dimensional body However, the thikness of plates and shells (denoted in the following as t) is small when ompared with other dimensions, and omplete three-dimensional numerial treatment would be, in general, not only ostly but in addition ould lead to serious equation onditioning problems. To ease the solution several lassial assumptions Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 12/50

Departamento de Engenharia ivil regarding the behavior of suh strutures were introdued. learly suh assumptions resulted in a series of approximations, whih led, basially, to a thin plate theory and a thik plate theory. Here, no disussion is given regarding the approximations involved or the range of validity of the theories. For a omprehensive review of plate and shell bending approximations and the finite element implementation the reader is referred to Zienkiewiz and Taylor (1991). Here, the finite element adopted to redue the degrees-of-freedom in a omplete three-dimensional analysis, is the urved shell element degenerated from a threedimensional formulation. This element, originally proposed by Ahmad et al (1970) for the linear analysis of moderately thik shells, has been extensively used for the geometrial and non-linear analysis of shell strutures. Typial harateristis of this element are the two hypotheses on whih the degeneration is based: straight normals and zero normal stress. The first hypothesis assumes that the normals to the mid-plane of the element remain straight after deformation, but not neessarily perpendiular to the mid-plane. The seond hypothesis, already introdued above, states that the normal stress omponent perpendiular to the mid-plane equals zero, and the element formulation has been obtained ignoring the strain energy resulting from this stress. Assuming that the loal z-axis represents the normal to the mid-plane, the five stress omponents left are σ x, σ y, τ xy, τ yz and τ xz, see Figure 3.2. Five degrees of freedom are defined for eah element node: three translations and two rotations, see Figure 3.3. The definition of the independent translations and rotations inludes the influene of shear deformation. The rotations are not oupled to the gradient of the mid-plane. In this study, two by two Gauss integration in the plane and seven-point Simpson integration in the thikness diretion are used. As the behavior of plates and shells is, typially, two-dimensional, it is possible to adopt a yield riterion developed for plane stress onditions enhaned with two new stress omponents. Therefore, the adopted yield riterion is based on the plane stress anisotropi yield riterion of Lourenço (1996), whih inludes a Hill type riterion for ompression and a Rankine type riterion for tension, see Figure 3.4. The word type is used here beause the yield riteria adopted are lose to the original yield riteria, even if they represent solely a fit of experimental results. Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 13/50

Departamento de Engenharia ivil In the present implementation, there is no differene between the formulation for a omplete three-dimensional stress-state and the formulation for shells, whih is quite onvenient for general purpose finite element programs. Therefore, in the present study, all the formulation will be given in the full six omponents stress-strain spae. It suffies to use a Young s modulus E z equal to zero, to retrieve the traditional five omponent formulation. The full model implementation is given in Annex A in the format of a Fortran file. (a) τ zx τ zy (b) σ x τ xy σ y Figure 3.2 - Thin shells: (a) layered shell with five stress omponents; (b) layer, essentially, in plane stress onditions b u z t φ y φ x u y u x Figure 3.3 - urved shell element (appliable for thin shells with t << b) Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 14/50

Departamento de Engenharia ivil Figure 3.4 - Adopted plane stress omposite yield riterion with iso-shear stress lines, Lourenço (1996) 3.2 The Rankine Type riterion An adequate formulation of the Rankine riterion is given by a single funtion, whih is governed by the first prinipal stress and one yield value σ t that desribes the softening behaviour of the material as, see Feenstra and de Borst (1995), 2 σ x + σ y σ x σ y 2 f1 = + + τ xy σ t ( κ t ) 2 2 (3.2) where the salar κ t ontrols the amount of softening. This expression an be rewritten as f 1 ( σ x σ t ( κ t )) + ( σ y σ t ( κ t )) ( σ x σ t ( κ t )) ( σ y σ t ( κ t )) 2 = + + τ xy 2 2 (3.3) 2 where oupling exists between the stress omponents and the yield value. Setting forth a Rankine type riterion for an anisotropi material, with different tensile strengths along the x, y diretions, is now straightforward if eq. (3.3) is modified to Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 15/50

Departamento de Engenharia ivil f 1 ( σ x = σ ( κ )) + ( σ tx t 2 y σ ty ( κ t )) + ( σ x σ ( κ )) ( σ tx t 2 y σ ty ( κ t )) 2 + ατ 2 xy (3.4) where the parameter α, whih ontrols the shear stress ontribution to failure, reads α = f f tx 2 τ ut, ty (3.5) Here, f tx, f ty and τ u,t are, respetively, the uniaxial tensile strengths in the x, y diretions and the pure shear strength. Note that the material axes are now fixed with respet to a speifi frame of referene. Thus, it shall be assumed that all stresses and strains for the elastoplasti algorithm are given in the material referene axes, see also Setion 3.4. Eq. (3.4) an be reast in a matrix form as f 1 T 1 1 2 1 2 t 2 T = ( { ξ} [ P ]{ ξ}) + { π} { ξ} (3.6) where the projetion matrix [P t ] reads 1 1 2 2 0 0 0 0 1 1 2 2 0 0 0 0 0 0 0 0 0 0 [P t ] = (3.7) 0 0 0 2α 0 0 0 0 0 0 0 0 0 0 0 0 0 0 the projetion vetor {π} reads {} π = { 1 0 0 0 0 0} T (3.8) the redued stress vetor {ξ} reads Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 16/50

Departamento de Engenharia ivil {} ξ = {} σ {} η (3.9) the stress vetor {σ}, as given in eq. (3.1), reads { σ} = { σ σ σ τ τ τ } x y z xy yz xz T (3.10) and the bak stress vetor {η} reads {η} = { σ ( κ ) σ ( κ ) 0 0 0 0 } (3.11) tx t ty t T Exponential tensile softening is onsidered for both equivalent stress-equivalent strain diagrams, with different frature energies (G fx and G fy ) for eah yield value, whih read hf hf tx ty σtx = ftx exp( κt) and σty = ftyexp( κt ) (3.12) G G fx where the standard equivalent length h is related to the element size, Bazant and Oh (1983). A non-assoiated plasti potential g 1 fy g 1 T 1 1 2 1 2 g 2 T = ( { ξ} [ P ]{ ξ} ) + {π} {ξ} (3.13) is onsidered, where the projetion matrix [P g ] represents the original Rankine plasti flow, i.e. α = 1 in eq. (3.7). The inelasti behaviour is desribed by a strain softening hypothesis. p given by the maximum prinipal plasti strain ε t as p p p εx + εy κt = ε1 = 2 p p p + 1 ε 2 2 2 ( ε ) + ( γ ) (3.14) x y xy Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 17/50

Departamento de Engenharia ivil whih redues to the partiularly simple expression κ = λ t t (3.15) 3.3 The Hill Type riterion The simplest yield riterion that features different ompressive strengths along the two material axes is a rotated entred ellipsoid in the full stress spae. The expression for suh a quadri an be written as f 2 σ ( κ ) ( ) = + + + ( + + ) ( ) ( ) = 0 (3.16) y 2 x 2 2 2 2 x x y y xy yz xz x y σx κ σ βσ σ σ κ ( ) σy ( κ σ γ τ τ τ σ κ σ κ ) where σ ( κ ) and σ ( κ ) are, respetively, the yield values along the material axes x and x y y. β and γ values are additional material parameters that determine the shape of the yield riterion. The parameter β ontrols the oupling between the normal stress values, i.e. rotates the yield riterion around the shear stress axis, and must be obtained from one additional experimental test, e.g. biaxial ompression with a unit ratio between prinipal stresses. The parameter γ, whih ontrols the shear stresses ontributions to failure, an be obtained from γ = f f x 2 τ u, y (3.17) where f x, f y and τ u, are, respetively, the uniaxial ompressive strengths in the x, y diretions and a fititious pure shear in ompression. For the purpose of numerial implementation, it is onvenient to reast this yield riterion in a matrix form as f 2 T 1 1 2 [P ]{ 2 σ κ = ( {σ} σ}) ( ) (3.18) Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 18/50

Departamento de Engenharia ivil where the projetion matrix [P ] reads σ y ( κ ) 2 β 0 0 0 0 σ x ( κ ) σ x ( κ ) β 2 0 0 0 0 σ κ y ( ) [P = ] 0 0 0 0 0 0 (3.19) 0 0 0 2γ 0 0 0 0 0 0 2γ 0 0 0 0 0 0 2γ the yield value σ is given by σ ( κ ) = σ ( κ ) σ ( κ ) (3.20) x y and the salar κ ontrols the amount of hardening and softening. The inelasti law adopted omprehends paraboli hardening followed by paraboli/exponential softening for both equivalent stress-equivalent strain diagrams, with different ompressive frature energies (G fx and G fy ) along the material axes, see Lourenço (1996). The problem of mesh objetivity of the analyses with strain softening materials is a well debated issue, at least for tensile behaviour, and the stress-strain diagram must be adjusted aording to an equivalent length h to provide an objetive energy dissipation, see Feenstra and de Borst (1996). An assoiated flow rule and a work-like hardening/softening hypothesis are onsidered. This yields κ σ σ T ε p λ = 1 { } { } = (3.21) 3.4 Orientation of the Material Axes For the sake of simpliity, the formulation of the plastiity model was presented based on the assumption that the prinipal axes of anisotropy oinided with the frame of Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 19/50

Departamento de Engenharia ivil referene (loal or global) for stresses and strains in finite element omputations. Sine this is not neessarily the ase, suh non-alignment effets must be taken into aount. Two different approahes an be followed. In the first approah, with eah all to the plastiity model, stresses, strains and, finally, onsistent tangent stiffness matries must be rotated into and out of the material frame of referene, respetively, as pre- and postproessing. In the seond approah, before the analysis begins, the elasti stiffness matrix [D], the projetion matries [Pt], [Pg] and [P], and the projetion vetors {p} and {h} must be rotated from the material frame of referene into the global frame of referene at eah quadrature point, eliminating the need of all subsequent rotation operations. The drawbak of the latter approah is that the matries then lose their sparse nature, resulting in less lear algorithms. For this reason, the plastiity model is implemented employing the former option. Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 20/50

Departamento de Engenharia ivil 4 Validation 4.1 MMaster University hollow onrete blok panels The first series of panels analysed onsists of hollow onrete blok masonry. The tests were arried out by Gazzola et al (1985) and are denoted by W. The inelasti properties of the omposite material are obtained from Gazolla et al (1985), see Table 4.1 and Table 4.2. Only tensile inelasti behaviour is onsidered in the analysis and the frature energy values indiated inlude already the size h of the element, g f = G f / h. The elasti properties were not available and had to be estimated. The Young s modulus in the vertial diretion has been alulated from the masonry ompressive strength aording to Hendry (1990), the elasti orthotropy is assumed to equal two and the adopted in plane Poisson s ratio is 0.2. In order to remove the effet of the z-axis, the following approximately zero values were assumed: E z = 1.d-3, ν xz = 1.d-7 and ν yz = 1.d-7. Table 4.1 - Material properties for MMaster University panels E x E y E z ν xy ν yz ν xz G xy G yz G xz 5000 10000 1.d-3 0.2 1.d-7 1.d-7 3125 3125 3125 N/mm 2 N/mm 2 N/mm 2 - - - N/mm 2 N/mm 2 N/mm 2 Table 4.2 - Material properties for MMaster University panels Tension regime f tx f ty α g fx g fy 0.94 0.35 0.4 0.0012 0.00008 N/mm 2 N/mm 2 - N/mm 2 N/mm 2 Only panel WP1, see Figure 4.1, was analysed with the omposite plastiity model. The panel was loaded until failure with inreasing out-of-plane uniform pressure p. This panel was loaded, previously to the appliation of the out-of-plane loading, with an inplane onfining pressure of 0.2 N/mm 2, whih was kept onstant until failure of the Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 21/50

Departamento de Engenharia ivil speimen due to the pressure p. For eah onfiguration, three different tests have been arried out and the results reported in Gazzola et al (1985) represent the average of the tests. p z y x h = 150 mm simply supported (a) Panel WP1 2800 mm 5000 mm (b) Figure 4.1 - Panels with onstant out-of-plane pressure p, Gazzola et al (1985): (a) out-of-plane loading; (b) geometry and in-plane loading. For the numerial analyses eight-noded degenerated shell elements with two by two in-plane Gauss integration and seven-point Simpson through thikness integration are used. Due to the double symmetry of the struture only one quarter (or one half) of the struture needs to be modelled. Nevertheless, for easiness in the post-proessing and to obtain more lear pitures, the full struture is modelled. For this purpose, a regular mesh of five by five retangular elements is used in all the analyses. The analyses are arried out with ar-length ontrol enhaned with line searhes, aiming at a globally onvergent algorithm. Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 22/50

Departamento de Engenharia ivil The panel analysed, denoted by WP1, has dimensions 5000 2800 150 mm 3. The panel is simply supported in the four edges. Figure 4.2 and Figure 4.3 illustrate the behaviour of the panel at peak load and ultimate load. The development of typial failure lines, similar to the yield line theory of slabs is learly visible in Figure 4.3. At peak, the failure lines are not fully formed and annot be obtained. (a) (b) Figure 4.2 - Panel WP1. Results of the analysis at a pressure p equal to 9.45 kpa (peak): (a) total deformed mesh; (b) maximum prinipal strain Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 23/50

Departamento de Engenharia ivil (a) (b) Figure 4.3 - Panel WP1. Results of the analysis at a pressure p equal to 8.20 kpa (87% post-peak): (a) total deformed mesh; (b) maximum prinipal strain The alulated load-displaement diagram for a displaement d at the entre of the speimen and the experimental ollapse load are given in Figure 4.4. An extremely dutile behaviour is observed and reasonable agreement is found with the experimental value. Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 24/50

Departamento de Engenharia ivil 10.0 8.0 p [10-3 N/mm 2 ] 6.0 4.0 2.0 Experimental Numerial 0.0 0.0 2.0 4.0 6.0 8.0 10.0 Displaement d at entre point [mm] Figure 4.4 - Panels WP1. Load-displaement diagram and experimental failure load (average of three tests). 4.2 University of Plymouth solid brik lay masonry panels The seond series onsidered here onsists of a set of solid lay brik masonry panels submitted to out-of-plane loading. The tests were arried out by hong et al (1995) and are denoted by SB. The elasti and inelasti properties of the omposite material are given in Table 4.3 and Table 4.4. Only tensile inelasti behaviour is onsidered and, following hong et al (1995), isotropi material properties are assumed (this an be aepted beause the panel is built with solid brik masonry). The adopted Poisson s ratio is 0.2 and the Young s modulus has been obtained by inverse fitting. Please note that, in order to remove the effet of the z-axis, orthotropi material data must be introdued with the following approximately zero values were assumed: E z = 1.d-3, ν xz = 1.d-7 and ν yz = 1.d-7. The uniaxial tensile strengths and the frature energies along the material axes g fx and g fy are then alulated so that the orret flexural strength is obtained in a pure bending test, see Lourenço (2000). The parameter α has been obtained by inverse fitting. Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 25/50

Departamento de Engenharia ivil Table 4.3 - Elasti material properties for University of Plymouth panels E x E y E z ν xy ν yz ν xz G xy G yz G xz 14000 14000 1.d-3 0.2 1.d-7 1.d-7 5833 5833 5833 N/mm 2 N/mm 2 N/mm 2 - - - N/mm 2 N/mm 2 N/mm 2 Table 4.4 - Inelasti material properties for University of Plymouth panels Tension regime f tx f ty α g fx g fy 1.37 0.58 1.1 0.00589 0.00071 N/mm 2 N/mm 2 - N/mm 2 N/mm 2 The panel analysed here, denoted by SB02, yields an additional assessment of the ability of the omposite plastiity model to reprodue the behaviour of a panel with an opening of 2260 1125 mm 2. Its dimensions are 5600 2475 100 mm 3, built in strether bond between two stiff abutments with the vertial edges simply supported (allowane for in-plane displaements was provided) and the top edge free. A fixed support was provided at the base beause of pratial diffiulties in providing a simple support. The opening size and dimensions used in the test were hosen to be representative of those used in pratie, see Figure 4.5. The panel was loaded by air-bags until failure with inreasing out-of-plane uniform pressure p. The air pressure and the displaement d for the middle point of the free edge were monitored during testing. For the numerial analyses eight-noded degenerated shell elements with two by two in-plane Gauss integration and seven-point through thikness integration are used. Due to the symmetry of the struture only one half or one quarter of the panel needs to be modelled. Nevertheless, for easiness in the post-proessing and to obtain more lear pitures, the full struture is modelled. The analysis is arried out with ar-length ontrol enhaned with line searhes, aiming at a globally onvergent algorithm. Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 26/50

Departamento de Engenharia ivil free edge p fully lamped h = 100 mm z y x simply supported (a) 450 1125 Panel SB02 900 1677 2260 1678 (b) Figure 4.5 - Panels SB02, hong et al (1995): (a) out-of-plane loading; (b) geometry, with dimensions in [mm]. Figure 4.6 and Figure 4.7 illustrate the behaviour of the panel at peak load and ultimate load. raking is initiated in the middle of the lintel above the entral opening, with propagation to the bottom orners. These results are in agreement with the failure mode found experimentally, see Figure 4.8. Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 27/50

Departamento de Engenharia ivil (a) (b) Figure 4.6 - Panel SB02. Results of the analysis at a pressure p equal to 2.15 kpa (peak): (a) total deformed mesh; (b) maximum prinipal strain Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 28/50

Departamento de Engenharia ivil (a) (b) Figure 4.7 - Panel SB02. Results of the analysis at a pressure p equal to 1.56 kpa (ultimate): (a) total deformed mesh; (b) maximum prinipal strain Figure 4.8 Experimental failure mode. Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 29/50

Departamento de Engenharia ivil The alulated and numerial load-displaement diagrams for the displaement d at the middle of the top (free) edge of the speimen are given in Figure 4.9. Reasonable agreement is found. 2.5 2.0 p [10-3 N/mm 2 ] 1.5 1.0 0.5 Experimental Numerial 0.0 0.0 5.0 10.0 15.0 20.0 25.0 30.0 Displaement d at the middle of the top [mm] Figure 4.9 - Panel SB02. Load-displaement diagrams. Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 30/50

Departamento de Engenharia ivil 5 onlusions An anisotropi model for masonry plates and shells was implemented and assessed. The model an be utilized both with shell elements and three-dimensional elements. The numerial alulations were ompared with results available in the literature for tests in masonry panels subjeted to out-of-plane loading. Reasonable agreement was found in all ases. The tests were made of different masonry types and were subjeted to different loading onditions. It is, therefore, possible to onlude that the proposed model is of general appliation for modeling masonry plates and shells. Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 31/50

Departamento de Engenharia ivil 6 Referenes AHMAD, S., IRONS, B.M. and ZIENKIEWIZ, O.. (1970) - Analysis of thik and thin shell strutures by urved finite elements, Int. J. Numer. Methods Engrg., 2, p. 419-451. BAKER, L.R. (1979) - A failure riterion for brikwork in biaxial bending, in: Pro. Fifth Int. Brik Mas. onf., Washington, USA, p. 71-78. BAZANT, Z.P. and OH, B.H. (1983) - rak band theory for frature of onrete, Materials and Strutures, RILEM, 93(16), p. 155-177. AJDERT, A. and LOSBERG, A. (1973) - Laterally loaded light expanded lay blok masonry: The effet of reinforement in horizontal joints, in: Pro. Third Int. Brik Mas. onf., Essen, Germany, p. 245-251. HONG, V.L., SOUTHOMBE,. and MAY, I.M. (1995) - The behaviour of laterally loaded masonry panels with openings, in: Pro. Fourth. Int. Mas. onf., London, UK, p. 178-182. FEENSTRA, P.H. and de BORST, R. (1995) - A plastiity model and algorithm for mode-i raking in onrete, Int. J. Numer. Methods Engrg., 38, p. 2509-2529. FEENSTRA, P.H. and de BORST, R. (1996) - A omposite plastiity model for onrete, Int. J. Solids Strutures, 33(5), p. 707-730. GAZZOLA, E.A., DRYSDALE, R.G. and ESSAWY, A.S. (1985) - Bending of onrete masonry walls at different angles to the bed joints, in: Pro. Third North Amer. Mas. onf., Arlington, Texas, USA, Paper 27. GAZZOLA, E.A. and DRYSDALE, R.G. (1986) - A omponent failure riterion for blokwork in flexure, in: Strutures 86, ASE, edited by S.. Anand, New Orleans, Louisiana, USA, p. 134-153. GUGGISBERG, R. and THÜRLIMANN, B. (1990) - Failure riterion for laterally loaded masonry walls, in: Pro. Fifth North Amer. Mas. onf., Urbana-hampaign, Illinois, USA, p. 949-958. HENDRY, A.W. (1990) - Strutural masonry, MaMillan Eduation, London, UK. Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 32/50

Departamento de Engenharia ivil LAWRENE, S.J. (1983) - Behaviour of brik masonry walls under lateral loading, Dissertation, Shool of ivil Engineering, University of New South Wales, Australia. LOSBERG, A. and JOHANSSON, S. (1969) - Sideway pressure on masonry walls of brikwork, in: Pro. Int. Symp. Bearing Walls, Warsaw, Poland, Paper 29. LOURENÇO, P.B. (1996) - omputational strategies for masonry strutures, Dissertation, Delft University of Tehnology, Delft, The Netherlands. LOURENÇO, P.B. (2000) - Anisotropi softening model for masonry plates and shells, J. Strut. Engrg., ASE, 126(9), p.1008-1016. VAN DER PLUIJM, R., RUTTEN, H.S. and SHIEBROEK,.S. (1995) - Flexural behaviour of masonry in different diretions, in: Pro. Fourth. Int. Mas. onf., London, UK, p. 117-123. RYDER, J.F. (1963) - The use of small brikwork panels for testing mortars, Trans. Brit. eram. So., 62. SATTI, K.M.H. and HENDRY, A.W. (1973) - The modulus of rupture of brikwork, in: Pro. Third Int. Brik Mas. onf., Essen, Germany, p. 155-160. ZIENKIEWIZ, O.. and TAYLOR, R.L. (1991) - The finite element method - Volume 2: Solid and fluid mehanis; Dynamis and non-linearity, MGraw-Hill, Berkshire, England, U.K. Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 33/50

Departamento de Engenharia ivil ANNEX A Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 34/50

Departamento de Engenharia ivil TESTING UNIAXIAL TENSION PROGRAM TEST nstr, NUV, NUS, ITER parameter ( nstr = 4, nuv = 14, nus = 2) DOUBLE PREISION DEPS(nstr), se(nstr,nstr), USRVAL(NUV), $ USRSTA(NUS), tsig(nstr), yt(nstr*nstr), $ youn(2) iter = 0 deps(1) = 2.d-5 deps(2) = -4.d-6 deps(3) = 0. deps(4) = 0. Exx = 10000.; Eyy = 5000.; Ezz = 1.d-3 nu_xy = 0.2 ; nu_yz = 1.d-7; nu_xz = 1-d-7 Gxy = 3000. se(1,1) = 10200. se(1,2) = 1020. se(1,3) = 1.224d-10 se(1,4) = 0. se(2,1) = se(1,2) se(2,2) = 5102. se(2,3) = 1.122d-10 se(2,4) = 0. se(3,1) = se(1,3) se(3,2) = se(2,3) se(3,3) = 1.d-3 se(3,4) = 0. se(4,1) = se(1,4) se(4,2) = se(2,4) se(4,3) = se(3,4) se(4,4) = 3.d3 tsig(1) = 1.d0 tsig(2) = 8.d-6 tsig(3) = 1.d-14 tsig(4) = 0. usrval(1) = 1.0 usrval(2) = 0.0002 usrval(3) = 0.5 usrval(4) = 0.00006 usrval(5) = 1.0 usrval(6) = 1.0 usrval(7) = 1.87d3 usrval(8) = 5.0d3 usrval(9) = 7.61d3 usrval(10) = 10.d3 usrval(11) = -1.05 usrval(12) = 1.2 usrval(13) = 0.0008 usrval(14) = 1. youn(1) = 10000. youn(2) = 5000. all USRMAT( DEPS, nstr, 1, 1, se, ITER, USRVAL, $ NUV, USRSTA, NUS, tsig, yt, youn ) all prive( tsig, nstr, 'TSIG ' ) all primat( se, nstr, nstr, 'YT ' ) Quatro iterações para obter: tsig(1) = 8.370e-01 tsig(2) = -3.629e-02 tsig(3) = 7.645e-15 tsig(4) = 0. se(1,1) = -7.097e03 se(1,2) = -7.097e02 se(2,2) = 4.929e+03 se(2,3) = 9.144e-11 se(4,4) = 1.970e+03 end SUBROUTINE USRMAT( DEPS, nstr, $ il, ip, se, ITER, USRVAL, $ NUV, USRSTA, NUS, tsig, yt, young ) USER-SUPPLIED MATERIAL MODEL RETURN UPDATED STRESS AND TANGENTIAL STIFFNESS MATRIX nstr, NUV, NUS, il, ip, ITER DOUBLE PREISION DEPS(nstr), $ se(nstr,nstr), USRVAL(NUV), $ USRSTA(NUS), tsig(nstr), yt(nstr*nstr), young(2) -------------- ------------ ARGUMENTS: deps In D(nstr) - Strain inrement nstr In I - Dimension of stress spae (must be 4 or 6) il In I - Number of element ip In I - Number of integartion point se In D(nstr,nstr) - Linear elasti stress strain relation iter Out I - Number of internal iterations for stress update usrval In D(nuv) - Parameters for yield surfae nuv In I - Number of parameters for yield surfae (equal to 14) usrsta InOut D(nus) - State variables nus In I - Number of state variables (equal to 2) tsig InOut D(nstr) - Stress at the beginning of the step / Stress update yt Out D(nstr,nstr) - Tangent stress strain relation youn In D(2) - Young modulus Exx and Eyy - OUT-OF-PLANE FAILURE IGNORED!!! -------------- ------------ usrval D(14) - Yield surfae parameters (1) : ftx (2) : Gftx (3) : fty (4) : Gfty (5) : alpha (6) : alpha sub g (7) : fmx (8) : Gfx (9) : fmy (10) : Gfy (11) : beta (12) : gamma (13) : kappa_peak_ompression (14) : h (length sale) ------ usrsta D(2) - State variables (1) : equivalent plasti strain tension (2) : equivalent plasti strain ompression ------ yldpr D(12) - Yield properties (1) : ftx(kappa) (2) : fty(kappa) (3) : alpha (4) : alpha sub g (5) : fmx(kappa) (6) : fmy(kappa) (7) : beta (8) : gamma (9) : d(sigq)/d(epsq)tx (10) : d(sigq)/d(epsq)ty (11) : d(sigq)/d(epsq)mx (12) : d(sigq)/d(epsq)my............ externals double preision dasum ommon definition logial sw ommon /SWITH/ sw(6) double preision youn ommon /YOUNG/ youn(2) loal variables logial lapex mstr, miter double preision tolyfu parameter ( mstr = 6, miter = 30, tolyfu = 1.d-5 ) double preision yldpr(14), dsig(mstr), depse(mstr),. depsp(mstr), depeq(2), epeqyf(2) double preision jaob(10*10), invmat(10,10), dl(2), fx(10), $ x(10), a(mstr,mstr), b(mstr,mstr), $ s(10), gradf(mstr), f, fold, gradnt, $ tsign(mstr), tsigt(mstr), yf(2), w(mstr*mstr), $ hess(10,10), norm1, searh Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 35/50

Departamento de Engenharia ivil iiter, ierr, rp(10), nx, iapex, iyld, ix, jx, $ i, j double preision de1old data rp / 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 / sw(3) =.true. youn(1) = young(1) youn(2) = young(2)... Preliminary heks if ( nstr.ne. 4.and. nstr.ne. 6 ) THEN print *, 'SUBROUTINE ONLID VALID FOR PLANE STRAIN AND 3D' print *, 'PLEASE HANGE SUBROUTINE' stop if ( nuv.ne. 14 ) THEN print *, 'WRONG NUMBER OF MATERIAL PARAMETERS <> 14' print *, 'PLEASE PROVIDE AS INPUT:' print *, $ 'ftx Gfx fty Gfy alpha alpha_g fmx Gfx fmy Gfy. beta gamma eps_peak h' stop if ( nus.ne. 2 ) THEN print *, 'WRONG NUMBER OF STATE VARIABLES <> 2' print *, 'PLEASE PROVIDE AS INPUT: 0.0 0.0' stop =====---------... Material Parameters - Definition of the yeldpr vetor =====--------- yldpr(1) = usrval(1) yldpr(2) = usrval(3) yldpr(3) = usrval(5) yldpr(4) = usrval(6) yldpr(5) = usrval(7) yldpr(6) = usrval(9) yldpr(7) = usrval(11) yldpr(8) = usrval(12) iyld = 3 epeqyf(1) = usrsta(1) epeqyf(2) = usrsta(2) all rset( 0.d0, depeq, 2 ) =====---------... set up total test stress =====--------- all rab( se, nstr, nstr, deps, 1, dsig) all uvpw( tsig, dsig, nstr, tsigt ) if ( sw(3) ) all prive( tsigt, nstr, 'TSIGT' ) 600 ontinue lina =.false. nx = nstr + 2 all rset( 0.d0, x, nx ) all rmove( tsigt, x, nstr ) all rmove( tsigt, tsign, nstr ) if ( sw(3) ) all prive( x, nx, 'X' ) all ypropx( usrval, epeqyf, depeq, yldpr ) if ( sw(3) ) all prive( yldpr, 12, 'YLDPR' ) if ( ( yldpr(5).lt. 5.d-3).or. ( yldpr(6).lt. 5.d-3 ) ) then all rset( 0.d0, tsign, nstr ) iyld = 4 iapex = 1 goto 300 =====---------... First value of iyld =====--------- all masyf( yldpr, tsigt, yf, nstr, lapex, usrval, epeqyf ) if ( yf(1).le. 1.d-12.and. yf(2).le. 1.d-12) then Behaviour remains elasti all rmove( tsigt, tsig, nstr ) all rmove( se, yt, nstr*nstr) return if ( yf(2).gt. 0.d0.and. iyld.eq. 3 ) then iyld = 2 nx = nstr + 1 else if(yf(1).gt. 0.d0.and. (iyld.eq. 3.or. iyld.eq. 2))then iyld = 1 nx = nstr + 1 else iyld = 3 nx = nstr + 2 iapex = 0 lapex =.false. all rset( 0.d0, dl, 2 ) =====--------- Plasti preditor-orretor =====--------- do 100, iiter = 1, miter if ( sw(3) ) all priivl( iiter, 'ITER ' ) 999 ontinue all mafx( fx, x, se, tsigt, nstr, iyld, lapex, usrval, epeqyf, $ yldpr) if ( sw(3) ) all prive( fx, nx, 'fx-ok' ) if ( sw(3) ) all priivl( iyld, 'yld ' ) if ( lapex ) goto 500 if ( iyld.eq. 1 ) then all jao12( usrval, epeqyf, jaob, se, nstr, x, nx, iyld, $ yldpr ) if ( sw(3) ) all primat( jaob, nx, nx, 'jaob' ) if ( iyld.eq. 2 ) then all jao22( usrval, epeqyf, jaob, se, nstr, x, nx, iyld, $ yldpr ) if ( sw(3) ) all primat( jaob, nx, nx, 'jaob' ) if ( iyld.eq. 3 ) then all jao32( usrval, epeqyf, jaob, se, nstr, x, nx, iyld, $ yldpr ) if ( sw(3) ) all primat( jaob, nx, nx, 'jaob' ) all invpgb( jaob, nx, rp, invmat, 1.d-10, ierr ) all rab( jaob, nx, nx, fx, 1, s ) if ( iyld.ne. 1 ) then all uvmw( x, s, nx, x ) searh = 1.d0 else all lnsea2( fx, x, s, nx, se, tsigt, nstr, iyld, searh, $ lapex, usrval, epeqyf, yldpr ) =====---------... -1... IF THE LINE SEARH -> 0 THEN ASSUME [J] SINGULAR.... PERTURB JAOBIAN AND RESTART =====--------- if ( searh.lt. 1.d-3 ) then all invpgb( jaob, nx, rp, invmat, 1.d-10, ierr ) all rabt( jaob, nx, nx, jaob, nx, hess ) if ( sw(3) ) all primat( hess, nx, nx, 'hess' ) =====--------- NORM 1 of HESSIAN =====--------- all rset( 0.d0, w, nx ) norm1 = 0.d0 do 101 ix = 1, nx do 102 jx = 1, nx w(ix) = w(ix) + abs( hess( jx, ix ) ) 102 ontinue if ( w(ix).gt. norm1 ) norm1 = w(ix) 101 ontinue all unimax( invmat, nx ) all uvpws( hess, invmat, nx*nx, norm1 * 5.d-8, hess ) if ( sw(3) ) all primat( hess, nx, nx, 'hess' ) all invpgb( hess, nx, rp, invmat, 1.d-10, ierr ) all rabt( hess, nx, nx, jaob, nx, invmat ) all rab( invmat, nx, nx, fx, 1, s ) if ( sw(3) ) all primat( invmat, nx, nx, 'new-ja' ) all lnsea2( fx, x, s, nx, se, tsigt, nstr, iyld, searh, $ lapex, usrval, epeqyf, yldpr ) Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 36/50

Departamento de Engenharia ivil if ( x(nstr+1).lt. 0.d0 ) x(nstr+1) =0.d0 if ( x(nstr+2).lt. 0.d0 ) x(nstr+2) =0.d0 =====--------- hek for onvergene =====--------- if ( dasum( nx, fx, 1 ).le. ( tolyfu * nx ) ) goto 300 all exma( tsign, dl, depeq, x, iyld, nstr ) if( sw(3) ) then all prive( fx, nx, 'F(X)' ) all prive( tsign, nstr, 'TSIGN ' ) all prive( x, nx, 'X ' ) all prival( tolyfu, 'TOLYFU' ) all prive( dl, 2, 'dl' ) all prival( epeqyf(1)+depeq(1), 'EPEQ1' ) all prival( epeqyf(2)+depeq(2), 'EPEQ2' ) all fxma( tsign, depeq, x, iyld, nstr ) 100 ontinue if ((tsigt(1).lt.yldpr(1)).or. (tsigt(2).lt.yldpr(2))) then lina =.true. all prive( tsigt, nstr, 'SIGT' ) all prive( tsign, nstr, 'SIGN' ) all exma( tsign, dl, depeq, x, iyld, nstr ) goto 300 500 ontinue =====--------- Handle apex =====--------- all rset( 0.d0, depeq, 2 ) dl(2) = 0.d0 all ypropx( usrval, epeqyf, depeq, yldpr ) if ( ( yldpr(1).lt. 1.d-4).and. ( yldpr(2).lt. 1.d-4 ) ) then all rset( 0.d0, tsign, 4 ) iyld = 4 iapex = 1 goto 300 iyld = 1 write( *, 4 ) il, ip all rmove( se, invmat, nstr*nstr ) all invsym( invmat, nstr ) all filma( +1, invmat, nstr ) =====---------... alulate plasti orretor =====--------- all fabra( a, b, nstr, se ) do 400, iiter = 1, miter if( sw(3) )all priivl( iiter, 'ITER ' ) all ypropx( usrval, epeqyf, depeq, yldpr ) all rset( 0.d0, w, nstr ) w(1) = yldpr(1) w(2) = yldpr(2) all rab( a, nstr, nstr, w, 1, tsign ) all rab( b, nstr, nstr, tsigt, 1, w ) all uvpw( tsign, w, nstr, tsign ) =====--------- Update plasti strains =====--------- all uvmw( tsign, tsig, nstr, w ) all rab( invmat, nstr, nstr, w, 1, depsp ) all uvmw( deps, depsp, nstr, depsp ) =====---------... Determine elasti strain_inrement and stress_inrement =====--------- all uvmw( deps, depsp, nstr, depse ) if( sw(3) ) then all prive( tsign, nstr, 'TSIGN ' ) all prive( depsp, nstr, 'DEPSP ' ) all prive( depse, nstr, 'DEPSE ' ) all prival( epeqyf(1)+depeq(1), 'EPEQ1' ) =====---------... alulate new depeq - seant method =====--------- if ( iiter. eq. 1 ) then de1old = 0.d0 fold = 0.d0 - (depsp(1)+depsp(2)) / 2.d0-0.5d0 * sqrt(abs(( $ depsp(1) - depsp(2) ) ** 2 + depsp(4) ** 2 / yldpr(4) ) ) depeq(1) = (depsp(1)+depsp(2)) / 2.d0-0.5d0 * sqrt(abs(( $ depsp(1) - depsp(2) ) ** 2 + depsp(4) ** 2 / yldpr(4) ) ) else f = depeq(1) - (depsp(1)+depsp(2)) / 2.d0-0.5d0 * sqrt(abs(( $ depsp(1) - depsp(2) ) ** 2 + depsp(4) ** 2 / yldpr(4) ) ) gradnt = ( f - fold ) / ( depeq(1) - de1old ) de1old = depeq(1) fold = f depeq(1) = depeq(1) - ( f / gradnt ) if( sw(3) ) all prival( f, 'f' ) if( sw(3) ) then all prival( depeq(1), 'depeq1' ) =====--------- hek for onvergene =====--------- if ((abs(de1old-depeq(1))).le. tolyfu) $ goto 450 400 ontinue lina =.true. print*, 'Bug in the apex return mapping!' stop 450 ontinue dl(1) = depeq(1) all uvs( depsp, nstr, 1.d0 / dl(1), gradf ) =====--------- Store apex data =====--------- all ypropx( usrval, epeqyf, depeq, yldpr ) all rset( 0.d0, w, nstr ) w(1) = yldpr(1) w(2) = yldpr(2) all rab( a, nstr, nstr, w, 1, tsign ) all rab( b, nstr, nstr, tsigt, 1, w ) all uvpw( tsign, w, nstr, tsign ) =====--------- Update plasti strains =====--------- all uvmw( tsign, tsig, nstr, w ) all rab( invmat, nstr, nstr, w, 1, depsp ) all uvmw( deps, depsp, nstr, depsp ) iapex = 1 iyld = 1 if( sw(3) ) then all prival( dl(1), 'dl' ) all prive( gradf, nstr, 'GRADF' ) 300 ontinue if ( iapex.eq. 0 ) all exma( tsign, dl, depeq, x, iyld, nstr ) =====--------- hek if another yield surfae beomes ative =====--------- if ( iyld.ne. 3 ) then all ypropx( usrval, epeqyf, depeq, yldpr ) all masyf( yldpr, tsign, yf, nstr, lapex, usrval, epeqyf ) if ( iyld.eq. 2.and. yf(1).gt. 0.d0 ) then print*, "MOVE FROM OMPRESSION TO TENSION" goto 600 if ( iyld.eq. 1.and. yf(2).gt. 0.d0 ) then print*, "MOVE FROM TENSION TO ORNER" goto 600 =====--------- hek if the wrong side of the yield surfae was seleted =====--------- if ( ( iyld.eq. 1 ).and. ( iapex.eq. 0 ) ) $ all findap( tsigt, nstr, x, yldpr, lapex, usrval, epeqyf )... update plasti strains all uvmw( tsigt, tsign, nstr, w ) all rmove( se, invmat, nstr*nstr ) all invsym( invmat, nstr ) Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 37/50

Departamento de Engenharia ivil all filma( +1, invmat, nstr ) all rab( invmat, nstr, nstr, w, 1, depsp ) =====--------- determine elasti strain_inrement and stress_inrement =====--------- all uvmw( deps, depsp, nstr, depse ) all uvmw( tsign, tsig, nstr, dsig ) =====---------... Show yield values - Only for debug =====--------- if (sw(3)) then all ypropx( usrval, epeqyf, depeq, yldpr ) all PRIVE( YLDPR, 8, 'YLDPR' ) =====---------.. alulate equivalent plasti strains and update stresses =====--------- usrsta(1) = epeqyf(1) + depeq(1) usrsta(2) = epeqyf(2) + depeq(2) all rmove( tsign, tsig, nstr ) print*, "yldpr",epeqyf(1), YLDPR(5)/YLDPR(6) print*, "yldpr",epeqyf(2), YLDPR(1)/YLDPR(2) if ( sw(3) ) write( *, 5 ) il, ip, iiter ------- if ( tsigt(4) * tsign(4).lt. 0.d0 ) then print*, "hange of sign in shear stress. El: Ip:", il, ip print*, "sigt: sign:", tsigt(4), tsign(4) ------- if ( lina ) then if ( iyld.eq. 1 ) write( *, 1 ) il, ip, fx(nstr+1) if ( iyld.eq. 2 ) write( *, 2 ) il, ip, fx(nstr+1) if ( iyld.eq. 3 ) write( *, 3 ) il, ip, fx(nstr+1), $ fx(nstr+2) =====--------- alulate onsistent tangent operator =====--------- if ( iapex.eq. 0 ) then do 80 j = 1, nstr do 80 i = 1, nstr yt( i+(j-1)*nstr ) = jaob(i+(j-1)*nx ) 80 ontinue else all drapex( yt, se, nstr, yldpr, tsign, depsp ) all rset( 0.d0, yt, nstr*nstr ) yt(1) = 10.d0 yt(nstr+2) = 10.d0 yt(2*nstr+3) = 10.d0 if ( sw(3) ) all primat( yt, nstr, nstr, 'YT' ) 1 FORMAT ( ' ELEMENT:', I4, ' IP:', I4, $ ' IS INAURATE - FTENS=', E11.3, ' TENSION REGIME' ) 2 FORMAT ( ' ELEMENT:', I4, ' IP:', I4, $ ' IS INAURATE - FOMP=', E11.3, $ ' OMPRESSION REGIME' ) 3 FORMAT ( ' ELEMENT:', I4, ' IP:', I4, $ ' IS INAURATE - FTENS=', E11.3, ' FOMP=', E11.3, $ ' ORNER REGIME' ) 4 FORMAT ( ' ELEMENT:', I4, ' IP:', I4, ' IS IN THE APEX') 5 FORMAT ( ' ELEMENT:', I4, ' IP:', I4, ' NO. OF INT. ITER: ',I2) end SUBROUTINE YPROPx( usrval, epeqyf, DEPEQ, YLDPR ). PURPOSE: UPDATING OF THE YIELD-RITERION PROPERTIES TAKING INTO AOUNT: -HARDENING...... DOUBLE PREISION usrval(*), epeqyf(*), DEPEQ(*), YLDPR(*) LOGIAL SW sigeq OMMON /SWITH/ SW(6) DOUBLE PREISION h, xtop, HT, HS, HFT, KAPPA, DKAPPA, h = usrval(14) xtop = usrval(13) kappa = epeqyf(1) dkappa = depeq(1) all fnsigx( 3, usrval(1), 'HARVLX', h, xtop, usrval(2), kappa, $ dkappa, sigeq, ht, hs ) yldpr(1) = sigeq yldpr(9) = ht all fnsigx( 3, usrval(3), 'HARVLY', h, xtop, usrval(4), kappa, $ dkappa, sigeq, ht, hs ) yldpr(2) = sigeq yldpr(10) = ht kappa = epeqyf(2) dkappa = depeq(2) all fnsigx( 14, usrval(7), 'MPVLX', h, xtop, usrval(8), kappa, $ dkappa, sigeq, ht, hs ) yldpr(5) = sigeq yldpr(11) = ht all fnsigx( 14, usrval(9), 'MPVLY', h, xtop, usrval(10), kappa, $ dkappa, sigeq, ht, hs ) yldpr(6) = sigeq yldpr(12) = ht IF ( SW(3) ) ALL PRIVE( YLDPR, 12, 'YLDPR ' ) RETURN END SUBROUTINE FNSIGx( IHARFN, sigq0, NAME, h, xtop, gf, KAPPA, $ DKAPPA, SIGEQ, HT, HS )....... ommon definition logial sw ommon /SWITH/ sw(6) double preision youn ommon /YOUNG/ youn(2) EXPONE, URVE3 PARAMETER ( EXPONE=3, URVE3=14 ) IHARFN HARATER*6 NAME DOUBLE PREISION xmed, sigq0, h, xtop, gf, KAPPA, DKAPPA, SIGEQ, $ HT,HS, hmax, xult, xval, xmdmax, young NHARVL, IDUM USER-SUPPLIED EQUIVALENT STRESS DETERMINE INITIAL EQUIVALENT STRESS IF ( IHARFN.EQ. EXPONE ) THEN if ( name.eq. 'HARVLX' ) then young = youn(1) if ( name.eq. 'HARVLY' ) then young = youn(2) HMAX = GF * YOUNG / ( SIGQ0 * SIGQ0 ) IF ( H.GT. HMAX ) THEN SIGQ0 = SQRT( GF * YOUNG / H ) END IF XULT = GF / ( H * SIGQ0 ) XVAL = KAPPA + DKAPPA ALL FNEXP( SIGQ0, XULT, XVAL, SIGEQ, HT ) sigeq = max( sigeq, 1.d-03*sigq0 ) else if ( iharfn.eq. urve3 ) then if ( name.eq. 'MPVLX' ) then young = youn(1) Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 38/50

Departamento de Engenharia ivil else young = youn(2) xmed = 75.d0 / 67.d0 * gf / ( h * sigq0 ) + xtop xmdmax = sigq0 / young + xtop if ( xmed.lt. xmdmax ) then sigq0 = sqrt( 75.d0 / 67.d0 * gf * young / h ) xmed = xmdmax all fnr3( sigq0, xtop, xmed, kappa+dkappa, sigeq, ht ) sigeq = max( sigeq, 1.d-03*sigq0 ) ELSE print*, 'Hardening / softening law mot yet implemented' stop END IF RETURN END subroutine fnr3( fval0, xtop, xmed, x, fval, grad ). Return yield value and df/dk for paraboli + exponenial urve... double preision fval0, xtop, xmed, x, fval, grad double preision fval1, fval2, fval3, fval4, m fval1 = 0.3333333d0 * fval0 fval2 = fval0 fval3 = 0.5d0 * fval0 fval4 = 0.1d0 * fval0... Speial ase of kappa equal to zero : grad = +inf if ( x.eq. 0.D0 ) then fval = fval1 grad = 1.d20 return if ( x.le. xmed ) then if ( x.le. xtop ) then m = sqrt( abs( ( 2.D0 * x / xtop - x * x / $ ( xtop * xtop ) ) ) ) fval = fval1 + ( fval2 - fval1 ) * m grad = ( fval2 - fval1 ) * ( 2.D0 / xtop - 2.D0 * $ x / ( xtop * xtop ) ) / 2.D0 / m else fval = ( fval3 - fval2 ) / ( xmed - xtop ) ** 2 * $ ( x - xtop ) ** 2 + fval2 grad = 2.D0 * ( fval3 - fval2 ) / ( xmed - xtop ) $ ** 2 * ( x - xtop ) else m = 2.D0 * ( fval3 - fval2 ) / ( xmed - xtop ) fval = fval3 + ( fval4 - fval3 ) * ( 1.d0 - $ exp( m / ( fval3 - fval4 ) * ( x - xmed ) ) ) grad = m * exp( m / ( fval3 - fval4 ) * ( x - xmed ) ) return end subroutine masyf( yldpr, sig, yf, nstr, lapex, usrval, $ epeqyf ). purpose: to determine the funtion value of the masonry yield riterion input: arg.list: yldpr -yieldproperties sig -stress values nstr -dimension of stress spae output: arg.list: yf -funtion value of yield riteria. (1) -orthotropi rankine (2) -hill type... arguments nstr double preision sig(*), yf(*), yldpr(*), usrval(*), epeqyf(*)...... ommon definition logial sw ommon /swith/ sw(6) loal variables mstr parameter ( mstr = 6 ) double preision p(mstr,mstr), tri(1), w(mstr),. eta(mstr),. pi(mstr), uv... orthotropi rankine T (1/2) T... yf = ( 0.5 <eta> [p] <eta> ) + 1/2 <pi> <eta> all fpraor( p, nstr, yldpr(3) ) all rset( 0.d0, pi, nstr ) pi(1) = 1.d0 pi(2) = 1.d0 all feta( sig, yldpr, eta, nstr ) if( sw(4) ) all prive( ETA, nstr, 'ETA ' ) if( sw(4) ) all primat( P, nstr, nstr, 'P ' ) all ratba( eta, nstr, 1, p, tri(1), w, 1 ) yf(1) = sqrt( 0.5d0 * tri(1) ) + 0.5d0 * uv( pi, eta, nstr )... hill type T 1/2... yf = ( 0.5 <sig> [p] <sig> ) - sigma all fpma( p, nstr, yldpr ) if( sw(4) ) all primat( p, nstr, nstr, 'P ' ) all ratba( sig, nstr, 1, p, tri(1), w, 1 ) yf(2) = sqrt( 0.5d0 * tri(1) ) - sqrt( yldpr(5)*yldpr(6) ) end subroutine mafx( fx, x, se, sigt, nstr, iyld, lapex, usrval, $ epeqyf, yldpr ). PURPOSE: To setup and fill the vetor of unknowns for the return mapping... of the omposite yield surfae for masonry OUTPUT: ARG.LIST: f(x) -vetor of unknowns... ommon definition logial sw ommon /swith/ sw(6) double preision rpla, uv, depeq(2), usrval(*), epeqyf(*) logial lapex mstr, nstr parameter ( mstr = 6 ) double preision se(nstr,*), yldpr(*), sigt(*), fx(*), x(*) ix, iyld double preision sig(mstr), gradg(mstr), gradf(mstr), $ w(mstr*mstr), yf(2), psig(mstr), $ p(mstr,mstr), p(mstr,mstr) double preision dl(2) ix = nstr + 1 =====--------- Update softening parameters =====--------- all exma( sig, dl, depeq, x, iyld, nstr ) all ypropx( usrval, epeqyf, depeq, yldpr ) =====--------- alulate gradients Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 39/50

Departamento de Engenharia ivil =====--------- all fpraor( p, nstr, yldpr(4) ) all ragror( p, sig, gradg, yldpr, nstr, lapex ) if ( lapex ) return all fpma( p, nstr, yldpr ) all rab( p, nstr, nstr, sig, 1, psig ) all uvs( psig, nstr, 0.5d0 / sqrt( 0.5d0 * $ abs( uv( sig, psig, nstr) ) ), gradf ) IF( SW(3) )ALL PRIVE( GRADF, NSTR, 'GRADF' ) IF( SW(3) )ALL PRIVE( GRADF, NSTR, 'GRADF' )... Fill equations relative to sigma unknowns... <FX> = <SIG> - <SIGT> + dl(1) [D] <GRADG> + dl(2) [D] <GRADF> all uvmw( sig, sigt, nstr, fx ) all invsym( se, nstr ) all filma( +1, se, nstr ) all rab( se, nstr, nstr, fx, 1, w ) all invsym( se, nstr ) all filma( +1, se, nstr ) all uvpws( w, gradg, nstr, dl(1), fx ) all uvpws( fx, gradf, nstr, dl(2), fx )... all masyf( yldpr, sig, yf, nstr, lapex, usrval, epeqyf ) if ( iyld.eq. 1.or. iyld. eq. 3 ) then... Tension............... Fill equation relative to salar (dl(1)) FX = F fx(ix) = yf(1) ix = ix + 1 if ( iyld.eq. 2.or. iyld. eq. 3 ) then ompression Fill equations relative to salar unknown (dl(2)) FX = F fx(ix) = yf(2) ix = ix + 1 end subroutine exma( sig, dl, depeq, x, iyld, nstr ). PURPOSE: to extrat sig and dl from the vetor of unknowns INPUT: ARG.LIST: x -vetor of unknowns iyld -whih yield funtions are ative OUTPUT: ARG.LIST: sig -stress dl -plasti multiplier depeq-equivalent plasti strain... arguments iyld, nstr, i double preision sig(*), x(*), dl(*), depeq(*) all rmove( x, sig, nstr ) do 10 i = 1, nstr sig(i) = x(i) 10 ontinue if ( iyld.eq. 1 ) then dl(1) = x(nstr+1) depeq(1) = x(nstr+1) depeq(2) = 0.d0 dl(2) = 0.d0 else if ( iyld.eq. 2 ) then dl(1) = 0.d0 depeq(1) = 0.d0 dl(2) = x(nstr+1) depeq(2) = x(nstr+1) else dl(1) = x(nstr+1) depeq(1) = x(nstr+1) depeq(2) = x(nstr+2) dl(2) = x(nstr+2) end subroutine fpraor( p, nstr, tau ). purpose: to setup and fill the projetion-matrix on the "orthotropi" rankine yield ondition input: arg.list: output: arg.list: p -projetion-matrix...... arguments nstr double preision p(nstr,*), tau... loal variables i double preision r1 all rset( 0.0d0, p, nstr*nstr ) r1 = 0.5D0 p(1,1) = r1 p(1,2) = - r1 p(2,1) = - r1 p(2,2) = r1 do 10 i = 4, 4 p(i,i) = 2.0d0 * tau 10 ontinue end subroutine ragror( p, sig, gradf, yldpr, nstr, lapex ). purpose: to determine gradient vetor < gradf > for the "orthotropi" rankine yield riterion input: arg.list: sig -stress values nstr -dimension of stress spae /SWITH/: sw -logial flags for test output. output: arg.list: gradf -gradient vetor. workspae: loal: grad -gradient vetor p(6,6) -projetion matrix r -onstant tri -triple produt <SIG>[P]<SIG>........................ externals double preision uv arguments logial lapex nstr double preision sig(*), gradf(*), yldpr(*), p(*) ommon definition logial sw ommon /SWITH/ sw(6) loal variables mstr parameter ( mstr = 6 ) double preision grad(mstr), r, tri, pi(mstr), eta(mstr) lapex =.false. all feta( sig, yldpr, eta, nstr ) all rset( 0.d0, pi, nstr ) pi(1) = 1.d0 pi(2) = 1.d0 <GRAD> = [P] * <ETA> all rab( p, nstr, nstr, eta, 1, grad ) T TRI = <eta> * [P] * <eta> tri = uv( eta, grad, nstr ) if ( abs( tri ).lt. 1.d-14 ) then if ( sw(3) ) all prival( tri, 'TRI') lapex =.true. return Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 40/50

Departamento de Engenharia ivil r = sqrt( 2.0d0 / abs(tri) ) / 2.d0... [P] <eta>... <GRADF> = ------------- + 1/2 <pi>... 2 sqrt {1/2 <eta> [P] <eta> } all uvs( grad, nstr, r, grad ) all uvpws( grad, pi, nstr, 0.5D0, gradf ) end subroutine fpma( p, nstr, yldpr ). purpose: to setup and fill the projetion-matrix of the ompressive part of the masonry yield riteria output: arg.list: p -projetion-matrix programmed by P.B.Loureno... arguments nstr, i double preision p(nstr,*), yldpr(*) all rset( 0.0d0, p, nstr*nstr ) p(1,1) = 2.d0 * yldpr(6) / yldpr(5) p(1,2) = yldpr(7) p(2,1) = yldpr(7) p(2,2) = 2.d0 * yldpr(5) / yldpr(6) do 10 i = 4, 4 p(i,i) = 2.d0 * yldpr(8) 10 ontinue end subroutine feta( sig, yldpr, eta, nstr ). purpose: to alulate the stress in the redued spae for the orthotropi rankine yield riterion input: arg.list: sig -stresses in the original spae... yldpr -yield properties output: arg.list: eta -stresses in the redued spae... arguments nstr double preision sig(*), yldpr(*), eta(nstr) all rmove( sig, eta, nstr ) eta(1) = eta(1) - yldpr(1) eta(2) = eta(2) - yldpr(2) end =====--------- This subroutine alaulates the Jaobian for Rankine type yield riterion =====--------- subroutine jao12( usrval, epeqyf, a, stiff, nstr, x, nx, iyld, $ yldpr ). purpose: riterion input: to alulate the Jaobian for Rankine type yield arg.list: stiff -elasti stiffness matrix x -vetor of unknowns nx -number of unknowns output: arg.list: a -Jaobian............... externals double preision uv parameters mstr parameter ( mstr=6 ) arguments nstr, nx, iyld double preision yldpr(*), stiff(nstr,*), x(*), a(nx,*), $ usrval (*), epeqyf(*) ommon definition logial sw ommon /swith/ sw(6) loal variables double preision dl(2), sig(mstr) double preision p(mstr,mstr), depeq(2), eta(mstr), peta(mstr), $ d2gds2(mstr,mstr), gradf(mstr), w(10*10), $ dnedk(mstr), d2gdk(mstr), dfdk, tri, $ gradg(mstr)......... logial i, j, k ldum all rset( 0.d0, dnedk, nstr ) all rset( 0.d0, a, 5*5 ) Update softening parameters all exma( sig, dl, depeq, x, iyld, nstr ) all ypropx( usrval, epeqyf, depeq, yldpr ) if ( sw(3) ) then all prival( yldpr(9), 'H1' ) all prival( yldpr(10), 'H2' ) all prival( dl(1), 'DL ' ) all prive( sig, nstr, 'SIG' ) all fpraor( p, nstr, yldpr(3) ) all feta( sig, yldpr, eta, nstr ) alulate gradients all ragror( p, sig, gradf, yldpr, nstr, ldum ) all fpraor( P, nstr, yldpr(4) ) all ragror( p, sig, gradg, yldpr, nstr, ldum ) all rab( P, nstr, nstr, eta, 1, peta ) tri = sqrt( 0.5d0 * uv( eta, peta, nstr ) ) if ( sw(3) ) then all prive( gradf, nstr, 'GRADF' ) all prive( gradg, nstr, 'GRADG' ) all prive( eta, nstr, 'ETA ' ) alulate d2g/dsigma2 = d2gds2 all rabt( peta, nstr, 1, peta, nstr, w ) all uvs( w, nstr*nstr, -0.25d0 / tri**3, w ) all uvpws( w, p, nstr*nstr, 0.5D0 / tri, d2gds2 ) alulate d2f/dkdsigma = d2gdk dnedk(1) = -yldpr(9) dnedk(2) = -yldpr(10) all rab( d2gds2, nstr, nstr, dnedk, 1, d2gdk ) if ( sw(3) ) then all primat( d2gds2, nstr, nstr, 'D2GDS2' ) all primat( stiff, nstr, nstr, 'STIFF ' ) all prive( d2gdk, nstr, 'D2GDK ' ) ---------... Fill matrix [A] with sigma related lines all invsym( stiff, nstr ) all filma( +1, stiff, nstr ) all uvpws( stiff, d2gds2, nstr*nstr, dl(1), w ) all invsym( stiff, nstr ) all filma( +1, stiff, nstr ) k = 0 do 10 j = 1, nstr do 10 i = 1, nstr k = k + 1 a(i,j) = w(k) 10 ontinue all uvpws( gradg, d2gdk, nstr, dl(1), w ) do 20 i = 1, nstr a(i,nstr+1) = w(i) 20 ontinue Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 41/50

Departamento de Engenharia ivil ---------... alulate df/dk = dfdk dfdk = uv( gradf, dnedk, nstr ) if ( sw(3) ) then all prival( dfdk, 'DFDK') ---------... Fill matrix [A] with yield funtion related line do 50 i = 1, nstr a(nstr+1,i) = gradf(i) 50 ontinue a(nstr+1,nstr+1) = dfdk --------- end =====--------- This subroutine fills the vetor of unknowns for the return mapping =====--------- subroutine fxma( sig, depeq, x, iyld, nstr ). purpose: to fill the vetor of unknowns for the return mapping input: arg.list: sig -stress output: arg.list: x -vetor of unknowns... arguments iyld, nstr double preision sig(*), x(*), depeq(*) all rmove( sig, x, nstr ) if ( iyld.eq. 1 ) then x(nstr+1) = depeq(1) else if ( iyld.eq. 2 ) then x(nstr+1) = depeq(2) else x(nstr+1) = depeq(1) x(nstr+2) = depeq(2) end =====--------- This subroutine alulate the inverse of the matrix A by a Gauss-Jordan algorithm =====--------- SUBROUTINE INVPGB( A, NA, RP, RA, EPS, IERR ). PURPOSE: MATRIX INVERSION WITH PARTIAL PIVOTING( GAUSS JORDAN). THE OMPLETE INVERSE OF A IS PROJETED ON THE ORIGINAL MATRIX [ A ]. < RP > AND < RA > ARE USED FOR ROW INTERHANGING. INPUT: ARG.LIST: A -R(NA*NA): MATRIX TO BE INVERTED. NA -I(1): ORDER OF [ A ] EPS -R(1): TOLERANE FOR PIVOT OUTPUT: ARG.LIST: A -R(NA*NA): INVERSE OF [ A ] IERR -I(1): ERROR ODE: = 0 INVERSION SUESFULL; =-1 SINGULARITY ENOUNTERED; WORKSPAE: ARG.LIST: RP -I(NA): ROW INDIES OF [ A ] RA -R(NA): WORKSPAE FOR ROW OF [ A ]... ARGUMENTS: NA, RP(*), IERR DOUBLE PREISION A(NA,*), RA(*), EPS LOAL I, IR, J, K, N DOUBLE PREISION APIV, AR, EPIV, HPIV IERR = 0 N = NA EPIV = EPS INITIALIZE ROW-INDIES: DO 10, I = 1, N RP(I) = I 10 ONTINUE ROW LOOP: DO 200, I = 1, N FIND PIVOT HPIV = ABS( A(I,I) ) IR = I IF( I.LT. N ) THEN DO 50, K = (I+1), N APIV = ABS( A(K,I) ) IF( APIV.GT. HPIV ) THEN HPIV = APIV IR = K END IF 50 ONTINUE END IF IF( HPIV.LT. EPIV ) THEN IERR = -RP(IR) print*, 'INVERSION FAILED' RETURN END IF IF( IR.GT. I ) THEN INTERHANGE ROWS: DO 60, J = 1, N AR = A(I, J) A(I, J) = A(IR,J) A(IR,J) = AR 60 ONTINUE K = RP(I) RP(I) = RP(IR) RP(IR) = K END IF APIV = 1.D0/A(I,I) ALL UVS( A(1,I), N, APIV, A(1,I) ) A(I,I) = APIV OLUMN LOOP: DO 100, J = 1, N IF( J.NE. I ) THEN APIV = -A(I,J) IF( APIV.NE. 0.D0 ) THEN ALL UVPWS( A(1,J), A(1,I), N, APIV, A(1,J) ) A(I,J) = APIV * A(I,I) ELSE A(I,J) = 0.D0 END IF END IF 100 ONTINUE 200 ONTINUE INTERHANGE OLUMNS: DO 250, I = 1, N DO 210, J = 1, N K = RP(J) RA(K) = A(I,J) 210 ONTINUE DO 220, J = 1, N A(I,J) = RA(J) 220 ONTINUE 250 ONTINUE RETURN END subroutine lnsea2( fx, x, s, nx, se, sigt, nstr, iyld, dl, $ lapex, usrval, epeqyf, yldpr )......... Line searh subroutine for the X update... ARGUMENTS:... x(nx) - vetor of unknonwns... fx(nx) - vetor of residuals... s(nx) - x update vetor... -1... <s> = [J(x)]. <fx>... OUTPUT:... x(nx) - updated vetor of unknonwns... Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 42/50

Departamento de Engenharia ivil... SEE DENNIS AND SHNABEL, pp. 147-152... PARAMETERS:... ALFA ontrols the redution on the initial fx value... TOLER overrides the linesearh if fx is already small... T... N.B: Toler = 0.5 * <fx> <fx>......... parameters mx, msear double preision alfa, toler logial lapex parameter ( mx = 10, msear = 20, alfa = 1.d-4, $ toler = 1.d-8 )... externals double preision uv......... ommon definition logial sw ommon /SWITH/ sw(6) arguments nx, nstr, iyld double preision fx(*), x(*), s(*), se(nstr,*), sigt(*), $ usrval(*), epeqyf(*), yldpr(*) loal variables isear double preision xnew(mx), fx1(mx), fx2(mx), dl, dlprev, fxx, $ fx11, fx22, fxfx, mat11, mat12, mat21, mat22, $ fval1, fval2, det, a, b if ( nx.gt. mx ) then print*, "Error in LNSEAR.F - Please orret array boundaries" stop dl = 1.d0 fxfx = - uv( fx, fx, nx ) all uvmw( x, s, nx, xnew ) if ( sw(3) ) all prive( xnew, nx, 'XTRIAL' ) all mafx( fx1, xnew, se, sigt, nstr, iyld, $ lapex, usrval, epeqyf, yldpr ) fxx = uv( fx, fx, nx ) / 2.d0 fx11 = uv( fx1, fx1, nx ) / 2.d0 if ( sw(3) ) then all prival( fx11, 'FX-NEW' ) all prival( fxx + alfa * dl * fxfx, 'FX-INI' ) if ( ( fx11.lt. 2.d0 * ( fxx + alfa * dl * fxfx ) ) $.or. ( fx11.lt. toler ) ) then all rmove( xnew, x, nx ) return... Line searh orretion - Quadrati baktrak dlprev = dl dl = -0.5d0 * fxfx / ( fx11 - fxx - fxfx ) all hekdl( dlprev, dl ) if ( sw(3) ) all prival( dl, 'LNSEAR' ) all uvpws( x, s, nx, -dl, xnew ) do 100, isear = 1, msear all mafx( fx2, xnew, se, sigt, nstr, iyld, $ lapex, usrval, epeqyf, yldpr ) fx22 = uv( fx2, fx2, nx ) / 2.d0 if ( sw(3) ) then all prival( fx22, 'FX-NEW' ) all prival( fxx + alfa * dl * fxfx, 'FX-INI' ) if ( fx22.lt. ( fxx + alfa * dl * fxfx ) ) then all rmove( xnew, x, nx ) return... Line searh orretion - ubi baktrak mat11 = 1.d0 / dl / dl mat12 = -1.d0 / dlprev / dlprev mat21 = -dlprev / dl / dl mat22 = dl / dlprev / dlprev fval1 = fx22 - fxx - fxfx * dl fval2 = fx11 - fxx - fxfx * dlprev det = dl - dlprev a = ( mat11 * fval1 + mat12 * fval2 ) / det b = ( mat21 * fval1 + mat22 * fval2 ) / det dlprev = dl dl = ( - b + sqrt( b * b - 3.d0 * a * fxfx ) ) / 3.d0 / a all hekdl( dlprev, dl ) if ( sw(3) ) all prival( dl, 'LNSEAR' ) fx11 = fx22 all uvpws( x, s, nx, -dl, xnew ) 100 ontinue if ( sw(3) ) $ print*, "Line searh did not onverge after 10 iterations" all rmove( xnew, x, nx ) return end... subroutine hekdl( dlprev, dl ) PARAMETERS double preision mintol, maxtol parameter ( mintol = 0.1d0, maxtol = 0.5d0 ) ARGUMENTS double preision dlprev, dl dl = min( dl, maxtol * dlprev ) dl = max( dl, mintol * dlprev ) return Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 43/50 end... Returns the identity matrix subroutine unimax( matrix, l ) i,l double preision matrix(l,l) all rset(0.d0, matrix, l*l ) do 10, i = 1, l 10 matrix(i,i) = 1.d0 return end subroutine jao22( usrval, epeqyf, a, stiff, nstr, x, nx, iyld, $ yldpr ). purpose: to alulate the Jaobian for Hill type yield riterion input: arg.list: stiff -elasti stiffness matrix x -vetor of unknowns nx -number of unknowns output: arg.list: a -Jaobian.................. externals double preision uv parameters mstr parameter ( mstr=6 ) arguments nstr, nx, iyld double preision yldpr(*), stiff(nstr,*), x(*), a(nx,*), $ usrval (*), epeqyf(*) ommon definition logial sw ommon /swith/ sw(6) loal variables double preision dl(2), sig(mstr) double preision p(mstr,mstr), depeq(2), gradf(mstr), w(10*10), $ dfdk, tri, dpdk(mstr*mstr), psig( mstr), $ yield, d2fds2(mstr,mstr), dfdkds(mstr) i, j, k

Departamento de Engenharia ivil......... all rset( 0.d0, a, nx*nx ) all rset( 0.d0, dpdk, nstr*nstr ) Update softening parameters all exma( sig, dl, depeq, x, iyld, nstr ) all ypropx( usrval, epeqyf, depeq, yldpr ) all fpma( p, nstr, yldpr ) if ( sw(3) ) then all prival( yldpr(11), 'H1' ) all prival( yldpr(12), 'H2' ) all prival( dl(2), 'DL ' ) all prive( sig, nstr, 'SIG ' ) all primat( p, nstr, nstr, 'P' ) alulate gradient all rab( p, nstr, nstr, sig, 1, psig ) yield = sqrt ( 0.5d0 * abs ( uv( sig, psig, nstr ) ) ) all uvs( psig, nstr, 0.5d0 / yield, gradf ) alulate d[p]/dk dpdk(1) = 2.d0 * ( yldpr(12) * yldpr(5) - yldpr(11) * yldpr(6) ) $ / yldpr(5) / yldpr(5) dpdk(nstr+2) = 2.d0 * ( yldpr(11) * yldpr(6) - yldpr(12) * $ yldpr(5) ) / yldpr(6) / yldpr(6) if ( sw(3) ) all primat( dpdk, nstr, nstr, 'DPDK' ) T... alulate dfdk = <SIG> d[p]/dk <SIG> / ( 4 yield ) - d(yield)/dk all rab( dpdk, nstr, nstr, sig, 1, w ) tri = uv( sig, w, nstr ) dfdk = 0.25d0 * tri / yield - 0.5d0 * $ ( yldpr(12) * YLDPR(5) + yldpr(11) * YLDPR(6) ) / $ sqrt( yldpr(5) * yldpr(6) ) if ( sw(3) ) all prival( dfdk, 'dfdk' ) T 3... alulate d2fds2 = [P] / ( 2 yield ) - [P]<SIG> <SIG>[P] / ( 4 yield ) all rab( psig, nstr, 1, psig, nstr, w ) all uvs( w, nstr*nstr, -0.25d0 / yield ** 3, w ) all uvpws( w, p, nstr*nstr, 0.5d0 / yield, d2fds2 ) if ( sw(3) ) all primat( d2fds2, nstr, nstr, 'D2FDS2' )... alulate d2fdkds = d[p]/dk <SIG> / ( 2 yield ) -... T 3... ( <SIG> d[p]/dk <SIG> ) [P] <SIG> / ( 8 yield ) all rab( dpdk, nstr, nstr, sig, 1, w ) all uvs( w, nstr*nstr, 0.5d0 / yield, w ) all uvpws( w, psig, nstr, - tri / 8.d0 / yield ** 3, dfdkds ) if ( sw(3) ) all prive( dfdkds, nstr, 'DFDKDS' ) ---------... FILL MATRIX A WITH SIGMA RELATED LINES all invsym( stiff, nstr ) all filma( +1, stiff, nstr ) all uvpws( stiff, d2fds2, nstr*nstr, dl(2), w ) all invsym( stiff, nstr ) all filma( +1, stiff, nstr ) k = 0 do 10 j = 1, nstr do 10 i = 1, nstr k = k + 1 a(i,j) = w(k) 10 ontinue all uvpws( gradf, dfdkds, nstr, dl(2), w ) do 20 i = 1, nstr a(i,nstr+1) = w(i) 20 ontinue ---------... FILL MATRIX A WITH YIELD FUNTION RELATED LINE do 50 i = 1, nstr a(nstr+1,i) = gradf(i) 50 ontinue a(nstr+1,nstr+1) = dfdk --------- if ( sw(3) ) all primat( a, 5, 5, 'A' ) end subroutine fabra( a, b, nstr, stiff ). purpose: to setup and fill the return mapping matries of the... "orthotropi" Rankine type yield ondition in the apex input: arg.list: output: arg.list: a,b -projetion-matries programmed by P.B.Loureno...... arguments nstr double preision a(nstr,*), b(nstr,*), stiff(nstr,*) all rset( 0.0d0, a, nstr*nstr ) all rset( 0.0d0, b, nstr*nstr ) all invsym( stiff, nstr ) all filma( +1, stiff, nstr ) all unimax( a, nstr ) a(3,1) = - stiff(3,1) / stiff(3,3) a(3,2) = - stiff(3,2) / stiff(3,3) b(3,1) = stiff(3,1) / stiff(3,3) b(3,2) = stiff(3,2) / stiff(3,3) b(3,3) = 1.d0 if ( nstr.eq. 6 ) then b(5,5) = 1.d0 b(6,6) = 1.d0 all invsym( stiff, nstr ) all filma( +1, stiff, nstr ) end subroutine findap( tsigt, nstr, x, yldpr, lapex, usrval, epeqyf ). purpose: hek if the wrong side of the rankine yield surfae was seleted............ externals double preision uv parameters mstr parameter ( mstr=6 ) arguments logial nstr lapex double preision yldpr(*), tsigt(*), x(*), usrval(*), epeqyf(*)...... ommon definition logial sw ommon /SWITH/ sw(6) loal variables double preision dl(2), sig(mstr) double preision p(mstr,mstr), depeq(2), eta(mstr), pi(mstr), $ dsig(mstr), pdsig(mstr), rdum, pidsig, k, yf(2) all rset( 0.d0, pi, nstr ) k = 0.d0... Update softening parameters all exma( sig, dl, depeq, x, 1, nstr ) all ypropx( usrval, epeqyf, depeq, yldpr ) all uvmw( tsigt, sig, nstr, dsig ) if ( sw(3) ) all prive( tsigt, nstr, 'tsigt' ) if ( sw(3) ) all prive( sig, nstr, 'tsign' ) all fpraor( p, nstr, yldpr(3) ) pi(1) = 1.d0 pi(2) = 1.d0 all feta( sig, yldpr, eta, nstr ) if ( sw(3) ) all prive( eta, nstr, 'ETA ' ) all rab( p, nstr, nstr, dsig, 1, pdsig ) pidsig = uv( pi, dsig, nstr ) rdum = uv( dsig, pdsig, nstr ) - 0.5d0 * pidsig * pidsig if ( abs( rdum ).lt. 1.d-8 ) return Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 44/50

Departamento de Engenharia ivil... k = ( uv( pi, eta, nstr ) * pidsig - $ 2.d0 * uv( eta, pdsig, nstr ) ) / rdum if ( sw(3) ) all prival( k, 'K' ) if ( k.gt. 0.d0.and. k. lt. 1.d0 ) then Other solution might exist all uvpws( sig, dsig, nstr, k, sig ) all masyf( yldpr, sig, yf, nstr, lapex, usrval, epeqyf ) IF ( SW(3) ) all prival( yf(1), 'yf-new' ) if ( abs ( yf(1) ).lt. 1.d-6 ) then... other solution exists print*, "Other solution exists for apex solution..." end subroutine jao32( usrval, epeqyf, a, stiff, nstr, x, nx, iyld, $ yldpr ). purpose: to alulate the Jaobian for the orner of the omposite masonry riterion input: arg.list: stiff -elasti stiffness matrix x -vetor of unknowns nx -number of unknowns output: arg.list: a -Jaobian.................. externals double preision uv parameters mstr parameter ( mstr=6 ) arguments nstr, nx, iyld double preision yldpr(*), stiff(nstr,*), x(*), a(nx,*), $ usrval (*), epeqyf(*) ommon definition logial sw ommon /swith/ sw(6) loal variables double preision dl(2), sig(mstr) double preision p(mstr,mstr), depeq(2), eta(mstr), peta(mstr), $ d2gds2(mstr,mstr), gradf(mstr), w(10*10), $ dnedk(mstr), d2gdk(mstr), df1dk, tri, $ gradg(mstr), p(mstr,mstr), gradf(mstr), tri, $ psig(mstr), dfdk, yield, d2fds2(mstr,mstr), $ dfdkds(mstr), dpdk(mstr*mstr), gamma(mstr)......... logial i, j, k ldum all rset( 0.d0, dnedk, nstr ) all rset( 0.d0, a, nx*nx ) all rset( 0.d0, dpdk, nstr*nstr ) Update softening parameters all exma( sig, dl, depeq, x, iyld, nstr ) all ypropx( usrval, epeqyf, depeq, yldpr ) if ( sw(3) ) then all prival( yldpr( 9), 'H1' ) all prival( yldpr(10), 'H2' ) all prival( yldpr(11), 'H1' ) all prival( yldpr(12), 'H2' ) all prival( dl(1), 'DL1' ) all prival( dl(2), 'DL2' ) all prive( sig, nstr, 'SIG' ) ompresssion data all fpma( p, nstr, yldpr ) alulate gradient all rab( p, nstr, nstr, sig, 1, psig ) yield = sqrt ( 0.5d0 * abs ( uv( sig, psig, nstr ) ) )... all uvs( psig, nstr, 0.5d0 / yield, gradf ) alulate d[p]/dk dpdk(1) = 2.d0 * ( yldpr(12) * yldpr(5) - yldpr(11) * yldpr(6) ) $ / yldpr(5) / yldpr(5) dpdk(nstr+2) = 2.d0 * ( yldpr(11) * yldpr(6) - yldpr(12) * $ yldpr(5) ) / yldpr(6) / yldpr(6) T... alulate dfdk = <SIG> d[p]/dk <SIG> / ( 4 yield ) - d(yield)/dk all rab( dpdk, nstr, nstr, sig, 1, w ) tri = uv( sig, w, nstr ) dfdk = 0.25d0 * tri / yield - 0.5d0 * $ ( yldpr(12) * yldpr(5) + yldpr(11) * yldpr(6) ) / $ sqrt( yldpr(5) * yldpr(6) ) T 3... alulate d2fds2 = [P] / ( 2 yield ) - [P]<SIG> <SIG>[P] / ( 4 yield ) all rab( psig, nstr, 1, psig, nstr, w ) all uvs( w, nstr*nstr, -0.25d0 / yield ** 3, w ) all uvpws( w, p, nstr*nstr, 0.5d0 / yield, d2fds2 )... alulate d2fdkds = d[p]/dk <SIG> / ( 2 yield ) -... T 3... ( <SIG> d[p]/dk <SIG> ) [P] <SIG> / ( 8 yield ) all rab( dpdk, nstr, nstr, sig, 1, w ) all uvs( w, nstr*nstr, 0.5d0 / yield, w ) all uvpws( w, psig, nstr, - tri / 8.d0 / yield ** 3, dfdkds ) all uvpws( gradf, dfdkds, nstr, dl(2), gamma ) if ( sw(3) ) then all primat( d2fds2, nstr, nstr, 'D2FDS2' ) all primat( dpdk, nstr, nstr, 'DPDK' ) all prive( dfdkds, nstr, 'DFDKDS' ) all prive( gamma, nstr, 'GAMMA' ) all prival( dfdk, 'DFDK' )............ End ompression Begin tension all fpraor( p, nstr, yldpr(3) ) all feta( sig, yldpr, eta, nstr ) alulate gradients all ragror( p, sig, gradf, yldpr, nstr, ldum ) all fpraor( p, nstr, yldpr(4) ) all rab( p, nstr, nstr, eta, 1, peta ) tri = sqrt( 0.5d0 * uv( eta, peta, nstr ) ) all ragror( p, sig, gradg, yldpr, nstr, ldum ) if ( sw(3) ) then all prive( gradf, nstr, 'GRADF' ) all prive( gradg, nstr, 'GRADG' ) all prive( eta, nstr, 'ETA ' ) alulate d2g/dsigma2 = d2gds2 all rabt( peta, nstr, 1, peta, nstr, w ) all uvs( w, nstr*nstr, -0.25d0 / tri**3, w ) all uvpws( w, p, nstr*nstr, 0.5D0 / tri, d2gds2) alulate d2f/dkdsigma = d2gdk dnedk(1) = -yldpr(9) dnedk(2) = -yldpr(10) all rab( d2gds2, nstr, nstr, dnedk, 1, d2gdk ) if ( sw(3) ) then all primat( d2gds2, nstr, nstr, 'D2GDS2' ) all primat( stiff, nstr, nstr, 'STIFF' ) all prive( d2gdk, nstr, 'D2GDK' ) ---------... Fill matrix [A] with sigma related lines all invsym( stiff, nstr ) all filma( +1, stiff, nstr ) all uvpws( stiff, d2gds2, nstr*nstr, dl(1), w ) all uvpws( w, d2fds2, nstr*nstr, dl(2), w ) all invsym( stiff, nstr ) all filma( +1, stiff, nstr ) k = 0 do 10 j = 1, nstr do 10 i = 1, nstr k = k + 1 a(i,j) = w(k) 10 ontinue all uvpws( gradg, d2gdk, nstr, dl(1), w ) Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 45/50

Departamento de Engenharia ivil do 20 i = 1, nstr a(i,nstr+1) = w(i) 20 ontinue do 41 i = 1, nstr a(i,nstr+2) = gamma(i) 41 ontinue ---------... alulate df1/dk = df1dk df1dk = uv( gradf, dnedk, nstr ) if ( sw(3) ) then all prival( df1dk, 'DF1DK') ---------... Fill matrix [A] with yield funtion 1 related line do 50 i = 1, nstr a(nstr+1,i) = gradf(i) 50 ontinue a(nstr+1,nstr+1) = df1dk ---------... Fill matrix [A] with yield funtion 2 related line do 55 i = 1, nstr a(nstr+2,i) = gradf(i) 55 ontinue a(nstr+2,nstr+2) = dfdk --------- if ( sw(3) ) all primat( a, nx, nx, 'A' ) end DOUBLE PREISION FUNTION DASUM(N,DX,INX). TAKES THE SUM OF THE ABSOLUTE VALUES. DOUBLE PREISION DX(1),DTEMP I,INX,M,MP1,N,NINX DASUM = 0.0D0 DTEMP = 0.0D0 IF(N.LE.0)RETURN IF(INX.EQ.1)GO TO 20 ODE FOR INREMENT NOT EQUAL TO 1 NINX = N*INX DO 10 I = 1,NINX,INX DTEMP = DTEMP + DABS(DX(I)) 10 ONTINUE DASUM = DTEMP RETURN ODE FOR INREMENT EQUAL TO 1 LEAN-UP LOOP 20 M = MOD(N,6) IF( M.EQ. 0 ) GO TO 40 DO 30 I = 1,M DTEMP = DTEMP + DABS(DX(I)) 30 ONTINUE IF( N.LT. 6 ) GO TO 60 40 MP1 = M + 1 DO 50 I = MP1,N,6 DTEMP = DTEMP + DABS(DX(I)) + DABS(DX(I + 1)) + DABS(DX(I + 2)) * + DABS(DX(I + 3)) + DABS(DX(I + 4)) + DABS(DX(I + 5)) 50 ONTINUE 60 DASUM = DTEMP RETURN END SUBROUTINE FILMA( KOD, A, N ). TO FILL THE NON-FILLED HALF OF A SYMMETRI MATRIX KOD.GT.0 - LOWER HALF IS FILLED KOD.LT.0 - UPPER HALF IS FILLED... KOD, N DOUBLE PREISION A(N,N) I, J IF ( KOD.GT. 0 ) THEN FILL LOWER HALF DO 15 I=1,N DO 10 J=I,N A(J,I)=A(I,J) 10 ONTINUE 15 ONTINUE ELSE IF ( KOD.LT. 0 ) THEN FILL UPPER HALF DO 25 I=1,N DO 20 J=I,N A(I,J)=A(J,I) 20 ONTINUE 25 ONTINUE END IF END SUBROUTINE FNEXP( FVAL0, XULT, X, FVAL, GRAD ).... DOUBLE PREISION FVAL0, XULT, X, FVAL, GRAD FVAL = FVAL0 * EXP( -X / XULT ) GRAD = -FVAL / XULT RETURN END SUBROUTINE INVSYM( A, NA ). INVERSE OF A(NA,NA). A'S LOWER TRIANGLE IS FILLED. IN THE UPPER TRIANGLE WILL BE THE INVERSE. THE LOWER TRIANGLE IS DESTROYED.... DOUBLE PREISION EPS PARAMETER ( EPS=1.D-10 ) NA DOUBLE PREISION A(1), D, F, DM LOGIAL ROWONE IHD, N, JRLBEG, IRY, JBEG, IHJ, IHJUP, $ JRLEND, IRLB, JRY, IRL, JRL, K, IRLE, IRH, JE, $ JRH, JH, KE, NM1 HEK IF THIS IS A ORRET ALL... IF ( NA.LT. 1 ) RETURN IF ( NA.EQ. 1 ) THEN A(1) = 1.0D0/A(1) RETURN END IF DM = 0.D0 IHD=0 N=NA NM1=N-1 JRLBEG=-NM1 ROWONE=.TRUE. DO 60 IRY=1,NM1 IHD=IHD+IRY D = A(IHD) DM = MAX( ABS( D ), DM ) IF( ABS( D ).LT. EPS*DM ) then print*, 'annot invert an ill-onditioned matrix' stop D=1.D0/D A(IHD)=D JBEG=IHD+1 IHJ=IHD+N IHJUP=IRY IHD=JBEG+NM1-IRY JRLBEG=JRLBEG+N JRLEND=JRLBEG+IRY-2 IRLB=JRLBEG DO 40 JRY=JBEG,IHD F=A(JRY)*D IRLB=IRLB+N IRL=IRLB IF( ROWONE ) GOTO 15 DO 10 JRL=JRLBEG,JRLEND A(IRL)=A(IRL)-F*A(JRL) IRL=IRL+1 10 ONTINUE 15 ONTINUE A(IRL)=-F DO 20 K=JRY,IHD IHJ=IHJ+1 A(IHJ)=A(IHJ)-F*A(K) 20 ONTINUE Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 46/50

Departamento de Engenharia ivil A(JRY)=F IHJUP=IHJUP+1 IHJ=IHJ+IHJUP 40 ONTINUE IF ( ROWONE ) GOTO 50 DO 45 JRL=JRLBEG,JRLEND A(JRL)=A(JRL)*D 45 ONTINUE GOTO 60 50 ONTINUE ROWONE=.FALSE. 60 ONTINUE D = A(IHD+N) DM = MAX( ABS( D ), DM ) IF( ABS( D ).LT. EPS*DM ) then print*, 'annot invert ill-onditioned matrix' stop D = 1.D0/D A(IHD+N)=D IRLE=IHD+NM1 DO 70 IRL=IRLB,IRLE A(IRL)=D*A(IRL) 70 ONTINUE BAK SUBSTITUTION STARTS NOW. IRH=IHD-NM1 DO 140 IRY=1,NM1 JE=IHD-1 KE=IHD+IRY-1 DO 120 JRH=IRH,JE JH=JRH D=0.0D0 DO 100 K=IHD,KE JH=JH+N D=D+A(K)*A(JH) 100 ONTINUE A(JRH)=A(JRH)-D 120 ONTINUE IHD=JE-N IRH=IRH-N 140 ONTINUE RETURN END SUBROUTINE PRIIVL( IVAL, LABEL )... PRINT VALUE. METHOD: THE VALUE IS IDENTIFIED BY A 1-6 HARATER LABEL WHIH IS PRINTED IN FRONT. INPUT: ARG.LIST: IVAL -VALUE TO BE PRINTED. LABEL -ONE TO SIX HARATERS IN A6-FORMAT.... IVAL HARATER*(*) LABEL PRINT LABEL AND VALUE. WRITE ( *, 1 ) LABEL, IVAL RETURN 1 FORMAT ( 1X, A, '=', I6 ) END SUBROUTINE PRIMAT( RMAT, N, M, LABEL ). PURPOSE: TO PRINT AN REAL MATRIX ON THE LOGIAL OUTPUT UNIT. METHOD: THE MATRIX IS IDENTIFIED BY A 1-6 HARATER LABEL WHIH IS PRINTED ON TOP. THE MATRIX IS PRINTED ROW BY ROW, IN LINES OF TEN VALUES, THE VALUES ARE FORMATTED IN A 'E11.3' FIELD. OLUMN- AND ROW-INDIES ARE PRINTED ABOVE AND AT THE LEFT SIDE. A BLANK LINE IS INSERTED BETWEEN EAH ROW. INPUT: ARG.LIST: RMAT -MATRIX TO BE PRINTED. N -NUMBER OF ROWS. M -NUMBER OF OLUMNS. LABEL -ONE TO SIX HARATERS IN A6-FORMAT.... M, N DOUBLE PREISION RMAT(N,M) HARATER*(*) LABEL I, J PRINT LABEL AND OLUMN-INDIES. WRITE(*,1) LABEL, (J,J=1,M) PRINT ROWS, PREEDED BY ROW-INDEX. DO 10 I = 1, N WRITE(LOUT,2) I, (RMAT(I,J),J=1,M) 10 ONTINUE RETURN 1 FORMAT(1X,A,':',10(I8,4X)/(8X,10(I8,4X))) 2 FORMAT(1X,I7,1P,10E12.3/(8X,10E12.3)) END SUBROUTINE PRIVAL( RVAL, LABEL ). PRINT REAL VALUE. METHOD: THE VALUE IS IDENTIFIED BY A 1-6 HARATER LABEL WHIH IS PRINTED IN FRONT. INPUT: ARG.LIST: RVAL -VALUE TO BE PRINTED. LABEL -ONE TO SIX HARATERS IN A6-FORMAT. /INOUT /: LOUT -OUTPUT LOGIAL UNITNUMBER.... DOUBLE PREISION RVAL HARATER*(*) LABEL PRINT LABEL AND VALUE. WRITE ( *, 1 ) LABEL, RVAL RETURN 1 FORMAT ( 1X, A, '=', 1P, E12.3 ) END SUBROUTINE PRIVE( RVE, N, LABEL ). PRINT REAL VETOR (ARRAY). METHOD: THE VETOR IS IDENTIFIED BY A 1-6 HARATER LABEL WHIH IS PRINTED IN FRONT. INPUT: ARG.LIST: RVE -VETOR TO BE PRINTED. N -NUMBER OF VALUES IN VETOR. LABEL -ONE TO SIX HARATERS IN A6-FORMAT.... LIN, LOUT, N DOUBLE PREISION RVE(N) HARATER*(*) LABEL PRINT LABEL AND VALUES. WRITE(*,1) LABEL, RVE RETURN 1 FORMAT(1X,A,':',1P,10E12.3/(8X,10E12.3)) END SUBROUTINE RAB(A,N,M,B,L,R).. PURPOSE : R = A * B.. METHOD : USE FUNTION VINPRO TO OMPUTE THE INNER- PRODUT OF A ROW OF A AND A OLUMN OF B.. Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 47/50

Departamento de Engenharia ivil. REAL DIMENSIONS : A(N,M) B(M,L), R(N,L)..... N, M, L DOUBLE PREISION A(1), B(1), R(1), VINPRO I, IR, J, ML ML=M*L DO 130 I=1,N IR=I DO 110 J=1,ML,M R(IR) = VINPRO( A(I), N, B(J), 1, M ) IR=IR+N 110 ONTINUE 130 ONTINUE RETURN END SUBROUTINE RABT( A, N, M, B, L, R ).. T. PURPOSE : R = A*B.. METHOD : ALL FUNTION VINPRO TO OMPUTE INNER-PRODUT OF ROW OF A AND ROW OF B... REAL DIMENSIONS : A(N,M), B(L,M), R(N,L)..... N, M, L DOUBLE PREISION A(1), B(1), R(1), VINPRO IR, J, I IR=0 DO 120 J=1,L DO 110 I=1,N IR = IR + 1 R(IR) = VINPRO( A(I), N, B(J), L, M ) 110 ONTINUE 120 ONTINUE RETURN END SUBROUTINE RATBA( A, N, M, B, R, H, K ). T PURPOSE : TRIPLE MATRIX PRODUT R = A * B * A METHOD : USE FUNTIONS VINPRO AND UV TO OMPUTE REAL DIMENSIONS : A(N,M), B(N,N), R(K,M), H(N)... N, M, K DOUBLE PREISION A(1), B(1), H(1), R(1), VINPRO, UV MN, IR, J, L, I ALL RSET( 0.D0, R, K*M ) MN = M*N IR = 1 DO 100 J = 1, MN, N DO 20 L = 1, N H(L) = VINPRO( B(L), N, A(J), 1, N ) 20 ONTINUE DO 40 I = 1, MN, N R(IR) = R(IR) + UV( H(1), A(I), N ) IR = IR + 1 40 ONTINUE IR = IR + K - M 100 ONTINUE RETURN END SUBROUTINE RMOVE( RFROM, RTO, N ). PURPOSE: MOVE N REALS FROM < RFROM > TO < RTO > : N N < RTO > := < RFROM > 1 1 METHOD: FORTRAN DO-LOOP INPUT: ARG.LIST: RFROM(1:N), N OUTPUT: ARG.LIST: RTO(1:N)... I, N DOUBLE PREISION RFROM(N), RTO(N) DO 10 I = 1, N RTO(I) = RFROM(I) 10 ONTINUE RETURN END SUBROUTINE RSET( RVAL, RAR, N ). PURPOSE: INITIALIZE REAL ARRAY: N < RAR > := RVAL 1 METHOD: FORTRAN DO-LOOP INPUT: ARG.LIST: RVAL, N. OUTPUT: ARG.LIST: RAR(1:N)... I, N DOUBLE PREISION RAR(N), RV, RVAL RV = RVAL DO 10 I = 1, N RAR(I) = RV 10 ONTINUE RETURN END DOUBLE PREISION FUNTION UV( U, V, N ). INNER PRODUT: N UV := SIGMA ( < U > * < V > ) 1 METHOD: FORTRAN DO-LOOP INPUT: ARG.LIST: U(1:N), V(1:N), N OUTPUT: FUN.VAL: UV... N DOUBLE PREISION R, U(N), V(N) I R = 0.D0 DO 10 I = 1, N R = R + U(I) * V(I) 10 ONTINUE UV = R Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 48/50

Departamento de Engenharia ivil RETURN END SUBROUTINE UVMW( V, W, N, U ). PURPOSE: SUBTRAT TWO VETORS: N N N < U > := < V > - < W > 1 1 1 METHOD: FORTRAN DO-LOOP INPUT: ARG.LIST: V(1:N), W(1:N), N OUTPUT: ARG.LIST: U(1:N)... N DOUBLE PREISION U(N), V(N), W(N) I DO 10 I = 1, N U(I) = V(I) - W(I) 10 ONTINUE RETURN END SUBROUTINE UVPW( V, W, N, U ). PURPOSE: ADD TWO VETORS: N N N < U > := < V > + < W > 1 1 1 METHOD: FORTRAN DO-LOOP INPUT: ARG.LIST: V(1:N), W(1:N), N OUTPUT: ARG.LIST: U(1:N)... N DOUBLE PREISION U(N), V(N), W(N) I DO 10 I = 1, N U(I) = V(I) + W(I) 10 ONTINUE END SUBROUTINE UVS( V, N, S, U ). PRODUT OF VETOR AND SALAR: N N < U > := < V > * S 1 1 METHOD: FORTRAN DO-LOOP INPUT: ARG.LIST: V(1:N), N, S OUTPUT: ARG.LIST: U(1:N)... N DOUBLE PREISION S, U(N), V(N) I DO 10 I = 1, N U(I) = V(I) * S 10 ONTINUE END SUBROUTINE Drapex( SE, stiff, NSTR, yldpr, sig, depsp ). PURPOSE: TO ALULATE THE ONSISTENT TANGENT OF THE 'ORTHOTROPI RANKINE' MODEL... IN THE APEX - Version 2... EXTERNALS DOUBLE PREISION UV PARAMETERS DOUBLE PREISION TOLER PARAMETER ( TOLER = 1.D-12 ) MSTR PARAMETER ( MSTR=6 ) OMMON DEFINITION LOGIAL SW OMMON /SWITH/ SW(6) ARGUMENTS NSTR DOUBLE PREISION SE(NSTR,*), stiff(nstr,*) LOAL VARIABLES DOUBLE PREISION SIG(*) DOUBLE PREISION w((mstr+1)*(mstr+1)), dnedk(mstr), yldpr(*), $ a(mstr+1,mstr+1), uni(mstr*mstr), q(mstr*mstr), $ DEPSP(*), dkdep(mstr), pi(mstr), $ u(mstr), aa(mstr,mstr), bb(mstr,mstr), $ qdepsp(mstr)... IERR, IDUM(mstr+1), i, j, k DATA IDUM / 1, 2, 3, 4, 5, 6, 7 / all rset( 0.d0, dnedk, nstr ) all rset( 0.d0, pi, nstr ) all rset( 0.d0, a, (mstr+1)*(mstr+1) ) if ( sw(3) ) ALL PRIVE( DEPSP, nstr, 'DEPSP ' ) if ( sw(3) ) ALL PRIVE( SIG, nstr, 'SIG ' ) Fill unimax all unimax( uni, nstr ) IF ( SW(3) ) then ALL PRIMAT( stiff, nstr, nstr, 'stiff') ---------... FILL MATRIX A WITH SIGMA RELATED LINES k = 0 do 10 j = 1, nstr do 10 i = 1, nstr k = k + 1 a(i,j) = uni(k) 10 ontinue dnedk(1) = yldpr( 9) dnedk(2) = yldpr(10) all fabra( aa, bb, nstr, stiff ) all rab( aa, nstr, nstr, dnedk, 1, w ) do 30 i = 1, nstr a(i,nstr+1) = -w(i) 30 ontinue ---------... alulate d(deltak)/depsp = dkdep ALL fpraor( q, NSTR, 0.d0 ) do 40 i = 4, nstr q((i-1)*nstr+i) = 0.5d0 / yldpr(4) 40 ontinue pi(1) = 1.d0 pi(2) = 1.d0 all rab( q, nstr, nstr, DEPSP, 1, qdepsp ) if ( abs( uv( DEPSP, qdepsp, nstr) ).lt. 1.d-16 ) then all uvs( pi, nstr, 0.5d0, dkdep ) else all uvs( qdepsp, nstr, 0.5d0 / $ sqrt( 0.5 * abs( uv ( DEPSP, qdepsp, nstr) ) ), dkdep ) all uvpws( dkdep, pi, nstr, 0.5d0, dkdep ) IF ( SW(3) ) then ALL PRIVE( dkdep, nstr, 'dkdep' ) ---------... FILL MATRIX A WITH SOFTENING RELATED LINE Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 49/50

Departamento de Engenharia ivil all invsym( stiff, nstr ) all filma( +1, stiff, nstr ) all rab( stiff, nstr, nstr, dkdep, 1, w ) do 60 i = 1, nstr a(nstr+1,i) = w(i) 60 ontinue a(nstr+1,nstr+1) = 1.d0 --------- IF ( SW(3) ) ALL PRIMAT( A, nstr+1, nstr+1, 'A' ) ALL INVPGB( A, nstr+1, IDUM, W, TOLER, IERR ) IF ( IERR.LT. 0 ) then print*, 'INVERSION SYSTEM "A" FAILED' stop IF ( SW(3) ) THEN ALL PRIMAT( A, nstr+1, nstr+1, 'A-1' ) END IF do 90 i = 1, nstr u(i) = dkdep(i) 90 ontinue k = 0 do 80 i = nstr+1, nstr+1 do 80 j = 1, nstr k = k + 1 w(k) = a(j,i) 80 ontinue IF ( SW(3) ) ALL PRIMAT( w, nstr, 1, 'A-1m*1' ) all rab( w, nstr, 1, u, nstr, se ) IF ( SW(3) ) ALL PRIMAT( SE, NSTR, NSTR, 'SE-TAN' ) all invsym( stiff, nstr ) all filma( +1, stiff, nstr ) k = 0 do 85 i = 1, nstr do 85 j = 1, nstr k = k + 1 w(k) = a(j,i) 85 ontinue IF ( SW(3) ) ALL PRIMAT( w, nstr, nstr, 'A-1m*m' ) all rab( w, nstr, nstr, bb, nstr, aa ) all rab( aa, nstr, nstr, stiff, nstr, w ) all uvpw( se, w, nstr*nstr, se )... Avoid a zero stiffness matriz in the z diretion if ( se(3,3).eq. 0.d0 ) se(3,3) = 1.d-7 IF ( SW(3) ) ALL PRIMAT( SE, NSTR, NSTR, 'SE-TAN' ) END SUBROUTINE UVPWS( V, W, N, S, U ). N N N < U > := < V > + < W > * S 1 1 1 METHOD: FORTRAN DO-LOOP INPUT: ARG.LIST: V(1:N), W(1:N), N, S OUTPUT: ARG.LIST: U(1:N)... N DOUBLE PREISION S, U(1), V(1), W(1) I IF ( N.LE. 0 ) RETURN DO 10 I = 1, N U(I) = V(I) + W(I) * S 10 ONTINUE RETURN END DOUBLE PREISION FUNTION VINPRO( U, IU, V, IV, N ). PURPOSE: INNER PRODUT OF TWO VETORS: N,IU N,IV VINPRO := SIGMA ( < U > * < V > ) 1 1 IU, AND IV ARE INDEX INREMENTS FOR <U> AND <V>, IF BOTH IU AND IV ARE 1, BETTER USE FUNTION UV. METHOD: FORTRAN DO-LOOP INPUT: ARG.LIST: U(.), IU, V(.), IV, N OUTPUT: FUN.VAL: VINPRO... IU, IV, N DOUBLE PREISION R, U(1), V(1) NU, JV, I R = 0.D0 NU = N*IU JV = 1 DO 10 I = 1, NU, IU R = R + U(I) * V(JV) JV = JV + IV 10 ONTINUE VINPRO = R END Implementation of a onstitutive model for masonry shells / GROW-1999-70420 ISO-BRIK 50/50