10 setvel=std::vector<double>(
d,std::numeric_limits<double>::quiet_NaN()) ;
16 std::vector<int>
ids ;
27 com=std::vector<double>(
d,0) ;
28 F=std::vector<double>(
d,0) ;
51 std::vector<RigidBody<d>>
RB ;
53 template <
class Archive>
void serialize(Archive &ar) { ar(
RB) ; }
55 int allocate (std::vector<std::optional<int>> & RigidBodyId)
57 for (
size_t i=0 ; i<
RB.size() ; i++)
59 for (
auto & j:
RB[i].ids)
61 if (RigidBodyId[j].has_value())
62 printf(
"WARN: grain %d may be allocated to several rigid bodies ...\n", j) ;
69 int process_forces ( std::vector <std::vector<double> > &V, std::vector < std::vector <double> > & F, std::vector < std::vector <double> > & Torque,
cv1d & m,
cv1d & g)
75 for (
auto &
id : v.ids) v.F += F[id] ;
76 for (
auto &
id : v.ids)
78 for (
int dd=0 ; dd<
d ; dd++)
79 F[
id][dd]=v.addforce[dd] + v.F[dd]/v.mass*m[
id] - g[dd]*(v.cancelgravity?1:0)*m[id] ;
81 for (
int dd = 0 ; dd<
d ; dd++)
82 if (!isnan(v.setvel[dd]))
85 V[id][dd]=v.setvel[dd] ;
Definition: RigidBody.h:48
int process_forces(std::vector< std::vector< double > > &V, std::vector< std::vector< double > > &F, std::vector< std::vector< double > > &Torque, cv1d &m, cv1d &g)
Definition: RigidBody.h:69
int allocate(std::vector< std::optional< int >> &RigidBodyId)
Definition: RigidBody.h:55
std::vector< RigidBody< d > > RB
Definition: RigidBody.h:51
void serialize(Archive &ar)
Definition: RigidBody.h:53
Definition: RigidBody.h:7
double mass
Definition: RigidBody.h:19
void serialize(Archive &ar)
Definition: RigidBody.h:22
double setparticles(std::vector< int > iid, cv2d &X, cv1d &m)
Definition: RigidBody.h:25
v1d F
Definition: RigidBody.h:17
std::vector< int > ids
Definition: RigidBody.h:16
bool cancelgravity
Definition: RigidBody.h:20
RigidBody()
Definition: RigidBody.h:9
v1d setvel
Definition: RigidBody.h:18
v1d com
Definition: RigidBody.h:17
v1d addforce
Definition: RigidBody.h:18
static void setzero(v2d &a)
Set a matrix to zero in-place.
Definition: Tools.h:117
const vector< double > cv1d
Definition: Typedefs.h:13
const vector< vector< double > > cv2d
Definition: Typedefs.h:14
vector< double > v1d
Definition: Typedefs.h:9
PUGI_IMPL_FN void sort(I begin, I end, const Pred &pred)
Definition: pugixml.cpp:7707