franchester
- 1
- 0
Hermetic Double glazing (DVH) or insulated, are panels composed of two glass sheets, hermetically sealed by thermoplastic tape, existing between both layers a chamber of dehydrated air that provides greater acoustic and thermal insulation compared to a monolithic glass.
sophiecentaur said:Try pushing against the glass (from inside or outside) and note any change in that pattern.
import matplotlib.pyplot as plt
import numpy as np
# physical parameters
a = 1 # length of window
b = 1.2 # height of window
L = 8 # distance from the window to the wall
p0 = 1e3 # pressure difference from atmospheric, 0.01 bar, approx 1% of an atmosphere
E = 70e9 # youngs modulus of soda lime silicate glass
v = 0.23 # poisson ratio of soda lime silicate glass
t = 0.004 # thickness of a single pane, 4mm
D = (E*t**3)/(12*(1-v**2)) # plate bending stiffness per unit length
# modelling parameters
h = 20 # number of harmonics to sum up to
plot_type = "reflected_image"
if plot_type == "pane_displacement":
N = 5 # number of points to sample in each direction x and y
elif plot_type == "reflected_image":
N = 100 # number of points to sample in each direction x and y
x,y = np.meshgrid(np.linspace(0,a,N),np.linspace(0,b,N)) # make grid of points across x y domain
@np.vectorize
def w_harmonic(x,y,a,b,m,n): # function returns one harmonic term (m,n) of the Levy solution
return (np.sin(m*np.pi*x/a)*np.sin(n*np.pi*y/b))/(m*n*(m**2/a**2+n**2/b**2)**2)
# functions returns one harmonic term (m,n) of the spatial derivates of the Levy solution
def dw_dx_harmonic(x,y,a,b,m,n,inner):
return (inner*np.pi*np.cos(m*np.pi*x/a)*np.sin(n*np.pi*y/b))/(a*n*(m**2/a**2+n**2/b**2)**2)
def dw_dy_harmonic(x,y,a,b,m,n,inner):
return (inner*np.pi*np.sin(m*np.pi*x/a)*np.cos(n*np.pi*y/b))/(b*m*(m**2/a**2+n**2/b**2)**2)
# initialise surface displacement and spatial derivatives arrays
w_levy = np.zeros([N,N])
dw_dx_inner = np.zeros([N,N]) # inner pane
dw_dy_inner = np.zeros([N,N]) # inner pane
# loop over range h harmonics for m and n
for i in range(h):
n = 2*i+1
for j in range(h):
m = 2*j+1
# add harmonic terms to displacement and spatial derivatives
w_levy += 16*p0/(np.pi**6*D)*w_harmonic(x,y,a,b,m,n)
dw_dx_inner += 16*p0/(np.pi**6*D)*dw_dx_harmonic(x,y,a,b,m,n, 1)
dw_dy_inner += 16*p0/(np.pi**6*D)*dw_dy_harmonic(x,y,a,b,m,n, 1)
## for the inner pane
# calculate the components of the surface normal
n_w_inner = (np.ones([N,N])+dw_dx_inner**2 + dw_dy_inner**2)**(-0.5)
n_u_inner = -n_w_inner*dw_dx_inner
n_v_inner = -n_w_inner*dw_dy_inner
# calculate the orientation angles theta and phi
theta_inner = np.atan2(n_v_inner,n_u_inner)
phi_inner = np.acos(n_w_inner)
# calculate where the array of points get projected to on the wall
x_inner = x + L*np.sin(phi_inner)*n_w_inner*np.cos(theta_inner)
y_inner = y + L*np.sin(phi_inner)*n_w_inner*np.sin(theta_inner)
## for the outer pane, lots can be reused due to symmetry but theta will be oriented the other way around
x_outer = x + L*np.sin(phi_inner)*n_w_inner*np.cos(theta_inner-np.pi)
y_outer = y + L*np.sin(phi_inner)*n_w_inner*np.sin(theta_inner-np.pi)
# plot the results
if plot_type == "pane_displacement":
fig = plt.figure(figsize =(14, 9))
ax = plt.axes(projection ='3d')
ax.quiver(x, y, w_levy, np.sin(2*phi_inner)*np.cos(theta_inner), np.sin(2*phi_inner)*np.sin(theta_inner), np.cos(2*phi_inner),color='green',length = 1,label = "reflected rays")
ax.quiver(x, y, w_levy, n_u_inner, n_v_inner, n_w_inner,color='red',length = 1,label="surface normals")
ax.plot_surface(x, y, w_levy)
plt.legend()
ax.axis('equal')
elif plot_type == "reflected_image":
plt.scatter(x,y,s=0.1,c="r", label= "flat") # plot the window pane red
plt.scatter(x_inner,y_inner,s=0.1,c="g", label= "inner") # plot the reflection of the inner pane green
plt.scatter(x_outer,y_outer,s=0.1,c="b", label= "outer") # plot the reflection of the outer pane blue
plt.legend()
plt.axis('equal')
else:
raise Exception("set plot type to pane_displacement or reflected_image")
plt.show()