Example #1
0
 def A1(self, x, t):  # third-type
     # Equation (38)
     U = math.sqrt(self._v*self._v+4.*self._D*self._R* \
                   (self._lambda-self._alpha))
     # Equation (37)
     A1_ = \
         self._v/(self._v+U)* \
         exp_erf(0.5*x*(self._v-U)/self._D,
                 0.5*(self._R*x-U*t)/math.sqrt(self._D*self._R*t))+ \
         self._v/(self._v-U)* \
         exp_erf(0.5*x*(self._v+U)/self._D,
                 0.5*(self._R*x+U*t)/math.sqrt(self._D*self._R*t))+ \
         0.5*self._v*self._v/(self._D*self._R*(self._lambda-self._alpha))* \
         exp_erf(self._v*x/self._D+(self._alpha-self._lambda)*t,
                 0.5*(self._R*x+self._v*t)/math.sqrt(self._D*self._R*t))
     return A1_
Example #2
0
 def A1_constant(self, x, t):  # first-type
     # Equation (42)
     U = math.sqrt(self._v * self._v +
                   4. * self._D * self._R * self._lambda)
     # Equation (41)
     A1_constant_ = \
         self._v/(self._v+U)* \
         exp_erf(0.5*x*(self._v-U)/self._D,
                 0.5*(self._R*x-U*t)/math.sqrt(self._D*self._R*t))+ \
         self._v/(self._v-U)* \
         exp_erf(0.5*x*(self._v+U)/self._D,
                 0.5*(self._R*x+U*t)/math.sqrt(self._D*self._R*t))+ \
         0.5*self._v*self._v/(self._D*self._R*self._lambda)* \
         exp_erf(self._v*x/self._D-self._lambda*t,
                 0.5*(self._R*x+self._v*t)/math.sqrt(self._D*self._R*t))
     return A1_constant_
Example #3
0
 def A3(self, x, t):  # first-type
     # Equation (46)
     A3_ = \
         0.5*math.erfc(0.5*(x-self._v*t)/math.sqrt(self._D*t))+ \
         math.sqrt(self._v*self._v*t/(math.pi*self._D))* \
         math.exp(-0.25*(x-self._v*t)*(x-self._v*t)/(self._D*t)) - \
         0.5*(1.+self._v*x/self._D+self._v*self._v*t/self._D)* \
         exp_erf(self._v*x/self._D,
                 0.5*(x+self._v*t)/math.sqrt(self._D*t))
     return A3_
Example #4
0
 def A2(self, x, t):  # first-type
     # Equation (39)
     A2_ = \
         0.5*math.erfc(0.5*(self._R*x-self._v*t)/ \
                       math.sqrt(self._D*self._R*t))+ \
         math.sqrt(self._v*self._v*t/(math.pi*self._D*self._R))* \
         math.exp(-0.25*(self._R*x-self._v*t)*(self._R*x-self._v*t)/ \
                  (self._D*self._R*t))- \
         0.5*(1.+self._v*x/self._D+self._v*self._v*t/(self._D*self._R))* \
         exp_erf(self._v*x/self._D,
                 0.5*(self._R*x+self._v*t)/math.sqrt(self._D*self._R*t))
     return A2_
Example #5
0
    def get_solution(self, t):
        debug_push('Ogata get_solution')

        dx = self._Lx / self._nx
        c = np.zeros(self._nx)
        x = self.get_rounded_even_spaced_numbers(dx, self._nx)

        # Equations following (12), but prior ot (13)
        for i in range(self._nx):
            xx = x[i]
            twosqrtDT = 2. * math.sqrt(self._D * t)
            c[i] = 0.5*(special.erfc((xx-self._v*t)/twosqrtDT) + \
                        exp_erf(self._v*xx/self._D, \
                                (xx+self._v*t)/twosqrtDT))
        c[:] *= self._c0
        debug_pop()
        return x, c