// moundstrip.fe
// Evolver data for drop of prescribed volume sitting on plane with gravity.
// Contact angle with plane can be varied.
// Drop is on wettable strip, which it overflows onto a less wettable
//   substrate.  Illustrates how to deal with varying contact tension.

parameter wet_angle = 60    // interior angle between plane and surface, degrees
parameter dry_angle = 120   // interior angle outside strip

parameter xleft =  .2   // left side of wettable strip
parameter xright = .8  // right side of wettable strip

gravity_constant 0  // start with gravity off

#define WETT  (-cos(wet_angle*pi/180))  // virtual tension of facet on plane
#define DRYT  (-cos(dry_angle*pi/180))  // virtual tension of facet on plane
 
constraint 1   /* the table top */
formula: z = 0
energy:  // For contact angle.  Note that conditional expression is just
         // the two tensions because dx strips each have constant tension!!!!
e1: (x > xleft and x < xright) ? -(WETT*y) : -(DRYT*y)
e2: 0
e3: 0 

// one-sided constraints keeping stuff inside wettable strip
constraint leftcon nonnegative
formula: x - xleft

constraint rightcon nonpositive
formula: x - xright

// one-sided constraints keeping stuff outside wettable strip
constraint outleft nonpositive
formula: x - xleft

constraint outright nonnegative
formula: x - xright

// constraints for keeping certain vertices exactly on edge of wettable strip
constraint leftedge
formula: x = xleft

constraint rightedge
formula: x = xright 

vertices
1   0.0  0.0 0.0  constraint 1, outleft /* 4 vertices on plane */
2   1.0  0.0 0.0  constraint 1, outright
3   1.0  1.0 0.0  constraint 1, outright
4   0.0  1.0 0.0  constraint 1, outleft
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
// wettable strip outline, raised a bit for visibility
13  xleft -1.0 0.01 fixed
14  xleft 2.0 0.01 fixed
15  xright -1.0 0.01 fixed
16  xright 2.0 0.01 fixed
// extra vertices at sides of wettable strip, constrained to stay there
17  xleft 0.0 0.0 constraint 1, leftedge
18  xleft 1.0 0.0 constraint 1, leftedge
19  xright 1.0 0.0 constraint 1, rightedge
20  xright 0.0 0.0 constraint 1, rightedge

edges  /* given by endpoints and attribute */
1   1 17   constraint 1,outleft  /* 4 edges on plane */
2   2 3    constraint 1,outright
3   3 19   constraint 1,outright
4   4 1    constraint 1,outleft
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 no_refine  fixed  /* for table top */
14 10 11 no_refine  fixed
15 11 12 no_refine  fixed
16 12  9 no_refine  fixed
17 13 14 no_refine fixed bare
18 15 16 no_refine fixed bare
// extra edges due to the strip
19  17 20 constraints 1,leftcon,rightcon
20  20 2  constraints 1,outright
21  19 18 constraints 1,leftcon,rightcon
22  18 4  constraints 1,outleft

faces  /* given by oriented edge loop */
1   1 19 20 10 -5  -9
2   2 11 -6 -10
3   3 21 22 12 -7 -11
4   4 9 -8 -12
5   5  6  7   8
7  13 14 15  16  no_refine 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