+1 (315) 557-6473 

Python Program to Implement Steady State Equations Assignment Solution.


Instructions

Objective
Write a python assignment program to implement steady state equations.

Requirements and Specifications

program to implement steady state equations in python

Source Code

import numpy as np

import matplotlib.pyplot as plt

M = 5.0

gam = 5./3.

# ==========================================================================

# ==========================================================================

def ddx(x, F):

Ns = F.size - 1

dFdx = np.zeros(Ns + 1, dtype='double')

dFdx[0] = (F[1] - F[0]) / (x[1] - x[0])

for i in range(1, Ns):

dFdx[i] = (F[i + 1] - F[i - 1]) / (x[i + 1] - x[i - 1])

dFdx[Ns] = (F[Ns] - F[Ns - 1]) / (x[Ns] - x[Ns - 1])

return dFdx

# ==========================================================================

# ==========================================================================

if __name__ == '__main__':

electron = np.loadtxt('./electron_quantites.txt')

ion = np.loadtxt('./ion_quantites.txt')

x = electron[:,0] # positions

rho = ion[:,1] # this is rho/rho0.

ke = electron[:,2]

Te = electron[:,1]

Ti = ion[:,2]

ki = ion[:,3]

eta = ion[:,4]

u = ion[:,5]

p = ion[:,6]

E = ion[:,7]

# First, calculate du/dx

dudx = ddx(x, u)

# Calculate dTi/dx

dTidx = ddx(x, Ti)

# Calculate dTe/dx

dTedx = ddx(x, Te)

# From equation (1b), calculate p0u0^2 + p0

eq1b = p + gam*M**2.*rho*u**2. - eta*dudx

eq1b_right = gam*M**2 + p[0]

# Equation (1c)

eq1c = E*u + p*u - ki*dTidx - ke*dTedx - eta*u*dudx

eq1c_right = E[0]/rho[0] + p[0]

# Eq. 1a

eq1a = rho*u

#==========================================================================

#==========================================================================

# create plot

plt.figure(figsize=(7,7))

# Plot dTidx

plt.plot(x, rho, label = r'$\rho$')

plt.plot(x, ke, label = '$k_{e}$')

plt.plot(x, Te, label = '$T_{e}$')

plt.plot(x, Ti, label = '$T_{i}$')

plt.plot(x, ki, label = r'$k_{i}$')

plt.plot(x, eta, label = r'$\eta$')

plt.grid(True)

plt.xlabel('Position')

plt.legend()

plt.show()

plt.figure(figsize=(7,7))

plt.plot(x, u, label = 'u')

plt.plot(x, p, label = 'p')

plt.plot(x, E, label = 'E')

plt.plot(x, dudx, label = r'$\frac{du}{dx}$')

plt.plot(x, dTidx, label = r'$\frac{dT_{i}}{dx}$')

plt.plot(x, dTedx, label = r'$\frac{dT_{e}}{dx}$')

plt.xlabel('Position')

plt.grid(True)

plt.legend()

plt.show()

"""

Now, plot each terms of each equation

"""

# Terms for Equation (1a)

plt.figure()

plt.plot(x, rho*u, label = r'$\rho u$')

plt.xlabel('Position')

plt.ylabel(r'$\rho u$')

plt.set_title('Equation (1a)')

plt.legend()

plt.grid(True)

plt.show()

# Terms for question (1b). All terms in the same Figure

# p + gam*M**2.*rho*u**2. - eta*dudx

fig, axes = plt.subplots(nrows = 1, ncols = 2, figsize=(7,7))

axes[0].plot(x, p, label = r'$p$')

axes[0].plot(x, gam*(M**2)*rho*(u**2), label = r'$\gamma M^{2}\rho u^{2}$')

axes[0].plot(x, -eta*dudx, label = r'$-\eta \frac{du}{dx}$')

axes[0].plot(x, eq1b, 'r--', label = r'$p + \gamma M^{2}\rho u^{2} - \eta \frac{du}{dx}$')

axes[0].grid(True)

axes[0].set_title('Left-side terms of Equation (1b)')

axes[0].legend()

axes[1].plot(x, gam*(M**2)*np.ones(len(x)), label = r'$\gamma M^{2}$')

axes[1].plot(x, p[0]*np.ones(len(x)), label = r'$p_{0}$')

axes[1].plot(x, eq1b_right*np.ones(len(x)), 'r--', label = r'$\gamma M^{2} + p_{0}$')

axes[1].grid(True)

axes[1].set_title('Right-side terms of Equation (1b)')

axes[1].legend()

plt.show()

# Terms for Equation (1c).

# E*u + p*u - ki*dTidx - ke*dTedx - eta*u*dudx = E[0]/rho[0] + p[0]

fig, axes = plt.subplots(nrows = 1, ncols = 2, figsize=(7,7))

axes[0].plot(x, E*u, label = r'$Eu$')

axes[0].plot(x, p*u, label = r'$pu$')

axes[0].plot(x, -ki*dTidx, label = r'$-k_{i} \frac{dT_{i}}{dx}$')

axes[0].plot(x, -ke*dTedx, label = r'$-k_{e} \frac{dT_{e}}{dx}$')

axes[0].plot(x, -eta*u*dudx, label = r'$-\eta u \frac{du}{dx}$')

axes[0].plot(x, eq1c, 'r--', label = r'$Eu + pu - k_{i} \frac{dT_{i}}{dx} - k_{e} \frac{dT_{e}}{dx} - \eta u \frac{du}{dx}$')

axes[0].grid(True)

axes[0].set_title('Left-side terms of Equation (1c)')

axes[0].legend()

axes[1].plot(x, E[0]/rho[0] *np.ones(len(x)), label = r'$\frac{E_{0}}{\rho_{0}}$')

axes[1].plot(x, p[0]*np.ones(len(x)), label = r'$\rho_{0}$')

axes[1].plot(x, eq1c_right*np.ones(len(x)), 'r--', label = r'$\frac{E_{0}}{\rho_{0}} + \rho_{0}$')

axes[1].grid(True)

axes[1].set_title('Right-side terms of Equation (1c)')

axes[1].legend()

plt.show()

fig = plt.figure(figsize=(7, 5), dpi=120)

plot = plt.plot(x, (eq1b-eq1b_right)/eq1b_right*100., 'royalblue', linestyle='--', label='Eq. (1b) percent error')

plot = plt.plot(x, (eq1c-eq1c_right)/eq1c_right*100., 'tomato', linestyle='-', label='Eq. (1c) percent error')

plot = plt.plot(x, (eq1a - 1.0)/1.0 *100, 'purple', linestyle='-', label = 'Eq. (1a) percent error')

plt.ylabel(r'Percent error [%]')

plt.xlabel(r'Position $\hat{x}$')

#plt.xlim([25.0, 32.5])

plt.xlim([min(x), max(x)])

legend = plt.legend(loc='best', shadow=False, fontsize='small')

#plt.savefig('equation_error.eps', format='eps', dpi=1000)

plt.grid(True)

plt.show()

plt.close()

#==========================================================================

#==========================================================================