Beispiel #1
0
 def calibrateCluster(self, pl):
     partServ = ParticleService()
     x_list = numpy.array([cluster.getX() for cluster in pl.GET()])
     y_list = numpy.array([cluster.getY() for cluster in pl.GET()])
     r_list = numpy.array([cluster.getR() for cluster in pl.GET()])
     
     for cluster in pl.GET():
         x_square = (cluster.getX() - x_list)**2
         y_square = (cluster.getY() - y_list)**2
         distance_list = numpy.sqrt(x_square + y_square)
         
         r_ol = (numpy.array(pl.GET()))[(distance_list <= cluster.getR() + r_list)]
         r_ol_clear = [elm for elm in r_ol if (elm not in cluster.getContacts()) and (elm != cluster)]
         
         for interCluster in r_ol_clear:
             if interCluster.getN() > cluster.getN():
                 continue
             else:
                 partServ.clusterSurfaceTouching(cluster, interCluster)
         
         for adCluster in cluster.getContacts():
             if adCluster.getN() > cluster.getN():
                 continue
             else:
                 partServ.clusterSurfaceTouching(cluster, adCluster)     
Beispiel #2
0
    def getMeanValues(self, clusterList):
        partServ = ParticleService()
        intServ = InteractionService()
        r = 0
        d = 0
        r_list = []
        d_list = []
        cluster_plist = []

        for cluster in clusterList.GET():
            # Radius
            r += cluster.getR()
            
            # Distance
            d_part = 0
            if len(cluster.getContacts()) != 0:
                for adCluster in cluster.getContacts():
                    if d_part > partServ.getParticleDistance(cluster, adCluster):
                        d_part = partServ.getParticleDistance(cluster, adCluster)
            else:
                d_part = intServ.findClosestCluster(cluster, clusterList)
            d += d_part
            
            # Radius List
            r_list.append(cluster.getR())
            
            # Distance List
            d_list.append(d_part)
            
            # Cluster Parameter List
            cluster_plist.append(self.getClusterParameter(cluster))
            
        return r/clusterList.clusterNumber() , d/clusterList.clusterNumber() , r_list , d_list, cluster_plist
Beispiel #3
0
 def adatomOnCluster(self, initval, adatomList, adatomWWList, clusterList, coalescenceList, smeasure):
     pServ = ParticleService()
     
     x_list = numpy.array([cluster.getX() for cluster in clusterList.GET()])
     y_list = numpy.array([cluster.getY() for cluster in clusterList.GET()])
     r_list = numpy.array([cluster.getR() for cluster in clusterList.GET()])
     
     for adatom in adatomList.GET():
         x_square = (adatom.getX() - x_list)**2
         y_square = (adatom.getY() - y_list)**2
         distance_list = numpy.array(numpy.sqrt(x_square + y_square))
         
         
         cluster = (numpy.array(clusterList.GET()))[distance_list <= (adatom.getR() + r_list)]
         if len(cluster)!=0:
             pServ.addAdatomtoCluster(initval, adatom, cluster, adatomList, clusterList)
             smeasure.adatomEvent('clusterdeposition_sputter', 1)
         else:
             pServ.AdatomOnSurface(adatom, adatomList, adatomWWList, clusterList, coalescenceList)
             smeasure.adatomEvent('deposition_sputter', 1)
