Line data Source code
1 : //* This file is part of the MOOSE framework 2 : //* https://mooseframework.inl.gov 3 : //* 4 : //* All rights reserved, see COPYRIGHT for full restrictions 5 : //* https://github.com/idaholab/moose/blob/master/COPYRIGHT 6 : //* 7 : //* Licensed under LGPL 2.1, please see LICENSE for details 8 : //* https://www.gnu.org/licenses/lgpl-2.1.html 9 : 10 : #include "MortarSegmentMeshReporter.h" 11 : #include "AutomaticMortarGeneration.h" 12 : #include "FEProblemBase.h" 13 : 14 : registerMooseObject("MooseApp", MortarSegmentMeshReporter); 15 : 16 : InputParameters 17 3109 : MortarSegmentMeshReporter::validParams() 18 : { 19 3109 : InputParameters params = GeneralReporter::validParams(); 20 3109 : params.addClassDescription( 21 : "Reports mortar segment mesh statistics (element counts and volume statistics) for all " 22 : "mortar interfaces. One entry per primary-secondary subdomain pair is appended to each " 23 : "output vector."); 24 3109 : return params; 25 0 : } 26 : 27 24 : MortarSegmentMeshReporter::MortarSegmentMeshReporter(const InputParameters & parameters) 28 : : GeneralReporter(parameters), 29 24 : _on_displaced(getParam<bool>("use_displaced_mesh")), 30 24 : _secondary_lower_n_elems(declareValueByName<std::vector<unsigned int>>( 31 : "secondary_lower_n_elems", REPORTER_MODE_ROOT)), 32 24 : _secondary_lower_max_volume( 33 24 : declareValueByName<std::vector<Real>>("secondary_lower_max_volume")), 34 24 : _secondary_lower_min_volume( 35 24 : declareValueByName<std::vector<Real>>("secondary_lower_min_volume")), 36 24 : _secondary_lower_median_volume( 37 24 : declareValueByName<std::vector<Real>>("secondary_lower_median_volume")), 38 24 : _primary_lower_n_elems(declareValueByName<std::vector<unsigned int>>("primary_lower_n_elems")), 39 24 : _primary_lower_max_volume(declareValueByName<std::vector<Real>>("primary_lower_max_volume")), 40 24 : _primary_lower_min_volume(declareValueByName<std::vector<Real>>("primary_lower_min_volume")), 41 24 : _primary_lower_median_volume( 42 24 : declareValueByName<std::vector<Real>>("primary_lower_median_volume")), 43 24 : _msm_n_elems(declareValueByName<std::vector<unsigned int>>("msm_n_elems")), 44 24 : _msm_max_volume(declareValueByName<std::vector<Real>>("msm_max_volume")), 45 24 : _msm_min_volume(declareValueByName<std::vector<Real>>("msm_min_volume")), 46 48 : _msm_median_volume(declareValueByName<std::vector<Real>>("msm_median_volume")) 47 : { 48 24 : } 49 : 50 : void 51 22 : MortarSegmentMeshReporter::execute() 52 : { 53 22 : _secondary_lower_n_elems.clear(); 54 22 : _secondary_lower_max_volume.clear(); 55 22 : _secondary_lower_min_volume.clear(); 56 22 : _secondary_lower_median_volume.clear(); 57 22 : _primary_lower_n_elems.clear(); 58 22 : _primary_lower_max_volume.clear(); 59 22 : _primary_lower_min_volume.clear(); 60 22 : _primary_lower_median_volume.clear(); 61 22 : _msm_n_elems.clear(); 62 22 : _msm_max_volume.clear(); 63 22 : _msm_min_volume.clear(); 64 22 : _msm_median_volume.clear(); 65 : 66 44 : for (const auto & [key, amg_ptr] : _fe_problem.getMortarInterfaces(_on_displaced)) 67 : { 68 22 : const auto stats = amg_ptr->computeMsmStatistics(); 69 : 70 44 : for (const auto & s : stats) 71 : { 72 22 : _secondary_lower_n_elems.push_back(s.secondary_lower_n_elems); 73 22 : _secondary_lower_max_volume.push_back(s.secondary_lower_max_volume); 74 22 : _secondary_lower_min_volume.push_back(s.secondary_lower_min_volume); 75 22 : _secondary_lower_median_volume.push_back(s.secondary_lower_median_volume); 76 22 : _primary_lower_n_elems.push_back(s.primary_lower_n_elems); 77 22 : _primary_lower_max_volume.push_back(s.primary_lower_max_volume); 78 22 : _primary_lower_min_volume.push_back(s.primary_lower_min_volume); 79 22 : _primary_lower_median_volume.push_back(s.primary_lower_median_volume); 80 22 : _msm_n_elems.push_back(s.msm_n_elems); 81 22 : _msm_max_volume.push_back(s.msm_max_volume); 82 22 : _msm_min_volume.push_back(s.msm_min_volume); 83 22 : _msm_median_volume.push_back(s.msm_median_volume); 84 : } 85 22 : } 86 22 : }