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 : // MOOSE includes 11 : #include "MaterialWarehouse.h" 12 : #include "MaterialBase.h" 13 : 14 : void 15 22944 : MaterialWarehouse::addObjects(std::shared_ptr<MaterialBase> block, 16 : std::shared_ptr<MaterialBase> neighbor, 17 : std::shared_ptr<MaterialBase> face, 18 : THREAD_ID tid /*=0*/) 19 : { 20 22944 : MooseObjectWarehouse<MaterialBase>::addObject(block, tid); 21 22944 : _neighbor_materials.addObject(neighbor, tid); 22 22944 : _face_materials.addObject(face, tid); 23 22944 : } 24 : 25 : const MooseObjectWarehouse<MaterialBase> & 26 23595471 : MaterialWarehouse::operator[](Moose::MaterialDataType data_type) const 27 : { 28 23595471 : switch (data_type) 29 : { 30 10948450 : case Moose::NEIGHBOR_MATERIAL_DATA: 31 10948450 : return _neighbor_materials; 32 : 33 12644324 : case Moose::FACE_MATERIAL_DATA: 34 12644324 : return _face_materials; 35 : 36 2697 : default: 37 2697 : return *this; 38 : } 39 : } 40 : 41 : void 42 9111 : MaterialWarehouse::initialSetup(THREAD_ID tid /*=0*/) const 43 : { 44 9111 : MooseObjectWarehouse<MaterialBase>::initialSetup(tid); 45 9096 : _neighbor_materials.initialSetup(tid); 46 9096 : _face_materials.initialSetup(tid); 47 9096 : } 48 : 49 : void 50 291519 : MaterialWarehouse::timestepSetup(THREAD_ID tid /*=0*/) const 51 : { 52 291519 : MooseObjectWarehouse<MaterialBase>::timestepSetup(tid); 53 291519 : _neighbor_materials.timestepSetup(tid); 54 291519 : _face_materials.timestepSetup(tid); 55 291519 : } 56 : 57 : void 58 0 : MaterialWarehouse::subdomainSetup(THREAD_ID tid /*=0*/) const 59 : { 60 0 : MooseObjectWarehouse<MaterialBase>::subdomainSetup(tid); 61 0 : _face_materials.subdomainSetup(tid); 62 0 : } 63 : 64 : void 65 0 : MaterialWarehouse::neighborSubdomainSetup(THREAD_ID tid /*=0*/) const 66 : { 67 0 : _neighbor_materials.subdomainSetup(tid); 68 0 : } 69 : 70 : void 71 5446222 : MaterialWarehouse::subdomainSetup(SubdomainID id, THREAD_ID tid /*=0*/) const 72 : { 73 5446222 : MooseObjectWarehouse<MaterialBase>::subdomainSetup(id, tid); 74 5446222 : _face_materials.subdomainSetup(id, tid); 75 5446222 : } 76 : 77 : void 78 16897394 : MaterialWarehouse::neighborSubdomainSetup(SubdomainID id, THREAD_ID tid /*=0*/) const 79 : { 80 16897394 : _neighbor_materials.subdomainSetup(id, tid); 81 16897394 : } 82 : 83 : void 84 3355398 : MaterialWarehouse::residualSetup(THREAD_ID tid /*=0*/) const 85 : { 86 3355398 : MooseObjectWarehouse<MaterialBase>::residualSetup(tid); 87 3355398 : _neighbor_materials.residualSetup(tid); 88 3355398 : _face_materials.residualSetup(tid); 89 3355398 : } 90 : 91 : void 92 523029 : MaterialWarehouse::jacobianSetup(THREAD_ID tid /*=0*/) const 93 : { 94 523029 : MooseObjectWarehouse<MaterialBase>::jacobianSetup(tid); 95 523029 : _neighbor_materials.jacobianSetup(tid); 96 523029 : _face_materials.jacobianSetup(tid); 97 523029 : } 98 : 99 : void 100 1276490 : MaterialWarehouse::updateActive(THREAD_ID tid /*=0*/) 101 : { 102 1276490 : MooseObjectWarehouse<MaterialBase>::updateActive(tid); 103 1276490 : _neighbor_materials.updateActive(tid); 104 1276490 : _face_materials.updateActive(tid); 105 1276490 : } 106 : 107 : void 108 24628 : MaterialWarehouse::sort(THREAD_ID tid /*=0*/, bool sort_all_objects /*=false*/) 109 : { 110 24628 : checkThreadID(tid); 111 : 112 38078 : for (auto & object_pair : _all_block_objects[tid]) 113 13455 : sortHelper(object_pair.second); 114 25374 : for (auto & object_pair : _all_boundary_objects[tid]) 115 751 : sortHelper(object_pair.second); 116 : 117 34282 : for (auto & object_pair : _neighbor_materials._all_block_objects[tid]) 118 9659 : sortHelper(object_pair.second); 119 24623 : for (auto & object_pair : _neighbor_materials._all_boundary_objects[tid]) 120 0 : sortHelper(object_pair.second); 121 : 122 34282 : for (auto & object_pair : _face_materials._all_block_objects[tid]) 123 9659 : sortHelper(object_pair.second); 124 24623 : for (auto & object_pair : _face_materials._all_boundary_objects[tid]) 125 0 : sortHelper(object_pair.second); 126 : 127 24623 : if (sort_all_objects) 128 : { 129 6289 : sortHelper(_all_objects[tid]); 130 6289 : sortHelper(_neighbor_materials._all_objects[tid]); 131 6289 : sortHelper(_face_materials._all_objects[tid]); 132 : } 133 : 134 24623 : updateActive(tid); 135 24623 : } 136 : 137 : void 138 647152 : MaterialWarehouse::updateMatPropDependencyHelper( 139 : std::unordered_set<unsigned int> & needed_mat_props, 140 : const std::vector<std::shared_ptr<MaterialBase>> & materials, 141 : const bool producer_only) const 142 : { 143 647152 : if (producer_only) 144 : { 145 23146 : std::unordered_set<unsigned int> consumer_needed_mat_props; 146 : 147 : do 148 : { 149 26574 : consumer_needed_mat_props = needed_mat_props; 150 : 151 62557 : for (auto & material : materials) 152 79927 : for (const auto prop : consumer_needed_mat_props) 153 43944 : if (material->getSuppliedPropIDs().count(prop)) 154 : { 155 32383 : auto & mp_deps = material->getMatPropDependencies(); 156 32383 : needed_mat_props.insert(mp_deps.begin(), mp_deps.end()); 157 : } 158 : 159 26574 : } while (consumer_needed_mat_props.size() != needed_mat_props.size()); 160 23146 : } 161 : else 162 624006 : MooseObjectWarehouseBase<MaterialBase>::updateMatPropDependencyHelper( 163 : needed_mat_props, materials, producer_only); 164 647152 : }