# LSQ BC
```
col_to_index = {}
index = 0
indices = []
total_size = 0
for b in dirichlet_boundaries:
e = b.element_id()
ref_pts = sample(b)
total_size+=ref_pts.shape[0]
for l_b in e.bases():
if is_boundary_node(l_b.global_index):
if not l_b.global_index in col_to_index:
col_to_index[l_b.global_index] = index++
indices.append(index)
ii = []
jj = []
vv = []
rhs = zeros((total_size, dim))
g_index = 0
for b in dirichlet_boundaries:
e = b.element_id()
ref_pts = sample(b)
pts = b.eval_gmapping(ref_pts)
bc = eval_dirichlet(pts)
rhs[g_index:g_index+bc.shape[0], :] = bc
for l_b in e.bases():
# not boudanry
if not l_b.global_index in col_to_index:
continue
b_eval = l_b.eval(ref_pts)
index = col_to_index(l_b.global_index)
for i in range(len(b_eval)):
ii.appennd(g_index + i)
index.appennd(g_index)
vv.append(b_eval[i])
g_index += bc.shape[0]
M = sparse(ii, jj, vv)
sols = solve(M.T @ M, M.T @ rhs)
for i in range(sols.shape[0]):
for d in range(dim):
real_rhs[indices[i]*dim + d] = sols[i, d]