def main():

    xg, zg = np.meshgrid(np.arange(-2000., 2000., 10),
                         np.arange(-3000., 0., 10.))

    N = 2e-3
    k = -2.*np.pi/2000.
    m = -2.*np.pi/2000.

    om = gw.omega(N, k, m)

    U = 0.0 # -om/k
    u_0 = 0.1

    phase_0 = 0. # np.pi

#    for phase_0 in np.linspace(0., 2*np.pi, 10):
#
#        ug = u2D(xg, zg, 0., k, m, om, u_0, U, phase_0)
#
#        plt.figure()
#        plt.pcolormesh(xg, zg, ug, cmap=plt.get_cmap('bwr'))
#        plt.colorbar()
#        plt.title("{:1.2f} rad".format(phase_0))

    for t in np.arange(0., 10000., 500.):

        ug = u2D(xg, zg, t, k, m, om, u_0, U, phase_0)

        plt.figure()
        plt.pcolormesh(xg, zg, ug, cmap=plt.get_cmap('bwr'))
        plt.colorbar()
        plt.title("{:g} s".format(t))
def drdt(r, t, phi_0, k, l, m, N=2e-3, U=0.3, V=0., Wf=0.1, f=0., phase_0=0.):
    x = r[0]
    y = r[1]
    z = r[2]

    om = gw.omega(N, k, m, l, f)
    dxdt = U + gw.u(x, y, z, t, phi_0, k, l, m, om, f=f, U=U, phase_0=phase_0)
    dydt = V + gw.v(x, y, z, t, phi_0, k, l, m, om, f=f, U=U, phase_0=phase_0)
    dzdt = Wf + gw.w(x, y, z, t, phi_0, k, l, m, om, N, U=U, phase_0=phase_0)

    return np.array([dxdt, dydt, dzdt])
def b_model(params, data):

    phi_0, X, Y, Z, phase_0 = params

    time, x, y, z, U, V, N, f = data

    k = 2*np.pi/X
    l = 2*np.pi/Y
    m = 2*np.pi/Z

    om = gw.omega(N, k, m, l, f)

    b = gw.b(x, y, z, time, phi_0, k, l, m, om, N, U=U, V=V, phase_0=phase_0)

    return b
def p_model(params, data):

    phi_0, X, Y, Z, phase_0 = params

    t, x, y, z, U, V, N, f = data

    k = 2*np.pi/X
    l = 2*np.pi/Y
    m = 2*np.pi/Z

    om = gw.omega(N, k, m, l, f)

    p = gw.phi(x, y, z, t, phi_0, k, l, m, om, U=U, V=V, phase_0=phase_0)

    return p
def v_model(params, data):

    phi_0, X, Y, Z, phase_0 = params

    time, x, y, z, U, V, N, f, w_data, u_data, v_data, b_data = data

    k = 2*np.pi/X
    l = 2*np.pi/Y
    m = 2*np.pi/Z

    om = gw.omega(N, k, m, l, f)

    v = gw.v(x, y, z, time, phi_0, k, l, m, om, f=f, U=U, V=V, phase_0=phase_0)

    return v
Esempio n. 6
0
def w_model(params, data):

    X, Y, Z, phase_0 = params

    time, dist, depth, U, V, W, B, N, f = data

    k = 2*np.pi/X
    l = 2*np.pi/Y
    m = 2*np.pi/Z

    om = gw.omega(N, k, m, l, f)
    phi_0 = np.max(W)*(N**2 - f**2)*m/(om*(k**2 + l**2 + m**2))

    w = gw.w(dist, 0., depth, time, phi_0, k, l, m, om, N, phase_0=phase_0)

    return w - W
