I'm using getfem-4.3.2 and I am having some problem with the function 'add_normal_Dirichlet_condition_with_penalization'.
//--------------------------------------------------------------------------------------------------------------------------------------------------//
// Main unknown of the problem:
model.add_fem_variable("u", mf_u);
// Viscous term
// Linearized elasticity brick:
model.add_initialized_fixed_size_data("lambda", plain_vector(1, 0.0)); // Second viscosity coefficient
model.add_initialized_fixed_size_data("nu", plain_vector(1, 1/(pd.Re)));
getfem::add_isotropic_linearized_elasticity_brick(model, mim, "u", "lambda", "nu");
// Incompressible constraint
// p used as Lagrange multiplier, but it doesn't need to be
// add_multiplier as for the Dirichlet boundary conditions
// Linearized incompressibility condition brick:
model.add_fem_variable("p", mf_p);
getfem::add_linear_incompressibility(model, mim, "u", "p");
// Dirichlet condition on inflow:
std::vector<scalar_type> F(mf_u.nb_dof());
gmm::clear(F);
getfem::interpolation_function(mf_u, F, u_exact);
model.add_initialized_fem_data("InflowData", mf_u, F);
if (PENALIZATION_INFLOW && act_DNS) {
// With penalization
scalar_type dirichlet_coefficient_inflow = 1e8;
getfem::add_Dirichlet_condition_with_penalization(model,mim,"u",dirichlet_coefficient_inflow,INFLOW_BOUNDARY_NUM,"InflowData");
} else {
// With multipliers
model.add_multiplier("Inflow", mf_mult_inflow, "u", mim, INFLOW_BOUNDARY_NUM);
getfem::add_Dirichlet_condition_with_multipliers(model, mim, "u","Inflow",INFLOW_BOUNDARY_NUM,"InflowData");
}
// Dirichlet condition on cylinder:
bgeot::base_vector no_penetration(1); no_penetration[0]=0;
model.add_initialized_fixed_size_data("CylinderData",no_penetration);
if (PENALIZATION_CYL && act_DNS) {
// With penalization
scalar_type dirichlet_coefficient_cyl = 1e8;
getfem::add_normal_Dirichlet_condition_with_penalization(model,mim,"u",dirichlet_coefficient_cyl,CYLINDER_BOUNDARY_NUM,"CylinderData");
} else {
// With multipliers
model.add_multiplier("Cylinder", mf_mult_cyl, "u", mim, CYLINDER_BOUNDARY_NUM);
getfem::add_normal_Dirichlet_condition_with_multipliers(model,mim,"u","Cylinder",CYLINDER_BOUNDARY_NUM,"CylinderData");
}
// Build matrices
model.assembly(getfem::model::BUILD_ALL);
//------------------------------------------------------------------------------------------------------------------------------------------------------//
In the above extract of the code, everything works fine except when I try to use 'add_normal_Dirichlet_condition_with_penalization'.
The similar function 'add_Dirichlet_condition_with_penalization' works fine as well.
Altought I succeed in compiling the code, when 'add_normal_Dirichlet_condition_with_penalization' runs, I obtain the following error:
//------------------------------------------------------------------------------------------------------------------------------------------------------//
Trace 2 in getfem_models.cc, line 5667: Stiffness matrix assembly for isotropic linearized elasticity
Trace 2 in getfem_models.cc, line 5931: Stokes term assembly
Trace 2 in getfem_models.cc, line 3157: Mass term assembly for Dirichlet condition
Trace 2 in getfem_models.cc, line 3201: Source term assembly for Dirichlet condition
Trace 2 in getfem_models.cc, line 3157: Mass term assembly for Dirichlet condition
============================================
| An error has been detected !!! |
============================================
Error in getfem_assembling_tensors.cc, line 488 :
Non matrix field
//------------------------------------------------------------------------------------------------------------------------------------------------------//
I really do not understand how to fix this problem and what it means.
Thank you in advance.
Cheers.