// moundB.fe // Evolver data for drop of prescribed volume sitting on plane with gravity. // Contact angle with plane implemented with tension on bottom face of // drop, instead of constraint edge integral. This means that the tension // must be set directly on the contact facets rather than just changing // the angle variable. 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 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 no_refine /* for table top */ 14 10 11 fixed no_refine 15 11 12 fixed no_refine 16 12 9 fixed no_refine 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 6 -4 -3 -2 -1 tension WALLT constraint 1 7 13 14 15 16 tension 0 fixed no_refine /* table top for display */ bodies /* one body, defined by its oriented faces */ 1 1 2 3 4 5 volume 1 density 1 read // convenient command to adjust facet tension after changing angle reset := { set facet tension (-cos(angle*PI/180)) where on_constraint 1 } // Script to show problem with using facet tension instead of edge integral. // Note how edges on contact line hit inner vertices, causing the scale factor // to plunge towards zero. run := { angle := 135; reset; r;r; g 20; }