Пример #1
0
    def testSpatialData(self):
        """ Test that the query for the spatial data works. """
        ps = ProcessStatistics(processes=[0],
                               time_interval=0.3,
                               spatially_resolved=True)
        ref_data = "REFERENCE"
        ps._ProcessStatistics__spatial_data = ref_data

        # Check by reference.
        self.assertTrue(ps.spatialData() == ref_data)
Пример #2
0
    def testConstruction(self):
        """ Test that we can construct a valid ProcessStatistics object. """
        ps0 = ProcessStatistics(processes=[1, 2, 5],
                                time_interval=2.3,
                                spatially_resolved=True)

        # Check values on the class.
        self.assertEqual(ps0._ProcessStatistics__processes, [1, 2, 5])
        self.assertEqual(ps0._ProcessStatistics__current_count, 0)
        self.assertAlmostEqual(ps0._ProcessStatistics__time_interval, 2.3, 10)
        self.assertTrue(ps0._ProcessStatistics__spatially_resolved)
        self.assertTrue(ps0._ProcessStatistics__spatial_data is None)

        # Construct with default time interval and spatial resolution.
        ps0 = ProcessStatistics(processes=[1, 2, 5])
        self.assertAlmostEqual(ps0._ProcessStatistics__time_interval, 1.0, 10)
        self.assertFalse(ps0._ProcessStatistics__spatially_resolved)
        self.assertTrue(ps0._ProcessStatistics__spatial_data is None)
Пример #3
0
    def testPrintResults(self):
        """ Test that we can print the results """
        # Setup.
        ps = ProcessStatistics(processes=[0], time_interval=0.3)

        # Add data on the class.
        ps._ProcessStatistics__data = [0, 12, 245, 1435]

        stream = StringIO.StringIO()
        ps.printResults(stream)

        # Reference checked by hand.
        ref_value = \
"""       time (t)       count (n)      (dn/dt)           (n/t)
        0.30000              12        40.00000        40.00000
        0.60000             257       816.66667       428.33333
        0.90000            1692      4783.33333      1880.00000
"""
        if MPICommons.isMaster():
            self.assertEqual(stream.getvalue(), ref_value)
        else:
            self.assertEqual(stream.getvalue(), "")
Пример #4
0
    def testSetup(self):
        """ Test that the setup function stores the time properly. """
        ps = ProcessStatistics(processes=[0], time_interval=2.3)
        # Check initial value.
        self.assertAlmostEqual(ps._ProcessStatistics__last_time, 0.0, 10)

        # Call setup.
        ps.setup("dummy_step", "dummy_time", "dummy_config")
        self.assertEqual(ps._ProcessStatistics__last_time, "dummy_time")

        class DummyConfig:
            def sites(self):
                return [1, 2, 3, 4, 5]

        ps = ProcessStatistics(processes=[0],
                               time_interval=2.3,
                               spatially_resolved=True)

        ps.setup("dummy_step", "dummy_time", DummyConfig())
        self.assertEqual(ps._ProcessStatistics__last_time, "dummy_time")
        self.assertEqual(len(ps._ProcessStatistics__spatial_data), 5)
        self.assertAlmostEqual(
            numpy.linalg.norm(ps._ProcessStatistics__spatial_data), 0.0, 10)
Пример #5
0
    def testConstructionFail(self):
        """ Test that construction fails with wrong input. """
        # Fail because of missing processes input.
        self.assertRaises(Error, lambda: ProcessStatistics(time_interval=2.3))

        # Wrong type.
        self.assertRaises(
            Error,
            lambda: ProcessStatistics(processes=["1", "2"], time_interval=2.3))
        self.assertRaises(
            Error, lambda: ProcessStatistics(processes=0, time_interval=2.3))
        self.assertRaises(
            Error, lambda: ProcessStatistics(processes=[1], time_interval=1))
        self.assertRaises(
            Error, lambda: ProcessStatistics(
                processes=[1], time_interval=1.0, spatially_resolved="YES"))

        # Wrong value.
        self.assertRaises(
            Error,
            lambda: ProcessStatistics(processes=[-1], time_interval=2.3))
        self.assertRaises(
            Error,
            lambda: ProcessStatistics(processes=[1], time_interval=-1.0))
