Example #1
0
  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))
Example #2
0
  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))
Example #3
0
    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))
Example #4
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)))
Example #5
0
    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))
Example #6
0
 def test_wrong_size(self):
     with self.assertRaises(ValueError):
         bc = receiver.FixedTempBC(inner_radius, height, nt, nz, times,
                                   np.zeros((1, )))