blob: c5b994fad00011e0afb85a271338c595af90bdbe [file] [log] [blame]
//#####################################################################
// Copyright 2004, Ron Fedkiw, Eran Guendelman, Geoffrey Irving, Andrew Selle, Eftychios Sifakis, Joseph Teran.
// This file is part of PhysBAM whose distribution is governed by the license contained in the accompanying file PHYSBAM_COPYRIGHT.txt.
//#####################################################################
// Class SOLIDS_EVOLUTION_3D
//#####################################################################
#ifndef __SOLIDS_EVOLUTION_3D__
#define __SOLIDS_EVOLUTION_3D__
#include "SOLIDS_EVOLUTION_CALLBACKS.h"
namespace PhysBAM
{
template<class T> class VECTOR_3D;
template<class T> class ARRAY;
template<class T> class LIST_ARRAY;
template<class T> class SOLIDS_PARAMETERS_3D;
template<class T> class RIGID_BODY_COLLISIONS_3D;
template<class T> class RIGID_BODY_EVOLUTION_3D;
template<class T>
class SOLIDS_EVOLUTION_3D
{
public:
SOLIDS_PARAMETERS_3D<T>& solids_parameters;
RIGID_BODY_COLLISIONS_3D<T>* rigid_body_collisions;
RIGID_BODY_EVOLUTION_3D<T>* rigid_body_evolution;
T time;
bool quasistatic;
T newton_tolerance;
int newton_iterations;
bool use_partially_converged_result;
bool verbose;
SOLIDS_EVOLUTION_CALLBACKS<T, VECTOR_3D<T> >* solids_evolution_callbacks;
private:
SOLIDS_EVOLUTION_CALLBACKS<T, VECTOR_3D<T> > solids_evolution_callbacks_default;
public:
SOLIDS_EVOLUTION_3D (SOLIDS_PARAMETERS_3D<T>& solids_parameters_input, const bool verbose_input = true)
: solids_parameters (solids_parameters_input), rigid_body_collisions (0), rigid_body_evolution (0), time (0), quasistatic (false), newton_tolerance ( (T) 1e-3),
newton_iterations (200), use_partially_converged_result (true), verbose (verbose_input), solids_evolution_callbacks (&solids_evolution_callbacks_default)
{}
~SOLIDS_EVOLUTION_3D();
void Set_Solids_Evolution_Callbacks (SOLIDS_EVOLUTION_CALLBACKS<T, VECTOR_3D<T> >& solids_evolution_callbacks_input)
{
solids_evolution_callbacks = &solids_evolution_callbacks_input;
}
//#####################################################################
void Initialize_Deformable_Objects (const T frame_rate, const bool restart = false, const bool verbose_dt = false);
void Initialize_Rigid_Bodies (const T frame_rate);
void Advance_To_Target_Time (const T target_time, const bool verbose_dt);
void Advance_Deformable_Bodies_To_Target_Time (const T target_time, const bool verbose_dt);
void Advance_Deformable_Objects_In_Time (const T final_time, const int total_loops, const bool verbose_dt);
//#####################################################################
};
}
#endif