Hello,
Thank you Colin and everyone else for your responses.  That was very helpful.  
We are working on a bunch of problems right now, both QG and SW.   We have many different codes working in FEniCS but I am going to start translating them into Firedrake.  Maybe make a demo if people seem interested?
The first code is to solve the Linear Stommel problem in one-layer QG. I was able to translate most of it ok but I seem to be having problems with the solver for some reason.
If anyone had any advice on what I am doing wrong that would be greatly appreciated. You can find a link on github
 
https://github.com/francispoulin/firedrakeQG/blob/master/linear_stommel_qg.py
After I get this working I will like to solve a variety of other problems.  One is the Munk problem, then look at non-linear gyre solutions, then find these solutions in SW. 
Cheers, Francis
------------------
Francis Poulin                    
Associate Professor
Department of Applied Mathematics
University of Waterloo
email:           fpoulin@uwaterloo.ca
Web:            https://uwaterloo.ca/poulin-research-group/
Telephone:  +1 519 888 4567 x32637
 
 
 
From: firedrake-bounces@imperial.ac.uk [firedrake-bounces@imperial.ac.uk] on behalf of Colin Cotter [colin.cotter@imperial.ac.uk]
Sent: Friday, November 25, 2016 4:15 AM
To: firedrake
Subject: Re: [firedrake] no normal flow Boundary Conditions
Hi Francis,
  That depends on the formulation of the equations. If you are using a streamfunction-vorticity formulation as for QG, then you need to set a zero boundary condition for the streamfunction, as a scalar. If you are using a velocity
formulation based on H(div) spaces  (BDM, RT etc.) then there are only u.n DOFs on the boundary, so setting:
bcs = [DirichletBC(Z.sub(0), Constant((0, 0)), (blah,)), ...
actually only sets the normal component. That's one of the reasons that I like these spaces for GFD.
cheers
--cjc