本文整理汇总了C++中MeshBase::local_node_ptr_range方法的典型用法代码示例。如果您正苦于以下问题:C++ MeshBase::local_node_ptr_range方法的具体用法?C++ MeshBase::local_node_ptr_range怎么用?C++ MeshBase::local_node_ptr_range使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MeshBase
的用法示例。
在下文中一共展示了MeshBase::local_node_ptr_range方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: swapper
void
MultiAppUserObjectTransfer::execute()
{
_console << "Beginning MultiAppUserObjectTransfer " << name() << std::endl;
switch (_direction)
{
case TO_MULTIAPP:
{
for (unsigned int i = 0; i < _multi_app->numGlobalApps(); i++)
{
if (_multi_app->hasLocalApp(i))
{
Moose::ScopedCommSwapper swapper(_multi_app->comm());
// Loop over the master nodes and set the value of the variable
System * to_sys = find_sys(_multi_app->appProblemBase(i).es(), _to_var_name);
unsigned int sys_num = to_sys->number();
unsigned int var_num = to_sys->variable_number(_to_var_name);
NumericVector<Real> & solution = _multi_app->appTransferVector(i, _to_var_name);
MeshBase * mesh = NULL;
if (_displaced_target_mesh && _multi_app->appProblemBase(i).getDisplacedProblem())
{
mesh = &_multi_app->appProblemBase(i).getDisplacedProblem()->mesh().getMesh();
}
else
mesh = &_multi_app->appProblemBase(i).mesh().getMesh();
bool is_nodal = to_sys->variable_type(var_num).family == LAGRANGE;
const UserObject & user_object =
_multi_app->problemBase().getUserObjectBase(_user_object_name);
if (is_nodal)
{
for (auto & node : mesh->local_node_ptr_range())
{
if (node->n_dofs(sys_num, var_num) > 0) // If this variable has dofs at this node
{
// The zero only works for LAGRANGE!
dof_id_type dof = node->dof_number(sys_num, var_num, 0);
swapper.forceSwap();
Real from_value = user_object.spatialValue(*node + _multi_app->position(i));
swapper.forceSwap();
solution.set(dof, from_value);
}
}
}
else // Elemental
{
for (auto & elem : as_range(mesh->local_elements_begin(), mesh->local_elements_end()))
{
Point centroid = elem->centroid();
if (elem->n_dofs(sys_num, var_num) > 0) // If this variable has dofs at this elem
{
// The zero only works for LAGRANGE!
dof_id_type dof = elem->dof_number(sys_num, var_num, 0);
swapper.forceSwap();
Real from_value = user_object.spatialValue(centroid + _multi_app->position(i));
swapper.forceSwap();
solution.set(dof, from_value);
}
}
}
solution.close();
to_sys->update();
}
}
break;
}
case FROM_MULTIAPP:
{
FEProblemBase & to_problem = _multi_app->problemBase();
MooseVariableFEBase & to_var = to_problem.getVariable(
0, _to_var_name, Moose::VarKindType::VAR_ANY, Moose::VarFieldType::VAR_FIELD_STANDARD);
SystemBase & to_system_base = to_var.sys();
System & to_sys = to_system_base.system();
unsigned int to_sys_num = to_sys.number();
// Only works with a serialized mesh to transfer to!
mooseAssert(to_sys.get_mesh().is_serial(),
"MultiAppUserObjectTransfer only works with ReplicatedMesh!");
unsigned int to_var_num = to_sys.variable_number(to_var.name());
_console << "Transferring to: " << to_var.name() << std::endl;
//.........这里部分代码省略.........