Ejemplo n.º 1
0
    def test_integrate_p_p1_linear(self):
        dim = np.random.randint(1, 10)
        mc_coll = multirateCollocation(self.M, self.P, self.tleft, self.tright,
                                       dim)

        # Make sure method throws if input data does not fit
        with self.assertRaises(Exception):
            mc_coll.integrate_p_pp1(np.zeros(self.M + 1), 0, 0)

        slope = np.random.rand(dim)
        intercept = np.random.rand(dim)
        fu = np.zeros((self.M, dim))
        for d in range(dim):
            fu[:, d] = slope[d] * mc_coll.coll.nodes + intercept[d]
        for m in range(self.M):
            for p in range(self.P):
                if p == 0:
                    ta = mc_coll.coll_sub[m].tleft
                else:
                    ta = mc_coll.coll_sub[m].nodes[p - 1]
                tb = mc_coll.coll_sub[m].nodes[p]
                intval = mc_coll.integrate_p_pp1(fu, m, p)
                intex = np.zeros(dim)
                for d in range(dim):
                    intex[d] = 0.5 * slope[d] * (
                        tb**2 - ta**2) + intercept[d] * (tb - ta)
                err = np.linalg.norm(intval - intex, np.inf)
                assert err < 1e-14, (
                    "Function integrate_p_pp1 failed to integrate linear function excatly. Error: %5.3e"
                    % err)
 def test_integrate_p_p1_linear(self):
   dim     = np.random.randint(1,10)
   mc_coll = multirateCollocation(self.M, self.P, self.tleft, self.tright, dim)
   
   # Make sure method throws if input data does not fit
   with self.assertRaises(Exception):
     mc_coll.integrate_p_pp1(np.zeros(self.M+1), 0, 0)
   
   slope     = np.random.rand(dim)
   intercept = np.random.rand(dim)
   fu = np.zeros((self.M,dim))
   for d in range(dim):
     fu[:,d]      = slope[d]*mc_coll.coll.nodes + intercept[d]
   for m in range(self.M):
     for p in range(self.P):
       if p==0:
         ta = mc_coll.coll_sub[m].tleft
       else:
         ta = mc_coll.coll_sub[m].nodes[p-1]
       tb   = mc_coll.coll_sub[m].nodes[p]        
       intval  = mc_coll.integrate_p_pp1(fu, m, p)
       intex   = np.zeros(dim)
       for d in range(dim):
         intex[d]   = 0.5*slope[d]*(tb**2-ta**2) + intercept[d]*(tb - ta)
       err     =  np.linalg.norm(intval - intex, np.inf)
       assert err<1e-14, ("Function integrate_p_pp1 failed to integrate linear function excatly. Error: %5.3e" % err)
Ejemplo n.º 3
0
    def test_integrate_m_mp1_linear(self):
        dim = np.random.randint(1, 10)
        mc_coll = multirateCollocation(self.M, self.P, self.tleft, self.tright,
                                       dim)
        slope = np.random.rand(dim)
        intercept = np.random.rand(dim)
        fu = np.zeros((self.M, dim))
        for d in range(dim):
            fu[:, d] = slope[d] * mc_coll.coll.nodes + intercept[d]

        for m in range(self.M):
            if m == 0:
                ta = mc_coll.coll.tleft
            else:
                ta = mc_coll.coll.nodes[m - 1]
            tb = mc_coll.coll.nodes[m]
            intval = mc_coll.integrate_m_mp1(fu, m)
            intex = np.zeros(dim)
            for d in range(dim):
                intex[d] = 0.5 * slope[d] * (tb**2 -
                                             ta**2) + intercept[d] * (tb - ta)
            err = np.linalg.norm(intval - intex, np.inf)
            assert err < 1e-13, (
                "Function integrate_m_mp1 failed to integrate linear function excatly. Error: %5.3e"
                % err)
