def test_substep(self): T0 = lambda x: np.sin(2*np.pi*(x-self.r-self.t)/self.t) T_outer = 250 Tout = receiver.ConvectiveBC(self.r, self.h, self.nz, self.times, np.ones((self.ntime+1,self.nz))*T_outer) self.tube.set_bc(Tout, "outer") Tleft = receiver.FixedTempBC(self.r-self.t, self.h, self.nt, self.nz, self.times, np.zeros(self.ttimes.shape)) self.tube.set_bc(Tleft, "inner") self.solver.solve(self.tube, self.material, self.fluid, T0 = T0, substep = 10) T = self.tube.results['temperature'][-1] ri = self.r - self.t C1 = self.hcoef * T_outer / (self.k/self.r + self.hcoef * np.log(self.r) - self.hcoef * np.log(ri)) C2 = -C1 * np.log(ri) Texact = C1 * np.log(self.rs) + C2 self.assertTrue(np.allclose(T,Texact, rtol = 1.0e-2))
def test_convection_left(self): T0 = lambda x: np.sin(2*np.pi*(x-self.r-self.t)/self.t) T_inner = 25 Tin = receiver.ConvectiveBC(self.r-self.t, self.h, self.nz, self.times, np.ones((self.ntime+1,self.nz))*T_inner) self.tube.set_bc(Tin, "inner") Tright = receiver.FixedTempBC(self.r, self.h, self.nt, self.nz, self.times, np.zeros(self.ttimes.shape)) self.tube.set_bc(Tright, "outer") self.solver.solve(self.tube, self.material, self.fluid, T0 = T0) T = self.tube.results['temperature'][-1] ri = self.r - self.t C1 = T_inner * self.hcoef / (self.hcoef*np.log(ri) - self.hcoef*np.log(self.r) - self.k/ri) C2 = -C1 * np.log(self.r) Texact = C1 * np.log(self.rs) + C2 self.assertTrue(np.allclose(T,Texact, rtol = 1.0e-2))
def test_dirichlet(self): T0 = lambda x: np.sin(2 * np.pi * (x - self.r - self.t) / self.t) Tleft = receiver.FixedTempBC(self.r - self.t, self.h, self.nt, self.nz, self.times, np.zeros(self.ttimes.shape)) self.tube.set_bc(Tleft, "inner") Tright = receiver.FixedTempBC(self.r, self.h, self.nt, self.nz, self.times, np.zeros(self.ttimes.shape)) self.tube.set_bc(Tright, "outer") self.solver.solve(self.tube, self.material, self.fluid, T0=T0) # Correct solution: temperatures head towards zero T = self.tube.results['temperature'][-1] self.assertTrue(np.allclose(T, 0))
def valid_fixedtemp_bc(loc): if loc == "outer": r = outer_radius else: r = inner_radius return receiver.FixedTempBC(r, height, nt, nz, times, np.zeros((len(times), nt, nz)))
def test_neumann_right(self): T0 = lambda x: np.sin(2 * np.pi * (x - self.r - self.t) / self.t) q = 10.0 Tright = receiver.HeatFluxBC(self.r, self.h, self.nt, self.nz, self.times, np.ones(self.ttimes.shape) * q) self.tube.set_bc(Tright, "outer") Tleft = receiver.FixedTempBC( self.r - self.t, self.h, self.nt, self.nz, self.times, np.zeros(self.ttimes.shape), ) self.tube.set_bc(Tleft, "inner") self.solver.solve(self.tube, self.material, self.fluid, T0=T0) # Correct solution: Tright = q * self.r / self.k * np.log( self.rs) - q * self.r / self.k * np.log(self.r - self.t) T = self.tube.results["temperature"][-1] self.assertTrue(np.allclose(T, Tright, rtol=1e-2))
def test_wrong_size(self): with self.assertRaises(ValueError): bc = receiver.FixedTempBC(inner_radius, height, nt, nz, times, np.zeros((1, )))