Source code for MITgcmutils.conversion

#
# created EGavilan Pascual-Ahuir on 2023-04-07

import numpy as np

[docs]def pfromz(rC, rF0=0.0, lat=None, rhoConst=1.0275e+3, eosRefP0=1.01325e+5, top_Pres=0.0, surf_pRef=1.01325e+5): """ Computes pressure (dbar) of sea water from depth. Parameters ---------- rC : float or array_like Depth at c point [m]. rF0 : float or array_like Depth at rF[k=0], default 0. lat : array_like or None Latitude to compute unesco gravity. If None, use gravity = 9.81. Default None. rhoConst : float Density of seawater, default 1027.5. eosRefP0 : float EOS reference pressure (Pa), default 1.01325e+5. top_Pres : float Reference pressure at the top, default 0. surf_pRef : float Surface pressure (Pa), default 1.01325e+5. Returns ------- p : array_like Pressure [dbar]. If rC and lat are both 1-dimensional, a 2-dimensional array corresponding to the outer product will be returned. Example ------- >>> pfromz(-1000) 1007.9775 >>> pfromz([-100,-1000]) 100.7978, 1007.9775 >>> pfromz([-100,-1000],lat=90) 101.0256, 1010.2562 >>> pfromz(-1000,lat=[70,90]) 1009.6304, 1010.2562 """ z = np.asarray(rC, dtype=np.float64) assert np.all(z<=0), 'input_error: values cannot be positive' if lat is None: gravity = 9.81 else: lat = np.asarray(lat, dtype=np.float64) if lat.ndim == 1 and z.ndim == 1: lat,z = np.meshgrid(lat,z) if lat.shape != z.shape: print('trying to broadcast shapes') np.broadcast(lat, z) # Redefine gravity (UNESCO Tech. Pap. in Mar. Sci., 1983, eq 27) sinsqlat = np.sin(np.deg2rad(lat))**2 gravity = 9.780318*(1.0 + (5.2788e-3 + 2.36e-5*sinsqlat)*sinsqlat) pref = surf_pRef - eosRefP0 dz = z - rF0 p = (top_Pres - rhoConst*dz*gravity + pref)*1e-4 return p