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
79 static json getExampleJson(const json &given = json::object()) {
80 checkNames(given, {"Force_BC_Sets", "Displacement_BC_Sets", "IC_Sets",
81 "Gravity"});
82
83 const auto nForceSets = given.value("Force_BC_Sets", size_t(0));
84 const auto nDispSets = given.value("Displacement_BC_Sets", size_t(0));
85 const auto nICSets = given.value("IC_Sets", size_t(0));
86 const bool gravityActive = given.find("Gravity") != given.end();
87
88 if (nForceSets + nDispSets + nICSets == 0 and !gravityActive)
89 return json({});
90
91 auto j = json({});
92
93 if (gravityActive)
94 j["Force_BC"]["Gravity"] = given.at("Gravity");
95
96 if (nForceSets > 0)
97 j["Force_BC"]["Sets"] = nForceSets;
98
99 if (nDispSets > 0)
100 j["Displacement_BC"] = {{"Sets", nDispSets}};
101
102 if (nICSets > 0)
103 j["IC"] = {{"Sets", nICSets}};
104
105 return j;
106 }
107
111 void readFromJson(const json &j) {
112
113 if (j.empty())
114 return;
115
116 // gravity
117 if (j.find("Force_BC") != j.end()) {
118 if (j.at("Force_BC").find("Gravity") != j.at("Force_BC").end()) {
119 d_gravityActive = true;
120 d_gravity = util::Point(j.at("Force_BC").value("Gravity", std::vector<double>({0., 0., 0.})));
121 }
122 }
123
124 // process Force_BC
125 d_forceDeck.clear();
126 d_dispDeck.clear();
127 d_icDeck.clear();
128 for (auto tag : std::vector<std::string>({"Force_BC", "Displacement_BC", "IC"})) {
129 if (j.find(tag) == j.end())
130 continue;
131
132 auto nSets = j.at(tag).value("Sets", 0);
133
134 for (size_t i = 0; i < nSets; i++) {
135
136 auto set = j.at(tag).at("Set_" + std::to_string(i + 1));
137
138 if (tag == "Force_BC") {
139 inp::BCBaseDeck bcData;
140 bcData.readFromJson(set, tag);
141 d_forceDeck.push_back(bcData);
142 } else if (tag == "Displacement_BC") {
143 inp::BCBaseDeck bcData;
144 bcData.readFromJson(set, tag);
145 d_dispDeck.push_back(bcData);
146 } else if (tag == "IC") {
147 inp::BCBaseDeck icData;
148 icData.readFromJson(set, tag);
149 d_icDeck.push_back(icData);
150 }
151 } // loop over sets
152 } // loop over tag
153 }
154
162 std::string printStr(int nt = 0, int lvl = 0) const {
163 auto tabS = util::io::getTabS(nt);
164 std::ostringstream oss;
165 oss << tabS << "------- BCDeck --------" << std::endl << std::endl;
166 oss << tabS << "Force loading deck size = " << d_forceDeck.size() << std::endl;
167 oss << tabS << "Force loading data:" << std::endl;
168 for (size_t i = 0; i < d_forceDeck.size(); i++) {
169 oss << tabS << "Force data for set = " << i << std::endl;
170 oss << d_forceDeck[i].printStr(nt + 1, lvl);
171 }
172
173 oss << tabS << "Displacement loading deck size = " << d_dispDeck.size() << std::endl;
174 oss << tabS << "Displacement loading data:" << std::endl;
175 for (size_t i = 0; i < d_dispDeck.size(); i++) {
176 oss << tabS << "Displacement data for set = " << i << std::endl;
177 oss << d_dispDeck[i].printStr(nt + 1, lvl);
178 }
179
180 oss << tabS << "Initial condition deck size = " << d_icDeck.size() << std::endl;
181 oss << tabS << "Initial condition data:" << std::endl;
182 for (size_t i = 0; i < d_icDeck.size(); i++) {
183 oss << tabS << "Initial condition for set = " << i << std::endl;
184 oss << d_icDeck[i].printStr(nt + 1, lvl);
185 }
186
187 oss << tabS << "Gravity loading active = " << d_gravityActive << std::endl;
188 oss << tabS << "Gravity loading value = " << d_gravity.printStr(0, 0) << std::endl;
189 oss << tabS << std::endl;
190
191 return oss.str();
192 }
193
200 void print(int nt = 0, int lvl = 0) const { std::cout << printStr(nt, lvl); }
201 };
202
204} // namespace inp
205
206#endif //INP_BCDECK_H
nlohmann::ordered_json json
Collection of methods and database related to input.
Definition pairForce.h:20
void checkNames(const json &given, const std::vector< std::string > &names)
Rejects a key that is not among those named.
Definition deckField.h:379
std::string getTabS(int nt)
Returns tab spaces of a given size.
Definition io.h:82
User-input data for particle neighbor search.
Definition bcBaseDeck.h:26
void readFromJson(const json &j, std::string type)
Reads from json object.
Definition bcBaseDeck.h:294
Structure to read and store test-related input data.
Definition bcDeck.h:27
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:200
void readFromJson(const json &j)
Reads from json object.
Definition bcDeck.h:111
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
static json getExampleJson(const json &given=json::object())
Returns example JSON object for ModelDeck configuration.
Definition bcDeck.h:79
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:162
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