19 libMesh::EquationSystems *EqSys = toClean->second;
39 libMesh::EquationSystems *EqSys = toClean->second;
52 libMesh::EquationSystems *EqSys = toClean->second;
64 libMesh::EquationSystems *EqSys = toClean->second;
76 libMesh::PetscMatrix<libMesh::Number> *Mat = toClean->second;
88 libMesh::PetscMatrix<libMesh::Number> *Mat = toClean->second;
100 libMesh::PetscMatrix<libMesh::Number> *Mat = toClean->second;
111 libMesh::EquationSystems* EqSystemPtr =
new libMesh::EquationSystems(
123 libMesh::EquationSystems* EqSystemPtr =
new libMesh::EquationSystems(
133 libMesh::MeshBase& R_microMesh)
137 libMesh::EquationSystems* EqSystemPtr = NULL;
142 EqSystemPtr =
new libMesh::EquationSystems(R_microMesh);
149 std::cerr <<
" *** Warning: restricted micro system " << name
150 <<
" already exists!" << std::endl;
158 libMesh::MeshBase& interMesh)
160 libMesh::EquationSystems* EqSystemPtr = NULL;
165 EqSystemPtr =
new libMesh::EquationSystems(interMesh);
171 std::cerr <<
" *** Warning: inter system " << name
172 <<
" already exists!" << std::endl;
180 const std::string& name, libMesh::MeshBase& mediatorMesh)
182 libMesh::EquationSystems* EqSystemPtr = NULL;
187 EqSystemPtr =
new libMesh::EquationSystems(mediatorMesh);
189 std::make_pair(name, EqSystemPtr));
194 std::cerr <<
" *** Warning: mediator system " << name
195 <<
" already exists!" << std::endl;
203 double coupling_rigidity,
double coupling_width)
210 const std::vector<std::vector<libMesh::Real> >& phi_inter,
211 std::vector<std::vector<libMesh::Real> >& phi_corrected)
213 unsigned int lambda_corr_size = lambda_weights.size();
214 unsigned int lambda_inter_size = lambda_weights[0].size();
216 unsigned int phi_inter_dof = phi_inter.size();
217 unsigned int phi_inter_qp = phi_inter[0].size();
219 unsigned int phi_corrected_dof = phi_corrected.size();
220 unsigned int phi_corrected_qp = phi_corrected[0].size();
229 " Different numbers of quadrature points!");
231 " Incompatible corrected shape table and barycentric coordinates!");
233 " Incompatible intersection shape table and barycentric coordinates!");
237 for(
unsigned int qp = 0; qp < phi_inter_qp; ++qp)
239 for(
unsigned int iii = 0; iii < phi_corrected_dof; ++iii)
241 phi_corrected[iii][qp] = 0;
242 for(
unsigned int jjj = 0; jjj < phi_inter_dof; ++jjj)
244 phi_corrected[iii][qp] += lambda_weights[iii][jjj]*phi_inter[jjj][qp];
251 const std::vector<std::vector<libMesh::RealGradient> >& dphi_inter,
252 std::vector<std::vector<libMesh::RealGradient> >& dphi_corrected)
254 unsigned int lambda_corr_size = lambda_weights.size();
255 unsigned int lambda_inter_size = lambda_weights[0].size();
257 unsigned int phi_inter_dof = dphi_inter.size();
258 unsigned int phi_inter_qp = dphi_inter[0].size();
260 unsigned int phi_corrected_dof = dphi_corrected.size();
261 unsigned int phi_corrected_qp = dphi_corrected[0].size();
270 " Different numbers of quadrature points!");
272 " Incompatible corrected shape table and barycentric coordinates!");
274 " Incompatible intersection shape table and barycentric coordinates!");
278 for(
unsigned int qp = 0; qp < phi_inter_qp; ++qp)
280 for(
unsigned int iii = 0; iii < phi_corrected_dof; ++iii)
282 dphi_corrected[iii][qp] = 0;
283 for(
unsigned int jjj = 0; jjj < phi_inter_dof; ++jjj)
285 dphi_corrected[iii][qp] += lambda_weights[iii][jjj]*dphi_inter[jjj][qp];
292 const libMesh::FEType& fe_t,
293 const libMesh::Elem* base_elem,
294 const std::vector<libMesh::Point>& phys_points,
295 std::vector<libMesh::Point>& ref_points,
296 std::vector<std::vector<libMesh::Real> >& lambda_weights)
299 homemade_assert_msg(base_elem->type() == libMesh::TET4 || base_elem->type() == libMesh::HEX8,
300 " Only implemented for TET4 or HEX8 elements!");
303 " Only implemented for 3D!");
305 unsigned int lambda_inter_size = lambda_weights[0].size();
306 unsigned int lambda_base_size = lambda_weights.size();
309 if(phys_points.size() != ref_points.size())
311 ref_points.resize( phys_points.size() );
315 libMesh::FEInterface::inverse_map(dim, fe_t, base_elem, phys_points, ref_points);
322 for(
unsigned int iii = 0; iii < lambda_base_size; ++iii)
324 for(
unsigned int jjj = 0; jjj < lambda_inter_size; ++jjj)
326 lambda_weights[iii][jjj] =
327 libMesh::FE<3,libMesh::LAGRANGE>::shape(
353 libMesh::PetscMatrix<libMesh::Number>& CouplingTestMatrix =
355 std::cout <<
"| Restrict - Micro matrix -> " << name << std::endl;
361 libMesh::PetscMatrix<libMesh::Number>& CouplingTestMatrix =
363 std::cout <<
"| Restrict - Macro matrix -> " << name << std::endl;
369 libMesh::PetscMatrix<libMesh::Number>& CouplingTestMatrix =
371 std::cout <<
"| Restrict - Restrict matrix -> " << name << std::endl;
377 libMesh::PetscMatrix<libMesh::Number>& CouplingTestMatrix_BIG =
379 libMesh::PetscMatrix<libMesh::Number>& CouplingTestMatrix_micro=
381 libMesh::PetscMatrix<libMesh::Number>& CouplingTestMatrix_mediator=
385 #ifdef PRINT_MATLAB_DEBUG
386 CouplingTestMatrix_BIG.print_matlab(outputRoot +
"/coupling_matrix_macro.m");
387 CouplingTestMatrix_micro.print_matlab(outputRoot +
"/coupling_matrix_micro.m");
388 CouplingTestMatrix_mediator.print_matlab(outputRoot +
"/coupling_matrix_mediator.m");
394 libMesh::PetscMatrix<libMesh::Number>& CouplingTestMatrix_BIG =
396 libMesh::PetscMatrix<libMesh::Number>& CouplingTestMatrix_micro=
398 libMesh::PetscMatrix<libMesh::Number>& CouplingTestMatrix_mediator=
libMesh::PetscMatrix< libMesh::Number > & get_BIG_coupling_matrix(const std::string &name)
libMesh::EquationSystems & set_BIG_EquationSystem(const std::string &name, libMesh::MeshBase &BIGMesh)
const libMesh::Parallel::Communicator * m_comm
void get_lambdas(const unsigned int dim, const libMesh::FEType &fe_t, const libMesh::Elem *base_elem, const std::vector< libMesh::Point > &phys_points, std::vector< libMesh::Point > &ref_points, std::vector< std::vector< libMesh::Real > > &lambda_weights)
std::map< std::string, libMesh::EquationSystems * > m_mediator_EquationSystemMap
std::pair< std::string, libMesh::EquationSystems * > m_BIG_EquationSystem
void print_matrix_BIG_info(const std::string &name)
std::map< std::string, double > m_coupling_widthMap
std::map< std::string, double > m_coupling_rigidityMap
std::map< std::string, libMesh::EquationSystems * > m_inter_EquationSystemMap
std::map< std::string, libMesh::EquationSystems * > m_R_micro_EquationSystemMap
void set_corrected_shape_gradients(const std::vector< std::vector< libMesh::Real > > &lambda_weights, const std::vector< std::vector< libMesh::RealGradient > > &phi_inter, std::vector< std::vector< libMesh::RealGradient > > &phi_corrected)
void print_matrix_micro_info(const std::string &name)
libMesh::EquationSystems & add_inter_EquationSystem(const std::string &name, libMesh::MeshBase &interMesh)
std::map< std::string, libMesh::EquationSystems * > m_micro_EquationSystemMap
bool m_bHasDefinedMeshRestrictions
std::map< std::string, libMesh::EquationSystems * >::iterator EqSystem_iterator
std::map< std::string, libMesh::PetscMatrix< libMesh::Number > * >::iterator Matrix_iterator
void use_H1_coupling(std::string name)
void print_matrix_mediator_info(const std::string &name)
libMesh::PetscMatrix< libMesh::Number > & get_mediator_coupling_matrix(const std::string &name)
std::pair< std::string, libMesh::EquationSystems * > m_R_BIG_EquationSystem
void set_coupling_parameters(const std::string &name, double coupling_rigidity, double coupling_width)
Set physical parameters.
std::map< std::string, bool > m_bUseH1Coupling
libMesh::PetscMatrix< libMesh::Number > & get_micro_coupling_matrix(const std::string &name)
void print_matrices_matlab(const std::string &name, const std::string &outputRoot="coupling")
std::map< std::string, libMesh::PetscMatrix< libMesh::Number > * > m_couplingMatrixMap_mediator_mediator
std::map< std::string, libMesh::PetscMatrix< libMesh::Number > * > m_couplingMatrixMap_mediator_BIG
void set_corrected_shapes(const std::vector< std::vector< libMesh::Real > > &lambda_weights, const std::vector< std::vector< libMesh::Real > > &phi_inter, std::vector< std::vector< libMesh::Real > > &phi_corrected)
void print_PETSC_matrices(const std::string &name, const std::string &outputRoot="coupling")
std::map< std::string, libMesh::PetscMatrix< libMesh::Number > * > m_couplingMatrixMap_mediator_micro
void print_matrix(libMesh::PetscMatrix< libMesh::Number > &CouplingTestMatrix)
void use_L2_coupling(std::string name)
libMesh::EquationSystems & add_mediator_EquationSystem(const std::string &name, libMesh::MeshBase &mediatorMesh)
libMesh::EquationSystems & set_Restricted_BIG_EquationSystem(const std::string &name, libMesh::MeshBase &R_BIGMesh)
libMesh::EquationSystems & add_Restricted_micro_EquationSystem(const std::string &name, libMesh::MeshBase &R_microMesh)
void write_PETSC_matrix(Mat input_mat, const std::string &filename, int rank, MPI_Comm comm=PETSC_COMM_WORLD, int dim=1)