Exemplo n.º 1
0
  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")
Exemplo n.º 2
0
  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
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
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
Exemplo n.º 9
0
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
Exemplo n.º 10
0
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
Exemplo n.º 12
0
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)
Exemplo n.º 13
0
  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)))