File: mound.htm

package info (click to toggle)
evolver 2.70+ds-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, sid
  • size: 17,148 kB
  • sloc: ansic: 127,395; makefile: 209; sh: 98
file content (192 lines) | stat: -rw-r--r-- 7,318 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
<!DOCTYPE HTML>
<html>
<head>
<link rel="stylesheet" type="text/css" href="evdoc-style.css" />
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<title>Surface Evolver mound example</title>
</head>
<BODY>

<h1 class="center">
<a href="http://www.susqu.edu/brakke/evolver/evolver.htm" class="comic">
Surface Evolver</a> Documentation</h1>

<a href="evolver.htm#doc-top">Back to top of Surface Evolver documentation.</a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="index.htm">Index.</a><br>
<a href="catenoid.htm">Next Catenoid example.</a><br>
<a href="tutorial.htm#tutorial">Back to top of tutorial.</a>

<a   id="mound-example"></a>
<h1> Example: Mound with gravity. </h1>

         This example is a mound of liquid sitting on a tabletop
         with gravity acting on it.  The contact angle between
         the drop surface and the tabletop is adjustable, to simulate
         the different degrees to which the liquid wets the table.
         This example illustrates macros, variables,
         constraints with energy, and omitting faces from body
         surfaces. <P>

         The drop starts as a cube with one face (face 6 of the cube example)
	 on the tabletop (the z = 0 plane).
         The most straightforward way to specify a contact angle is to
	 declare face 6 to be constrained to stay on the tabletop
	 and give it a surface tension different than the default of 1.
	 But this leads to problems described below.
	  The way the contact angle is handled instead is to omit
	  face 6 and give the edges
         around face 6 an energy integrand that results in the same
         energy we would get if we did include face 6.
          If we let the interface energy density for face 6
         be T, then we want a vectorfield <b>w</b> such that
<pre>  
        /             /
        |  T <b>k . dS</b> = | <b>w . dl</b>
        / face 6      / bdry of face 6

</pre>
         So by Green's Theorem,
	 all we need is curl <b>w</b> = T<b>k</b>, and I will use
         <b>w</b> = -Ty<b>i</b>.  Here <b> i j k</b> are the standard
unit basis vectors.
  In practice, I don't think about
  Green's Theorem as such; I just write down a line integral
 that sums up strips of surface. <P>

         I have chosen to parameterize the contact angle as the angle
         in degrees between the table and the surface on the interior
         of the drop.  This angle can be adjusted by assigning a new
         value to the variable "angle" at runtime. 
          I could have made <code>WALLT</code> the parameter
         directly, but then I wouldn't have had an excuse to show
         a macro. <P>

<table>
<tr><td>
<img src="moundbare.gif"  alt="mound skeleton"></td>
<td>  The initial mound skeleton, with
vertices and edges numbered. </td></tr>
</table>


         Here is the datafile  <code>mound.fe</code>:
<pre>
// mound.fe
// Evolver data for drop of prescribed volume sitting on plane with gravity.
// Contact angle with plane can be varied.

PARAMETER angle = 90    // interior angle between plane and surface, degrees

gravity_constant 0  // start with gravity off

#define WALLT  (-cos(angle*pi/180))  // virtual tension of facet on plane
 
constraint 1   /* the table top */
formula: x3 = 0
energy:  // for contact angle
e1: -(WALLT*y)
e2: 0
e3: 0 

vertices
1   0.0  0.0 0.0  constraint 1  /* 4 vertices on plane */
2   1.0  0.0 0.0  constraint 1
3   1.0  1.0 0.0  constraint 1
4   0.0  1.0 0.0  constraint 1
5   0.0  0.0 1.0
6   1.0  0.0 1.0
7   1.0  1.0 1.0
8   0.0  1.0 1.0
9   2.0  2.0 0.0  fixed   /* for table top */
10  2.0 -1.0 0.0  fixed
11 -1.0 -1.0 0.0  fixed
12 -1.0  2.0 0.0  fixed

edges  /* given by endpoints and attribute */
1   1 2    constraint 1 /* 4 edges on plane */
2   2 3    constraint 1
3   3 4    constraint 1
4   4 1    constraint 1
5   5 6
6   6 7  
7   7 8 
8   8 5
9   1 5   
10  2 6  
11  3 7 
12  4 8
13  9 10   fixed  /* for table top */
14 10 11   fixed
15 11 12   fixed
16 12  9   fixed

faces  /* given by oriented edge loop */
1   1 10 -5  -9
2   2 11 -6 -10
3   3 12 -7 -11
4   4  9 -8 -12
5   5  6  7   8
7  13 14 15  16  density 0 fixed /* table top for display */

bodies  /* one body, defined by its oriented faces */
1   1 2 3 4 5   volume 1  density 1

read
re := refine edges where on_constraint 1
</pre>

         The mound itself was basically copied from <code>cube.fe</code>, but
         with face 6 deleted.  The reason for this is that face 6 is
         not needed, and would actually get in the way.  It is not
         needed for the volume calculation since it would always be
         at z = 0 and thus not contribute to the surface integral
	 for volume. 
         The bottom edges of the side faces are constrained to lie in
         the plane z = 0, so face 6 is not needed to keep them from
         catastrophically shrivelling up.  We could have handled the
         contact angle by including face 6 with a surface tension equal
         to the interface energy density between the liquid and
         surface, but that can cause problems if the edges around face
         6 try to migrate inward.  After refinement a couple of times,
         interior vertices of the original
	 face 6 have no forces acting on them, so
         they don't move.  Hence it would be tough for face 6 to shrink
         when its outer vertices ran up against its inner vertices. 
         The tabletop face, face 7, is entirely extraneous to the
         calculations.  Its only purpose is to make a nice display. 
         You could remove it and all its vertices and edges without
         affecting the shape of the mound.  It's constraint 1 that is
         the tabletop as far as the mound is concerned. To see what
	 happens with the bottom face present, load
	 <a href="http://www.susqu.edu/brakke/evolver/downloads/moundB.fe">moundB.fe</a> and do "run".<P>

         Now run Evolver on <code>mound.fe</code>. 
        The command "<code>re</code>" defined at the
         end of the datafile is good to use first in order to refine
         some edges that need it. Refine and iterate a while.
         You should get a nice mound.  It's not a hemisphere, since
         gravity is on by default with <code>G</code> = 1.  If you use the 
         <a href="single.htm#G" class="keyword">G</a>
         command to set "<code>G 0</code>" and iterate a while, you get a
         hemisphere.  Try changing the
         contact angle, to 45 degrees (with the 
         command "<code>angle := 45</code>"}
         or 135 degrees for example.
         You can also play with gravity.  Set "<code>G 10</code>" to get a
         flattened drop, or "<code>G -5</code>" to get a drop hanging from the
         ceiling. "<code>G -10</code>" will 
          cause the drop to try to break loose,
	 but it can't, since its vertices are still constrained. <P>


<hr>
<a href="catenoid.htm">Next Catenoid example.</a><br>
<a href="tutorial.htm#tutorial">Back to top of tutorial.</a>
<br>
<a href="evolver.htm#doc-top">Back to top of Evolver documentation.</a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="index.htm">Index.</a>

</body>
</html>