Ejemplo n.º 4
0
    def test_integrates_match(self):
        dim = np.random.randint(1, 10)
        mc_coll = multirateCollocation(self.M, self.P, self.tleft, self.tright,
                                       dim)
        slope = np.random.rand(dim)
        intercept = np.random.rand(dim)

        fu = np.zeros((self.M, dim))
        for d in range(dim):
            fu[:, d] = slope[d] * mc_coll.coll.nodes + intercept[d]
        fusub = np.zeros((self.P, dim))
        for m in range(self.M):
            if m == 0:
                ta = mc_coll.coll.tleft
            else:
                ta = mc_coll.coll.nodes[m - 1]
            tb = mc_coll.coll.nodes[m]
            int_m_mp1 = mc_coll.integrate_m_mp1(fu, m)
            int_p_pp1 = np.zeros(dim)
            for d in range(dim):
                fusub[:,
                      d] = slope[d] * mc_coll.coll_sub[m].nodes + intercept[d]
            for p in range(self.P):
                int_p_pp1 += mc_coll.integrate_p_pp1_sub(fusub, m, p)
            err = np.linalg.norm(int_m_mp1 - int_p_pp1, np.inf)
            assert err < 1e-14, (
                "Sum of integrate_p_pp1 does not match integrate_m_mp1. Error: %5.3e"
                % err)
 def test_timesteps_match(self):
   mc_coll   = multirateCollocation(self.M, self.P, self.tleft, self.tright, 1)
   for m in range(self.M):
     dt_sum_sub = 0.0
     for p in range(self.P):
       dt_sum_sub += mc_coll.coll_sub[m].delta_m[p]
     err = abs(dt_sum_sub - mc_coll.coll.delta_m[m])
     assert err<1e-14, ("Sum of sub-steps did not yield length of step on coarse level. Error: %5.3e" % err)
Ejemplo n.º 6
0
 def test_timesteps_match(self):
     mc_coll = multirateCollocation(self.M, self.P, self.tleft, self.tright,
                                    1)
     for m in range(self.M):
         dt_sum_sub = 0.0
         for p in range(self.P):
             dt_sum_sub += mc_coll.coll_sub[m].delta_m[p]
         err = abs(dt_sum_sub - mc_coll.coll.delta_m[m])
         assert err < 1e-14, (
             "Sum of sub-steps did not yield length of step on coarse level. Error: %5.3e"
             % err)
 def test_weights_match(self):
   mc_coll = multirateCollocation(self.M, self.P, self.tleft, self.tright, 1)
   Smat    = mc_coll.coll.Smat
   Smat    = Smat[1:,1:]
   S_mnp   = mc_coll.S_mnp
   for m in range(self.M):
     for j in range(self.M):
       s = Smat[m,j]
       stilde = 0.0
       for p in range(self.P):
         stilde += S_mnp[m,j,p]
       err = abs(s - stilde)
       assert err<1e-14, ("Mismatch between s and s_tilde weights. Error %5.3e" % err)
Ejemplo n.º 8
0
 def test_weights_match(self):
     mc_coll = multirateCollocation(self.M, self.P, self.tleft, self.tright,
                                    1)
     Smat = mc_coll.coll.Smat
     Smat = Smat[1:, 1:]
     S_mnp = mc_coll.S_mnp
     for m in range(self.M):
         for j in range(self.M):
             s = Smat[m, j]
             stilde = 0.0
             for p in range(self.P):
                 stilde += S_mnp[m, j, p]
             err = abs(s - stilde)
             assert err < 1e-14, (
                 "Mismatch between s and s_tilde weights. Error %5.3e" %
                 err)
