PeriDEM 0.3.0
PeriDEM -- Peridynamics-based high-fidelity model for granular media
Loading...
Searching...
No Matches
bcDeck.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 INP_BCDECK_H
12#define INP_BCDECK_H
13
14#include <string>
15
16#include "bcBaseDeck.h"
17#include "util/io.h"
18#include "util/json.h"
19
20namespace inp {
27 struct BCDeck {
28
30 std::vector<inp::BCBaseDeck> d_forceDeck;
31
33 std::vector<inp::BCBaseDeck> d_dispDeck;
34
36 std::vector<inp::BCBaseDeck> d_icDeck;
37
40
43
44
48 BCDeck(const json &j = json({}))
49 : d_gravityActive(false) {
50 readFromJson(j);
51 };
52
56 BCDeck(size_t nForceSets, size_t nDispSets = 0, size_t nICSets = 0,
57 bool gravityActive = false, util::Point gravity = util::Point())
58 : d_gravityActive(gravityActive), d_gravity(gravity) {
59
60 d_forceDeck.resize(nForceSets);
61 d_dispDeck.resize(nDispSets);
62 d_icDeck.resize(nICSets);
63 };
64
69 static json getExampleJson(size_t nForceSets = 0, size_t nDispSets = 0, size_t nICSets = 0,
70 bool gravityActive = false, util::Point gravity = util::Point()) {
71
72 if (nForceSets + nDispSets + nICSets == 0 and !gravityActive)
73 return json({});
74
75 auto j = json({});
76
77 if (gravityActive) j["Force_BC"] = {{"Gravity", gravity.toVec()}};
78
79 if (nForceSets > 0) {
80 j["Force_BC"] = {{"Sets", nForceSets}};
81 // add empty objects for each set
82 // for (size_t i = 0; i < nForceSets; i++) j.at("Force_BC")["Set_" + std::to_string(i + 1)] = json({});
83 }
84
85 if (nDispSets > 0) {
86 j["Displacement_BC"] = {{"Sets", nDispSets}};
87 // add empty objects for each set
88 // for (size_t i = 0; i < nDispSets; i++)
89 // j.at("Displacement_BC") = json{{"Set_" + std::to_string(i + 1), ""}};
90 }
91
92 if (nICSets > 0) {
93 j["IC"] = {{"Sets", nICSets}};
94 // add empty objects for each set
95 // for (size_t i = 0; i < nICSets; i++)
96 // j.at("IC") = json{{"Set_" + std::to_string(i + 1), ""}};
97 }
98
99 return j;
100 }
101
105 void readFromJson(const json &j) {
106
107 if (j.empty())
108 return;
109
110 // gravity
111 if (j.find("Force_BC") != j.end()) {
112 if (j.at("Force_BC").find("Gravity") != j.at("Force_BC").end()) {
113 d_gravityActive = true;
114 d_gravity = util::Point(j.at("Force_BC").value("Gravity", std::vector<double>({0., 0., 0.})));
115 }
116 }
117
118 // process Force_BC
119 d_forceDeck.clear();
120 d_dispDeck.clear();
121 d_icDeck.clear();
122 for (auto tag : std::vector<std::string>({"Force_BC", "Displacement_BC", "IC"})) {
123 if (j.find(tag) == j.end())
124 continue;
125
126 auto nSets = j.at(tag).value("Sets", 0);
127
128 for (size_t i = 0; i < nSets; i++) {
129
130 auto set = j.at(tag).at("Set_" + std::to_string(i + 1));
131
132 if (tag == "Force_BC") {
133 inp::BCBaseDeck bcData;
134 bcData.readFromJson(set, tag);
135 d_forceDeck.push_back(bcData);
136 } else if (tag == "Displacement_BC") {
137 inp::BCBaseDeck bcData;
138 bcData.readFromJson(set, tag);
139 d_dispDeck.push_back(bcData);
140 } else if (tag == "IC") {
141 inp::BCBaseDeck icData;
142 icData.readFromJson(set, tag);
143 d_icDeck.push_back(icData);
144 }
145 } // loop over sets
146 } // loop over tag
147 }
148
156 std::string printStr(int nt = 0, int lvl = 0) const {
157 auto tabS = util::io::getTabS(nt);
158 std::ostringstream oss;
159 oss << tabS << "------- BCDeck --------" << std::endl << std::endl;
160 oss << tabS << "Force loading deck size = " << d_forceDeck.size() << std::endl;
161 oss << tabS << "Force loading data:" << std::endl;
162 for (size_t i = 0; i < d_forceDeck.size(); i++) {
163 oss << tabS << "Force data for set = " << i << std::endl;
164 oss << d_forceDeck[i].printStr(nt + 1, lvl);
165 }
166
167 oss << tabS << "Displacement loading deck size = " << d_dispDeck.size() << std::endl;
168 oss << tabS << "Displacement loading data:" << std::endl;
169 for (size_t i = 0; i < d_dispDeck.size(); i++) {
170 oss << tabS << "Displacement data for set = " << i << std::endl;
171 oss << d_dispDeck[i].printStr(nt + 1, lvl);
172 }
173
174 oss << tabS << "Initial condition deck size = " << d_icDeck.size() << std::endl;
175 oss << tabS << "Initial condition data:" << std::endl;
176 for (size_t i = 0; i < d_icDeck.size(); i++) {
177 oss << tabS << "Initial condition for set = " << i << std::endl;
178 oss << d_icDeck[i].printStr(nt + 1, lvl);
179 }
180
181 oss << tabS << "Gravity loading active = " << d_gravityActive << std::endl;
182 oss << tabS << "Gravity loading value = " << d_gravity.printStr(0, 0) << std::endl;
183 oss << tabS << std::endl;
184
185 return oss.str();
186 }
187
194 void print(int nt = 0, int lvl = 0) const { std::cout << printStr(nt, lvl); }
195 };
196
198} // namespace inp
199
200#endif //INP_BCDECK_H
nlohmann::ordered_json json
Collection of methods and database related to input.
Definition pairForce.h:20
std::string getTabS(int nt)
Returns tab spaces of a given size.
Definition io.h:39
User-input data for particle neighbor search.
Definition bcBaseDeck.h:25
void readFromJson(const json &j, std::string type)
Reads from json object.
Definition bcBaseDeck.h:217
Structure to read and store test-related input data.
Definition bcDeck.h:27
static json getExampleJson(size_t nForceSets=0, size_t nDispSets=0, size_t nICSets=0, bool gravityActive=false, util::Point gravity=util::Point())
Returns example JSON object for ModelDeck configuration.
Definition bcDeck.h:69
std::vector< inp::BCBaseDeck > d_icDeck
Initial condition deck.
Definition bcDeck.h:36
std::vector< inp::BCBaseDeck > d_dispDeck
Displacement loading deck.
Definition bcDeck.h:33
BCDeck(const json &j=json({}))
Constructor.
Definition bcDeck.h:48
void print(int nt=0, int lvl=0) const
Prints the information about the object.
Definition bcDeck.h:194
void readFromJson(const json &j)
Reads from json object.
Definition bcDeck.h:105
std::vector< inp::BCBaseDeck > d_forceDeck
Force loading deck.
Definition bcDeck.h:30
BCDeck(size_t nForceSets, size_t nDispSets=0, size_t nICSets=0, bool gravityActive=false, util::Point gravity=util::Point())
Constructor.
Definition bcDeck.h:56
util::Point d_gravity
Gravity loading value.
Definition bcDeck.h:42
bool d_gravityActive
Gravity loading value.
Definition bcDeck.h:39
std::string printStr(int nt=0, int lvl=0) const
Returns the string containing printable information about the object.
Definition bcDeck.h:156
A structure to represent 3d vectors.
Definition point.h:30
std::string printStr(int nt=0, int lvl=0) const
Returns the string containing printable information about the object.
Definition point.h:94