def full_model(params, data):

    phi_0, X, Y, Z, phase_0 = params

    time, x, y, z, U, V, N, f, w_data, u_data, v_data, b_data = data

    k = 2*np.pi/X
    l = 2*np.pi/Y
    m = 2*np.pi/Z

    om = gw.omega(N, k, m, l, f)

    u = gw.u(x, y, z, time, phi_0, k, l, m, om, f=f, U=U, V=V, phase_0=phase_0)
    v = gw.v(x, y, z, time, phi_0, k, l, m, om, f=f, U=U, V=V, phase_0=phase_0)
    w = gw.w(x, y, z, time, phi_0, k, l, m, om, N, U=U, V=V, phase_0=phase_0)
    b = gw.b(x, y, z, time, phi_0, k, l, m, om, N, U=U, V=V, phase_0=phase_0)

    return np.hstack((w - w_data, u - u_data, v - v_data, b - b_data))
def w_model(params, pfl, zlim, deg):

    phi_0, X, Z, phase_0 = params
    zmin, zmax = zlim
    nope = np.isnan(pfl.z) | (pfl.z < zmin) | (pfl.z > zmax)

    t = 60*60*24*(pfl.UTC - np.nanmin(pfl.UTC))
    x = 1000.*(pfl.dist_ctd - np.nanmin(pfl.dist_ctd))

    k = 2*np.pi/X
    l = 0.
    m = 2*np.pi/Z
    f = gsw.f(pfl.lat_start)
    N = np.mean(np.sqrt(pfl.N2_ref[~nope]))
    om = gw.omega(N, k, m, l, f)

    w = gw.w(x, 0., pfl.z, t, phi_0, k, l, m, om, N, phase_0=phase_0)

    return w[~nope] - pfl.Ww[~nope]
def u_model(params, pfl, zlim, deg):

    phi_0, X, Z, phase_0 = params
    zmin, zmax = zlim
    nope = np.isnan(pfl.zef) | (pfl.zef < zmin) | (pfl.zef > zmax)

    t = 60*60*24*(pfl.UTCef - np.nanmin(pfl.UTCef))
    x = 1000.*(pfl.dist_ef - np.nanmin(pfl.dist_ef))
    k = 2*np.pi/X
    l = 0.
    m = 2*np.pi/Z
    f = gsw.f(pfl.lat_start)
    N = np.mean(np.sqrt(pfl.N2_ref[~nope]))

    om = gw.omega(N, k, m, l, f)

    u = gw.u(x, 0., pfl.zef, t, phi_0, k, l, m, om, phase_0=phase_0)

    return u[~nope] - utils.nan_detrend(pfl.zef[~nope], pfl.U[~nope], deg)
def model_basic(phi_0, X, Y, Z, phase_0=0., oparams=default_params):

    Ufunc = oparams['Ufunc']
    f = oparams['f']
    N = oparams['N']

    # Float change in buoyancy with velocity.
    Wf_pvals = oparams['Wf_pvals']

    # Wave parameters
    k = 2 * np.pi / X
    l = 2 * np.pi / Y
    m = 2 * np.pi / Z
    om = gw.omega(N, k, m, l, f)

    args = (phi_0, Ufunc, Wf_pvals, k, l, m, om, N, f, phase_0)

    # Integration parameters.
    dt = oparams['dt']
    t_0 = 0.
    t_1 = oparams['t_1']
    t = np.arange(t_0, t_1, dt)

    # Initial conditions.
    x_0 = oparams['x_0']
    y_0 = oparams['y_0']
    z_0 = oparams['z_0']
    r_0 = np.array([x_0, y_0, z_0])

    # This integrator calls FORTRAN odepack to solve the problem.
    r = odeint(drdt, r_0, t, args)

    uargs = (phi_0, Ufunc(r[:, 2]), k, l, m, om, N, f, phase_0)

    u = gw.wave_vel(r, t, *uargs)
    u[:, 0] += Ufunc(r[:, 2])
    b = gw.buoy(r, t, *uargs)

    return t, r, u, b