Ejemplo n.º 9
0
 def __init__(self, M, P, tstart, tend, problem, theta=1.0):
     self.coll = multirateCollocation(M, P, tstart, tend, problem.dim)
     self.I_m_mp1 = np.zeros((M, problem.dim))
     self.I_p_pp1 = np.zeros((M, P, problem.dim))
     self.prob = problem
     self.dt = tend - tstart
     try:
         # if theta is a single number
         self.theta_standard = float(theta)
         self.theta_embedded = float(theta)
     except:
         # if theta is vector, use first value for standard, second for embedded
         try:
             self.theta_standard = float(theta[0])
             self.theta_embedded = float(theta[1])
         except:
             raise
 def test_integrate_0_p_sub_linear(self):
   dim       = np.random.randint(1,10)
   mc_coll   = multirateCollocation(self.M, self.P, self.tleft, self.tright, dim)
   slope     = np.random.rand(dim)
   intercept = np.random.rand(dim)
   for m in range(self.M):
     fu = np.zeros((self.P,dim))
     for d in range(dim):
       fu[:,d]      = slope[d]*mc_coll.coll_sub[m].nodes + intercept[d]
     for p in range(self.P):
       # integrate from beginning of sub-step to node p
       ta = mc_coll.coll_sub[m].tleft
       tb   = mc_coll.coll_sub[m].nodes[p]
       intval = mc_coll.integrate_0_p_sub(fu, m, p)
       intex  = np.zeros(dim)
       for d in range(dim):
         intex[d] = 0.5*slope[d]*(tb**2-ta**2) + intercept[d]*(tb - ta)
       err     =  np.linalg.norm(intval - intex, np.inf)
       assert err<1e-14, ("Function integrate_p_pp1_sub failed to integrate linear function excatly. Error: %5.3e" % err)
 def test_integrate_m_mp1_sub_linear(self):
   dim       = np.random.randint(1,10)
   mc_coll   = multirateCollocation(self.M, self.P, self.tleft, self.tright, dim)
   slope     = np.random.rand(dim)
   intercept = np.random.rand(dim)
   for m in range(self.M):
     fu = np.zeros((self.P,dim))
     for d in range(dim):
       fu[:,d] = slope[d]*mc_coll.coll_sub[m].nodes + intercept[d]
     if m==0:
       ta = mc_coll.coll.tleft
     else:
       ta = mc_coll.coll.nodes[m-1]
     tb   = mc_coll.coll.nodes[m]
     intval  = mc_coll.integrate_m_mp1_sub(fu, m)
     intex   = np.zeros(dim)
     for d in range(dim):
       intex[d]   = 0.5*slope[d]*(tb**2-ta**2) + intercept[d]*(tb - ta)
     err     =  np.linalg.norm(intval - intex, np.inf)
     assert err<1e-14, ("Function integrate_m_mp1_sub failed to integrate linear function excatly. Error: %5.3e" % err)
Ejemplo n.º 12
0
 def test_integrate_0_p_sub_linear(self):
     dim = np.random.randint(1, 10)
     mc_coll = multirateCollocation(self.M, self.P, self.tleft, self.tright,
                                    dim)
     slope = np.random.rand(dim)
     intercept = np.random.rand(dim)
     for m in range(self.M):
         fu = np.zeros((self.P, dim))
         for d in range(dim):
             fu[:, d] = slope[d] * mc_coll.coll_sub[m].nodes + intercept[d]
         for p in range(self.P):
             # integrate from beginning of sub-step to node p
             ta = mc_coll.coll_sub[m].tleft
             tb = mc_coll.coll_sub[m].nodes[p]
             intval = mc_coll.integrate_0_p_sub(fu, m, p)
             intex = np.zeros(dim)
             for d in range(dim):
                 intex[d] = 0.5 * slope[d] * (
                     tb**2 - ta**2) + intercept[d] * (tb - ta)
             err = np.linalg.norm(intval - intex, np.inf)
             assert err < 1e-14, (
                 "Function integrate_p_pp1_sub failed to integrate linear function excatly. Error: %5.3e"
                 % err)
  def test_integrates_match(self):
    dim       = np.random.randint(1,10)
    mc_coll   = multirateCollocation(self.M, self.P, self.tleft, self.tright, dim)
    slope     = np.random.rand(dim)
    intercept = np.random.rand(dim)

    fu        = np.zeros((self.M,dim))
    for d in range(dim):
      fu[:,d] = slope[d]*mc_coll.coll.nodes + intercept[d]
    fusub   = np.zeros((self.P,dim))
    for m in range(self.M):
      if m==0:
        ta = mc_coll.coll.tleft
      else:
        ta = mc_coll.coll.nodes[m-1]
      tb   = mc_coll.coll.nodes[m]
      int_m_mp1 = mc_coll.integrate_m_mp1(fu, m)
      int_p_pp1 = np.zeros(dim)
      for d in range(dim):
        fusub[:,d] = slope[d]*mc_coll.coll_sub[m].nodes + intercept[d]
      for p in range(self.P):
        int_p_pp1 += mc_coll.integrate_p_pp1_sub(fusub, m, p)
      err = np.linalg.norm(int_m_mp1 - int_p_pp1, np.inf)
      assert err<1e-14, ("Sum of integrate_p_pp1 does not match integrate_m_mp1. Error: %5.3e" % err)
 def test_caninstantiate(self):
   mc_coll = multirateCollocation(self.M, self.P, self.tleft, self.tright, 1)
Ejemplo n.º 15
0
 def test_caninstantiate(self):
     mc_coll = multirateCollocation(self.M, self.P, self.tleft, self.tright,
                                    1)