Пример #1
0
 def test_new_parfis(self) -> None:
     '''Create new parfis object
     '''
     parId = Parfis.newParfis()
     parInfo = Parfis.info()
     self.assertTrue("Parfis object count = 1" in parInfo)
     self.assertTrue(f"Parfis object id = [{parId}]" in parInfo)
Пример #2
0
 def test_evolveCommandChain(self) -> None:
     '''Push states for 100 times
     '''
     id = Parfis.newParfis()
     Parfis.loadCfgData(id)
     Parfis.loadSimData(id)
     Parfis.runCommandChain(id, "create")
     retval = 0
     for i in range(100):
         retval = Parfis.runCommandChain(id, "evolve")
         if retval != 0:
             break
     self.assertEqual(retval, 0)
Пример #3
0
 def test_delete_parfis(self) -> None:
     '''Create four new parfis objects and delete one of them
     '''
     parIds = []
     parIds.append(Parfis.newParfis())
     parIds.append(Parfis.newParfis())
     parIds.append(Parfis.newParfis())
     parIds.append(Parfis.newParfis())
     parInfo = Parfis.info()
     self.assertTrue("Parfis object count = 4" in parInfo)
     self.assertTrue(f"Parfis object id = {parIds}" in parInfo)
     Parfis.deleteParfis(parIds[1])
     parInfo = Parfis.info()
     self.assertTrue("Parfis object count = 3" in parInfo)
     self.assertTrue(
         f"Parfis object id = [{parIds[0]}, {parIds[2]}, {parIds[3]}]" in
         parInfo)
Пример #4
0
 def test_get_cfg_data(self) -> None:
     '''Check if cfg data getter works
     '''
     parId = Parfis.newParfis()
     Parfis.loadCfgData(parId)
     Parfis.setPyCfgData(parId)
     ptrCfgData = Parfis.getPyCfgData(parId)
     self.assertEqual(1.0, ptrCfgData.timestep)
     self.assertEqual((0.02, 0.02, 0.4),
                      ptrCfgData.geometrySize[0].asTuple())
     self.assertEqual((0.001, 0.001, 0.001),
                      ptrCfgData.cellSize[0].asTuple())
     self.assertEqual((20, 20, 400), ptrCfgData.cellCount[0].asTuple())
     self.assertEqual(1, ptrCfgData.specieNameVec.size)
     self.assertEqual(["a"], ptrCfgData.specieNameVec.asList())
Пример #5
0
 def test_load_different_lib(self) -> None:
     '''Change lib and back again, check parfis.Type.state_t
     '''
     Parfis.newParfis()
     parInfo = Parfis.info()
     self.assertTrue(f"parfis::state_t = {TestApi.stateType}" in parInfo)
     Parfis.deleteAll()
     for i in range(2):
         if TestApi.stateType == 'float':
             TestApi.stateType = 'double'
         else:
             TestApi.stateType = 'float'
         Parfis.load_lib(stateType=TestApi.stateType)
         Parfis.newParfis()
         parInfo = Parfis.info()
         self.assertTrue(
             f"parfis::state_t = {TestApi.stateType}" in parInfo)
         id = Parfis.newParfis()
         Parfis.loadCfgData(id)
         Parfis.loadSimData(id)
         Parfis.runCommandChain(id, "create")
         Parfis.setPySimData(id)
         ptrSimData = Parfis.getPySimData(id)
         # Now check if state_t is set as it should
         if TestApi.stateType == 'float':
             self.assertTrue(pfs.Type.state_t, ctypes.c_float)
             self.assertEqual(pfs.Vec3D_float,
                              type(ptrSimData.stateVec.ptr[0].pos))
         else:
             self.assertTrue(pfs.Type.state_t, ctypes.c_double)
             self.assertEqual(pfs.Vec3D_double,
                              type(ptrSimData.stateVec.ptr[0].pos))
         Parfis.deleteAll()
Пример #6
0
 def test_info(self) -> None:
     '''No Parfis objects, just check general program settings.
     '''
     parInfo = Parfis.info()
     self.assertTrue("Parfis object count = 0" in parInfo)
Пример #7
0
 def tearDown(self) -> None:
     Parfis.deleteAll()
