/[ascend]/trunk/models/johnpye/pile.a4c
ViewVC logotype

Contents of /trunk/models/johnpye/pile.a4c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 913 - (show annotations) (download) (as text)
Sat Oct 28 03:55:19 2006 UTC (13 years, 1 month ago) by johnpye
File MIME type: text/x-ascend
File size: 7237 byte(s)
Added test for SUNDIALS version (2.2.1 and 2.3.0-pre are preferred)
Fixed silly warning message about ignored return values from CONSOLE_DEBUG on GCC.
1 REQUIRE "atoms.a4l";
2
3 MODEL pycurve(
4 B WILL_BE distance; (* pile diameter *)
5 );
6 p IS_A force_per_length;
7 y IS_A delta_distance;
8 END pycurve;
9
10 (*
11 MODEL pycurvesoftclay(
12 B WILL_BE distance;
13 epsilon_50 WILL_BE factor;
14 c WILL_BE stress;
15 ) REFINES pycurve(B);
16
17 y1 IS_A length;
18
19 y_50 IS_A length;
20 y_50 = 2.5 * epsilon_50 * B;
21
22 y_p IS_A length;
23 y_p = 8 * y_50;
24
25
26 p = 0.5 * (y/y_50)^(1/3) * p_u;
27 (* p = p_u; (* if y > y_p *) *)
28
29 gamma_dash IS_A force;
30
31 J IS_A factor;
32 c IS_A factor;
33
34 p_u = ( 3 + gamma_dash * x / c + J * x / B ) * c * B;
35 (* p_u = 9 * c * B; (* if x >= x_F *) *)
36
37 x_F = 6 * B / (gamma_dash*B/c + J);
38
39 METHODS
40 METHOD default_self;
41 END default_self;
42 END pycurvesoftclay;
43 *)
44
45 (*
46 This is a model of the displacement of a laterally loaded pile
47
48 See A Verruijt, "Computational Geomechanics", Kluwer Academic
49 Publishers, 1995 (Chapter 8).
50
51 This implements a vertical beam placed in an elasto-plastic medium
52 with Mohr-Coulomb failure criterion. 'Active' failure is when
53 the soil plastically expands into a void. 'Passive' failure is when
54 the soil is compressed to the point of plastic deformation.
55 *)
56 MODEL pile;
57
58 P IS_A force;
59
60 (* pile properties *)
61 E IS_A youngs_modulus;
62 I IS_A second_moment_of_area;
63 B IS_A distance; (* diameter of the pile *)
64 L IS_A distance; (* pile length *)
65 n IS_A integer_constant; (* number of elements *)
66 n:== 5;
67 d[0..n] IS_A distance; (* depth of points *)
68
69 (* soil properties *)
70 gamma_dash IS_A force_per_volume; (* rate of increase of soil pressure per depth *)
71 phi_f IS_A angle; (* friction angle of the soil *)
72 K_a IS_A factor; (* active pressure of the soil *)
73 K_p IS_A factor; (* passive pressure of the soil *)
74 K_n IS_A factor; (* neutral pressure of the soil *)
75 c IS_A stress; (* soil cohesion *)
76 delta_u IS_A distance; (* 'stroke' -- elastic displacement range *)
77
78 K_a = (1 - sin(phi_f))/(1+sin(phi_f));
79 K_p = (1 + sin(phi_f))/(1-sin(phi_f));
80
81 M[0..n] IS_A moment; (* bending moment in the pile *)
82 FOR i IN [0..n-1] CREATE
83 z_mom[i]: M[i+1] - M[i] = (Q[i+1] + Q[i]) * d[i+1] / 2;
84 END FOR;
85
86 F[1..n] IS_A force; (* loading *)
87 Rr[1..n], Rl[1..n], R[1..n] IS_A force; (* soil reaction *)
88 Q[0..n] IS_A force; (* shear force across the pile *)
89 FOR i IN [1..n] CREATE
90 z_horiz[i]: Q[i] - Q[i-1] + F[i] - R[i] = 0;
91 END FOR;
92
93 Q[0] = -P;
94
95 sigma_v[1..n] IS_A stress; (* soil pressure at local depth *)
96 sigma_hdash_min[1..n] IS_A stress; (* lateral stress for active failure *)
97 sigma_hdash_max[1..n] IS_A stress; (* lateral stress for passive failure *)
98 sigma_hdash_neut[1..n] IS_A stress; (* lateral stress for passive failure *)
99 S[1..n] IS_A force_per_length; (* stiffness of soil averaged over the element *)
100
101 vbar_r[1..n] IS_A delta_distance;
102 vbar_l[1..n] IS_A delta_distance; (* previous plastic deformations *)
103
104 dv_active[1..n] IS_A distance;
105 dv_passive[1..n] IS_A distance;
106
107
108 is_lpassive[1..n], is_lactive[1..n], is_lelastic[1..n] IS_A boolean_var;
109 is_rpassive[1..n], is_ractive[1..n], is_relastic[1..n] IS_A boolean_var;
110
111 FOR i IN [1..n] CREATE
112 sigma_v[i] = gamma_dash * 0.5*(d[i-1]+d[i]);
113 sigma_hdash_max[i] = K_p*sigma_v[i] + 2 * c * sqrt(K_p);
114 sigma_hdash_min[i] = K_a*sigma_v[i] - 2 * c * sqrt(K_a);
115 sigma_hdash_neut[i] = K_n*sigma_v[i];
116
117 dv_active[i] = (sigma_hdash_neut[i] - sigma_hdash_min[i])*delta_u / (sigma_hdash_max[i] - sigma_hdash_min[i]);
118 dv_passive[i] = (sigma_hdash_max[i] - sigma_hdash_neut[i])*delta_u / (sigma_hdash_max[i] - sigma_hdash_min[i]);
119
120 (* elastic stiffness *)
121 S[i] = (sigma_hdash_max[i] - sigma_hdash_min[i]) * B * (d[i] - d[i-1])/ delta_u;
122
123 END FOR;
124
125 CONDITIONAL
126 FOR i IN [1..n] CREATE
127 (* right side *)
128 is_rpassive_expr[i]: v[i] - vbar_r[i] > dv_passive[i];
129 is_ractive_expr[i]: vbar_r[i] - v[i] > dv_active[i];
130
131 (* left side *)
132 is_lpassive_expr[i]: v[i] - vbar_l[i] > dv_passive[i];
133 is_lactive_expr[i]: vbar_l[i] - v[i] > dv_active[i];
134 END FOR;
135 END CONDITIONAL;
136
137 FOR i IN [1..n] CREATE
138 is_rpassive[i] == SATISFIED(is_rpassive_expr[i]);
139 is_ractive[i] == SATISFIED(is_ractive_expr[i]);
140 is_relastic[i] == NOT (is_rpassive[i] OR is_ractive[i]);
141
142 rpassive_expr[i]: Rr[i] = sigma_hdash_max[i] * B * (d[i] - d[i-1]);
143 ractive_expr[i]: Rr[i] = sigma_hdash_min[i] * B * (d[i] - d[i-1]);
144 relastic_expr[i]: Rr[i] = (sigma_hdash_neut[i] + S[i] * (v[i] - vbar_r[i])) * B * (d[i] - d[i-1]);
145
146 WHEN (is_rpassive[i])
147 CASE TRUE: USE rpassive_expr;
148 END WHEN;
149
150 WHEN (is_ractive[i])
151 CASE TRUE: USE ractive_expr;
152 END WHEN;
153
154 WHEN (is_relastic[i])
155 CASE TRUE: USE relastic_expr;
156 END WHEN;
157
158 is_lpassive[i] == SATISFIED(is_lpassive_expr[i]);
159 is_lactive[i] == SATISFIED(is_lactive_expr[i]);
160 is_lelastic[i] == NOT (is_lpassive[i] OR is_lactive[i]);
161
162 lpassive_expr[i]: -Rl[i] = sigma_hdash_max[i] * B * (d[i] - d[i-1]);
163 lactive_expr[i]: -Rl[i] = sigma_hdash_min[i] * B * (d[i] - d[i-1]);
164 lelastic_expr[i]: -Rl[i] = (sigma_hdash_neut[i] + S[i] * (v[i] - vbar_l[i])) * B * (d[i] - d[i-1]);
165
166 WHEN (is_lpassive[i])
167 CASE TRUE: USE lpassive_expr[i];
168 END WHEN;
169
170 WHEN (is_lactive[i])
171 CASE TRUE: USE lactive_expr[i];
172 END WHEN;
173
174 WHEN (is_lelastic[i])
175 CASE TRUE: USE lelastic_expr[i];
176 END WHEN;
177
178 R[i] = Rr[i] + Rl[i];
179
180 END FOR;
181
182 (* reactions *)
183
184 v[1..n] IS_A delta_distance; (* average lateral displacement over the element *)
185 FOR i IN [1..n] CREATE
186 v[i] = u[i] + phi[i]*0.5*(d[i-1]+d[i]) + 0.5*kappa[i]*(0.5*(d[i-1]+d[i]));
187 END FOR;
188
189 (* deflections for each element take form u = u[i] + phi[i]*z + 1/2*kappa[i]*z^2; *)
190 u[1..n] IS_A delta_distance; (* deflection constant in an element*)
191 phi[1..n] IS_A factor; (* gradient of the pile, relative to vertical *)
192 kappa[1..n] IS_A factor; (* curvature of the pile *)
193
194 (* curvature of an element is due to average bending moment in that element *)
195 FOR i IN [1..n] CREATE
196 z_bend[i]: kappa[i] = - (M[i] + M[i-1])/(2*E*I);
197 END FOR;
198
199 (* matching slope and displacement of adjacent elements *)
200 FOR i IN [1..n-1] CREATE
201 z_curv[i]: phi[i+1] + kappa[i+1]*d[i] = phi[i] + kappa[i]*d[i];
202 z_disp[i]: u[i+1] + phi[i+1]*d[i] + 0.5*kappa[i+1]*d[i]^2 = u[i] + phi[i]*d[i] + 0.5*kappa[i]*d[i]^2;
203 END FOR;
204
205 METHODS
206 METHOD specify;
207 FIX d[0..n];
208 FIX F[1..n];
209 FIX phi_f, K_n;
210 FIX c, delta_u, gamma_dash;
211 FIX B,E,I,L;
212 FIX M[0];
213 FIX P;
214 FIX M[n];
215 FIX Q[n];
216 END specify;
217
218 METHOD values;
219 M[0] := 0 {N*m};
220 P := 1000 {kN};
221 M[n] := 0 {N*m};
222 Q[n] := 0 {N};
223 B := 1 {m};
224 E := 200 {GPa};
225 I := 4123000 {kN*m^2} / E;
226 L := 50 {m};
227 phi_f := 30 {deg};
228 K_n := 0.5;
229 c := 0 {Pa};
230 delta_u := 0.01 {m};
231 gamma_dash := 10 {kN/m^3};
232 FOR i IN [1..n] DO
233 F[i] := 0{N};
234 END FOR;
235 FOR i IN [0..n] DO
236 d[i] := i*L/n;
237 END FOR;
238 END values;
239
240 METHOD bound_self;
241 phi_f.lower_bound:= -180 {deg};
242 phi_f.upper_bound:= 180 {deg};
243
244 FOR i IN [1..n] DO
245 sigma_hdash_min.lower_bound := 0 {Pa};
246 END FOR;
247 END bound_self;
248
249 METHOD on_load;
250 RUN bound_self;
251 RUN values;
252 RUN reset;
253 END on_load;
254
255 END pile;

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22