libGM.pl
changeset 10 3dfa16523886
parent 7 f7b4692ad805
child 15 ebd8a4ddd7f2
equal deleted inserted replaced
9:1a7983cbb82a 10:3dfa16523886
     1 #======================================================================
     1 #======================================================================
     2 #                    L I B G M . P L 
     2 #                    L I B G M . P L 
     3 #                    doc: Sun Feb 20 14:43:47 2011
     3 #                    doc: Sun Feb 20 14:43:47 2011
     4 #                    dlm: Mon Oct  6 09:48:22 2014
     4 #                    dlm: Tue Nov 18 12:42:30 2014
     5 #                    (c) 2011 A.M. Thurnherr
     5 #                    (c) 2011 A.M. Thurnherr
     6 #                    uE-Info: 21 10 NIL 0 0 70 2 2 4 NIL ofnI
     6 #                    uE-Info: 22 53 NIL 0 0 70 2 2 4 NIL ofnI
     7 #======================================================================
     7 #======================================================================
     8 
     8 
     9 # HISTORY:
     9 # HISTORY:
    10 #	Feb 20, 2011: - created
    10 #	Feb 20, 2011: - created
    11 #	Feb 28, 2011: - cosmetics
    11 #	Feb 28, 2011: - cosmetics
    17 #	Mar 29, 2012: - re-wrote using definition of B(omega) from Munk (1981)
    17 #	Mar 29, 2012: - re-wrote using definition of B(omega) from Munk (1981)
    18 #	Aug 23, 2012: - cosmetics?
    18 #	Aug 23, 2012: - cosmetics?
    19 #	Sep  7, 2012: - made N0, E0, b, jstar global
    19 #	Sep  7, 2012: - made N0, E0, b, jstar global
    20 #	Dec 28, 2012: - added allowance for small roundoff error to Sw()
    20 #	Dec 28, 2012: - added allowance for small roundoff error to Sw()
    21 #	Oct  6, 2014: - made omega optional in Sw()
    21 #	Oct  6, 2014: - made omega optional in Sw()
       
    22 #	Nov 18, 2014: - made b & jstar mandatory for Sw()
    22 
    23 
    23 require "$ANTS/libEOS83.pl";
    24 require "$ANTS/libEOS83.pl";
    24 
    25 
    25 my($pi) = 3.14159265358979;
    26 my($pi) = 3.14159265358979;
    26 
    27 
    89 }
    90 }
    90 
    91 
    91 
    92 
    92 sub Sw(@)
    93 sub Sw(@)
    93 {
    94 {
    94 	my($omega,$m,$lat,$N) = &antsFunUsage(-3,'fff','[frequency[1/s]] <vertical wavenumber[rad/m]> <lat[deg]> <N[rad/s]>',@_);
    95 	my($omega,$m,$lat,$b,$jstar,$N) =
    95 	my($GM_b) = 1300; #m								# pycnocline lengthscale
    96 		&antsFunUsage(-5,'fff','[frequency[1/s]] <vertical wavenumber[rad/m]> <lat[deg]> <N[rad/s]> <b[m]> <j*>',@_);
    96 
    97 
    97 	if (defined($N)) {									# Sw(omega,m)
    98 	if (defined($N)) {									# Sw(omega,m)
    98 		local($f) = abs(&f($lat));
    99 		local($f) = abs(&f($lat));
    99 		$omega += $PRACTICALLY_ZERO if ($omega < $f);
   100 		$omega += $PRACTICALLY_ZERO if ($omega < $f);
   100 		$omega -= $PRACTICALLY_ZERO if ($omega > $N);
   101 		$omega -= $PRACTICALLY_ZERO if ($omega > $N);
   101 		return nan if ($omega < $f || $omega > $N);
   102 		return nan if ($omega < $f || $omega > $N);
   102 		my($mstar) = &m($GM_jstar,$N,$omega);
   103 		my($mstar) = &m($jstar,$N,$omega);
   103 		return $GM_E0 * $GM_b * 2 * $f**2/$omega**2/B($omega) * $GM_jstar / ($m+$mstar)**2;
   104 		return $GM_E0 * $b * 2 * $f**2/$omega**2/B($omega) * $jstar / ($m+$mstar)**2;
   104 	} else {											# Sw(m)
   105 	} else {											# Sw(m)
   105 		$N = $lat;										# shift arguments to account for missing omega
   106 		$N = $lat;										# shift arguments to account for missing omega
   106 		$lat = $m;
   107 		$lat = $m;
   107 		local($f) = abs(&f($lat));
   108 		local($f) = abs(&f($lat));
   108 		$m = $omega;
   109 		$m = $omega;
   109 		undef($omega);
   110 		undef($omega);
   110 		my($mstar) = &m($GM_jstar,$N);
   111 		my($mstar) = &m($jstar,$N);
   111 		return $pi * $GM_E0 * $GM_b * $N * $f * $GM_jstar / ($m+$mstar)**2;
   112 		return $pi * $GM_E0 * $b * $N * $f * $jstar / ($m+$mstar)**2;
   112 	}
   113 	}
   113 }
   114 }
   114 
   115 
   115 #----------------------------------------------------------------------
   116 #----------------------------------------------------------------------
   116 # GM76, as per Gregg and Kunze (JGR 1991)
   117 # GM76, as per Gregg and Kunze (JGR 1991)