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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 840 - (show annotations) (download) (as text)
Sun Sep 10 06:10:36 2006 UTC (15 years, 11 months ago) by johnpye
File MIME type: text/x-ascend
File size: 3537 byte(s)
Added 'deflection' to atoms.a4l.
Updated beam models to use 'abs' instead of full conditional modelling.
1 REQUIRE "atoms.a4l";
2
3 (* a parameterised simply-supported beam model *)
4
5 MODEL beam_parameterised(
6 n WILL_BE integer_constant;
7 E WILL_BE youngs_modulus;
8 I WILL_BE second_moment_of_area;
9 L WILL_BE distance;
10 );
11 v[1..n] IS_A deflection;
12 x[1..n] IS_A distance;
13
14 P,R1,R2 IS_A force;
15 a,b IS_A distance;
16 a + b = L;
17
18 (*
19 isrightp[1..n] IS_A boolean_var;
20
21 FOR i IN [1..n] CREATE
22 v_left[i]: v[i] = P*b/(6*E*I*L)*((L^2 - b^2)*x[i] - x[i]^3);
23 v_right[i]: v[i] = P*b/(6*E*I*L)*((L^2 - b^2)*x[i] - x[i]^3 + (L/b)*(x[i]-a)^3 );
24 END FOR;
25
26 CONDITIONAL
27 FOR i IN [1..n] CREATE
28 isright[i]: x[i] > a;
29 END FOR;
30 END CONDITIONAL;
31
32 FOR i IN [1..n] CREATE
33 isrightp[i] == SATISFIED(isright[i]);
34
35 WHEN (isrightp[i])
36 CASE TRUE:
37 USE v_right[i];
38 CASE FALSE:
39 USE v_left[i];
40 END WHEN;
41 END FOR;
42 *)
43 FOR i IN [1..n] CREATE
44 defl[i]: v[i] = P*b/(6*E*I*L)*((L^2 - b^2)*x[i] - x[i]^3 + (L/b)*( 0.5 * (x[i]-a + abs(x[i]-a)) )^3 );
45 END FOR;
46
47 (* sum of vertical forces *)
48 R1 + P + R2 = 0 {N};
49 (* sum of moments about left end *)
50 P * a + R2 * L = 0 {N*m};
51
52 METHODS
53 METHOD specify;
54 FIX P, a, x[1..n];
55 END specify;
56 METHOD values;
57 RUN bound_self;
58 END values;
59 METHOD bound_self;
60 a.upper_bound := 100 {m};
61 b.upper_bound := 100 {m};
62 L.upper_bound := 100 {m};
63 P.lower_bound := -2e4 {kN};
64 P.upper_bound := 2e4 {kN};
65 v[1..n].upper_bound := 10 {m};
66 v[1..n].lower_bound := -10 {m};
67 x[1..n].upper_bound := 100 {m};
68 x[1..n].lower_bound := -100 {m};
69 R1.lower_bound := -1e4 {kN};
70 R1.upper_bound := 1e4 {kN};
71 R2.lower_bound := -1e4 {kN};
72 R2.upper_bound := 1e4 {kN};
73 END bound_self;
74
75 END beam_parameterised;
76
77 (* superposition of n beams with displacements calculated at n locations *)
78 MODEL beam_superposition(
79 n WILL_BE integer_constant;
80 E WILL_BE youngs_modulus;
81 I WILL_BE second_moment_of_area;
82 L WILL_BE distance;
83 );
84
85 B[1..n] IS_A beam_parameterised(n,E,I,L);
86
87 v[1..n] IS_A deflection;
88 x[1..n] IS_A distance;
89 R1,R2 IS_A force;
90
91 FOR i IN [1..n] CREATE
92 B[1..n].x[i], x[i] ARE_THE_SAME;
93 v[i] = SUM[B[j].v[i] | j IN [1..n]];
94 END FOR;
95
96 (* displacements are calculated at the locations of the loads *)
97 FOR i IN [1..n] CREATE
98 B[i].a, x[i] ARE_THE_SAME;
99 END FOR;
100
101 R1 = SUM[B[i].R1 | i IN [1..n]];
102 R2 = SUM[B[i].R2 | i IN [1..n]];
103
104 METHODS
105 METHOD bound_self;
106 FOR i IN [1..n] DO
107 RUN B[i].bound_self;
108 v[i].upper_bound := 10 {m};
109 v[i].lower_bound := -10 {m};
110 x[i].upper_bound := 500 {m};
111 x[i].lower_bound := -500 {m};
112 END FOR;
113 R1.lower_bound := -1e4 {kN};
114 R1.upper_bound := 1e4 {kN};
115 R2.lower_bound := -1e4 {kN};
116 R2.upper_bound := 1e4 {kN};
117 END bound_self;
118
119 END beam_superposition;
120
121 (*
122 Model of a simply-supported beam of length L
123 with a single vertical point load P at 0 < a < L
124 *)
125
126 MODEL beam;
127 n IS_A integer_constant;
128 n :== 1;
129 E IS_A youngs_modulus;
130 I IS_A second_moment_of_area;
131 L IS_A distance;
132 B IS_A beam_parameterised(n,E,I,L);
133
134 P ALIASES B.P;
135 a ALIASES B.a;
136 b ALIASES B.b;
137
138 x ALIASES B.x[1];
139 v ALIASES B.v[1];
140
141 METHODS
142 METHOD specify;
143 FIX E, I, L;
144 FIX P, a;
145 FIX x;
146 END specify;
147
148 METHOD values;
149 E := 200 {GPa}; (* approx, for steel *)
150 I := 142e6 {mm^4}; (* AISC Universal Beam 360UB50.7 *)
151 L := 3.5 {m};
152 P := 14.0 {kN};
153 a := 1.75 {m};
154 x := 2.0 {m};
155 END values;
156
157 METHOD bound_self;
158 RUN B.bound_self;
159 L.lower_bound := 500 {m};
160 L.upper_bound := 0{m};
161 END bound_self;
162
163 METHOD on_load;
164 RUN reset;
165 RUN bound_self;
166 RUN values;
167 END on_load;
168
169 END beam;

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