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 3194 : MortarSegmentMeshReporter::validParams() 18 : { 19 3194 : InputParameters params = GeneralReporter::validParams(); 20 3194 : 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 3194 : return params; 25 0 : } 26 : 27 48 : MortarSegmentMeshReporter::MortarSegmentMeshReporter(const InputParameters & parameters) 28 : : GeneralReporter(parameters), 29 48 : _on_displaced(getParam<bool>("use_displaced_mesh")), 30 48 : _secondary_lower_n_elems(declareValueByName<std::vector<unsigned int>>( 31 : "secondary_lower_n_elems", REPORTER_MODE_ROOT)), 32 48 : _secondary_lower_max_volume( 33 48 : declareValueByName<std::vector<Real>>("secondary_lower_max_volume")), 34 48 : _secondary_lower_min_volume( 35 48 : declareValueByName<std::vector<Real>>("secondary_lower_min_volume")), 36 48 : _secondary_lower_median_volume( 37 48 : declareValueByName<std::vector<Real>>("secondary_lower_median_volume")), 38 48 : _primary_lower_n_elems(declareValueByName<std::vector<unsigned int>>("primary_lower_n_elems")), 39 48 : _primary_lower_max_volume(declareValueByName<std::vector<Real>>("primary_lower_max_volume")), 40 48 : _primary_lower_min_volume(declareValueByName<std::vector<Real>>("primary_lower_min_volume")), 41 48 : _primary_lower_median_volume( 42 48 : declareValueByName<std::vector<Real>>("primary_lower_median_volume")), 43 48 : _msm_n_elems(declareValueByName<std::vector<unsigned int>>("msm_n_elems")), 44 48 : _msm_max_volume(declareValueByName<std::vector<Real>>("msm_max_volume")), 45 48 : _msm_min_volume(declareValueByName<std::vector<Real>>("msm_min_volume")), 46 96 : _msm_median_volume(declareValueByName<std::vector<Real>>("msm_median_volume")) 47 : { 48 48 : } 49 : 50 : void 51 42 : MortarSegmentMeshReporter::execute() 52 : { 53 42 : _secondary_lower_n_elems.clear(); 54 42 : _secondary_lower_max_volume.clear(); 55 42 : _secondary_lower_min_volume.clear(); 56 42 : _secondary_lower_median_volume.clear(); 57 42 : _primary_lower_n_elems.clear(); 58 42 : _primary_lower_max_volume.clear(); 59 42 : _primary_lower_min_volume.clear(); 60 42 : _primary_lower_median_volume.clear(); 61 42 : _msm_n_elems.clear(); 62 42 : _msm_max_volume.clear(); 63 42 : _msm_min_volume.clear(); 64 42 : _msm_median_volume.clear(); 65 : 66 84 : for (const auto & [key, config] : _fe_problem.getMortarInterfaces(_on_displaced)) 67 : { 68 42 : const auto stats = config.amg->computeMsmStatistics(); 69 : 70 84 : for (const auto & s : stats) 71 : { 72 42 : _secondary_lower_n_elems.push_back(s.secondary_lower_n_elems); 73 42 : _secondary_lower_max_volume.push_back(s.secondary_lower_max_volume); 74 42 : _secondary_lower_min_volume.push_back(s.secondary_lower_min_volume); 75 42 : _secondary_lower_median_volume.push_back(s.secondary_lower_median_volume); 76 42 : _primary_lower_n_elems.push_back(s.primary_lower_n_elems); 77 42 : _primary_lower_max_volume.push_back(s.primary_lower_max_volume); 78 42 : _primary_lower_min_volume.push_back(s.primary_lower_min_volume); 79 42 : _primary_lower_median_volume.push_back(s.primary_lower_median_volume); 80 42 : _msm_n_elems.push_back(s.msm_n_elems); 81 42 : _msm_max_volume.push_back(s.msm_max_volume); 82 42 : _msm_min_volume.push_back(s.msm_min_volume); 83 42 : _msm_median_volume.push_back(s.msm_median_volume); 84 : } 85 42 : } 86 42 : }