def solve_problem2_v1(m, element_type='P1'): ''' old solver ''' if element_type == 'P1': element = {'w': ElementTriP1(), 'u': ElementTriMorley()} elif element_type == 'P2': element = {'w': ElementTriP2(), 'u': ElementTriMorley()} else: raise Exception("The element not supported") basis = { variable: InteriorBasis(m, e, intorder=intorder) for variable, e in element.items() } K1 = asm(laplace, basis['w']) f1 = asm(f_load, basis['w']) wh = solve(*condense(K1, f1, D=basis['w'].find_dofs()), solver=solver_iter_krylov(Precondition=True, tol=tol)) fbasis = FacetBasis(m, element['u']) p1 = asm(penalty_1, fbasis) p2 = asm(penalty_2, fbasis) p3 = asm(penalty_3, fbasis) P = p1 + p2 + p3 K2 = epsilon**2 * asm(a_load, basis['u']) + \ epsilon**2 * P + asm(b_load, basis['u']) f2 = asm(wv_load, basis['w'], basis['u']) * wh uh0 = solve(*condense(K2, f2, D=easy_boundary_penalty(basis['u'])), solver=solver_iter_krylov(Precondition=True, tol=tol)) return uh0, basis
def solve_problem1_v1(m, element_type='P1'): ''' old solver for problem 1, can't read f ''' if element_type == 'P1': element = {'w': ElementTriP1(), 'u': ElementTriMorley()} elif element_type == 'P2': element = {'w': ElementTriP2(), 'u': ElementTriMorley()} else: raise Exception("The element not supported") basis = { variable: InteriorBasis(m, e, intorder=intorder) for variable, e in element.items() } # intorder: integration order for quadrature K1 = asm(laplace, basis['w']) f1 = asm(f_load, basis['w']) wh = solve(*condense(K1, f1, D=basis['w'].find_dofs()), solver=solver_iter_krylov(Precondition=True, tol=tol)) wh = solve(*condense(K1, f1, D=basis['w'].find_dofs()), solver=solver_iter_pyamg(tol=tol)) K2 = epsilon**2 * asm(a_load, basis['u']) + asm(b_load, basis['u']) f2 = asm(wv_load, basis['w'], basis['u']) * wh uh0 = solve(*condense(K2, f2, D=easy_boundary(basis['u'])), solver=solver_iter_krylov(Precondition=True, tol=tol)) # cg return uh0, basis