//#####################################################################
// Copyright 2004-2008, Ron Fedkiw, Geoffrey Irving, Andrew Selle.
// This file is part of PhysBAM whose distribution is governed by the license contained in the accompanying file PHYSBAM_COPYRIGHT.txt.
//#####################################################################
#include <Deformables/Particles/DEFORMABLE_PARTICLES.h>
#include <Core/Math_Tools/Robust_Arithmetic.h>
#include <Core/Vectors/VECTOR.h>
#include <Deformables/Bindings/SOFT_BINDINGS.h>
namespace PhysBAM{
//#####################################################################
// Constructor
//#####################################################################
template<class TV> DEFORMABLE_PARTICLES<TV>::
DEFORMABLE_PARTICLES()
    :mass(0,0),one_over_mass(0,0),effective_mass(0,0),one_over_effective_mass(0,0),store_mass(false)
{
}
//#####################################################################
// Constructor
//#####################################################################
template<class TV> DEFORMABLE_PARTICLES<TV>::
DEFORMABLE_PARTICLES(const DEFORMABLE_PARTICLES& p)
    :GEOMETRY_PARTICLES<TV>()
{
    this->Add_Array("X",&X);
    this->Store_Velocity(p.store_velocity);
    Store_Mass(p.store_mass);
    this->Initialize(p);
}
//#####################################################################
// Constructor
//#####################################################################
template<class TV> DEFORMABLE_PARTICLES<TV>::
~DEFORMABLE_PARTICLES()
{}
//#####################################################################
// Function Store_Mass
//#####################################################################
template<class TV> void DEFORMABLE_PARTICLES<TV>::
Store_Mass(bool store)
{
    store_mass=store;
    if(store) this->Add_Array("mass",&mass);
    else Remove_Array("mass");
}
//#####################################################################
template class DEFORMABLE_PARTICLES<VECTOR<float,1> >;
template class DEFORMABLE_PARTICLES<VECTOR<float,2> >;
template class DEFORMABLE_PARTICLES<VECTOR<float,3> >;
template class DEFORMABLE_PARTICLES<VECTOR<double,1> >;
template class DEFORMABLE_PARTICLES<VECTOR<double,2> >;
template class DEFORMABLE_PARTICLES<VECTOR<double,3> >;
}
