⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 meshconnectivity.cpp

📁 利用C
💻 CPP
字号:
// Copyright (C) 2006-2007 Anders Logg.// Licensed under the GNU LGPL Version 2.1.//// First added:  2006-05-09// Last changed: 2007-03-01#include <dolfin/log/dolfin_log.h>#include "MeshConnectivity.h"using namespace dolfin;//-----------------------------------------------------------------------------MeshConnectivity::MeshConnectivity()  : _size(0), num_entities(0), connections(0), offsets(0){  // Do nothing}//-----------------------------------------------------------------------------MeshConnectivity::MeshConnectivity(const MeshConnectivity& connectivity)  : _size(0), num_entities(0), connections(0), offsets(0){  *this = connectivity;}//-----------------------------------------------------------------------------MeshConnectivity::~MeshConnectivity(){  clear();}//-----------------------------------------------------------------------------const MeshConnectivity& MeshConnectivity::operator= (const MeshConnectivity& connectivity){  // Clear old data if any  clear();  // Allocate data  _size = connectivity._size;  num_entities = connectivity.num_entities;  connections = new uint[_size];  offsets = new uint[num_entities + 1];    // Copy data  for (uint i = 0; i < _size; i++)    connections[i] = connectivity.connections[i];  if ( num_entities > 0 )  {    for (uint e = 0; e <= num_entities; e++)      offsets[e] = connectivity.offsets[e];  }  return *this;}//-----------------------------------------------------------------------------void MeshConnectivity::clear(){  _size = 0;  num_entities = 0;  if ( connections )    delete [] connections;  connections = 0;  if ( offsets )    delete [] offsets;  offsets = 0;}//-----------------------------------------------------------------------------void MeshConnectivity::init(uint num_entities, uint num_connections){  // Clear old data if any  clear();    // Compute the total size  _size = num_entities*num_connections;  this->num_entities = num_entities;  // Allocate data  connections = new uint[_size];  offsets = new uint[num_entities + 1];    // Initialize data  for (uint i = 0; i < _size; i++)    connections[i] = 0;  for (uint e = 0; e <= num_entities; e++)    offsets[e] = e*num_connections;}//-----------------------------------------------------------------------------void MeshConnectivity::init(Array<uint>& num_connections){  // Clear old data if any  clear();  // Initialize offsets and compute total size  num_entities = num_connections.size();  offsets = new uint[num_entities + 1];  _size = 0;  for (uint e = 0; e < num_entities; e++)  {    offsets[e] = _size;    _size += num_connections[e];  }  offsets[num_entities] = _size;    // Initialize connections  connections = new uint[_size];  for (uint i = 0; i < _size; i++)    connections[i] = 0;}//-----------------------------------------------------------------------------void MeshConnectivity::set(uint entity, uint connection, uint pos){  dolfin_assert(entity < num_entities);  dolfin_assert(pos < offsets[entity + 1] - offsets[entity]);  connections[offsets[entity] + pos] = connection;}//-----------------------------------------------------------------------------void MeshConnectivity::set(uint entity, const Array<uint>& connections){  dolfin_assert(entity < num_entities);  dolfin_assert(connections.size() == offsets[entity + 1] - offsets[entity]);    // Copy data  for (uint i = 0; i < connections.size(); i++)    this->connections[offsets[entity] + i] = connections[i];}//-----------------------------------------------------------------------------void MeshConnectivity::set(uint entity, uint* connections){  dolfin_assert(entity < num_entities);  dolfin_assert(connections);  // Copy data  const uint num_connections = offsets[entity + 1] - offsets[entity];  for (uint i = 0; i < num_connections; i++)    this->connections[offsets[entity] + i] = connections[i];}//-----------------------------------------------------------------------------void MeshConnectivity::set(const Array<Array<uint> >& connections){  // Clear old data if any  clear();  // Initialize offsets and compute total size  num_entities = connections.size();  offsets = new uint[num_entities + 1];  _size = 0;  for (uint e = 0; e < num_entities; e++)  {    offsets[e] = _size;    _size += connections[e].size();  }  offsets[num_entities] = _size;    // Initialize connections  this->connections = new uint[_size];  for (uint e = 0; e < num_entities; e++)    for (uint i = 0; i < connections[e].size(); e++)      this->connections[offsets[e] + i] = connections[e][i];}//-----------------------------------------------------------------------------void MeshConnectivity::disp() const{  // Check if there are any connections  if ( _size == 0 )  {    cout << "empty" << endl;    return;  }  // Display all connections  for (uint e = 0; e < num_entities; e++)  {    cout << e << ":";    for (uint i = offsets[e]; i < offsets[e + 1]; i++)      cout << " " << connections[i];    cout << endl;  }}//-----------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -