double getCostBetweenCells(unsigned int c1, unsigned int c2) const {
		double sum = 0;
		auto c1Vec = getGridCoordinates(c1);
		auto c2Vec = getGridCoordinates(c2);
		for(unsigned int i = 0; i < discretizationSizes.size(); ++i) {
			double delta = fabs((double)c1Vec[i] - (double)c2Vec[i]) * (double)discretizationSizes[i];
			sum += delta * delta;
		}
		return sqrt(sum);
	}
Ejemplo n.º 2
0
 void DipoleGeometry::dump (bool verbose, const Core::OStream& out) const {
   if (verbose)
     for (uint32_t i = 0; i < nvCount (); i++)
       out << i << " " << getGridCoordinates (i) << " " << (int) getMaterialIndex (i) << std::endl;
   out << "box = " << box () << std::endl;
   out << "matCount = " << matCount () << std::endl;
   out << "nvCount = " << nvCount () << std::endl;
   check ();
 }
Ejemplo n.º 3
0
  void DipoleGeometry::normalize () {
    if (nvCount () == 0)
      return;

    Math::Vector3<uint32_t> min = Math::Vector3<uint32_t> (std::numeric_limits<uint32_t>::max (), std::numeric_limits<uint32_t>::max (), std::numeric_limits<uint32_t>::max ());

    for (uint32_t i = 0; i < nvCount (); i++) {
      Math::Vector3<uint32_t> coords = getGridCoordinates (i);
      if (coords.x () < min.x ())
        min.x () = coords.x ();
      if (coords.y () < min.y ())
        min.y () = coords.y ();
      if (coords.z () < min.z ())
        min.z () = coords.z ();
    }

    if (min != Math::Vector3<uint32_t> (0, 0, 0)) {
      for (uint32_t i = 0; i < nvCount (); i++) {
        positions_[i] -= min;
      }
      box_ -= min;
      origin () += min * gridUnit ();
    }
  }
	std::vector<unsigned int> getNeighbors(unsigned int n) const {
		std::vector<unsigned int> neighbors;

		auto coordinate = getGridCoordinates(n);

		for(const std::vector<int>& offsets : gridNeighborOffsets) {

			std::vector<unsigned int> neighbor(offsets.size());
			bool valid = true;
			for(unsigned int i = 0; i < neighbor.size(); ++i) {
				int coord = (int)coordinate[i] + offsets[i];
				if(coord < 0 || coord >= dimensions[i]) {
					valid = false;
				}
				neighbor[i] = coord;
			}
			unsigned int index = getIndex(neighbor);
			if(valid && grid[index]) {
				neighbors.push_back(index);
			}
		}

		return neighbors;
	}