15 #ifndef CORE_OPERATION_MECHANICAL_FORCES_OP_H_
16 #define CORE_OPERATION_MECHANICAL_FORCES_OP_H_
45 std::numeric_limits<uint64_t>::max());
78 auto* scheduler = sim->GetScheduler();
79 auto* param = sim->GetParam();
83 auto current_iteration = scheduler->GetSimulatedSteps();
84 auto tid = omp_get_thread_num();
88 auto* grid = sim->GetEnvironment();
89 auto search_radius = grid->GetLargestAgentSize();
91 auto current_time = (current_iteration + 1) * param->simulation_time_step;
96 const auto& displacement =
99 if (param->bound_space) {
Contains code required by all agents.
virtual void ApplyDisplacement(const Real3 &displacement)=0
virtual Real3 CalculateDisplacement(const InteractionForce *force, real_t squared_radius, real_t dt)=0
virtual InteractionForce * NewCopy() const
Defines the 3D physical interactions between physical objects.
void operator()(Agent *agent) override
std::vector< real_t > delta_time_
InteractionForce * force_
MechanicalForcesOp(const MechanicalForcesOp &other)
std::vector< uint64_t > last_iteration_
~MechanicalForcesOp() override
std::vector< real_t > last_time_run_
void SetInteractionForce(InteractionForce *force)
BDM_OP_HEADER(MechanicalForcesOp)
static Simulation * GetActive()
This function returns the currently active Simulation simulation.
static ThreadInfo * GetInstance()
void ApplyBoundingBox(Agent *agent, Param::BoundSpaceMode mode, real_t lb, real_t rb)
Interface for implementing an operation.