def model_basic(phi_0, X, Y, Z, phase_0=0., oparams=default_params):

    Ufunc = oparams['Ufunc']
    f = oparams['f']
    N = oparams['N']

    # Float change in buoyancy with velocity.
    Wf_pvals = oparams['Wf_pvals']

    # Wave parameters
    k = 2*np.pi/X
    l = 2*np.pi/Y
    m = 2*np.pi/Z
    om = gw.omega(N, k, m, l, f)

    args = (phi_0, Ufunc, Wf_pvals, k, l, m, om, N, f, phase_0)

    # Integration parameters.
    dt = oparams['dt']
    t_0 = 0.
    t_1 = oparams['t_1']
    t = np.arange(t_0, t_1, dt)

    # Initial conditions.
    x_0 = oparams['x_0']
    y_0 = oparams['y_0']
    z_0 = oparams['z_0']
    r_0 = np.array([x_0, y_0, z_0])

    # This integrator calls FORTRAN odepack to solve the problem.
    r = odeint(drdt, r_0, t, args)

    uargs = (phi_0, Ufunc(r[:, 2]), k, l, m, om, N, f, phase_0)

    u = gw.wave_vel(r, t, *uargs)
    u[:, 0] += Ufunc(r[:, 2])
    b = gw.buoy(r, t, *uargs)

    return t, r, u, b
#    ax.yaxis.set_ticks_position('both')
#    ax.yaxis.set_label_position('right')

colors = ['blue', 'green', 'grey']

N = 2.2e-3
f = gsw.f(-57.5)

