PeriDEM 0.3.0
PeriDEM -- Peridynamics-based high-fidelity model for granular media
Loading...
Searching...
No Matches
gen_input Namespace Reference

Functions

tuple[float, float, float] wall_geom_center (list[float] params)
 
dict contact_pair (int i, int j)
 
dict material (float horizon, float K, float G, float Gc)
 
dict build (float final_time, int time_steps, str out_path, int output_interval, float omega=-20.0 *math.pi)
 
None main ()
 
None validate_ic (list[tuple] rows)
 
dict build (float final_time, int time_steps, str out_path, int output_interval)
 

Variables

 HERE = Path(__file__).resolve().parent
 
str MESH = HERE / "meshes"
 
str CSV = HERE / "particle_locations_0.csv"
 
dict R_REF = {0: 0.001, 1: 0.001, 2: 0.001, 3: 0.003, 4: 0.003, 5: 0.003}
 
list MESH_FILES
 
list WALL_PARAMS
 
dict KN
 
dict K_MAT = {0: 1.0e4, 1: 1.0e5, 2: 1.0e5}
 
float KN_FACTOR = 1.0
 
float R_IN = 0.02
 
float R_SMALL = 0.001
 
float R_LARGE = 0.003
 
float MESH_SIZE = R_SMALL / 5.0
 
float HORIZON = 2.0 * MESH_SIZE
 
float R_OUT = R_IN + 1.5 * MESH_SIZE
 
float L_BAR = 0.005
 
float W_BAR = 1.5 * MESH_SIZE
 
float BETA_N_FACTOR = 100.0
 
float EPSILON = 0.95
 
float CONTACT_RADIUS_FACTOR = 0.95
 
float FRICTION_COEFF = 0.5
 
bool DAMPING_ON = False
 
bool FRICTION_ON = False
 
str DAMPING_LAW = "off"
 
str FRICTION_LAW = "coulomb_simple"
 
bool CORRECT_VOLUME = False
 
int SEARCH_INTERVAL = 40
 
float SEARCH_FACTOR = 10.0
 
float NEAR_BD_TOL = 0.5
 
str BOND_BREAK = "tension"
 
str SELF_CONTACT = "broken_bond_kn"
 
str WALL_CONTACT = "meshed"
 
bool RANDOM_ROTATION = False
 
float OMEGA = -40.0 * math.pi
 
tuple ROT_CENTER = (-0.2 * R_IN, 0.2 * R_IN, 0.0)
 

Detailed Description

Build modular JSON for attrition sim1 — match main GIF deck.

Reference (main README links attrition_test_sim1.gif here):
  examples/PeriDEM/attrition_tests/sim1_multi_particle_circ_tri_drum_with_rotating_cylinder_with_protrusion

Physics from that problem_setup.py: Kn_Factor=1, Gc=50/100, Bond_Break unset
(tension default). Wall site = ComplexGeom centroid so mesh at origin is not shifted.
Build modular JSON for attrition sim2 — explicit keys, match main GIF deck.

Reference:
  examples/PeriDEM/attrition_tests/sim2_multi_particle_circ_tri_drum_hex_with_rotating_cylinder_with_protrusion_thin_container_and_change_rotation_rate

Every field that has a dangerous modular default is set explicitly (see
INPUT_DEFAULTS.md). No reliance on omitted-key defaults.

Function Documentation

◆ build() [1/2]

dict gen_input.build ( float  final_time,
int  time_steps,
str  out_path,
int  output_interval 
)

Definition at line 168 of file gen_input.py.

