Ejemplo n.º 1
0
def matrix_el(elem):
	res = matrix_2.Matrix(m = 3, n = 3)
	k3 = [elem_plane(elem, x) for x in elem]
	beta = [ a[1] for a in k3]
	gama = [ a[2] for a in k3]
	res.M = [[(beta[m]*beta[n] + gama[m]*gama[n]) for n in [0,1,2]]
	                                              for m in [0,1,2]]
	border = [ x for x in dekart_product(elem,elem) if x in lim_points]
	mat = matrix_2.Matrix(m = 3, n = 3)
	if border:
		edge = border[0]
		print("border")
		p1 = points[edge[0]]
		p2 = points[edge[1]]
		tmp_k = alpha/3 * dist(p1, p2)
		mat.M = [[1.0, 0.0, 0.5],
		         [0.0, 0.0, 0.0],
		         [0.5, 0.0, 1.0]]
		G = mat * tmp_k
		f_bord = phi(*median(p1, p2)) * 1/2*dist(p1, p2)

	else:
		print("area", elem)
		mat.M = [[0.0]*3] * 3
		G = mat
		f_bord = 0
	vec = matrix_2.Matrix(m = 3, n = 1)
	center = median(points[elem[0]],points[elem[1]],points[elem[2]])
	f_start = func_start(*center) * square(elem) / 3
	vec.M[0][0] = f_bord - f_start
	vec.M[1][0] = -f_start
	vec.M[2][0] = f_bord - f_start
	
	return (res + mat), vec
Ejemplo n.º 2
0
Archivo: mke2d.py Proyecto: spetz911/CM
def matrix_el(elem, lim_points, points):
	print('matrix_el', elem)
	global alpha
	res = matrix_2.Matrix(m = 3, n = 3)

	values = [points[x] for x in elem]
#	print('values', values)
	k3 = [elem_plane(i, values) for i in range(len(values))]
#	print('k3 =', k3)
	beta = [ a[1] for a in k3]
	gama = [ a[2] for a in k3]

	# local matrix
	res.M = [[(beta[m]*beta[n] + gama[m]*gama[n]) for n in [0,1,2]]
	                                              for m in [0,1,2]]

	el_square = square(values)
	res = res * el_square

	border = [ x for x in dekart_product(elem,elem) if x in lim_points]

#	print('border =', border)
#	print('dekart_product(elem,elem)', list(dekart_product(elem,elem)))
#	print(lim_points)

	if border:
		edge = border[0]
#		print("border")
		p1 = points[edge[0]]
		p2 = points[edge[1]]
		i = elem.index(edge[0])
		k = elem.index(edge[1])
		bord_dist = dist(p1, p2)
		bord_fun = 0.5 * bord_dist * phi(*median(p1, p2))
	else:
		bord_dist = 0.0
		bord_fun = 0.0
		i = k = 0

	mat = matrix_2.Matrix(m = 3, n = 3)
	mat.M = [[0.0] * 3 for i in range(3)]
	mat[i][i] = 1.0
	mat[k][k] = 1.0
	mat[i][k] = 0.5
	mat[k][i] = 0.5

	mat = mat * (alpha/3 * bord_dist)

	vec = matrix_2.Matrix(m = 3, n = 1)
	
	f_start = func_start(*median(*values)) * el_square / 3
	
	print ('f_start =', bord_fun)
	
	vec.M[0][0] = -f_start
	vec.M[1][0] = -f_start
	vec.M[2][0] = -f_start
	
	vec.M[i][0] += bord_fun
	vec.M[k][0] += bord_fun
	
	return (res + mat), vec
Ejemplo n.º 3
0
Archivo: mke2d.py Proyecto: spetz911/CM
def mke_solve(elems, lim_points, points):
	global alpha
	mat = matrix_2.Matrix(m = len(points), n = len(points))
	mat = mat * 0
	
	vec = matrix_2.Matrix(m = len(points), n = 1)
	vec = vec * 0

	al =   [0.0]*len(points)
	beta = [0.0]*len(points)
	gama = [0.0]*len(points)
	
	for num,el in enumerate(elems):
		print('matrix_el', el)
		values = [points[x] for x in el]
		el_square = square(values)
		f_start = func_start(*median(*values)) * el_square / 3
		
		for i,e in enumerate(el):
			plane = elem_plane(i, values)
#			print(plane)
			al[e] = plane[0]
			beta[e] = plane[1]
			gama[e] = plane[2]

#		print('alph =', al)
#		print('beta =', beta)
#		print('gama =', gama)

		for p1, p2 in dekart_product(el,el):
			mat[p1][p2] += (beta[p1]*beta[p2] + gama[p1]*gama[p2]) * el_square
			
		border = [ x for x in dekart_product(el,el) if x in lim_points]
		
		print('border', border)
		
		if border:
			i,k = border[0]
			[j] = [x for x in el if x!=i and x!=k]
			bord_dist = dist(points[i], points[k])
			bord_fun = 0.5 * bord_dist * phi(*median(points[i], points[k]))
			
			mat[i][i] += 1.0 * bord_dist * alpha/3
			mat[k][k] += 1.0 * bord_dist * alpha/3
			mat[i][k] += 0.5 * bord_dist * alpha/3
			mat[k][i] += 0.5 * bord_dist * alpha/3
			
			vec[i][0] += bord_fun
			vec[k][0] += bord_fun
			
			print ('f_start =', bord_fun)
	
		else:
			i,j,k = el
			bord_dist = 0.0
			bord_fun = 0.0
			
		vec[i][0] -= f_start
		vec[j][0] -= f_start
		vec[k][0] -= f_start
		
		

	return mat, vec