PeriDEM 0.3.0
PeriDEM -- Peridynamics-based high-fidelity model for granular media
Loading...
Searching...
No Matches
pairForce.h
Go to the documentation of this file.
1/*
2 * -------------------------------------------
3 * Copyright (c) 2021 - 2026 Prashant K. Jha
4 * -------------------------------------------
5 * PeriDEM https://github.com/prashjha/PeriDEM
6 *
7 * Distributed under the Boost Software License, Version 1.0. (See accompanying
8 * file LICENSE)
9 */
10
11#ifndef CONTACT_PAIRFORCE_H
12#define CONTACT_PAIRFORCE_H
13
14#include "util/point.h"
15#include <cstddef>
16#include <cstdint>
17#include <mutex>
18#include <unordered_map>
19
20namespace inp {
21struct ContactPairDeck;
22}
23
24namespace contact {
25
27struct Pair {
30 std::size_t i = 0;
31 std::size_t j = 0;
32 std::size_t pt_i = 0;
33 std::size_t pt_j = 0;
34 double voli = 0.;
35 double volj = 0.;
36 double rhoi = 0.;
37 double rhoj = 0.;
38 double dt = 0.;
39 bool wall_i = false;
40 bool wall_j = false;
41};
42
48double correctedContactVolume(double volj, double Rji, double Rc, double h);
49
57class PairForce {
58public:
59 virtual ~PairForce() = default;
60
61 virtual void beginStep() {}
62 virtual void endStep() {}
63
65 virtual util::Point springForce(const Pair &p);
66
68 virtual util::Point nodeDampingForce(const Pair &p);
69
71 virtual util::Point force(const Pair &p);
72};
73
79public:
80 void beginStep() override;
81 void endStep() override;
82 util::Point springForce(const Pair &p) override;
83
84private:
85 struct Hist {
87 std::size_t stamp = 0;
88 };
89 static std::uint64_t key(std::size_t i, std::size_t j) {
90 return (static_cast<std::uint64_t>(i) << 32) ^
91 static_cast<std::uint64_t>(j);
92 }
93 std::unordered_map<std::uint64_t, Hist> d_hist;
94 std::size_t d_stamp = 0;
95 std::mutex d_mutex;
96};
97
98} // namespace contact
99
100#endif // CONTACT_PAIRFORCE_H
virtual util::Point force(const Pair &p)
Definition pairForce.cpp:82
virtual void beginStep()
Definition pairForce.h:61
virtual ~PairForce()=default
virtual util::Point springForce(const Pair &p)
Definition pairForce.cpp:34
virtual util::Point nodeDampingForce(const Pair &p)
Definition pairForce.cpp:59
virtual void endStep()
Definition pairForce.h:62
std::unordered_map< std::uint64_t, Hist > d_hist
Definition pairForce.h:93
static std::uint64_t key(std::size_t i, std::size_t j)
Definition pairForce.h:89
util::Point springForce(const Pair &p) override
Definition pairForce.cpp:98
void beginStep() override
Definition pairForce.cpp:86
double correctedContactVolume(double volj, double Rji, double Rc, double h)
Definition pairForce.cpp:19
Collection of methods and database related to input.
Definition pairForce.h:20
One node-node contact pair. Assembly fills this; the law uses it.
Definition pairForce.h:27
double rhoj
Definition pairForce.h:37
double rhoi
Definition pairForce.h:36
util::Point yi
Definition pairForce.h:29
std::size_t i
Definition pairForce.h:30
util::Point vj
Definition pairForce.h:29
std::size_t j
Definition pairForce.h:31
util::Point vi
Definition pairForce.h:29
std::size_t pt_j
Definition pairForce.h:33
std::size_t pt_i
Definition pairForce.h:32
util::Point yj
Definition pairForce.h:29
const inp::ContactPairDeck & deck
Definition pairForce.h:28
double voli
Definition pairForce.h:34
double volj
Definition pairForce.h:35
Structure to read and store particle-particle contact related input data.
A structure to represent 3d vectors.
Definition point.h:30