Bicameral Engine
GPU-resident engine for a magic-research open-world game
Loading...
Searching...
No Matches
implicit_conduction.cpp File Reference
#include "sim/implicit_conduction.h"
#include <algorithm>
#include <array>
#include <map>
#include <optional>
#include <tuple>
#include "common/implicit_conduction.hlsli"
#include "common/multires_conduction.hlsli"
Include dependency graph for implicit_conduction.cpp:

Go to the source code of this file.

Classes

struct  bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Containing
struct  bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::RowEntry
struct  bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Bounds
struct  bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Rational
struct  bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Rkl2Stage

Namespaces

namespace  bicameral
namespace  bicameral::sim
namespace  bicameral::sim::anonymous_namespace{implicit_conduction.cpp}

Typedefs

using bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::CellKey = std::tuple<int32_t, int64_t, int64_t, int64_t>
using bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Rows = std::vector<std::vector<RowEntry>>

Functions

FxU128 bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Wide (uint64_t value)
bool bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::IsZero (FxU128 value)
FxU128 bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::WideAdd (FxU128 a, FxU128 b)
FxU128 bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::WideShiftRight (FxU128 value, uint32_t shift)
FxU128 bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::WideShiftLeft (FxU128 value, uint32_t shift)
FxU128 bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::WideMul (FxU128 a, uint64_t b)
int64_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Weight (FxU128 numerator, FxU128 denominator)
int64_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::ShiftRightSigned (int64_t value, uint32_t shift)
int64_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::FaceFlow (FxU128 coefficient, int64_t difference)
std::map< CellKey, uint32_t > bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::MakeCellIndex (const std::vector< ImplicitCell > &cells)
std::optional< Containing > bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::FindContaining (const std::map< CellKey, uint32_t > &index, int32_t level, int64_t x, int64_t y, int64_t z)
FxU128 bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::FaceCoefficient (const ImplicitCell &fine, const ImplicitCell &coarse)
void bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::FindFaces (ImplicitGrid &grid)
void bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::AddToRow (std::vector< RowEntry > &row, uint32_t neighbor, FxU128 coefficient)
void bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::PushNode (ImplicitGridLevel &level, const CellKey &key, FxU128 capacity)
void bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::FinishLevel (ImplicitGridLevel &level, const Rows &rows)
ImplicitGridLevel bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::MakeCellLevel (const ImplicitGrid &grid)
bool bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::NeedsCoarser (const ImplicitGridLevel &level)
ImplicitGridLevel bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Coarsen (ImplicitGridLevel &fine, bool galerkin)
int64_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Relax (const ImplicitGridLevel &level, const std::vector< int64_t > &rhs, const std::vector< int64_t > &values, size_t node)
void bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::SweepColor (const ImplicitGridLevel &level, const std::vector< int64_t > &rhs, uint8_t color, std::vector< int64_t > &values, std::vector< int64_t > &next)
void bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Smooth (const ImplicitGridLevel &level, const std::vector< int64_t > &rhs, std::vector< int64_t > &values, uint32_t sweeps, ImplicitCost &cost)
void bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::VCycle (const ImplicitGrid &grid, size_t depth, const std::vector< int64_t > &rhs, std::vector< int64_t > &values, const ImplicitOptions &options, ImplicitCost &cost)
bool bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Converged (const ImplicitGridLevel &cells, const std::vector< int64_t > &rhs, const std::vector< int64_t > &values, uint32_t toleranceMillikelvin, ImplicitCost &cost)
std::vector< int64_t > bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Temperatures (const ImplicitGrid &grid)
std::vector< int64_t > bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Flows (const ImplicitGrid &grid, const std::vector< int64_t > &temperatures)
void bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::ApplyFlows (ImplicitGrid &grid, const std::vector< int64_t > &flows)
int64_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::AddClamped (int64_t a, int64_t b)
std::vector< int64_t > bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::ExplicitFlows (const ImplicitGrid &grid, const std::vector< int64_t > &start)
Bounds bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::MakeBounds (const ImplicitGrid &grid, const std::vector< int64_t > &start, int64_t slackMillikelvin)
std::vector< int64_t > bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::EnergiesAfter (const ImplicitGrid &grid, const std::vector< int64_t > &flows)
int64_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Overrun (int64_t energy, const Bounds &bounds, size_t i)
bool bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::MarkOutside (const ImplicitGrid &grid, const Bounds &bounds, const std::vector< int64_t > &energies, std::vector< uint8_t > &limited, ImplicitCost &cost)
void bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::LimitFlows (const ImplicitGrid &grid, const std::vector< int64_t > &start, int64_t slackMillikelvin, std::vector< int64_t > &flows, ImplicitCost &cost)
Rational bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Rkl2B (uint64_t j)
int64_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::RationalWeight (FxU128 numerator, FxU128 denominator, bool negative)
std::vector< Rkl2Stage > bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Rkl2Stages (uint32_t stageCount)
uint32_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Rkl2StageCount (const ImplicitGridLevel &cells)
std::vector< int64_t > bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::StageTemperatures (const ImplicitGrid &grid, const std::vector< int64_t > &start, const std::vector< int64_t > &accumulated)
int64_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::MulWeight (int64_t weight, int64_t value)
std::vector< int64_t > bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::Rkl2Flows (const ImplicitGrid &grid, const std::vector< int64_t > &start, ImplicitCost &cost)
ImplicitGrid bicameral::sim::BuildImplicitGrid (std::vector< ImplicitCell > cells, bool galerkin)
ImplicitGrid bicameral::sim::BuildImplicitGrid (std::vector< ImplicitCell > cells, std::vector< ImplicitFace > faces, bool galerkin, const ImplicitGridLimits &limits)
ImplicitCost bicameral::sim::StepImplicit (ImplicitGrid &grid, const ImplicitOptions &options)
int64_t bicameral::sim::ImplicitTemperature (const ImplicitCell &cell)
int64_t bicameral::sim::ImplicitEnergyFor (uint64_t heatCapacity, int64_t millikelvin)
FxU128 bicameral::sim::ImplicitConservedTotal (const ImplicitGrid &grid)

Variables

constexpr uint32_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::WEIGHT_SHIFT = IM_WEIGHT_SHIFT
constexpr uint32_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::TEMPERATURE_SHIFT = IM_TEMPERATURE_SHIFT
constexpr int64_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::HALF_WEIGHT = int64_t{1} << (WEIGHT_SHIFT - 1)
constexpr uint32_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::ENERGY_BITS_PER_LEVEL = IM_ENERGY_BITS_PER_LEVEL
constexpr uint32_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::STAGE_RATIO_SHIFT = 16
constexpr size_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::MAX_GRID_LEVELS = 64
constexpr uint8_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::COLOR_COUNT = 2
constexpr uint32_t bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::CORRECTION_SCALE_SHIFT = IM_CORRECTION_SCALE_SHIFT
constexpr std::array< std::array< int64_t, 3 >, 6 > bicameral::sim::anonymous_namespace{implicit_conduction.cpp}::FACE_OFFSETS