blob: 2678b3395b29bc24ee7294e984df0c30d2a42bda [file] [log] [blame]
//#####################################################################
// Copyright 2003-2004, Ronald Fedkiw, Eran Guendelman, Rachel Weinstein.
// This file is part of PhysBAM whose distribution is governed by the license contained in the accompanying file PHYSBAM_COPYRIGHT.txt.
//#####################################################################
// Class RIGID_BODY_EVOLUTION_3D
//#####################################################################
#ifndef __RIGID_BODY_EVOLUTION_3D__
#define __RIGID_BODY_EVOLUTION_3D__
#include "RIGID_BODY_EVOLUTION.h"
#include "RIGID_BODY_3D.h"
#include "RIGID_BODY_COLLISIONS_3D.h"
namespace PhysBAM
{
template<class T>
class RIGID_BODY_EVOLUTION_3D: public RIGID_BODY_EVOLUTION<T>
{
private:
using RIGID_BODY_EVOLUTION<T>::cfl_number;
using RIGID_BODY_EVOLUTION<T>::max_rotation_per_time_step;
using RIGID_BODY_EVOLUTION<T>::max_linear_movement_fraction_per_time_step;
using RIGID_BODY_EVOLUTION<T>::minimum_dt;
using RIGID_BODY_EVOLUTION<T>::maximum_dt;
using RIGID_BODY_EVOLUTION<T>::artificial_maximum_speed;
using RIGID_BODY_EVOLUTION<T>::use_contact_graph;
using RIGID_BODY_EVOLUTION<T>::use_shock_propagation;
using RIGID_BODY_EVOLUTION<T>::use_push_out;
using RIGID_BODY_EVOLUTION<T>::clamp_velocities;
using RIGID_BODY_EVOLUTION<T>::max_linear_velocity;
using RIGID_BODY_EVOLUTION<T>::max_angular_velocity;
public:
LIST_ARRAY<RIGID_BODY_3D<T>*>& rigid_bodies;
RIGID_BODY_COLLISIONS_3D<T>& collisions;
RIGID_BODY_EVOLUTION_3D (LIST_ARRAY<RIGID_BODY_3D<T>*>& rigid_bodies_input, RIGID_BODY_COLLISIONS_3D<T>& collisions_input)
: rigid_bodies (rigid_bodies_input), collisions (collisions_input)
{}
//#####################################################################
void Advance_One_Time_Step (const T dt, const T time);
void Update_Positions (const T dt, const T time);
void Update_Velocities (const T dt, const T time);
void Add_Elastic_Collisions (const T dt, const T time);
void Apply_Contact_Forces (const T dt, const T time);
T CFL (const bool verbose = false);
void Clamp_Velocities();
//#####################################################################
};
}
#endif