Beispiel #4
0
    def diffusionOverlap(self, initval, pl, clusterList, coalescenceList):
        pServ = ParticleService()
        
        x_list = numpy.array([cluster.getX() for cluster in clusterList.GET()])
        y_list = numpy.array([cluster.getY() for cluster in clusterList.GET()])
        r_list = numpy.array([cluster.getR() for cluster in clusterList.GET()])
        rev_list = numpy.array([cluster.getREv() for cluster in clusterList.GET()])
        
        for cluster in pl.GET():
            x_square = (cluster.getX() - x_list)**2
            y_square = (cluster.getY() - y_list)**2
            distance_list = numpy.sqrt(x_square + y_square)
            
            r_ol = (numpy.array(clusterList.GET()))[(distance_list <= cluster.getR() + r_list)]
            rev_ol = (numpy.array(clusterList.GET()))[(distance_list <= cluster.getREv() + rev_list)]
            

            r_ol_clear = [cluster for cluster in r_ol if cluster not in pl.GET()]
            
            if len(r_ol_clear) != 0 and coalescenceList.findCluster(r_ol_clear[0])!=None:
                fuse=False
                for cluster2 in r_ol_clear:
                    if pServ.addContact(cluster, cluster2):
                        pServ.fuseParticleLists(coalescenceList.findCluster(cluster2), pl)
                        fuse=True
                        break
            
            rev_ol_clear = [cluster for cluster in rev_ol if (cluster not in pl.GET() and cluster not in r_ol_clear)]
            
            if len(rev_ol_clear) != 0 and coalescenceList.findCluster(r_ol_clear[0])!=None and fuse==False:
                for cluster2 in rev_ol_clear:
                    distance = self.getParticleDistance(cluster.getX(), cluster.getY(), cluster2.getX(), cluster2.getY())
                    if self.checkGreatProhability(cluster.getREv(), cluster2.getREv(), cluster.getR(), cluster2.getR(), distance) >= 1:
                        if pServ.addContact(cluster, cluster2):
                            pServ.fuseParticleLists(coalescenceList.findCluster(cluster2),pl)
                    else:
                        WQS = self.getCollisionProhability(cluster2.getREv(), cluster.getREv(), cluster2.getR(), cluster.getR(), distance)
                        rndm = random.random
                        if rndm < WQS:
                            if pServ.addContact(cluster, cluster2):
                                pServ.fuseParticleLists(coalescenceList.findCluster(cluster2),pl)
Beispiel #5
0
    def adatomWW(self, initval, adatomWWList, clusterList, coalescenceList, smeasure):
        pServ = ParticleService()
        
        x_list = numpy.array([cluster.getX() for cluster in clusterList.GET()])
        y_list = numpy.array([cluster.getY() for cluster in clusterList.GET()])
        r_list = numpy.array([cluster.getR() for cluster in clusterList.GET()])
        rev_list = numpy.array([cluster.getREv() for cluster in clusterList.GET()])
        
        for adatom in adatomWWList.GET():
            x_square = (adatom.getX() - x_list)**2
            y_square = (adatom.getY() - y_list)**2
            distance_list = numpy.array(numpy.sqrt(x_square + y_square))
            
            r_ol = (numpy.array(clusterList.GET()))[(distance_list <= adatom.getR() + r_list)]
            rev_ol = (numpy.array(clusterList.GET()))[(distance_list <= adatom.getREv() + rev_list)]
            
            ''' *** R Overlap *** '''
            r_ol=numpy.delete(r_ol, numpy.where(r_ol==adatom)[0][0])
            if len(r_ol) != 0:
                pServ.adatomClusterWW(initval, adatom, r_ol[0], adatomWWList, clusterList, coalescenceList)
                if r_ol[0].getN() == 1:
                    smeasure.adatomEvent('nucleation',1)
                else:
                    smeasure.adatomEvent('aggregation',1)
                continue

            ''' *** Rev Overlap for great WQS *** '''
            rev_ol=numpy.delete(rev_ol, numpy.where(rev_ol==adatom)[0][0])
            interaction = False
            if len(rev_ol) != 0:
                for cluster in rev_ol:
                    distance = self.getParticleDistance(adatom.getX(), adatom.getY(), cluster.getX(), cluster.getY())
                    if self.checkGreatProhability(adatom.getREv(), cluster.getREv(), adatom.getR(), cluster.getR(), distance) >= 1:
                        pServ.adatomClusterWW(initval, adatom, cluster, adatomWWList, clusterList, coalescenceList)
                        if cluster.getN() == 1:
                            smeasure.adatomEvent('nucleation',1)
                        else:
                            smeasure.adatomEvent('aggregation',1)
                        interaction = True
                        break
                
                ''' *** Rev Overlap for small WQS *** '''
                if interaction == False:
                    for cluster in rev_ol:
                        distance = self.getParticleDistance(adatom.getX(), adatom.getY(), cluster.getX(), cluster.getY())
                        WQS = self.getCollisionProhability(adatom.getREv(), cluster.getREv(), adatom.getR(), cluster.getR(), distance)
                        if random() < WQS:
                            pServ.adatomClusterWW(initval, adatom, cluster, adatomWWList, clusterList, coalescenceList)
                            if cluster.getN() == 1:
                                smeasure.adatomEvent('nucleation',2)
                            else:
                                smeasure.adatomEvent('aggregation',1)
                            interaction = True
                            break