def test_separated_parametrized_forms_vector_18(): a18 = inner(grad(expr14[0]), u) * v[0] * dx + expr14[0].dx(0) * inner( u, v) * dx a18_sep = SeparatedParametrizedForm(a18) log(PROGRESS, "*** ### FORM 18 ### ***") log( PROGRESS, "This form is similar to form 14, but each term is multiplied by the gradient/partial derivative of a component of a Function which is not solution of a parametrized problem. This results in no parametrized coefficients" ) a18_sep.separate() log( PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a18_sep.coefficients)) + "\n") assert 0 == len(a18_sep.coefficients) log( PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a18_sep._form_unchanged)) + "\n") assert 2 == len(a18_sep._form_unchanged) log( PROGRESS, "\tUnchanged forms:\n" + "\t\t" + str(a18_sep._form_unchanged[0].integrals()[0].integrand()) + "\n" + "\t\t" + str(a18_sep._form_unchanged[1].integrals()[0].integrand()) + "\n") assert "v_0[0] * (sum_{i_{177}} (grad(f_30))[0, i_{177}] * v_1[i_{177}] )" == str( a18_sep._form_unchanged[0].integrals()[0].integrand()) assert "(grad(f_30))[0, 0] * (sum_{i_{178}} v_0[i_{178}] * v_1[i_{178}] )" == str( a18_sep._form_unchanged[1].integrals()[0].integrand())
def test_separated_parametrized_forms_vector_17(): a17 = inner(grad(expr14) * grad(u), grad(v)) * dx + inner( grad(u) * grad(expr13), v) * dx + expr13.dx(0) * inner(u, v) * dx a17_sep = SeparatedParametrizedForm(a17) log(PROGRESS, "*** ### FORM 17 ### ***") log( PROGRESS, "This form is similar to form 13, but each term is multiplied by a the gradient/partial derivative of Function, which is not the solution of a parametrized problem. This results in no parametrized coefficients" ) a17_sep.separate() log( PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a17_sep.coefficients)) + "\n") assert 0 == len(a17_sep.coefficients) log( PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a17_sep._form_unchanged)) + "\n") assert 3 == len(a17_sep._form_unchanged) log( PROGRESS, "\tUnchanged forms:\n" + "\t\t" + str(a17_sep._form_unchanged[0].integrals()[0].integrand()) + "\n" + "\t\t" + str(a17_sep._form_unchanged[1].integrals()[0].integrand()) + "\n" + "\t\t" + str(a17_sep._form_unchanged[2].integrals()[0].integrand()) + "\n") assert "sum_{i_{174}} sum_{i_{173}} ({ A | A_{i_{168}, i_{169}} = sum_{i_{170}} (grad(v_1))[i_{170}, i_{169}] * (grad(f_30))[i_{168}, i_{170}] })[i_{173}, i_{174}] * (grad(v_0))[i_{173}, i_{174}] " == str( a17_sep._form_unchanged[0].integrals()[0].integrand()) assert "sum_{i_{175}} ({ A | A_{i_{171}} = sum_{i_{172}} (grad(v_1))[i_{171}, i_{172}] * (grad(f_27))[i_{172}] })[i_{175}] * v_0[i_{175}] " == str( a17_sep._form_unchanged[1].integrals()[0].integrand()) assert "(grad(f_27))[0] * (sum_{i_{176}} v_0[i_{176}] * v_1[i_{176}] )" == str( a17_sep._form_unchanged[2].integrals()[0].integrand())
def test_separated_parametrized_forms_vector_12(): a12 = expr11[0]*inner(u, v)*dx a12_sep = SeparatedParametrizedForm(a12) log(PROGRESS, "*** ### FORM 12 ### ***") log(PROGRESS, "This form is similar to form 11, but each term is multiplied by a component of a solution of a parametrized problem, resulting in an Indexed coefficient") a12_sep.separate() log(PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a12_sep.coefficients)) + "\n" ) assert 1 == len(a12_sep.coefficients) log(PROGRESS, "\tSublen coefficients:\n" + "\t\t" + str(len(a12_sep.coefficients[0])) + "\n" ) assert 1 == len(a12_sep.coefficients[0]) log(PROGRESS, "\tCoefficients:\n" + "\t\t" + str(a12_sep.coefficients[0][0]) + "\n" ) assert "f_21[0]" == str(a12_sep.coefficients[0][0]) log(PROGRESS, "\tPlaceholders:\n" + "\t\t" + str(a12_sep._placeholders[0][0]) + "\n" ) assert "f_65" == str(a12_sep._placeholders[0][0]) log(PROGRESS, "\tForms with placeholders:\n" + "\t\t" + str(a12_sep._form_with_placeholders[0].integrals()[0].integrand()) + "\n" ) assert "f_65 * (sum_{i_{144}} v_0[i_{144}] * v_1[i_{144}] )" == str(a12_sep._form_with_placeholders[0].integrals()[0].integrand()) log(PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a12_sep._form_unchanged)) + "\n" ) assert 0 == len(a12_sep._form_unchanged)
def test_separated_parametrized_forms_vector_6(): a6 = inner(expr7 * grad(u), grad(v)) * dx + inner( grad(u) * expr6, v) * dx + expr5 * inner(u, v) * dx a6_sep = SeparatedParametrizedForm(a6) log(PROGRESS, "*** ### FORM 6 ### ***") log( PROGRESS, "We change the coefficients to be non-parametrized. No (parametrized) coefficients are extracted this time" ) a6_sep.separate() log( PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a6_sep.coefficients)) + "\n") assert 0 == len(a6_sep.coefficients) log( PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a6_sep._form_unchanged)) + "\n") assert 3 == len(a6_sep._form_unchanged) log( PROGRESS, "\tUnchanged forms:\n" + "\t\t" + str(a6_sep._form_unchanged[0].integrals()[0].integrand()) + "\n" + "\t\t" + str(a6_sep._form_unchanged[1].integrals()[0].integrand()) + "\n" + "\t\t" + str(a6_sep._form_unchanged[2].integrals()[0].integrand()) + "\n") assert "sum_{i_{72}} sum_{i_{71}} ({ A | A_{i_{66}, i_{67}} = sum_{i_{68}} f_11[i_{66}, i_{68}] * (grad(v_1))[i_{68}, i_{67}] })[i_{71}, i_{72}] * (grad(v_0))[i_{71}, i_{72}] " == str( a6_sep._form_unchanged[0].integrals()[0].integrand()) assert "sum_{i_{73}} ({ A | A_{i_{69}} = sum_{i_{70}} f_10[i_{70}] * (grad(v_1))[i_{69}, i_{70}] })[i_{73}] * v_0[i_{73}] " == str( a6_sep._form_unchanged[1].integrals()[0].integrand()) assert "f_9 * (sum_{i_{74}} v_0[i_{74}] * v_1[i_{74}] )" == str( a6_sep._form_unchanged[2].integrals()[0].integrand())
def test_separated_parametrized_forms_vector_13(): a13 = inner(expr15 * grad(u), grad(v)) * dx + inner( grad(u) * expr14, v) * dx + expr13 * inner(u, v) * dx a13_sep = SeparatedParametrizedForm(a13) log(PROGRESS, "*** ### FORM 13 ### ***") log( PROGRESS, "This form is similar to form 11, but each term is multiplied by a Function, which is not the solution of a parametrized problem. This results in no parametrized coefficients" ) a13_sep.separate() log( PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a13_sep.coefficients)) + "\n") assert 0 == len(a13_sep.coefficients) log( PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a13_sep._form_unchanged)) + "\n") assert 3 == len(a13_sep._form_unchanged) log( PROGRESS, "\tUnchanged forms:\n" + "\t\t" + str(a13_sep._form_unchanged[0].integrals()[0].integrand()) + "\n" + "\t\t" + str(a13_sep._form_unchanged[1].integrals()[0].integrand()) + "\n" + "\t\t" + str(a13_sep._form_unchanged[2].integrals()[0].integrand()) + "\n") assert "sum_{i_{151}} sum_{i_{150}} ({ A | A_{i_{145}, i_{146}} = sum_{i_{147}} f_33[i_{145}, i_{147}] * (grad(v_1))[i_{147}, i_{146}] })[i_{150}, i_{151}] * (grad(v_0))[i_{150}, i_{151}] " == str( a13_sep._form_unchanged[0].integrals()[0].integrand()) assert "sum_{i_{152}} ({ A | A_{i_{148}} = sum_{i_{149}} f_30[i_{149}] * (grad(v_1))[i_{148}, i_{149}] })[i_{152}] * v_0[i_{152}] " == str( a13_sep._form_unchanged[1].integrals()[0].integrand()) assert "f_27 * (sum_{i_{153}} v_0[i_{153}] * v_1[i_{153}] )" == str( a13_sep._form_unchanged[2].integrals()[0].integrand())
def test_separated_parametrized_forms_vector_5(): h = CellDiameter(mesh) a5 = inner((expr3 * h) * grad(u), grad(v)) * dx + inner( grad(u) * (expr2 * h), v) * dx + (expr1 * h) * inner(u, v) * dx a5_sep = SeparatedParametrizedForm(a5) log(PROGRESS, "*** ### FORM 5 ### ***") log( PROGRESS, "Starting from form 4, use parenthesis to make sure that the extracted coefficients retain the mesh size factor" ) a5_sep.separate() log( PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a5_sep.coefficients)) + "\n") assert 3 == len(a5_sep.coefficients) log( PROGRESS, "\tSublen coefficients:\n" + "\t\t" + str(len(a5_sep.coefficients[0])) + "\n" + "\t\t" + str(len(a5_sep.coefficients[1])) + "\n" + "\t\t" + str(len(a5_sep.coefficients[2])) + "\n") assert 1 == len(a5_sep.coefficients[0]) assert 1 == len(a5_sep.coefficients[1]) assert 1 == len(a5_sep.coefficients[2]) log( PROGRESS, "\tCoefficients:\n" + "\t\t" + str(a5_sep.coefficients[0][0]) + "\n" + "\t\t" + str(a5_sep.coefficients[1][0]) + "\n" + "\t\t" + str(a5_sep.coefficients[2][0]) + "\n") assert "{ A | A_{i_{54}, i_{55}} = diameter * f_7[i_{54}, i_{55}] }" == str( a5_sep.coefficients[0][0]) assert "{ A | A_{i_{59}} = diameter * f_6[i_{59}] }" == str( a5_sep.coefficients[1][0]) assert "diameter * f_5" == str(a5_sep.coefficients[2][0]) log( PROGRESS, "\tPlaceholders:\n" + "\t\t" + str(a5_sep._placeholders[0][0]) + "\n" + "\t\t" + str(a5_sep._placeholders[1][0]) + "\n" + "\t\t" + str(a5_sep._placeholders[2][0]) + "\n") assert "f_51" == str(a5_sep._placeholders[0][0]) assert "f_52" == str(a5_sep._placeholders[1][0]) assert "f_53" == str(a5_sep._placeholders[2][0]) log( PROGRESS, "\tForms with placeholders:\n" + "\t\t" + str(a5_sep._form_with_placeholders[0].integrals()[0].integrand()) + "\n" + "\t\t" + str(a5_sep._form_with_placeholders[1].integrals()[0].integrand()) + "\n" + "\t\t" + str(a5_sep._form_with_placeholders[2].integrals()[0].integrand()) + "\n") assert "sum_{i_{63}} sum_{i_{62}} ({ A | A_{i_{56}, i_{57}} = sum_{i_{58}} f_51[i_{56}, i_{58}] * (grad(v_1))[i_{58}, i_{57}] })[i_{62}, i_{63}] * (grad(v_0))[i_{62}, i_{63}] " == str( a5_sep._form_with_placeholders[0].integrals()[0].integrand()) assert "sum_{i_{64}} ({ A | A_{i_{60}} = sum_{i_{61}} f_52[i_{61}] * (grad(v_1))[i_{60}, i_{61}] })[i_{64}] * v_0[i_{64}] " == str( a5_sep._form_with_placeholders[1].integrals()[0].integrand()) assert "f_53 * (sum_{i_{65}} v_0[i_{65}] * v_1[i_{65}] )" == str( a5_sep._form_with_placeholders[2].integrals()[0].integrand()) log( PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a5_sep._form_unchanged)) + "\n") assert 0 == len(a5_sep._form_unchanged)
def test_separated_parametrized_forms_vector_4(): h = CellDiameter(mesh) a4 = inner(expr3 * h * grad(u), grad(v)) * dx + inner( grad(u) * expr2 * h, v) * dx + expr1 * h * inner(u, v) * dx a4_sep = SeparatedParametrizedForm(a4) log(PROGRESS, "*** ### FORM 4 ### ***") log( PROGRESS, "We add a term depending on the mesh size. The extracted coefficients may retain the mesh size factor depending on the UFL tree" ) a4_sep.separate() log( PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a4_sep.coefficients)) + "\n") assert 3 == len(a4_sep.coefficients) log( PROGRESS, "\tSublen coefficients:\n" + "\t\t" + str(len(a4_sep.coefficients[0])) + "\n" + "\t\t" + str(len(a4_sep.coefficients[1])) + "\n" + "\t\t" + str(len(a4_sep.coefficients[2])) + "\n") assert 1 == len(a4_sep.coefficients[0]) assert 1 == len(a4_sep.coefficients[1]) assert 1 == len(a4_sep.coefficients[2]) log( PROGRESS, "\tCoefficients:\n" + "\t\t" + str(a4_sep.coefficients[0][0]) + "\n" + "\t\t" + str(a4_sep.coefficients[1][0]) + "\n" + "\t\t" + str(a4_sep.coefficients[2][0]) + "\n") assert "{ A | A_{i_{42}, i_{43}} = diameter * f_7[i_{42}, i_{43}] }" == str( a4_sep.coefficients[0][0]) assert "f_6" == str(a4_sep.coefficients[1][0]) assert "diameter * f_5" == str(a4_sep.coefficients[2][0]) log( PROGRESS, "\tPlaceholders:\n" + "\t\t" + str(a4_sep._placeholders[0][0]) + "\n" + "\t\t" + str(a4_sep._placeholders[1][0]) + "\n" + "\t\t" + str(a4_sep._placeholders[2][0]) + "\n") assert "f_48" == str(a4_sep._placeholders[0][0]) assert "f_49" == str(a4_sep._placeholders[1][0]) assert "f_50" == str(a4_sep._placeholders[2][0]) log( PROGRESS, "\tForms with placeholders:\n" + "\t\t" + str(a4_sep._form_with_placeholders[0].integrals()[0].integrand()) + "\n" + "\t\t" + str(a4_sep._form_with_placeholders[1].integrals()[0].integrand()) + "\n" + "\t\t" + str(a4_sep._form_with_placeholders[2].integrals()[0].integrand()) + "\n") assert "sum_{i_{51}} sum_{i_{50}} ({ A | A_{i_{44}, i_{45}} = sum_{i_{46}} f_48[i_{44}, i_{46}] * (grad(v_1))[i_{46}, i_{45}] })[i_{50}, i_{51}] * (grad(v_0))[i_{50}, i_{51}] " == str( a4_sep._form_with_placeholders[0].integrals()[0].integrand()) assert "sum_{i_{52}} ({ A | A_{i_{49}} = diameter * ({ A | A_{i_{47}} = sum_{i_{48}} f_49[i_{48}] * (grad(v_1))[i_{47}, i_{48}] })[i_{49}] })[i_{52}] * v_0[i_{52}] " == str( a4_sep._form_with_placeholders[1].integrals()[0].integrand()) assert "f_50 * (sum_{i_{53}} v_0[i_{53}] * v_1[i_{53}] )" == str( a4_sep._form_with_placeholders[2].integrals()[0].integrand()) log( PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a4_sep._form_unchanged)) + "\n") assert 0 == len(a4_sep._form_unchanged)
def test_separated_parametrized_forms_vector_2(): a2 = inner(expr3 * expr4 * grad(u), grad(v)) * dx + inner( grad(u) * expr2, v) * dx + expr1 * inner(u, v) * dx a2_sep = SeparatedParametrizedForm(a2) log(PROGRESS, "*** ### FORM 2 ### ***") log( PROGRESS, "In this case the diffusivity tensor is given by the product of two expressions" ) a2_sep.separate() log( PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a2_sep.coefficients)) + "\n") assert 3 == len(a2_sep.coefficients) log( PROGRESS, "\tSublen coefficients:\n" + "\t\t" + str(len(a2_sep.coefficients[0])) + "\n" + "\t\t" + str(len(a2_sep.coefficients[1])) + "\n" + "\t\t" + str(len(a2_sep.coefficients[2])) + "\n") assert 1 == len(a2_sep.coefficients[0]) assert 1 == len(a2_sep.coefficients[1]) assert 1 == len(a2_sep.coefficients[2]) log( PROGRESS, "\tCoefficients:\n" + "\t\t" + str(a2_sep.coefficients[0][0]) + "\n" + "\t\t" + str(a2_sep.coefficients[1][0]) + "\n" + "\t\t" + str(a2_sep.coefficients[2][0]) + "\n") assert "{ A | A_{i_{17}, i_{18}} = sum_{i_{19}} f_7[i_{17}, i_{19}] * f_8[i_{19}, i_{18}] }" == str( a2_sep.coefficients[0][0]) assert "f_6" == str(a2_sep.coefficients[1][0]) assert "f_5" == str(a2_sep.coefficients[2][0]) log( PROGRESS, "\tPlaceholders:\n" + "\t\t" + str(a2_sep._placeholders[0][0]) + "\n" + "\t\t" + str(a2_sep._placeholders[1][0]) + "\n" + "\t\t" + str(a2_sep._placeholders[2][0]) + "\n") assert "f_39" == str(a2_sep._placeholders[0][0]) assert "f_40" == str(a2_sep._placeholders[1][0]) assert "f_41" == str(a2_sep._placeholders[2][0]) log( PROGRESS, "\tForms with placeholders:\n" + "\t\t" + str(a2_sep._form_with_placeholders[0].integrals()[0].integrand()) + "\n" + "\t\t" + str(a2_sep._form_with_placeholders[1].integrals()[0].integrand()) + "\n" + "\t\t" + str(a2_sep._form_with_placeholders[2].integrals()[0].integrand()) + "\n") assert "sum_{i_{26}} sum_{i_{25}} ({ A | A_{i_{20}, i_{21}} = sum_{i_{22}} f_39[i_{20}, i_{22}] * (grad(v_1))[i_{22}, i_{21}] })[i_{25}, i_{26}] * (grad(v_0))[i_{25}, i_{26}] " == str( a2_sep._form_with_placeholders[0].integrals()[0].integrand()) assert "sum_{i_{27}} ({ A | A_{i_{23}} = sum_{i_{24}} f_40[i_{24}] * (grad(v_1))[i_{23}, i_{24}] })[i_{27}] * v_0[i_{27}] " == str( a2_sep._form_with_placeholders[1].integrals()[0].integrand()) assert "f_41 * (sum_{i_{28}} v_0[i_{28}] * v_1[i_{28}] )" == str( a2_sep._form_with_placeholders[2].integrals()[0].integrand()) log( PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a2_sep._form_unchanged)) + "\n") assert 0 == len(a2_sep._form_unchanged)
def test_separated_parametrized_forms_vector_1(): a1 = inner(expr3 * grad(u), grad(v)) * dx + inner( grad(u) * expr2, v) * dx + expr1 * inner(u, v) * dx a1_sep = SeparatedParametrizedForm(a1) log(PROGRESS, "*** ### FORM 1 ### ***") log( PROGRESS, "This is a basic vector advection-diffusion-reaction parametrized form, with all parametrized coefficients" ) a1_sep.separate() log( PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a1_sep.coefficients)) + "\n") assert 3 == len(a1_sep.coefficients) log( PROGRESS, "\tSublen coefficients:\n" + "\t\t" + str(len(a1_sep.coefficients[0])) + "\n" + "\t\t" + str(len(a1_sep.coefficients[1])) + "\n" + "\t\t" + str(len(a1_sep.coefficients[2])) + "\n") assert 1 == len(a1_sep.coefficients[0]) assert 1 == len(a1_sep.coefficients[1]) assert 1 == len(a1_sep.coefficients[2]) log( PROGRESS, "\tCoefficients:\n" + "\t\t" + str(a1_sep.coefficients[0][0]) + "\n" + "\t\t" + str(a1_sep.coefficients[1][0]) + "\n" + "\t\t" + str(a1_sep.coefficients[2][0]) + "\n") assert "f_7" == str(a1_sep.coefficients[0][0]) assert "f_6" == str(a1_sep.coefficients[1][0]) assert "f_5" == str(a1_sep.coefficients[2][0]) log( PROGRESS, "\tPlaceholders:\n" + "\t\t" + str(a1_sep._placeholders[0][0]) + "\n" + "\t\t" + str(a1_sep._placeholders[1][0]) + "\n" + "\t\t" + str(a1_sep._placeholders[2][0]) + "\n") assert "f_36" == str(a1_sep._placeholders[0][0]) assert "f_37" == str(a1_sep._placeholders[1][0]) assert "f_38" == str(a1_sep._placeholders[2][0]) log( PROGRESS, "\tForms with placeholders:\n" + "\t\t" + str(a1_sep._form_with_placeholders[0].integrals()[0].integrand()) + "\n" + "\t\t" + str(a1_sep._form_with_placeholders[1].integrals()[0].integrand()) + "\n" + "\t\t" + str(a1_sep._form_with_placeholders[2].integrals()[0].integrand()) + "\n") assert "sum_{i_{14}} sum_{i_{13}} ({ A | A_{i_8, i_9} = sum_{i_{10}} f_36[i_8, i_{10}] * (grad(v_1))[i_{10}, i_9] })[i_{13}, i_{14}] * (grad(v_0))[i_{13}, i_{14}] " == str( a1_sep._form_with_placeholders[0].integrals()[0].integrand()) assert "sum_{i_{15}} ({ A | A_{i_{11}} = sum_{i_{12}} f_37[i_{12}] * (grad(v_1))[i_{11}, i_{12}] })[i_{15}] * v_0[i_{15}] " == str( a1_sep._form_with_placeholders[1].integrals()[0].integrand()) assert "f_38 * (sum_{i_{16}} v_0[i_{16}] * v_1[i_{16}] )" == str( a1_sep._form_with_placeholders[2].integrals()[0].integrand()) log( PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a1_sep._form_unchanged)) + "\n") assert 0 == len(a1_sep._form_unchanged)
def test_separated_parametrized_forms_vector_15(): a15 = inner(grad(expr11) * grad(u), grad(v)) * dx + inner( grad(u) * grad(expr10), v) * dx + expr10.dx(0) * inner(u, v) * dx a15_sep = SeparatedParametrizedForm(a15) log(PROGRESS, "*** ### FORM 15 ### ***") log( PROGRESS, "This form is similar to form 11, but each term is multiplied by the gradient/partial derivative of a Function, which is the solution of a parametrized problem" ) a15_sep.separate() log( PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a15_sep.coefficients)) + "\n") assert 3 == len(a15_sep.coefficients) log( PROGRESS, "\tSublen coefficients:\n" + "\t\t" + str(len(a15_sep.coefficients[0])) + "\n" + "\t\t" + str(len(a15_sep.coefficients[1])) + "\n" + "\t\t" + str(len(a15_sep.coefficients[2])) + "\n") assert 1 == len(a15_sep.coefficients[0]) assert 1 == len(a15_sep.coefficients[1]) assert 1 == len(a15_sep.coefficients[2]) log( PROGRESS, "\tCoefficients:\n" + "\t\t" + str(a15_sep.coefficients[0][0]) + "\n" + "\t\t" + str(a15_sep.coefficients[1][0]) + "\n" + "\t\t" + str(a15_sep.coefficients[2][0]) + "\n") assert "grad(f_21)" == str(a15_sep.coefficients[0][0]) assert "grad(f_18)" == str(a15_sep.coefficients[1][0]) assert "(grad(f_18))[0]" == str(a15_sep.coefficients[2][0]) log( PROGRESS, "\tPlaceholders:\n" + "\t\t" + str(a15_sep._placeholders[0][0]) + "\n" + "\t\t" + str(a15_sep._placeholders[1][0]) + "\n" + "\t\t" + str(a15_sep._placeholders[2][0]) + "\n") assert "f_66" == str(a15_sep._placeholders[0][0]) assert "f_67" == str(a15_sep._placeholders[1][0]) assert "f_68" == str(a15_sep._placeholders[2][0]) log( PROGRESS, "\tForms with placeholders:\n" + "\t\t" + str(a15_sep._form_with_placeholders[0].integrals()[0].integrand()) + "\n" + "\t\t" + str(a15_sep._form_with_placeholders[1].integrals()[0].integrand()) + "\n" + "\t\t" + str(a15_sep._form_with_placeholders[2].integrals()[0].integrand()) + "\n") assert "sum_{i_{161}} sum_{i_{160}} ({ A | A_{i_{155}, i_{156}} = sum_{i_{157}} f_66[i_{155}, i_{157}] * (grad(v_1))[i_{157}, i_{156}] })[i_{160}, i_{161}] * (grad(v_0))[i_{160}, i_{161}] " == str( a15_sep._form_with_placeholders[0].integrals()[0].integrand()) assert "sum_{i_{162}} ({ A | A_{i_{158}} = sum_{i_{159}} f_67[i_{159}] * (grad(v_1))[i_{158}, i_{159}] })[i_{162}] * v_0[i_{162}] " == str( a15_sep._form_with_placeholders[1].integrals()[0].integrand()) assert "f_68 * (sum_{i_{163}} v_0[i_{163}] * v_1[i_{163}] )" == str( a15_sep._form_with_placeholders[2].integrals()[0].integrand()) log( PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a15_sep._form_unchanged)) + "\n") assert 0 == len(a15_sep._form_unchanged)
def test_separated_parametrized_forms_vector_11(): a11 = inner(expr12 * grad(u), grad(v)) * dx + inner( grad(u) * expr11, v) * dx + expr10 * inner(u, v) * dx a11_sep = SeparatedParametrizedForm(a11) log(PROGRESS, "*** ### FORM 11 ### ***") log( PROGRESS, "This form is similar to form 1, but each term is multiplied by a Function, which is the solution of a parametrized problem" ) a11_sep.separate() log( PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a11_sep.coefficients)) + "\n") assert 3 == len(a11_sep.coefficients) log( PROGRESS, "\tSublen coefficients:\n" + "\t\t" + str(len(a11_sep.coefficients[0])) + "\n" + "\t\t" + str(len(a11_sep.coefficients[1])) + "\n" + "\t\t" + str(len(a11_sep.coefficients[2])) + "\n") assert 1 == len(a11_sep.coefficients[0]) assert 1 == len(a11_sep.coefficients[1]) assert 1 == len(a11_sep.coefficients[2]) log( PROGRESS, "\tCoefficients:\n" + "\t\t" + str(a11_sep.coefficients[0][0]) + "\n" + "\t\t" + str(a11_sep.coefficients[1][0]) + "\n" + "\t\t" + str(a11_sep.coefficients[2][0]) + "\n") assert "f_24" == str(a11_sep.coefficients[0][0]) assert "f_21" == str(a11_sep.coefficients[1][0]) assert "f_18" == str(a11_sep.coefficients[2][0]) log( PROGRESS, "\tPlaceholders:\n" + "\t\t" + str(a11_sep._placeholders[0][0]) + "\n" + "\t\t" + str(a11_sep._placeholders[1][0]) + "\n" + "\t\t" + str(a11_sep._placeholders[2][0]) + "\n") assert "f_62" == str(a11_sep._placeholders[0][0]) assert "f_63" == str(a11_sep._placeholders[1][0]) assert "f_64" == str(a11_sep._placeholders[2][0]) log( PROGRESS, "\tForms with placeholders:\n" + "\t\t" + str(a11_sep._form_with_placeholders[0].integrals()[0].integrand()) + "\n" + "\t\t" + str(a11_sep._form_with_placeholders[1].integrals()[0].integrand()) + "\n" + "\t\t" + str(a11_sep._form_with_placeholders[2].integrals()[0].integrand()) + "\n") assert "sum_{i_{141}} sum_{i_{140}} ({ A | A_{i_{135}, i_{136}} = sum_{i_{137}} f_62[i_{135}, i_{137}] * (grad(v_1))[i_{137}, i_{136}] })[i_{140}, i_{141}] * (grad(v_0))[i_{140}, i_{141}] " == str( a11_sep._form_with_placeholders[0].integrals()[0].integrand()) assert "sum_{i_{142}} ({ A | A_{i_{138}} = sum_{i_{139}} f_63[i_{139}] * (grad(v_1))[i_{138}, i_{139}] })[i_{142}] * v_0[i_{142}] " == str( a11_sep._form_with_placeholders[1].integrals()[0].integrand()) assert "f_64 * (sum_{i_{143}} v_0[i_{143}] * v_1[i_{143}] )" == str( a11_sep._form_with_placeholders[2].integrals()[0].integrand()) log( PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a11_sep._form_unchanged)) + "\n") assert 0 == len(a11_sep._form_unchanged)
def test_separated_parametrized_forms_vector_16(): a16 = inner(grad(expr11[0]), u) * v[0] * dx + expr11[0].dx(0) * inner( u, v) * dx a16_sep = SeparatedParametrizedForm(a16) log(PROGRESS, "*** ### FORM 16 ### ***") log( PROGRESS, "This form is similar to form 12, but each term is multiplied by the gradient/partial derivative of a component of a solution of a parametrized problem" ) a16_sep.separate() log( PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a16_sep.coefficients)) + "\n") assert 2 == len(a16_sep.coefficients) log( PROGRESS, "\tSublen coefficients:\n" + "\t\t" + str(len(a16_sep.coefficients[0])) + "\n" + "\t\t" + str(len(a16_sep.coefficients[1])) + "\n") assert 1 == len(a16_sep.coefficients[0]) assert 1 == len(a16_sep.coefficients[1]) log( PROGRESS, "\tCoefficients:\n" + "\t\t" + str(a16_sep.coefficients[0][0]) + "\n" + "\t\t" + str(a16_sep.coefficients[1][0]) + "\n") assert "grad(f_21)" == str(a16_sep.coefficients[0][0]) assert "(grad(f_21))[0, 0]" == str(a16_sep.coefficients[1][0]) log( PROGRESS, "\tPlaceholders:\n" + "\t\t" + str(a16_sep._placeholders[0][0]) + "\n" + "\t\t" + str(a16_sep._placeholders[1][0]) + "\n") assert "f_69" == str(a16_sep._placeholders[0][0]) assert "f_70" == str(a16_sep._placeholders[1][0]) log( PROGRESS, "\tForms with placeholders:\n" + "\t\t" + str(a16_sep._form_with_placeholders[0].integrals()[0].integrand()) + "\n" + "\t\t" + str(a16_sep._form_with_placeholders[1].integrals()[0].integrand()) + "\n") assert "v_0[0] * (sum_{i_{164}} f_69[0, i_{164}] * v_1[i_{164}] )" == str( a16_sep._form_with_placeholders[0].integrals()[0].integrand()) assert "f_70 * (sum_{i_{165}} v_0[i_{165}] * v_1[i_{165}] )" == str( a16_sep._form_with_placeholders[1].integrals()[0].integrand()) log( PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a16_sep._form_unchanged)) + "\n") assert 0 == len(a16_sep._form_unchanged)
def test_separated_parametrized_forms_vector_14(): a14 = expr14[0]*inner(u, v)*dx a14_sep = SeparatedParametrizedForm(a14) log(PROGRESS, "*** ### FORM 14 ### ***") log(PROGRESS, "This form is similar to form 12, but each term is multiplied by a component of a Function which is not solution of a parametrized problem. This results in no parametrized coefficients") a14_sep.separate() log(PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a14_sep.coefficients)) + "\n" ) assert 0 == len(a14_sep.coefficients) log(PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a14_sep._form_unchanged)) + "\n" ) assert 1 == len(a14_sep._form_unchanged) log(PROGRESS, "\tUnchanged forms:\n" + "\t\t" + str(a14_sep._form_unchanged[0].integrals()[0].integrand()) + "\n" ) assert "f_30[0] * (sum_{i_{154}} v_0[i_{154}] * v_1[i_{154}] )" == str(a14_sep._form_unchanged[0].integrals()[0].integrand())
def test_separated_parametrized_forms_vector_7(): a7 = inner(expr7 * (expr3 * expr4) * grad(u), grad(v)) * dx + inner( grad(u) * expr6, v) * dx + expr5 * inner(u, v) * dx a7_sep = SeparatedParametrizedForm(a7) log(PROGRESS, "*** ### FORM 7 ### ***") log( PROGRESS, "A part of the diffusion coefficient is parametrized (advection-reaction are not parametrized). Only the parametrized part is extracted." ) a7_sep.separate() log( PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a7_sep.coefficients)) + "\n") assert 1 == len(a7_sep.coefficients) log( PROGRESS, "\tSublen coefficients:\n" + "\t\t" + str(len(a7_sep.coefficients[0])) + "\n") assert 1 == len(a7_sep.coefficients[0]) log(PROGRESS, "\tCoefficients:\n" + "\t\t" + str(a7_sep.coefficients[0][0]) + "\n") assert "{ A | A_{i_{75}, i_{76}} = sum_{i_{77}} f_7[i_{75}, i_{77}] * f_8[i_{77}, i_{76}] }" == str( a7_sep.coefficients[0][0]) log(PROGRESS, "\tPlaceholders:\n" + "\t\t" + str(a7_sep._placeholders[0][0]) + "\n") assert "f_54" == str(a7_sep._placeholders[0][0]) log( PROGRESS, "\tForms with placeholders:\n" + "\t\t" + str(a7_sep._form_with_placeholders[0].integrals()[0].integrand()) + "\n") assert "sum_{i_{87}} sum_{i_{86}} ({ A | A_{i_{81}, i_{82}} = sum_{i_{83}} ({ A | A_{i_{78}, i_{79}} = sum_{i_{80}} f_11[i_{78}, i_{80}] * f_54[i_{80}, i_{79}] })[i_{81}, i_{83}] * (grad(v_1))[i_{83}, i_{82}] })[i_{86}, i_{87}] * (grad(v_0))[i_{86}, i_{87}] " == str( a7_sep._form_with_placeholders[0].integrals()[0].integrand()) log( PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a7_sep._form_unchanged)) + "\n") assert 2 == len(a7_sep._form_unchanged) log( PROGRESS, "\tUnchanged forms:\n" + "\t\t" + str(a7_sep._form_unchanged[0].integrals()[0].integrand()) + "\n" + "\t\t" + str(a7_sep._form_unchanged[1].integrals()[0].integrand()) + "\n") assert "sum_{i_{88}} ({ A | A_{i_{84}} = sum_{i_{85}} f_10[i_{85}] * (grad(v_1))[i_{84}, i_{85}] })[i_{88}] * v_0[i_{88}] " == str( a7_sep._form_unchanged[0].integrals()[0].integrand()) assert "f_9 * (sum_{i_{89}} v_0[i_{89}] * v_1[i_{89}] )" == str( a7_sep._form_unchanged[1].integrals()[0].integrand())
def test_separated_parametrized_forms_vector_8(): a8 = inner(expr3 * expr7 * expr4 * grad(u), grad(v)) * dx + inner( grad(u) * expr6, v) * dx + expr5 * inner(u, v) * dx a8_sep = SeparatedParametrizedForm(a8) log(PROGRESS, "*** ### FORM 8 ### ***") log( PROGRESS, "This case is similar to form 7, but the order of the matrix multiplication is different. In order not to extract separately f_7 and f_8, the whole product (even with the non-parametrized part) is extracted." ) a8_sep.separate() log( PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a8_sep.coefficients)) + "\n") assert 1 == len(a8_sep.coefficients) log( PROGRESS, "\tSublen coefficients:\n" + "\t\t" + str(len(a8_sep.coefficients[0])) + "\n") assert 1 == len(a8_sep.coefficients[0]) log(PROGRESS, "\tCoefficients:\n" + "\t\t" + str(a8_sep.coefficients[0][0]) + "\n") assert "{ A | A_{i_{93}, i_{94}} = sum_{i_{95}} ({ A | A_{i_{90}, i_{91}} = sum_{i_{92}} f_7[i_{90}, i_{92}] * f_11[i_{92}, i_{91}] })[i_{93}, i_{95}] * f_8[i_{95}, i_{94}] }" == str( a8_sep.coefficients[0][0]) log(PROGRESS, "\tPlaceholders:\n" + "\t\t" + str(a8_sep._placeholders[0][0]) + "\n") assert "f_55" == str(a8_sep._placeholders[0][0]) log( PROGRESS, "\tForms with placeholders:\n" + "\t\t" + str(a8_sep._form_with_placeholders[0].integrals()[0].integrand()) + "\n") assert "sum_{i_{102}} sum_{i_{101}} ({ A | A_{i_{96}, i_{97}} = sum_{i_{98}} f_55[i_{96}, i_{98}] * (grad(v_1))[i_{98}, i_{97}] })[i_{101}, i_{102}] * (grad(v_0))[i_{101}, i_{102}] " == str( a8_sep._form_with_placeholders[0].integrals()[0].integrand()) log( PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a8_sep._form_unchanged)) + "\n") assert 2 == len(a8_sep._form_unchanged) log( PROGRESS, "\tUnchanged forms:\n" + "\t\t" + str(a8_sep._form_unchanged[0].integrals()[0].integrand()) + "\n" + "\t\t" + str(a8_sep._form_unchanged[1].integrals()[0].integrand()) + "\n") assert "sum_{i_{103}} ({ A | A_{i_{99}} = sum_{i_{100}} f_10[i_{100}] * (grad(v_1))[i_{99}, i_{100}] })[i_{103}] * v_0[i_{103}] " == str( a8_sep._form_unchanged[0].integrals()[0].integrand()) assert "f_9 * (sum_{i_{104}} v_0[i_{104}] * v_1[i_{104}] )" == str( a8_sep._form_unchanged[1].integrals()[0].integrand())
def test_separated_parametrized_forms_vector_9(): a9 = inner(expr9 * (expr3 * expr4) * grad(u), grad(v)) * dx + inner( grad(u) * expr6, v) * dx + expr5 * inner(u, v) * dx a9_sep = SeparatedParametrizedForm(a9) log(PROGRESS, "*** ### FORM 9 ### ***") log( PROGRESS, "This is similar to form 7, showing the trivial constants can be factored out" ) a9_sep.separate() log( PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a9_sep.coefficients)) + "\n") assert 1 == len(a9_sep.coefficients) log( PROGRESS, "\tSublen coefficients:\n" + "\t\t" + str(len(a9_sep.coefficients[0])) + "\n") assert 1 == len(a9_sep.coefficients[0]) log(PROGRESS, "\tCoefficients:\n" + "\t\t" + str(a9_sep.coefficients[0][0]) + "\n") assert "{ A | A_{i_{105}, i_{106}} = sum_{i_{107}} f_7[i_{105}, i_{107}] * f_8[i_{107}, i_{106}] }" == str( a9_sep.coefficients[0][0]) log(PROGRESS, "\tPlaceholders:\n" + "\t\t" + str(a9_sep._placeholders[0][0]) + "\n") assert "f_56" == str(a9_sep._placeholders[0][0]) log( PROGRESS, "\tForms with placeholders:\n" + "\t\t" + str(a9_sep._form_with_placeholders[0].integrals()[0].integrand()) + "\n") assert "sum_{i_{117}} sum_{i_{116}} ({ A | A_{i_{111}, i_{112}} = sum_{i_{113}} ({ A | A_{i_{108}, i_{109}} = sum_{i_{110}} f_13[i_{108}, i_{110}] * f_56[i_{110}, i_{109}] })[i_{111}, i_{113}] * (grad(v_1))[i_{113}, i_{112}] })[i_{116}, i_{117}] * (grad(v_0))[i_{116}, i_{117}] " == str( a9_sep._form_with_placeholders[0].integrals()[0].integrand()) log( PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a9_sep._form_unchanged)) + "\n") assert 2 == len(a9_sep._form_unchanged) log( PROGRESS, "\tUnchanged forms:\n" + "\t\t" + str(a9_sep._form_unchanged[0].integrals()[0].integrand()) + "\n" + "\t\t" + str(a9_sep._form_unchanged[1].integrals()[0].integrand()) + "\n") assert "sum_{i_{118}} ({ A | A_{i_{114}} = sum_{i_{115}} f_10[i_{115}] * (grad(v_1))[i_{114}, i_{115}] })[i_{118}] * v_0[i_{118}] " == str( a9_sep._form_unchanged[0].integrals()[0].integrand()) assert "f_9 * (sum_{i_{119}} v_0[i_{119}] * v_1[i_{119}] )" == str( a9_sep._form_unchanged[1].integrals()[0].integrand())
def test_separated_parametrized_forms_vector_10(): a10 = inner(expr3 * expr9 * expr4 * grad(u), grad(v)) * dx + inner( grad(u) * expr6, v) * dx + expr5 * inner(u, v) * dx a10_sep = SeparatedParametrizedForm(a10) log(PROGRESS, "*** ### FORM 10 ### ***") log( PROGRESS, "This is similar to form 8, showing a case where constants cannot be factored out" ) a10_sep.separate() log( PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a10_sep.coefficients)) + "\n") assert 1 == len(a10_sep.coefficients) log( PROGRESS, "\tSublen coefficients:\n" + "\t\t" + str(len(a10_sep.coefficients[0])) + "\n") assert 1 == len(a10_sep.coefficients[0]) log(PROGRESS, "\tCoefficients:\n" + "\t\t" + str(a10_sep.coefficients[0][0]) + "\n") assert "{ A | A_{i_{123}, i_{124}} = sum_{i_{125}} ({ A | A_{i_{120}, i_{121}} = sum_{i_{122}} f_7[i_{120}, i_{122}] * f_13[i_{122}, i_{121}] })[i_{123}, i_{125}] * f_8[i_{125}, i_{124}] }" == str( a10_sep.coefficients[0][0]) log(PROGRESS, "\tPlaceholders:\n" + "\t\t" + str(a10_sep._placeholders[0][0]) + "\n") assert "f_57" == str(a10_sep._placeholders[0][0]) log( PROGRESS, "\tForms with placeholders:\n" + "\t\t" + str(a10_sep._form_with_placeholders[0].integrals()[0].integrand()) + "\n") assert "sum_{i_{132}} sum_{i_{131}} ({ A | A_{i_{126}, i_{127}} = sum_{i_{128}} f_57[i_{126}, i_{128}] * (grad(v_1))[i_{128}, i_{127}] })[i_{131}, i_{132}] * (grad(v_0))[i_{131}, i_{132}] " == str( a10_sep._form_with_placeholders[0].integrals()[0].integrand()) log( PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a10_sep._form_unchanged)) + "\n") assert 2 == len(a10_sep._form_unchanged) log( PROGRESS, "\tUnchanged forms:\n" + "\t\t" + str(a10_sep._form_unchanged[0].integrals()[0].integrand()) + "\n" + "\t\t" + str(a10_sep._form_unchanged[1].integrals()[0].integrand()) + "\n") assert "sum_{i_{133}} ({ A | A_{i_{129}} = sum_{i_{130}} f_10[i_{130}] * (grad(v_1))[i_{129}, i_{130}] })[i_{133}] * v_0[i_{133}] " == str( a10_sep._form_unchanged[0].integrals()[0].integrand()) assert "f_9 * (sum_{i_{134}} v_0[i_{134}] * v_1[i_{134}] )" == str( a10_sep._form_unchanged[1].integrals()[0].integrand())
def test_separated_parametrized_forms_vector_3(): a3 = inner(det(expr3)*(expr4 + expr3*expr3)*expr1, grad(v))*dx + inner(grad(u)*expr2, v)*dx + expr1*inner(u, v)*dx a3_sep = SeparatedParametrizedForm(a3) log(PROGRESS, "*** ### FORM 3 ### ***") log(PROGRESS, "We try now with a more complex expression of for each coefficient") a3_sep.separate() log(PROGRESS, "\tLen coefficients:\n" + "\t\t" + str(len(a3_sep.coefficients)) + "\n" ) assert 6 == len(a3_sep.coefficients) log(PROGRESS, "\tSublen coefficients:\n" + "\t\t" + str(len(a3_sep.coefficients[0])) + "\n" + "\t\t" + str(len(a3_sep.coefficients[1])) + "\n" + "\t\t" + str(len(a3_sep.coefficients[2])) + "\n" + "\t\t" + str(len(a3_sep.coefficients[3])) + "\n" + "\t\t" + str(len(a3_sep.coefficients[4])) + "\n" + "\t\t" + str(len(a3_sep.coefficients[5])) + "\n" ) assert 1 == len(a3_sep.coefficients[0]) assert 1 == len(a3_sep.coefficients[1]) assert 1 == len(a3_sep.coefficients[2]) assert 1 == len(a3_sep.coefficients[3]) assert 1 == len(a3_sep.coefficients[4]) assert 1 == len(a3_sep.coefficients[5]) log(PROGRESS, "\tCoefficients:\n" + "\t\t" + str(a3_sep.coefficients[0][0]) + "\n" + "\t\t" + str(a3_sep.coefficients[1][0]) + "\n" + "\t\t" + str(a3_sep.coefficients[2][0]) + "\n" + "\t\t" + str(a3_sep.coefficients[3][0]) + "\n" + "\t\t" + str(a3_sep.coefficients[4][0]) + "\n" + "\t\t" + str(a3_sep.coefficients[5][0]) + "\n" ) assert "{ A | A_{i_{34}, i_{35}} = ({ A | A_{i_{32}, i_{33}} = ({ A | A_{i_{29}, i_{30}} = sum_{i_{31}} f_7[i_{29}, i_{31}] * f_7[i_{31}, i_{30}] })[i_{32}, i_{33}] * f_7[0, 0] * f_7[1, 1] })[i_{34}, i_{35}] * f_5 }" == str(a3_sep.coefficients[0][0]) assert "{ A | A_{i_{34}, i_{35}} = ({ A | A_{i_{32}, i_{33}} = f_8[i_{32}, i_{33}] * f_7[1, 0] * -1 * f_7[0, 1] })[i_{34}, i_{35}] * f_5 }" == str(a3_sep.coefficients[1][0]) assert "{ A | A_{i_{34}, i_{35}} = ({ A | A_{i_{32}, i_{33}} = f_8[i_{32}, i_{33}] * f_7[0, 0] * f_7[1, 1] })[i_{34}, i_{35}] * f_5 }" == str(a3_sep.coefficients[2][0]) assert "{ A | A_{i_{34}, i_{35}} = ({ A | A_{i_{32}, i_{33}} = ({ A | A_{i_{29}, i_{30}} = sum_{i_{31}} f_7[i_{29}, i_{31}] * f_7[i_{31}, i_{30}] })[i_{32}, i_{33}] * f_7[1, 0] * -1 * f_7[0, 1] })[i_{34}, i_{35}] * f_5 }" == str(a3_sep.coefficients[3][0]) assert "f_6" == str(a3_sep.coefficients[4][0]) assert "f_5" == str(a3_sep.coefficients[5][0]) log(PROGRESS, "\tPlaceholders:\n" + "\t\t" + str(a3_sep._placeholders[0][0]) + "\n" + "\t\t" + str(a3_sep._placeholders[1][0]) + "\n" + "\t\t" + str(a3_sep._placeholders[2][0]) + "\n" + "\t\t" + str(a3_sep._placeholders[3][0]) + "\n" + "\t\t" + str(a3_sep._placeholders[4][0]) + "\n" + "\t\t" + str(a3_sep._placeholders[5][0]) + "\n" ) assert "f_42" == str(a3_sep._placeholders[0][0]) assert "f_43" == str(a3_sep._placeholders[1][0]) assert "f_44" == str(a3_sep._placeholders[2][0]) assert "f_45" == str(a3_sep._placeholders[3][0]) assert "f_46" == str(a3_sep._placeholders[4][0]) assert "f_47" == str(a3_sep._placeholders[5][0]) log(PROGRESS, "\tForms with placeholders:\n" + "\t\t" + str(a3_sep._form_with_placeholders[0].integrals()[0].integrand()) + "\n" + "\t\t" + str(a3_sep._form_with_placeholders[1].integrals()[0].integrand()) + "\n" + "\t\t" + str(a3_sep._form_with_placeholders[2].integrals()[0].integrand()) + "\n" + "\t\t" + str(a3_sep._form_with_placeholders[3].integrals()[0].integrand()) + "\n" + "\t\t" + str(a3_sep._form_with_placeholders[4].integrals()[0].integrand()) + "\n" + "\t\t" + str(a3_sep._form_with_placeholders[5].integrals()[0].integrand()) + "\n" ) assert "sum_{i_{39}} sum_{i_{38}} f_42[i_{38}, i_{39}] * (grad(v_0))[i_{38}, i_{39}] " == str(a3_sep._form_with_placeholders[0].integrals()[0].integrand()) assert "sum_{i_{39}} sum_{i_{38}} f_43[i_{38}, i_{39}] * (grad(v_0))[i_{38}, i_{39}] " == str(a3_sep._form_with_placeholders[1].integrals()[0].integrand()) assert "sum_{i_{39}} sum_{i_{38}} f_44[i_{38}, i_{39}] * (grad(v_0))[i_{38}, i_{39}] " == str(a3_sep._form_with_placeholders[2].integrals()[0].integrand()) assert "sum_{i_{39}} sum_{i_{38}} f_45[i_{38}, i_{39}] * (grad(v_0))[i_{38}, i_{39}] " == str(a3_sep._form_with_placeholders[3].integrals()[0].integrand()) assert "sum_{i_{40}} ({ A | A_{i_{36}} = sum_{i_{37}} f_46[i_{37}] * (grad(v_1))[i_{36}, i_{37}] })[i_{40}] * v_0[i_{40}] " == str(a3_sep._form_with_placeholders[4].integrals()[0].integrand()) assert "f_47 * (sum_{i_{41}} v_0[i_{41}] * v_1[i_{41}] )" == str(a3_sep._form_with_placeholders[5].integrals()[0].integrand()) log(PROGRESS, "\tLen unchanged forms:\n" + "\t\t" + str(len(a3_sep._form_unchanged)) + "\n" ) assert 0 == len(a3_sep._form_unchanged)