for i, M in enumerate(Ms):

    phi_0 = M.trace('phi_0')[:]
    k = np.pi*2./M.trace('X')[:]
    l = np.pi*2./M.trace('Y')[:]
    m = np.pi*2./M.trace('Z')[:]
    print("complete wavelength = {}".format(np.mean(np.pi*2/np.sqrt(k**2 + l**2 + m**2))))
    om = gw.omega(N, k, m, l, f)
    print("om/N = {}".format(np.mean(om/N)))
    w_0 = gw.W_0(phi_0, m, om, N)
    Edens = gw.Edens(w_0, k, m, l)
    Efluxz = gw.Efluxz(w_0, k, m, N, l, f)
    Mfluxz = gw.Mfluxz(phi_0, k, l, m, om, N)

    colprops={'color': colors[i]}
    data = [k, l, m]
    axs[0].boxplot(data, boxprops=colprops,
                   whiskerprops=colprops, capprops=colprops,
                   medianprops=colprops, showfliers=False,
                   labels=['$k$', '$l$', '$m$'])
    axs[1].boxplot(om/N, boxprops=colprops,
                   whiskerprops=colprops, capprops=colprops,
                   medianprops=colprops, showfliers=False,
def model_verbose(phi_0, X, Y, Z, phase_0=0., oparams=default_params):
    """Return loads and loads of info."""

    t, r, u, b = model_basic(phi_0, X, Y, Z, phase_0, oparams)

    Ufunc = oparams['Ufunc']
    f = oparams['f']
    N = oparams['N']

    # Float change in buoyancy with velocity.
    Wf_pvals = oparams['Wf_pvals']

    # Wave parameters
    w_0 = oparams['w_0']
    k = 2 * np.pi / X
    l = 2 * np.pi / Y
    m = 2 * np.pi / Z
    om = gw.omega(N, k, m, l, f)

    u_0 = gw.U_0(phi_0, k, l, om, f)
    v_0 = gw.V_0(phi_0, k, l, om, f)
    w_0 = gw.W_0(phi_0, m, om, N)
    b_0 = gw.B_0(phi_0, m, om, N)

    if oparams['print']:
        print("N = {:1.2E} rad s-1.\n"
              "om = {:1.2E} rad s-1.\n"
              "u_0 = {:1.2E} m s-1.\n"
              "v_0 = {:1.2E} m s-1.\n"
              "w_0 = {:1.2E} m s-1.\n"
              "phi_0 = {:1.2E} m2 s-2.\n"
              "b_0 = {:1.2E} m s-2.\n"
              "X = {:1.0f} m.\n"
              "k = {:1.2E} rad m-1.\n"
              "Y = {:1.0f} m.\n"
              "l = {:1.2E} rad m-1.\n"
              "Z = {:1.0f} m.\n"
              "m = {:1.2E} rad m-1.\n"
              "".format(N, om, u_0, v_0, w_0, phi_0, b_0, X, k, Y, l, Z, m))

    output = utils.Bunch(Ufunc=Ufunc,
                         U=Ufunc(r[:, 2]),
                         f=f,
                         N=N,
                         Wf_pvals=Wf_pvals,
                         w_0=w_0,
                         k=k,
                         l=l,
                         m=m,
                         om=om,
                         phi_0=phi_0,
                         u_0=u_0,
                         v_0=v_0,
                         b_0=b_0,
                         t=t,
                         z_0=oparams['z_0'],
                         r=r,
                         u=u,
                         b=b,
                         oparams=oparams)

    return output
Esempio n. 14
0
p = -z.copy()
ppos = 10. * np.ones_like(z)
#ppos[ppos.size/2:] = 50.

# Wave params

X = -2000.
Y = -2000.
Z = -2000.

N = 2e-3
phi_0 = 0.03
k = np.pi * 2. / X
l = np.pi * 2. / Y
m = np.pi * 2. / Z
om = gw.omega(N, k, m, l)

wave = (k, l, m, om, phi_0, N)

w_0 = 0.
z_0 = z[0]
X_0 = np.array([z_0, w_0])

t_max = 5000.
dt = 1.
t = np.arange(0., t_max + dt, dt)

M = 27.179
p_0 = 2000.
k_0 = 16.
V_0 = 0.0262
def model_verbose(phi_0, X, Y, Z, phase_0=0., oparams=default_params):
    """Return loads and loads of info."""

    t, r, u, b = model_basic(phi_0, X, Y, Z, phase_0, oparams)

    Ufunc = oparams['Ufunc']
    f = oparams['f']
    N = oparams['N']

    # Float change in buoyancy with velocity.
    Wf_pvals = oparams['Wf_pvals']

    # Wave parameters
    w_0 = oparams['w_0']
    k = 2*np.pi/X
    l = 2*np.pi/Y
    m = 2*np.pi/Z
    om = gw.omega(N, k, m, l, f)

    u_0 = gw.U_0(phi_0, k, l, om, f)
    v_0 = gw.V_0(phi_0, k, l, om, f)
    w_0 = gw.W_0(phi_0, m, om, N)
    b_0 = gw.B_0(phi_0, m, om, N)

    if oparams['print']:
        print("N = {:1.2E} rad s-1.\n"
              "om = {:1.2E} rad s-1.\n"
              "u_0 = {:1.2E} m s-1.\n"
              "v_0 = {:1.2E} m s-1.\n"
              "w_0 = {:1.2E} m s-1.\n"
              "phi_0 = {:1.2E} m2 s-2.\n"
              "b_0 = {:1.2E} m s-2.\n"
              "X = {:1.0f} m.\n"
              "k = {:1.2E} rad m-1.\n"
              "Y = {:1.0f} m.\n"
              "l = {:1.2E} rad m-1.\n"
              "Z = {:1.0f} m.\n"
              "m = {:1.2E} rad m-1.\n"
              "".format(N, om, u_0, v_0, w_0, phi_0, b_0, X, k, Y, l, Z, m))

    output = utils.Bunch(Ufunc=Ufunc,
                         U=Ufunc(r[:, 2]),
                         f=f,
                         N=N,
                         Wf_pvals=Wf_pvals,
                         w_0=w_0,
                         k=k,
                         l=l,
                         m=m,
                         om=om,
                         phi_0=phi_0,
                         u_0=u_0,
                         v_0=v_0,
                         b_0=b_0,
                         t=t,
                         z_0=oparams['z_0'],
                         r=r,
                         u=u,
                         b=b,
                         oparams=oparams)

    return output