From d905649658bb780ac1d23a7f7ad9183c8fe9467c Mon Sep 17 00:00:00 2001
From: Nico Castro-Folker <ncastrofolker@uwaterloo.ca>
Date: Thu, 7 Oct 2021 20:42:13 +0000
Subject: [PATCH] Update Science.hpp to include declaration of  compute_lambda2
 function

---
 src/Science.hpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 59 insertions(+)

diff --git a/src/Science.hpp b/src/Science.hpp
index 5350dd6..4a771fd 100644
--- a/src/Science.hpp
+++ b/src/Science.hpp
@@ -35,6 +35,14 @@ void compute_vorticity(TArrayn::DTArray & vortx, TArrayn::DTArray & vorty, TArra
         TArrayn::DTArray & u, TArrayn::DTArray & v, TArrayn::DTArray & w,
         TArrayn::Grad * gradient_op, const string * grid_type);
 
+// Baroclinic Vorticity
+void compute_baroclinic_vort_x(TArrayn::DTArray & barovortx, TArrayn::DTArray & T,
+        TArrayn::Grad * gradient_op, const string * grid_type);
+void compute_baroclinic_vort_y(TArrayn::DTArray & barovorty, TArrayn::DTArray & T,
+        TArrayn::Grad * gradient_op, const string * grid_type);
+void compute_baroclinic_vort(TArrayn::DTArray & barovort, TArrayn::DTArray & temp, 
+        TArrayn::DTArray & T, TArrayn::Grad * gradient_op, const string * grid_type, bool v_exist);
+
 // Enstrophy density
 void enstrophy_density(TArrayn::DTArray & enst, TArrayn::DTArray & u, TArrayn::DTArray & v,
         TArrayn::DTArray & w, TArrayn::Grad * gradient_op, const string * grid_type,
@@ -122,6 +130,14 @@ void R_invt(TArrayn::DTArray & R, TArrayn::DTArray & u,
          TArrayn::DTArray & temp2, TArrayn::Grad * gradient_op,
          const string * grid_type, bool v_exist);
 
+// lambda2, second eigenvalue of S^2+Omega^2
+void compute_lambda2(TArrayn::DTArray & lambda2, TArrayn::DTArray & u,
+    TArrayn::DTArray & v, TArrayn::DTArray & w, TArrayn::DTArray & temp1,
+    TArrayn::DTArray & temp2, TArrayn::Grad * gradient_op,
+    const string * grid_type, TArrayn::DTArray & A11, TArrayn::DTArray & A12,
+    TArrayn::DTArray & A13, TArrayn::DTArray & A22, TArrayn::DTArray & A23,
+    TArrayn::DTArray & A33); 
+
 // Equation of state for seawater, polynomial fit from
 // Brydon, Sun, Bleck (1999) (JGR)
 
@@ -146,6 +162,49 @@ inline double eqn_of_state(double T, double S){
 // Define a Blitz-friendly operator
 BZ_DECLARE_FUNCTION2(eqn_of_state)
 
+// Derivative of the equation of state WRT T
+
+inline double eqn_of_state_dT(double T){
+   // Returbs the derivative of the eqn_of_state function above WRT T
+   // temperature T (degrees celsius), S assumed to be zero
+
+   // Constants are from table 4 of the above paper, at pressure 0
+   // (This is appropriate since this is currently an incompressible
+   // model)
+   
+   // Kept the same names for these constants as in eqn_of_state
+   const double c2 =  5.10768e-2; // T term, constant after derivative
+   const double c4 = -7.40849e-3; // T^2 term, 2T after derivative
+   const double c5 = -3.01036e-3; // ST term, S after derivative
+   const double c6 =  3.32267e-5; // T^3 term, 3t^2 after derivative
+   const double c7 =  3.21931e-5; // ST^2 term, 2ST after derivative
+
+   return c2 + 2*c4*T + 3*c6*T*T;
+}
+
+// Define a Blitz-friendly operator
+ BZ_DECLARE_FUNCTION(eqn_of_state_dT)
+
+// Derivative of the equation of state WRT S
+
+inline double eqn_of_state_dS(double T, double S){
+   // Returns the density anomaly (kg/m^3) for water at the given
+   // temperature T (degrees celsius) and salinity S (PSU?)
+
+   // Constants are from table 4 of the above paper, at pressure 0
+   // (This is appropriate since this is currently an incompressible
+   // model)
+   const double c3 =  8.05999e-1; // S term, constant after derivative
+   const double c5 = -3.01036e-3; // ST term, T after derivative
+   const double c7 =  3.21931e-5; // ST^2 term, T^2 after derivative
+
+   return  c3 + c5*T + c7*T*T;
+}
+
+// Define a Blitz-friendly operator
+BZ_DECLARE_FUNCTION2(eqn_of_state_dS)
+
+
 inline double eqn_of_state_t(double T){
    // Specialize for freshwater with S=0
    return eqn_of_state(T,0.0);
-- 
GitLab