def __init__(self, extballfn, extstickfn, forcevec, kassigner): self.ballfn = extballfn self.stickfn = extstickfn self.f = forcevec self.kassigner = kassigner self.bdata = bbtmio.read_ball_file(extballfn) self.ballnum = len(self.bdata['COORDX']) self.sdata = bbtmio.read_stick_file(extstickfn) self.sticknum = len(self.sdata['BALL1']) self.k_mat = self.__get_k_matrix()
def __init__(self,ballfn,stickfn): ball_data = bbtmio.read_ball_file(ballfn) ballnum = len(ball_data['COORDX']) stick_data = bbtmio.read_stick_file(stickfn) sticknum = len(stick_data['BALL1']) # stick orientation dict self.sodict = {} # stick type dict self.stdict = {} # loop over stick for i in range(sticknum): id1 = stick_data['BALL1'][i] id2 = stick_data['BALL2'][i] # make sure 1st endball id always less than or eq to 2nd endball id if id1 > id2: id1, id2 = id2, id1 self.stdict[(id1,id2)] = stick_data['TYPE'][i] # ball1 coord coord1 = np.array( (ball_data['COORDX'][id1], ball_data['COORDY'][id1], ball_data['COORDZ'][id1]) ).reshape((1,3)) # ball2 coord coord2 = np.array( (ball_data['COORDX'][id2], ball_data['COORDY'][id2], ball_data['COORDZ'][id2]) ).reshape((1,3)) # stick vector stick = coord1 - coord2 # stick orientation so = stick / np.linalg.norm(stick) # calculate block # block(ijpair)=| ll lm ln | # | lm mm mn | # | ln mn nn | block = np.empty((3,3)) for j in range(3): for k in range(3): block[j][k] = so[0][j]*so[0][k] self[id1, id2] = block