예제 #1
0
 def __genElasticConn(self, particle, elasticParticles):
     '''
     Find elastc neighbour for particle
     extend elastic connections list
     '''
     nMi = elasticParticles.index(particle)*self.nMuscles/len(elasticParticles);
     neighbour_collection = [p for p in elasticParticles if Particle.dot_particles(particle, p) <= Const.r0_squared * 3.05 and p != particle ]
     neighbour_collection.sort(key=lambda p: Particle.distBetween_particles(particle, p))
     if len(neighbour_collection) > Const.MAX_NUM_OF_NEIGHBOUR:
         neighbour_collection = neighbour_collection[0:Const.MAX_NUM_OF_NEIGHBOUR]
     elastic_connections_collection = []
     for p in neighbour_collection:
         nMj = elasticParticles.index(p) * self.nMuscles / len(elasticParticles)
         val1 = 0
         if self.nMuscles > 0:
             if nMj == nMi:
                 dx2 = particle.position.x - p.position.x
                 dy2 = particle.position.y - p.position.y
                 dz2 = particle.position.z - p.position.z
                 dx2 *= dx2
                 dy2 *= dy2
                 dz2 *= dz2 
                 val1 = (1.1+nMi)*float((dz2 > 100*dx2)and(dz2 > 100*dy2))  
         elastic_connections_collection.append( ElasticConnection(self.particles.index(p),Particle.distBetween_particles(p,particle), val1, 0) )
     '''
     If number of elastic connection less that MAX_NUM_OF_NEIGHBOUR then 
     we extend collection of elastic connection with non particle value
     '''
     if len(neighbour_collection) < Const.MAX_NUM_OF_NEIGHBOUR:
         elastic_connections_collection.extend([ElasticConnection(Const.NO_PARTICEL_ID,0,0,0)] * (Const.MAX_NUM_OF_NEIGHBOUR - len(neighbour_collection)) )
     self.elasticConnections.extend( elastic_connections_collection )
예제 #2
0
 def __genElasticConn(self, particle, elasticParticles, part_phys_mod):
     '''
     Find elastc neighbour for particle
     extend elastic connections list
     '''
     nMi = elasticParticles.index(particle) * self.nMuscles / len(
         elasticParticles)
     neighbour_collection = []
     for p_i in range(len(elasticParticles)):
         p = elasticParticles[p_i]
         if Particle.dot_particles(particle, p) <= (
                 part_phys_mod * part_phys_mod) * 3.05 and p != particle:
             neighbour_collection.append(p)
     neighbour_collection.sort(
         key=lambda p: Particle.distBetween_particles(particle, p))
     if len(neighbour_collection) > Const.MAX_NUM_OF_NEIGHBOUR:
         neighbour_collection = neighbour_collection[0:Const.
                                                     MAX_NUM_OF_NEIGHBOUR]
     elastic_connections_collection = []
     for p in neighbour_collection:
         nMj = elasticParticles.index(p) * self.nMuscles / len(
             elasticParticles)
         val1 = 0
         if self.nMuscles > 0:
             if nMj == nMi:
                 dx2 = particle.position.x - p.position.x
                 dy2 = particle.position.y - p.position.y
                 dz2 = particle.position.z - p.position.z
                 dx2 *= dx2
                 dy2 *= dy2
                 dz2 *= dz2
                 val1 = (1.1 + nMi) * float(
                     (dz2 > 100 * dx2) and (dz2 > 100 * dy2))
         elastic_connections_collection.append(
             ElasticConnection(self.particles.index(p),
                               Particle.distBetween_particles(p, particle),
                               val1, 0))
     '''
     If number of elastic connection less that MAX_NUM_OF_NEIGHBOUR then 
     we extend collection of elastic connection with non particle value
     '''
     if len(neighbour_collection) < Const.MAX_NUM_OF_NEIGHBOUR:
         elastic_connections_collection.extend(
             [ElasticConnection(Const.NO_PARTICEL_ID, 0, 0, 0)] *
             (Const.MAX_NUM_OF_NEIGHBOUR - len(neighbour_collection)))
     self.elasticConnections.extend(elastic_connections_collection)