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 )
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)