Skip to content
Snippets Groups Projects
Commit 3ad1d350 authored by Ivan Kondov's avatar Ivan Kondov
Browse files

tests for the self-starting symmetric propagator

parent 26b81cf2
No related branches found
No related tags found
1 merge request!1Symmetric propagators
......@@ -19,7 +19,7 @@ params = {'tstart': spfloat(0., prec), 'tend': spfloat(100., prec),
syspar = {'q0': spfloat(3., prec), 'p0': spfloat(0., prec),
'fpprec': 'multi', 'prec': prec}
syspar = {'q0': 3., 'p0': 0., 'fpprec': 'fixed'}
# syspar = {'q0': 3., 'p0': 0., 'fpprec': 'fixed'}
system = Morse(**syspar)
......
""" Tests for the self-starting symmetric polynomial propagator """
import unittest
import numpy as np
from rotagaporp.generic import spfloat
from rotagaporp.chebyshev import SymmetricChebyshev
from rotagaporp.systems import Morse
class TestSymmetricPolynomialPropagator(unittest.TestCase):
""" Test the self-starting symmetric polynomial propagator """
def compare(self, prop, params, syst, atol):
""" compare trajectories with analytic solution """
sy = prop(syst=syst, **params)
sy.propagate()
sy.analyse()
(tsy, qsy, psy) = sy.get_trajectory()
qan, pan = syst.solution(times=tsy)
qanfl = np.array(qan, dtype=float)
panfl = np.array(pan, dtype=float)
print(qsy, qanfl)
self.assertTrue(np.allclose(qsy, qanfl, atol=atol))
self.assertTrue(np.allclose(psy, panfl, atol=atol))
self.assertTrue(np.allclose(sy.er, 0, atol=atol))
def test_cheb_subs_fixed(self):
""" Chebyshev with fixed precision / subs """
numeric = {'tool': 'subs'}
params = {'tstart': 0., 'tend': 20., 'tstep': 0.2, 'nterms': 6,
'signed': False, 'numeric': numeric, 'fpprec': 'fixed'}
syspar = {'q0': 3., 'p0': 0., 'fpprec': 'fixed'}
system = Morse(**syspar)
self.compare(SymmetricChebyshev, params, system, 1e-2)
def test_cheb_lambdify_fixed(self):
""" Chebyshev with fixed precision / lambdify """
numeric = {'tool': 'lambdify', 'modules': 'numpy'}
params = {'tstart': 0., 'tend': 20., 'tstep': 0.2, 'nterms': 6,
'signed': False, 'numeric': numeric, 'fpprec': 'fixed'}
syspar = {'q0': 3., 'p0': 0., 'fpprec': 'fixed'}
system = Morse(**syspar)
self.compare(SymmetricChebyshev, params, system, 1e-2)
def test_cheb_theano_fixed(self):
""" Chebyshev with fixed precision / theano """
numeric = {'tool': 'theano'}
params = {'tstart': 0., 'tend': 20., 'tstep': 0.2, 'nterms': 6,
'signed': False, 'numeric': numeric, 'fpprec': 'fixed'}
syspar = {'q0': 3., 'p0': 0., 'fpprec': 'fixed'}
system = Morse(**syspar)
self.compare(SymmetricChebyshev, params, system, 1e-2)
def test_cheb_subs_prec15(self):
""" Chebyshev with multi precision 15 decimal digits / subs """
prec = 15
numeric = {'tool': 'subs'}
params = {'tstart': spfloat(0., prec), 'tend': spfloat(20., prec),
'tstep': spfloat(0.2, prec), 'nterms': 6, 'signed': False,
'numeric': numeric, 'fpprec': 'multi', 'prec': prec}
syspar = {'q0': spfloat(3., prec), 'p0': spfloat(0., prec),
'fpprec': 'multi', 'prec': prec}
system = Morse(**syspar)
self.compare(SymmetricChebyshev, params, system, 1e-2)
def test_cheb_lambdify_prec08(self):
""" Chebyshev with multi precision 8 decimal digits / lambdify """
prec = 8
numeric = {'tool': 'lambdify', 'modules': 'mpmath'}
params = {'tstart': spfloat(0., prec), 'tend': spfloat(20., prec),
'tstep': spfloat(0.2, prec), 'nterms': 6, 'signed': False,
'numeric': numeric, 'fpprec': 'multi', 'prec': prec}
syspar = {'q0': spfloat(3., prec), 'p0': spfloat(0., prec),
'fpprec': 'multi', 'prec': prec}
system = Morse(**syspar)
self.compare(SymmetricChebyshev, params, system, 1e-2)
def test_cheb_lambdify_prec30(self):
""" Chebyshev with multi precision 30 decimal digits / lambdify """
prec = 30
numeric = {'tool': 'lambdify', 'modules': 'mpmath'}
params = {'tstart': spfloat(0., prec), 'tend': spfloat(20., prec),
'tstep': spfloat(0.2, prec), 'nterms': 6, 'signed': False,
'numeric': numeric, 'fpprec': 'multi', 'prec': prec}
syspar = {'q0': spfloat(3., prec), 'p0': spfloat(0., prec),
'fpprec': 'multi', 'prec': prec}
system = Morse(**syspar)
self.compare(SymmetricChebyshev, params, system, 1e-2)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment