File: PotentialParticle.hpp

package info (click to toggle)
yade 2026.1.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 34,448 kB
  • sloc: cpp: 97,645; python: 52,173; sh: 677; makefile: 162
file content (64 lines) | stat: -rw-r--r-- 2,642 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*CWBoon 2015 */

#pragma once
#ifdef YADE_POTENTIAL_PARTICLES

#include <lib/base/openmp-accu.hpp>
#include <lib/compatibility/LapackCompatibility.hpp>
#include <core/Shape.hpp>
#include <Eigen/Core>
#include <Eigen/LU>
#include <Eigen/QR>
#include <vector>
//#include <lib/base/openmp-accu.hpp>


namespace yade { // Cannot have #include directive inside.

class PotentialParticle : public Shape {
public:
	virtual ~PotentialParticle();

	// clang-format off
		YADE_CLASS_BASE_DOC_ATTRS_CTOR(PotentialParticle,Shape,"EXPERIMENTAL. Geometry of PotentialParticle.",
			((int, id, 1,, "Particle id (for graphics in vtk output)")) //TODO: Check if we can use the body id instead in all instances and delete this attribute
			((bool, isBoundary, false,, "Whether the particle is part of a boundary particle"))
			((bool, fixedNormal, false,, "Whether to fix the contact normal at a boundary, using boundaryNormal"))
			((Vector3r, boundaryNormal, Vector3r::Zero(),,"Normal direction of boundary if fixedNormal=True"))
			((bool, AabbMinMax, false,, "Whether the exact Aabb should be calculated. If false, an approximate cubic Aabb is defined with edges of ``2R``"))
			((Vector3r, minAabb, Vector3r::Zero(),,"Min from box centre: Used for visualisation in vtk and qt"))
			((Vector3r, maxAabb, Vector3r::Zero(),,"Max from box centre: Used for visualisation in vtk and qt"))
			((Vector3r, minAabbRotated, Vector3r::Zero(),,"Min from box centre: Used for primary contact detection"))
			((Vector3r, maxAabbRotated, Vector3r::Zero(),,"Max from box centre: Used for primary contact detection"))
//			((Vector3r, halfSize, Vector3r::Zero(),,"max from box centre"))
//			((Quaternionr , oriAabb, Quaternionr::Identity(),, "r "))
			((Real , r, 0.1,, "r in Potential Particles"))
			((Real , R, 1.0,, "R in Potential Particles"))
			((Real , k, 0.1,, "k in Potential Particles"))
			((vector<Vector3r>, vertices,,,"Vertices"))
//			((vector<bool> , isBoundaryPlane, ,, "whether it is a boundaryPlane "))
			((vector<Real> , a, ,, "List of a coefficients of plane normals"))
			((vector<Real> , b, ,, "List of b coefficients of plane normals"))
			((vector<Real> , c, ,, "List of c coefficients of plane normals"))
			((vector<Real> , d, ,, "List of d coefficients of plane normals"))
			, /*ctor*/
			createIndex();
#if 0
		for (int i=0; i<a.size(); i++) {
		Amatrix(i,0) = a[i];
			Amatrix(i,1)=b[i];
			Amatrix(i,2)=c[i];
			Dmatrix(i,0) = d[i] + r;
		}
#endif
		);
	// clang-format on
	//#endif
	REGISTER_CLASS_INDEX(PotentialParticle, Shape);
};

REGISTER_SERIALIZABLE(PotentialParticle);

}; // namespace yade

#endif // YADE_POTENTIAL_PARTICLES