Пример #8
0
    def test_createCommandChain(self) -> None:
        '''Check creation of cells and states
        '''
        id = Parfis.newParfis()
        cfgStr = """
            particle.specie = [electron] <parfis::Param>
            particle.specie.electron = [statesPerCell, timestepRatio, amuMass, eCharge] <parfis::Param>
            particle.specie.electron.statesPerCell = 10 <int>
            particle.specie.electron.timestepRatio = 1 <int>
            particle.specie.electron.amuMass = 0.00054858 <double>
            particle.specie.electron.eCharge = -1 <int>
            particle.specie.electron.velInitRandom = uniform <std::string>
            particle.specie.electron.velInitDistMin = [-0.5773502691, -0.5773502691, -0.5773502691] <double>
            particle.specie.electron.velInitDistMax = [0.5773502691, 0.5773502691, 0.5773502691] <double>
        """
        Parfis.setConfig(id, cfgStr)
        Parfis.loadCfgData(id)
        Parfis.loadSimData(id)
        Parfis.runCommandChain(id, "create")

        Parfis.setPyCfgData(id)
        ptrCfgData = Parfis.getPyCfgData(id)
        rSqPi = math.pi * (0.5 * ptrCfgData.geometrySize[0].x)**2
        volCyl = rSqPi * ptrCfgData.geometrySize[0].z
        volCylAbs = (ptrCfgData.geometrySize[0].x *
                     ptrCfgData.geometrySize[0].y *
                     ptrCfgData.geometrySize[0].z)
        volRatio = volCyl / volCylAbs

        Parfis.setPySimData(id)
        ptrSimData = Parfis.getPySimData(id)
        self.assertEqual("electron", ptrSimData.specieVec.ptr[0].name.decode())
        numStatesCyl = ptrSimData.stateVec.size
        numCells = ptrSimData.cellIdVec.size
        numStatesCub = numCells * ptrSimData.specieVec.ptr[0].statesPerCell
        stateRatio = numStatesCyl / numStatesCub
        relativeDifference = abs(volRatio -
                                 stateRatio) / (0.5 * (volRatio + stateRatio))
        precission = 5.0e-3
        self.assertLess(relativeDifference, precission)
Пример #9
0
 def setUpClass(cls):
     print(f"setUpClass: {TestApi.stateType}")
     Parfis.load_lib(stateType=TestApi.stateType)
Пример #10
0
 def test_reconfiguration(self) -> None:
     '''Check reconfiguration of specie data
     '''
     id = Parfis.newParfis()
     Parfis.loadCfgData(id)
     Parfis.setPyCfgData(id)
     ptrCfgData = Parfis.getPyCfgData(id)
     self.assertEqual(1, ptrCfgData.specieNameVec.size)
     self.assertEqual(["a"], ptrCfgData.specieNameVec.asList())
     Parfis.setConfig(id,
                      "particle.specie = [electron, atom] <parfis::Param>")
     Parfis.setConfig(
         id,
         "particle.specie.electron = [statesPerCell, timestepRatio, amuMass, eCharge] <parfis::Param>"
     )
     Parfis.setConfig(id,
                      "particle.specie.electron.statesPerCell = 10 <int>")
     Parfis.setConfig(id,
                      "particle.specie.electron.timestepRatio = 1 <int>")
     Parfis.setConfig(
         id, "particle.specie.electron.amuMass = 0.00054858 <double>")
     Parfis.setConfig(id, "particle.specie.electron.eCharge = -1 <int>")
     Parfis.setConfig(
         id,
         "particle.specie.atom = [statesPerCell, timestepRatio, amuMass, eCharge] <parfis::Param>"
     )
     Parfis.setConfig(id, "particle.specie.atom.statesPerCell = 10 <int>")
     Parfis.setConfig(id, "particle.specie.atom.timestepRatio = 1 <int>")
     Parfis.setConfig(id, "particle.specie.atom.amuMass = 4 <double>")
     Parfis.setConfig(id, "particle.specie.atom.eCharge = 0 <int>")
     Parfis.loadCfgData(id)
     Parfis.setPyCfgData(id)
     ptrCfgData = Parfis.getPyCfgData(id)
     self.assertEqual(2, ptrCfgData.specieNameVec.size)
     self.assertEqual("electron", ptrCfgData.specieNameVec.ptr[0].decode())
     self.assertEqual("atom", ptrCfgData.specieNameVec.ptr[1].decode())