173) -> dict:
174 particles = []
175 rows = []
176 with CSV.open() as f:
177 next(f)
178 for line in f:
179 parts = [p.strip() for p in line.split(",")]
180 if len(parts) < 6:
181 continue
182 zi = int(float(parts[0]))
183 x, y, z = float(parts[1]), float(parts[2]), float(parts[3])
184 r, o = float(parts[4]), float(parts[5])
185 rows.append((zi, x, y, z, r, o))
186 large = zi >= 4
187 particles.append(
188 {
189 "x": x,
190 "y": y,
191 "z": z,
192 "theta": o,
193 "s": r / R_REF[zi],
194 "geom_id": zi,
195 "mat_id": 1 if large else 0,
196 "contact_id": 1 if large else 0,
197 }
198 )
199
200 validate_ic(rows)
201
202 wall_id = len(particles)
203 wcx, wcy, wcz = wall_geom_center(WALL_PARAMS)
204 particles.append(
205 {
206 "x": wcx,
207 "y": wcy,
208 "z": wcz,
209 "theta": 0.0,
210 "s": 1.0,
211 "geom_id": 8,
212 "mat_id": 1,
213 "contact_id": 2,
214 "is_wall": True, # no PD on wall; DOFs locked by Displacement_BC
215 }
216 )
217
218 gen = {
219 "Method": "From_File",
220 "Random_Rotation": RANDOM_ROTATION,
221 "Data": {"N": len(particles)},
222 }
223 for i, p in enumerate(particles):
224 gen["Data"][str(i)] = p
225
226 particle_geom = {
227 "Sets": 9,
228 "Set_1": {"Type": "circle", "Parameters": [R_SMALL, 0.0, 0.0, 0.0]},
229 "Set_2": {"Type": "triangle", "Parameters": [R_SMALL, 0.0, 0.0, 0.0]},
230 "Set_3": {
231 "Type": "drum2d",
232 "Parameters": [R_SMALL, R_SMALL * 0.4, 0.0, 0.0, 0.0],
233 },
234 "Set_4": {"Type": "hexagon", "Parameters": [R_SMALL, 0.0, 0.0, 0.0]},
235 "Set_5": {"Type": "circle", "Parameters": [R_LARGE, 0.0, 0.0, 0.0]},
236 "Set_6": {"Type": "triangle", "Parameters": [R_LARGE, 0.0, 0.0, 0.0]},
237 "Set_7": {
238 "Type": "drum2d",
239 "Parameters": [R_LARGE, R_LARGE * 0.4, 0.0, 0.0, 0.0],
240 },
241 "Set_8": {"Type": "hexagon", "Parameters": [R_LARGE, 0.0, 0.0, 0.0]},
242 "Set_9": {
243 "Type": "complex",
244 "Vec_type": ["circle", "circle", "rectangle"],
245 "Vec_flag": ["plus", "minus", "plus"],
246 "Parameters": WALL_PARAMS,
247 },
248 }
249
250 mesh = {"Sets": 9}
251 for i, name in enumerate(MESH_FILES):
252 mesh[f"Set_{i + 1}"] = {"File": str((MESH / name).resolve())}
253
254 contact = {
255 "Sets": 3,
256 "Damping_Law": DAMPING_LAW,
257 "Friction_Law": FRICTION_LAW,
258 "Correct_Volume": CORRECT_VOLUME,
259 }
260 for i in range(3):
261 for j in range(i, 3):
262 contact[f"Set_{i + 1}_{j + 1}"] = contact_pair(i, j)
263
264 return {
265 "Model": {
266 "Dimension": 2,
267 "Final_Time": final_time,
268 "Time_Steps": time_steps,
269 "Discretization_Type": {
270 "Spatial": "finite_difference",
271 "Time": "central_difference",
272 },
273 "Populate_ElementNodeConnectivity": True,
274 "Quad_Approximation_Order": 2,
275 "Particle_Sim_Type": "Multi_Particle",
276 "MPI_Strategy": "auto",
277 "Seed": 0,
278 "Bond_Break": BOND_BREAK,
279 "Self_Contact": SELF_CONTACT,
280 "Wall_Contact": WALL_CONTACT,
281 },
282 "Output": {
283 "Path": out_path if out_path.endswith("/") else out_path + "/",
284 "Perform_Out": True,
285 "Tags": [
286 "Displacement",
287 "Velocity",
288 "Force",
289 "Damage_Z",
290 "Damage",
291 "Particle_ID",
292 "Fixity",
293 "Contact_Nodes",
294 ],
295 "Output_Interval": output_interval,
296 "Debug": 3,
297 "Perform_FE_Out": False,
298 "Compress_Type": "zlib",
299 "File_Format": "vtu",
300 "Test_Output_Interval": max(1, output_interval // 100),
301 "Tag_PP": "0",
302 "PVD_Collection": True,
303 },
304 "Force_BC": {"Gravity": [0.0, -10.0, 0.0]},
305 "Displacement_BC": {
306 "Sets": 1,
307 "Set_1": {
308 "Particle_List": [wall_id],
309 "Direction": [1, 2],
310 "Time_Function": {
311 "Type": "rotation",
312 "Parameters": [OMEGA, ROT_CENTER[0], ROT_CENTER[1], ROT_CENTER[2]],
313 },
314 "Spatial_Function": {"Type": "rotation"},
315 "Zero_Displacement": False,
316 },
317 },
318 "Particle": particle_geom,
319 "Mesh": mesh,
320 "Material": {
321 "Sets": 2,
322 "Set_1": material(HORIZON, 1.0e4, 6.0e3, 50.0),
323 "Set_2": material(HORIZON, 1.0e5, 6.0e4, 100.0),
324 },
325 "Contact": contact,
326 "Neighbor": {
327 "Update_Criteria": "simple_all",
328 "Search_Factor": SEARCH_FACTOR,
329 "Search_Interval": SEARCH_INTERVAL,
330 "Near_Bd_Nodes_Tol": NEAR_BD_TOL,
331 },
332 "Particle_Generation": gen,
333 }
334
335

References build(), contact_pair(), main(), validate_ic(), and wall_geom_center().

Here is the call graph for this function:

◆ build() [2/2]

dict gen_input.build ( float  final_time,
int  time_steps,
str  out_path,
int  output_interval,
float   omega = -20.0 * math.pi 
)

Definition at line 108 of file gen_input.py.

114) -> dict:
115 horizon = 6.0e-4
116 particles = []
117 with CSV.open() as f:
118 next(f)
119 for line in f:
120 parts = [p.strip() for p in line.split(",")]
121 if len(parts) < 6:
122 continue
123 zi = int(float(parts[0]))
124 x, y, z = float(parts[1]), float(parts[2]), float(parts[3])
125 r, o = float(parts[4]), float(parts[5])
126 large = zi >= 3
127 if math.hypot(x, y) + r > R_IN - 1.0e-6:
128 raise SystemExit(
129 f"IC overlap: particle zone={zi} at ({x},{y}) r={r} "
130 f"extends past R_in={R_IN}"
131 )
132 particles.append(
133 {
134 "x": x,
135 "y": y,
136 "z": z,
137 "theta": o,
138 "s": r / R_REF[zi],
139 "geom_id": zi,
140 "mat_id": 1 if large else 0,
141 "contact_id": 1 if large else 0,
142 }
143 )
144
145 wall_id = len(particles)
146 # MUST equal ComplexGeom centroid so mesh (axis at origin) is not shifted.
147 wcx, wcy, wcz = wall_geom_center(WALL_PARAMS)
148 particles.append(
149 {
150 "x": wcx,
151 "y": wcy,
152 "z": wcz,
153 "theta": 0.0,
154 "s": 1.0,
155 "geom_id": 6,
156 "mat_id": 1,
157 "contact_id": 2,
158 "is_wall": True,
159 }
160 )
161
162 gen = {"Method": "From_File", "Random_Rotation": False, "Data": {"N": len(particles)}}
163 for i, p in enumerate(particles):
164 gen["Data"][str(i)] = p
165
166 particle_geom = {
167 "Sets": 7,
168 "Set_1": {"Type": "circle", "Parameters": [0.001, 0.0, 0.0, 0.0]},
169 "Set_2": {"Type": "triangle", "Parameters": [0.001, 0.0, 0.0, 0.0]},
170 "Set_3": {"Type": "drum2d", "Parameters": [0.001, 0.0004, 0.0, 0.0, 0.0]},
171 "Set_4": {"Type": "circle", "Parameters": [0.003, 0.0, 0.0, 0.0]},
172 "Set_5": {"Type": "triangle", "Parameters": [0.003, 0.0, 0.0, 0.0]},
173 "Set_6": {"Type": "drum2d", "Parameters": [0.003, 0.0012, 0.0, 0.0, 0.0]},
174 "Set_7": {
175 "Type": "complex",
176 "Vec_type": ["circle", "circle", "rectangle"],
177 "Vec_flag": ["plus", "minus", "plus"],
178 "Parameters": WALL_PARAMS,
179 },
180 }
181
182 mesh = {"Sets": 7}
183 for i, name in enumerate(MESH_FILES):
184 mesh[f"Set_{i + 1}"] = {"File": str((MESH / name).resolve())}
185
186 contact = {
187 "Sets": 3,
188 "Damping_Law": "off",
189 "Friction_Law": "coulomb_simple",
190 "Correct_Volume": False, # main DEM contact used full Vj
191 }
192 for i in range(3):
193 for j in range(i, 3):
194 contact[f"Set_{i + 1}_{j + 1}"] = contact_pair(i, j)
195
196 return {
197 "Model": {
198 "Dimension": 2,
199 "Final_Time": final_time,
200 "Time_Steps": time_steps,
201 "Discretization_Type": {
202 "Spatial": "finite_difference",
203 "Time": "central_difference",
204 },
205 "Populate_ElementNodeConnectivity": True,
206 "Quad_Approximation_Order": 2,
207 "Particle_Sim_Type": "Multi_Particle",
208 "Seed": 0,
209 # Bond_Break omitted → tension (PMB default)
210 "Bond_Break": "tension",
211 "Self_Contact": "none",
212 "Wall_Contact": "meshed",
213 },
214 "Output": {
215 "Path": out_path if out_path.endswith("/") else out_path + "/",
216 "Perform_Out": True,
217 "Tags": [
218 "Displacement",
219 "Velocity",
220 "Force",
221 "Damage_Z",
222 "Damage",
223 "Particle_ID",
224 "Fixity",
225 "Contact_Nodes",
226 ],
227 "Output_Interval": output_interval,
228 "Debug": 1,
229 "Perform_FE_Out": False,
230 "Compress_Type": "zlib",
231 "File_Format": "vtu",
232 "Test_Output_Interval": max(1, output_interval // 10),
233 "Tag_PP": "0",
234 "PVD_Collection": True,
235 },
236 "Force_BC": {"Gravity": [0.0, -10.0, 0.0]},
237 "Displacement_BC": {
238 "Sets": 1,
239 "Set_1": {
240 "Particle_List": [wall_id],
241 "Direction": [1, 2],
242 "Time_Function": {
243 "Type": "rotation",
244 "Parameters": [omega, 0.0, 0.0, 0.0],
245 },
246 "Spatial_Function": {"Type": "rotation"},
247 "Zero_Displacement": False,
248 },
249 },
250 "Particle": particle_geom,
251 "Mesh": mesh,
252 "Material": {
253 "Sets": 2,
254 # paper Gc: small=50, large/wall=100
255 "Set_1": material(horizon, 1.0e4, 6.0e3, 50.0),
256 "Set_2": material(horizon, 1.0e5, 6.0e4, 100.0),
257 },
258 "Contact": contact,
259 "Neighbor": {
260 "Update_Criteria": "simple_all",
261 "Search_Factor": 10.0,
262 "Search_Interval": 40,
263 "Near_Bd_Nodes_Tol": 0.5,
264 },
265 "Particle_Generation": gen,
266 }
267
268

References contact_pair(), and wall_geom_center().

Referenced by build(), and main().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ contact_pair()

dict gen_input.contact_pair ( int  i,
int  j 
)

Definition at line 80 of file gen_input.py.

80def contact_pair(i: int, j: int) -> dict:
81 a, b = min(i, j), max(i, j)
82 return {
83 "Contact_Radius_Factor": 0.95,
84 "Damping_On": False,
85 "Friction_On": False,
86 "Kn": KN[(a, b)],
87 "K": 2.0 * K_MAT[a] * K_MAT[b] / (K_MAT[a] + K_MAT[b]),
88 "Epsilon": 0.95,
89 "Friction_Coeff": 0.5,
90 "Kn_Factor": KN_FACTOR,
91 "Beta_n_Factor": 100.0,
92 }
93
94

Referenced by build(), and build().

Here is the caller graph for this function:

◆ main()

None gen_input.main ( )

Definition at line 269 of file gen_input.py.

269def main() -> None:
270 for mesh in MESH_FILES:
271 if not (MESH / mesh).is_file():
272 raise SystemExit(f"missing mesh {MESH / mesh}")
273 if not CSV.is_file():
274 raise SystemExit(f"missing {CSV}")
275
276 short = build(0.01, 100000, "runs/out", 2000)
277 medium = build(0.03, 300000, "runs/out", 3000)
278 paper = build(0.1, 1000000, "runs/out", 2500)
279 (HERE / "input_short.json").write_text(json.dumps(short, indent=2) + "\n")
280 (HERE / "input_medium.json").write_text(json.dumps(medium, indent=2) + "\n")
281 (HERE / "input.json").write_text(json.dumps(paper, indent=2) + "\n")
282 n = short["Particle_Generation"]["Data"]["N"]
283 wid = short["Displacement_BC"]["Set_1"]["Particle_List"][0]
284 wp = short["Particle_Generation"]["Data"][str(wid)]
285 print(
286 f"wrote input_short/medium/json (N={n}, wall_id={wid}, KnF={KN_FACTOR}, "
287 f"Gc=50/100, Bond_Break=tension, Damp=off, "
288 f"wall_site=({wp['x']:.6f},{wp['y']:.6f}))"
289 )
290
291
int main()
Definition main.cpp:31

References build(), and main().

Referenced by build(), and main().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ material()

dict gen_input.material ( float  horizon,
float  K,
float  G,
float  Gc 
)

Definition at line 95 of file gen_input.py.

95def material(horizon: float, K: float, G: float, Gc: float) -> dict:
96 return {
97 "Type": "PDState",
98 "Horizon": horizon,
99 "Density": 1200.0,
100 "Compute_From_Classical": True,
101 "K": K,
102 "G": G,
103 "Gc": Gc,
104 "Influence_Function": {"Type": 1},
105 }
106
107

◆ validate_ic()

None gen_input.validate_ic ( list[tuple]  rows)

Definition at line 145 of file gen_input.py.

145def validate_ic(rows: list[tuple]) -> None:
146 bar = (R_IN - L_BAR, -0.5 * W_BAR, R_IN, 0.5 * W_BAR)
147 errors: list[str] = []
148 for i, (zi, x, y, z, r, o) in enumerate(rows):
149 if zi not in R_REF:
150 errors.append(f"row {i}: bad zone {zi}")
151 continue
152 if math.hypot(x, y) + r > R_IN - 1.0e-9:
153 errors.append(
154 f"row {i} zone={zi}: past R_in (hyp+r={math.hypot(x, y) + r:.6e})"
155 )
156 if not (x + r < bar[0] or x - r > bar[2] or y + r < bar[1] or y - r > bar[3]):
157 errors.append(f"row {i} zone={zi}: overlaps protrusion AABB")
158 for i in range(len(rows)):
159 for j in range(i + 1, len(rows)):
160 dx = rows[i][1] - rows[j][1]
161 dy = rows[i][2] - rows[j][2]
162 if math.hypot(dx, dy) < rows[i][4] + rows[j][4] - 1.0e-9:
163 errors.append(f"overlap rows {i},{j}")
164 if errors:
165 raise SystemExit("IC invalid:\n " + "\n ".join(errors[:40]))
166
167

Referenced by build().

Here is the caller graph for this function:

◆ wall_geom_center()

tuple[float, float, float] gen_input.wall_geom_center ( list[float]  params)
Signed-volume centroid of circle(+)-circle(-)-rectangle(+) wall.

Definition at line 65 of file gen_input.py.

65def wall_geom_center(params: list[float]) -> tuple[float, float, float]:
66 """Signed-volume centroid of circle(+)-circle(-)-rectangle(+) wall."""
67 r_out, cx0, cy0, cz0 = params[0], params[1], params[2], params[3]
68 r_in, cx1, cy1, cz1 = params[4], params[5], params[6], params[7]
69 x0, y0, z0, x1, y1, z1 = params[8:14]
70 a_out = math.pi * r_out * r_out
71 a_in = math.pi * r_in * r_in
72 a_rect = abs(x1 - x0) * abs(y1 - y0)
73 vol = a_out - a_in + a_rect
74 cx = (a_out * cx0 - a_in * cx1 + a_rect * 0.5 * (x0 + x1)) / vol
75 cy = (a_out * cy0 - a_in * cy1 + a_rect * 0.5 * (y0 + y1)) / vol
76 cz = (a_out * cz0 - a_in * cz1 + a_rect * 0.5 * (z0 + z1)) / vol
77 return cx, cy, cz
78
79

Referenced by build(), and build().

Here is the caller graph for this function:

Variable Documentation

◆ BETA_N_FACTOR

float gen_input.BETA_N_FACTOR = 100.0

Definition at line 81 of file gen_input.py.

◆ BOND_BREAK

str gen_input.BOND_BREAK = "tension"

Definition at line 93 of file gen_input.py.

◆ CONTACT_RADIUS_FACTOR

float gen_input.CONTACT_RADIUS_FACTOR = 0.95

Definition at line 83 of file gen_input.py.

◆ CORRECT_VOLUME

bool gen_input.CORRECT_VOLUME = False

Definition at line 89 of file gen_input.py.

◆ CSV

str gen_input.CSV = HERE / "particle_locations_0.csv"

Definition at line 19 of file gen_input.py.

◆ DAMPING_LAW

str gen_input.DAMPING_LAW = "off"

Definition at line 87 of file gen_input.py.

◆ DAMPING_ON

bool gen_input.DAMPING_ON = False

Definition at line 85 of file gen_input.py.

◆ EPSILON

float gen_input.EPSILON = 0.95

Definition at line 82 of file gen_input.py.

◆ FRICTION_COEFF

float gen_input.FRICTION_COEFF = 0.5

Definition at line 84 of file gen_input.py.

◆ FRICTION_LAW

str gen_input.FRICTION_LAW = "coulomb_simple"

Definition at line 88 of file gen_input.py.

◆ FRICTION_ON

bool gen_input.FRICTION_ON = False

Definition at line 86 of file gen_input.py.

◆ HERE

gen_input.HERE = Path(__file__).resolve().parent

Definition at line 17 of file gen_input.py.

◆ HORIZON

float gen_input.HORIZON = 2.0 * MESH_SIZE

Definition at line 24 of file gen_input.py.

◆ K_MAT

dict gen_input.K_MAT = {0: 1.0e4, 1: 1.0e5, 2: 1.0e5}

Definition at line 60 of file gen_input.py.

◆ KN

dict gen_input.KN
Initial value:
1= {
2 (0, 0): 7.368284e20,
3 (0, 1): 1.339688e21,
4 (0, 2): 1.339688e21,
5 (1, 1): 7.368284e21,
6 (1, 2): 7.368284e21,
7 (2, 2): 7.368284e21,
8}

Definition at line 51 of file gen_input.py.

◆ KN_FACTOR

float gen_input.KN_FACTOR = 1.0

Definition at line 61 of file gen_input.py.

◆ L_BAR

float gen_input.L_BAR = 0.005

Definition at line 27 of file gen_input.py.

◆ MESH

str gen_input.MESH = HERE / "meshes"

Definition at line 18 of file gen_input.py.

◆ MESH_FILES

list gen_input.MESH_FILES
Initial value:
1= [
2 "mesh_cir_small_0.msh",
3 "mesh_tri_small_0.msh",
4 "mesh_drum2d_small_0.msh",
5 "mesh_cir_large_0.msh",
6 "mesh_tri_large_0.msh",
7 "mesh_drum2d_large_0.msh",
8 "mesh_wall_0.msh",
9]

Definition at line 22 of file gen_input.py.

◆ MESH_SIZE

float gen_input.MESH_SIZE = R_SMALL / 5.0

Definition at line 23 of file gen_input.py.

◆ NEAR_BD_TOL

float gen_input.NEAR_BD_TOL = 0.5

Definition at line 92 of file gen_input.py.

◆ OMEGA

float gen_input.OMEGA = -40.0 * math.pi

Definition at line 98 of file gen_input.py.

◆ R_IN

float gen_input.R_IN = 0.02

Definition at line 62 of file gen_input.py.

◆ R_LARGE

float gen_input.R_LARGE = 0.003

Definition at line 22 of file gen_input.py.

◆ R_OUT

float gen_input.R_OUT = R_IN + 1.5 * MESH_SIZE

Definition at line 26 of file gen_input.py.

◆ R_REF

dict gen_input.R_REF = {0: 0.001, 1: 0.001, 2: 0.001, 3: 0.003, 4: 0.003, 5: 0.003}

Definition at line 21 of file gen_input.py.

◆ R_SMALL

float gen_input.R_SMALL = 0.001

Definition at line 21 of file gen_input.py.

◆ RANDOM_ROTATION

bool gen_input.RANDOM_ROTATION = False

Definition at line 97 of file gen_input.py.

◆ ROT_CENTER

tuple gen_input.ROT_CENTER = (-0.2 * R_IN, 0.2 * R_IN, 0.0)

Definition at line 99 of file gen_input.py.

◆ SEARCH_FACTOR

float gen_input.SEARCH_FACTOR = 10.0

Definition at line 91 of file gen_input.py.

◆ SEARCH_INTERVAL

int gen_input.SEARCH_INTERVAL = 40

Definition at line 90 of file gen_input.py.

◆ SELF_CONTACT

str gen_input.SELF_CONTACT = "broken_bond_kn"

Definition at line 95 of file gen_input.py.

◆ W_BAR

float gen_input.W_BAR = 1.5 * MESH_SIZE

Definition at line 28 of file gen_input.py.

◆ WALL_CONTACT

str gen_input.WALL_CONTACT = "meshed"

Definition at line 96 of file gen_input.py.

◆ WALL_PARAMS

list gen_input.WALL_PARAMS
Initial value:
1= [
2 0.021,
3 0.0,
4 0.0,
5 0.0,
6 0.02,
7 0.0,
8 0.0,
9 0.0,
10 0.014,
11 -0.0015,
12 0.0,
13 0.02,
14 0.0015,
15 0.0,
16]

Definition at line 33 of file gen_input.py.