franchester
- 1
- 0
The glass is not perfectly flat. It deforms within the frame, due to thermal expansion, windpressure, etc.franchester said:Can anyone explain why we are having this strange reflection on our outside wall, from the sun hitting our bedroom window?
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()