File: assemble_utils.cpp

package info (click to toggle)
dolfinx-mpc 0.9.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,188 kB
  • sloc: python: 7,263; cpp: 5,462; makefile: 69; sh: 4
file content (29 lines) | stat: -rw-r--r-- 912 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Copyright (C) 2022 Jorgen S. Dokken
//
// This file is part of DOLFINX_MPC
//
// SPDX-License-Identifier:    MIT

#include "assemble_utils.h"
#include <algorithm>
#include <assert.h>
std::vector<std::int32_t> dolfinx_mpc::compute_local_slave_index(
    std::span<const std::int32_t> slaves, const std::uint32_t num_dofs,
    const int bs, std::span<const std::int32_t> cell_dofs,
    std::span<const std::int8_t> is_slave)
{
  std::vector<std::int32_t> local_index(slaves.size());
  for (std::uint32_t i = 0; i < num_dofs; i++)
    for (int j = 0; j < bs; j++)
    {
      const std::int32_t dof = cell_dofs[i] * bs + j;
      assert((std::uint32_t)dof < is_slave.size());
      if (is_slave[dof])
      {
        auto it = std::ranges::find(slaves, dof);
        const auto slave_index = std::distance(slaves.begin(), it);
        local_index[slave_index] = i * bs + j;
      }
    }
  return local_index;
};