This model shows how to prevent too large a blob of solder from
penetrating the upper and lower boards.

Notable features:

The vertical load has been increased to 500 to give a squashed BGA.

After running "gogo", note how the solder bulges above and below the pads.

Note that at the end of "gogo", there are warnings that the hessian
is not positive definite. This means that this shape is a saddle point
in energy. To see the shape move off the saddle point, run the script "bulge",
which uses the "saddle" command (a modification of the hessian command) to
pick a direction in which the energy decreases (eigenvector for a negative
eigenvalue), and moves in that direction. The result is a bulge of solder
on one side.

"hessian" was used in this "gogo" instead of "hessian_seek" since
we are trying to converge to a saddle point, not the lowest energy.

To prevent the bulge from getting too big, we can confine it
between the two planes of the pads.
The top and bottom barriers are implemented as one-sided
constraints, constraints 4 and 5. The "confine" script will put
all the vertices, edges, and
faces of the solder surface are put on those constraints (except
those already on the pad constraints). The edges
and faces are also put on those constraints, since that's how
vertices made during refinement inherit the constraints.

Run "gogo", then "confine", and then "bulge", and you will
see the joint does not catastrophically collapse.

Vertices on a one-sided constraint that
are exactly on the constraint are said to "hit" the
constraint. Vertices that hit a one-sided constraint
are sometimes awkward, bouncing on and off. So there
are two further constraints, 6 and 7, that are exact
constraints for the lower and upper barrier. There is
a command "nail" to transfer vertices that hit the
one-sided constraints to the exact constraints, and
a command "unnail" to transfer them back to one-sided.
This can be useful when one-sided constraints can confuse things,
such as in force calculation scripts.