1 |
REQUIRE "atoms.a4l"; |
2 |
|
3 |
MODEL vector; |
4 |
x,y,z IS_A solver_var; |
5 |
END vector; |
6 |
|
7 |
MODEL spherical_coords; |
8 |
mod IS_A solver_var; |
9 |
theta,phi IS_A angle; |
10 |
END spherical_coords; |
11 |
|
12 |
MODEL vector_from_spherical( |
13 |
S WILL_BE spherical_coords; |
14 |
) REFINES vector; |
15 |
x = S.mod*sin(S.phi)*cos(S.theta); |
16 |
y = S.mod*sin(S.phi)*sin(S.theta); |
17 |
z = S.mod*cos(S.theta); |
18 |
END vector_from_spherical; |
19 |
|
20 |
|
21 |
MODEL unit_vector REFINES vector; |
22 |
x^2 + y^2 + z^2 = 1; |
23 |
END unit_vector; |
24 |
|
25 |
(* = B X C *) |
26 |
MODEL cross_product( |
27 |
B WILL_BE vector; |
28 |
C WILL_BE vector; |
29 |
) REFINES vector; |
30 |
x = B.y*C.z + B.z*C.y; |
31 |
y = B.z*C.x + B.x*C.z; |
32 |
z = B.x*C.y + B.y*C.x; |
33 |
END cross_product; |
34 |
|
35 |
(* = B . C *) |
36 |
MODEL dot_product( |
37 |
B WILL_BE vector; |
38 |
C WILL_BE vector; |
39 |
); |
40 |
mod IS_A solver_var; |
41 |
mod = B.x*C.x + B.y*C.y + B.z*C.z; |
42 |
END dot_product; |
43 |
|
44 |
(* = b A *) |
45 |
MODEL scaled_vector( |
46 |
b WILL_BE factor; |
47 |
A WILL_BE vector; |
48 |
) REFINES vector; |
49 |
x = b*A.x; |
50 |
y = b*A.y; |
51 |
z = b*A.z; |
52 |
END scaled_vector; |
53 |
|
54 |
MODEL scaled_cross_product( |
55 |
a WILL_BE solver_var; |
56 |
B WILL_BE vector; |
57 |
C WILL_BE vector; |
58 |
) REFINES vector; |
59 |
A IS_A cross_product(B,C); |
60 |
x = a*A.x; |
61 |
y = a*A.y; |
62 |
z = z*A.z; |
63 |
END scaled_cross_product; |
64 |
|
65 |
(* |
66 |
MODEL vector1; |
67 |
A IS_A unit_vector; |
68 |
B IS_A vector; |
69 |
|
70 |
C IS_A cross_product(A,B); |
71 |
METHODS |
72 |
METHOD on_load; |
73 |
FIX A.x; A.x := 1; |
74 |
FIX A.y; A.y := 0; |
75 |
|
76 |
FIX B.x; B.x := 0; |
77 |
FIX B.y; B.y := 1; |
78 |
FIX B.z; B.z := 0; |
79 |
END on_load; |
80 |
|
81 |
END vector1; |
82 |
*) |