Пример #6
0
#NiO process

import time
from KMCLib import *
from KMCLib.Analysis.TimeStepDistribution import TimeStepDistribution
from KMCLib.Analysis.ProcessStatistics import ProcessStatistics
from matplotlib import pyplot as plt

t_calstart = time.clock()
configuration = KMCConfigurationFromScript("config.py")
interactions = KMCInteractionsFromScript("interactions.py")

model = KMCLatticeModel(configuration=configuration, interactions=interactions)

control_parameters = KMCControlParameters(number_of_steps=10000000,
                                          dump_interval=10000,
                                          analysis_interval=1)
#set up the analysis
tsd = TimeStepDistribution(binsize=0.001)
pst = ProcessStatistics()

# Run the simulation - save trajectory to 'NiO POM.py'
model.run(control_parameters,
          trajectory_filename="NiO POM.py",
          analysis=[tsd, pst])
t_calend = time.clock()
print("sim complete time cost is :", t_calend - t_calstart)
#length of lattice
size = 100
Пример #7
0
    def testRegisterStepAndFinalize(self):
        """ Test the step registration. """
        ps = ProcessStatistics(processes=[0],
                               time_interval=0.3,
                               spatially_resolved=True)

        class DummyConfig:
            def latestEventProcess(self):
                return 0

            def latestEventSite(self):
                return 1

            def sites(self):
                return [1, 2, 3]

        # Set the initial time.
        config = DummyConfig()
        ps.setup("dummy_step", 0.0, config)

        # Set the current count.
        ps._ProcessStatistics__current_count = 156

        # Check initial value.
        self.assertEqual(ps._ProcessStatistics__data, [])
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[0], 0.0, 10)
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[1], 0.0, 10)
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[2], 0.0, 10)

        # Register the step.
        time = 1.0
        ps.registerStep("dummy_step", time, config)

        # Check the result.
        self.assertEqual(ps._ProcessStatistics__data, [156])
        self.assertEqual(ps._ProcessStatistics__current_count, 1)
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[0], 0.0, 10)
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[1], 1.0, 10)
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[2], 0.0, 10)

        # Add again.
        time += 0.2
        ps.registerStep("dummy_step", time, config)
        self.assertEqual(ps._ProcessStatistics__data, [156])
        self.assertEqual(ps._ProcessStatistics__current_count, 2)
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[0], 0.0, 10)
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[1], 2.0, 10)
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[2], 0.0, 10)

        # Add again.
        time += 0.5
        ps.registerStep("dummy_step", time, config)
        self.assertEqual(ps._ProcessStatistics__data, [156, 2])
        self.assertEqual(ps._ProcessStatistics__current_count, 1)
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[0], 0.0, 10)
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[1], 3.0, 10)
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[2], 0.0, 10)

        # Now with another dummy config.
        class DummyConfig1:
            def latestEventProcess(self):
                return 1

            def latestEventSite(self):
                return 1

        config = DummyConfig1()

        time += 0.5
        ps.registerStep("dummy_step", time, config)
        self.assertEqual(ps._ProcessStatistics__data, [156, 2, 1])
        self.assertEqual(ps._ProcessStatistics__current_count, 0)
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[0], 0.0, 10)
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[1], 3.0, 10)
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[2], 0.0, 10)

        # Finalize.
        ps.finalize()

        # Check that the spatially resolved data gets divided by the total time.
        total_t = 0.5 + 0.5 + 0.2 + 1.0
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[0], 0.0, 10)
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[1],
                               3.0 / total_t, 10)
        self.assertAlmostEqual(ps._ProcessStatistics__spatial_data[2], 0.0, 10)