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; |