def setUp(self): self.k = 15.0 self.a = 5.0 self.hcoef = 1.0 self.solver = thermal.FiniteDifferenceImplicitThermalSolver() self.material = materials.ConstantThermalMaterial("Test", self.k, self.a) self.fluid = materials.ConstantFluidMaterial({"Test": self.hcoef}) self.t = 0.2 self.r = 2.0 self.h = 1.0 self.nr = 5 self.nt = 10 self.nz = 5 self.tmax = 10.0 self.ntime = 10 self.tube = receiver.Tube(self.r, self.t, self.h, self.nr, self.nt, self.nz, 0) self.times = np.linspace(0, self.tmax, self.ntime+1) self.tube.set_times(self.times) self.T_inner = 100 Tin = receiver.ConvectiveBC(self.r-self.t, self.h, self.nz, self.times, np.ones((self.ntime+1,self.nz))*self.T_inner) self.tube.set_bc(Tin, "inner") Tright = receiver.HeatFluxBC(self.r, self.h, self.nt, self.nz, self.times, np.zeros((self.ntime+1,self.nt,self.nz))) self.tube.set_bc(Tright, "outer")
def setUp(self): self.k = 15.0 self.a = 5.0 self.hcoef = 1.0 self.solver = thermal.FiniteDifferenceImplicitThermalSolver() self.material = materials.ConstantThermalMaterial("Test", self.k, self.a) self.fluid = materials.ConstantFluidMaterial({"Test": self.hcoef}) self.t = 0.2 self.r = 2.0 self.h = 1.0 self.nr = 10 self.nt = 200 self.nz = 2 self.tmax = 1000.0 self.ntime = 10 self.tube = receiver.Tube(self.r, self.t, self.h, self.nr, self.nt, self.nz, 0) self.times = np.linspace(0, self.tmax, self.ntime+1) self.tube.set_times(self.times) self.tube.make_1D(self.tube.h/2, 0) self.ttimes, self.thetas, self.zs = np.meshgrid( self.times, np.linspace(0, 2*np.pi, self.nt + 1)[:-1], np.linspace(0, self.h, self.nz), indexing = 'ij') self.rs = np.linspace(self.r - self.t, self.r, self.nr)
def run_reference_simulation(d, solver): tube = receiver.Tube(ro, ro - ri, h, nr, nt, nz) tube.set_times(times) if d == 1: tube.make_1D(0, 0) elif d == 2: tube.make_2D(0) R, T, Z = tube.mesh X = R * np.cos(T) Y = R * np.sin(T) Ts = temperature(times, X, Y, Z).reshape((len(times), ) + tube.dim[:tube.ndim]) tube.add_results("temperature", Ts) tube.set_pressure_bc(receiver.PressureBC(times, pressure(times))) solver.setup_tube(tube) state_n = solver.init_state(tube, mat) for i in range(1, len(tube.times)): state_np1 = solver.solve(tube, i, state_n, 0.0) solver.dump_state(tube, i, state_np1) state_n = state_np1 return tube
def setUp(self): self.ro = 5 self.ri = 4.5 self.h = 2.5 self.nr = 10 self.nt = 20 self.nz = 5 self.E = 150000.0 self.nu = 0.35 self.tube = receiver.Tube(self.ro, self.ro - self.ri, self.h, self.nr, self.nt, self.nz) self.times = np.array([0, 1]) self.tube.set_times(self.times) self.tube.set_pressure_bc( receiver.PressureBC(self.times, self.times / 50.0)) self.mat = parse.parse_xml( os.path.join(os.path.dirname(__file__), "moose-verification", "model.xml"), "creeping", ) self.d = 0.25 self.solver = structural.PythonTubeSolver(verbose=False)
def setUp(self): self.ro = 5 self.ri = 4.5 self.h = 2.5 self.nr = 10 self.nt = 20 self.nz = 5 self.E = 150000.0 self.nu = 0.35 self.tube = receiver.Tube(self.ro, self.ro - self.ri, self.h, self.nr, self.nt, self.nz) self.times = np.array([0, 1]) self.tube.set_times(self.times) self.tube.set_pressure_bc( receiver.PressureBC(self.times, self.times * 0)) self.emodel = elasticity.IsotropicLinearElasticModel( self.E, "youngs", self.nu, "poissons") self.mat = models.SmallStrainElasticity(self.emodel) self.d = 0.25 self.force_exact = (np.pi * (self.ro**2.0 - self.ri**2.0) * self.E * self.d / self.h) self.stiffness_exact = (np.pi * (self.ro**2.0 - self.ri**2.0) * self.E / self.h) self.solver = structural.PythonTubeSolver(verbose=False)
def solve(self, solver, thermal, fluid, r=1.0, t=0.2, h=1, time=1, ntime=11, nr=11, nt=20, nz=10, T0=0.0): """ Generate the appropriate tube and solve with the provided solver Parameters: solver: the thermal solver to test thermal: the thermal model to test Other Parameters: r: tube radius t: tube thickness h: tube height time: maximum time ntime: number of time steps nr: number of radial increments nt: number of circumferential increments nz: number of axial increments T0: initial temperature """ solver.steady = self.steady tube = receiver.Tube(r, t, h, nr, nt, nz, T0) times = np.linspace(0, time, ntime) tube.set_times(times) if self.dim == 2: tube.make_2D(tube.h / 2) elif self.dim == 1: tube.make_1D(tube.h / 2, 0) def T0(*args): return self.soln(0, *args) def sfn(t, *args): k = thermal.conductivity(self.soln(t, *args)) a = thermal.diffusivity(self.soln(t, *args)) return self.source(t, k, a, *args) solver.solve(tube, thermal, materials.ConstantFluidMaterial({}), source=sfn, T0=T0, fix_edge=self.soln) return tube
def setUp(self): self.ro = 9.0 self.t = 1.2 self.h = 15.0 self.nr = 10 self.nt = 36 self.nz = 11 self.tube = receiver.Tube(self.ro, self.t, self.h, self.nr, self.nt, self.nz)
def valid_tube_1D(results=[]): tube = receiver.Tube(outer_radius, thickness, height, nr, nt, nz) tube.set_times(times) tube.make_1D(height / 2, np.pi / 3) for res in results: tube.add_results(res, np.zeros((len(times), nr))) return tube
def valid_tube(results=[]): tube = receiver.Tube(outer_radius, thickness, height, nr, nt, nz) tube.set_times(times) for res in results: tube.add_results(res, np.zeros((len(times), nr, nt, nz))) tube.set_bc(valid_heatflux_bc("inner"), "inner") tube.set_bc(valid_convective_bc("outer"), "outer") tube.set_pressure_bc(valid_pressure_bc()) return tube
def make_tube(D, period): R = 1.0 t = 0.1 h = 10.0 nr = 10 nt = 20 nz = 10 T0 = 50 tmax = period ntime = 10 T0 = 300 tube = receiver.Tube(R, t, h, nr, nt, nz, T0=T0) if D == 1: tube.make_1D(h / 2, 1) elif D == 2: tube.make_2D(h / 2) times = np.linspace(0, tmax, ntime) tube.set_times(times) Tf_0 = 300 Tf_m = 600 def fluid_T(t): if t < tmax / 2.0: return Tf_0 + (Tf_m - Tf_0) / (tmax / 2.0) * t else: return Tf_m - (Tf_m - Tf_0) / (tmax / 2.0) * (t - tmax / 2.0) ftemps = np.array([fluid_T(t) * np.ones((nz, )) for t in times]) inner_convection = receiver.ConvectiveBC(R - t, h, nz, times, ftemps) tube.set_bc(inner_convection, "inner") hflux = receiver.HeatFluxBC(R, h, nt, nz, times, np.zeros((ntime, nt, nz)) + 2.0) tube.set_bc(hflux, "outer") solver = thermal.FiniteDifferenceImplicitThermalSolver() tmat = materials.ConstantThermalMaterial("dummy", 20.0e-3, 4.8) fmat = materials.ConstantFluidMaterial({"dummy": 8.1e-3}) solver.solve(tube, tmat, fmat) return tube
def make_tube(self, dim, nr=15, nt=30, nz=5): tube = receiver.Tube(self.ro, self.ro - self.ri, self.h, nr, nt, nz) if dim == 1: tube.make_1D(self.h / 2, 0) elif dim == 2: tube.make_2D(self.h / 2) times = np.array([0, 1]) tube.set_times(times) R, _, _ = tube.mesh Ts = np.zeros((2, ) + R.shape[:dim]) Ts[1] = self.T(R) tube.add_results("temperature", Ts) if self.p != 0: tube.set_pressure_bc(receiver.PressureBC(times, times * self.p)) return tube
def gen_tube(k, tforce, tube_length, tube_ri, E, alpha, nr=5): emodel = elasticity.IsotropicLinearElasticModel(E, "youngs", 0.25, "poissons") mmodel = models.SmallStrainElasticity(emodel, alpha=alpha) solver = structural.PythonTubeSolver(atol=1.0e-4) ro = np.sqrt(tube_length * k / (np.pi * E) + tube_ri**2.0) A = np.pi * (ro**2.0 - tube_ri**2.0) tube = receiver.Tube(ro, ro - tube_ri, tube_length, nr, 1, 1) tube.set_times(np.array([0, 1.0])) tube.make_1D(tube_length / 2.0, 0) dT = tforce / (E * alpha * A) temp = np.zeros((2, nr)) temp[1] = dT tube.add_results("temperature", temp) tube.set_pressure_bc( receiver.PressureBC(np.array([0, 1]), np.array([0, 0]))) return spring.TubeSpring(tube, solver, mmodel)
p_max = 1.0 # MPa pressure = lambda t: p_max * onoff(t) # Time increments throughout the 24 hour day times = np.linspace(0,24,24*2+1) # Various meshes needed to define the boundary conditions # 1) A mesh over the times and height (for the fluid temperatures) time_h, z_h = np.meshgrid(times, np.linspace(0,height,nz), indexing='ij') # 2) A surface mesh over the outer surface (for the flux) time_s, theta_s, z_s = np.meshgrid(times, np.linspace(0,2*np.pi,nt+1)[:nt], np.linspace(0,height,nz), indexing = 'ij') # Setup each tube in turn and assign it to the correct panel # Tube 0 tube_0 = receiver.Tube(r_outer, thickness, height, nr, nt, nz, T0 = T_base) tube_0.set_times(times) tube_0.set_bc(receiver.ConvectiveBC(r_outer-thickness, height, nz, times, fluid_temp(time_h,z_h)), "inner") tube_0.set_bc(receiver.HeatFluxBC(r_outer, height, nt, nz, times, h_flux(time_s, theta_s, z_s) * h_tube_0), "outer") tube_0.set_pressure_bc(receiver.PressureBC(times, pressure(times))) # Tube 1 tube_1 = receiver.Tube(r_outer, thickness, height, nr, nt, nz, T0 = T_base) tube_1.set_times(times) tube_1.set_bc(receiver.ConvectiveBC(r_outer-thickness, height, nz, times, fluid_temp(time_h,z_h)), "inner") tube_1.set_bc(receiver.HeatFluxBC(r_outer, height, nt, nz, times, h_flux(time_s, theta_s, z_s) * h_tube_1), "outer") tube_1.set_pressure_bc(receiver.PressureBC(times, pressure(times)))