10 """Generates input file for two-particle test"""
12 sim_inp_dir = str(inp_dir)
16 horizon = 2.2 * mesh_size
17 particle_dist = 0.9*mesh_size
20 Lx, Ly = 4*R1, 3*mesh_size
21 rect_center = [R1, 0., 0.]
24 cir_center = [R1, rect_center[1] + 0.5*Ly + particle_dist + R1, 0.]
28 free_fall_vel = [0., -0.1, 0.]
30 free_fall_vel = [0., -4., 0.]
41 dt_out_n = num_steps / num_outputs
48 E1 =
get_E(K1, poisson1)
49 G1 =
get_G(E1, poisson1)
55 E2 =
get_E(K2, poisson2)
56 G2 =
get_G(E2, poisson2)
62 R_contact_factor = 0.95
69 Kn_11 = 18. *
get_eff_k(K1, K1) / (np.pi * np.power(horizon, 5))
70 Kn_22 = 18. *
get_eff_k(K2, K2) / (np.pi * np.power(horizon, 5))
71 Kn_12 = 18. *
get_eff_k(K1, K2) / (np.pi * np.power(horizon, 5))
75 damping_active =
False
76 friction_active =
False
82 gravity = [0., -10., 0.]
85 neigh_search_factor = 2.
86 neigh_search_interval = 1
87 neigh_search_criteria =
"simple_all"
92 plocf = open(inp_dir +
'particle_locations_' + str(pp_tag) +
'.csv',
'w')
93 plocf.write(
"i, x, y, z, r, o\n")
94 plocf.write(
"%d, %Lf, %Lf, %Lf, %Lf, %Lf\n" % (0, rect_center[0], rect_center[1], rect_center[2], Lx, 0.))
95 plocf.write(
"%d, %Lf, %Lf, %Lf, %Lf, %Lf\n" % (1, cir_center[0], cir_center[1], cir_center[2], R1, 0.))
98 zones_mesh_fnames = [
"mesh_rect_1",
"mesh_cir_2"]
101 rectangle_mesh_symmetric(xc = [0., 0., 0.], Lx = Lx, Ly = Ly, h = mesh_size, filename = zones_mesh_fnames[0] +
"_" + str(pp_tag), vtk_out =
True, symmetric_mesh =
True)
104 circle_mesh_symmetric(xc = [0., 0., 0.], r = R1, h = mesh_size, filename = zones_mesh_fnames[1] +
"_" + str(pp_tag), vtk_out =
True, symmetric_mesh =
True)
106 os.system(
"mkdir -p ../out")
112 inpf = open(sim_inp_dir +
'input_' + str(pp_tag) +
'.yaml',
'w')
113 inpf.write(
"Model:\n")
114 inpf.write(
" Dimension: 2\n")
115 inpf.write(
" Discretization_Type:\n")
116 inpf.write(
" Spatial: finite_difference\n")
117 inpf.write(
" Time: central_difference\n")
118 inpf.write(
" Final_Time: %4.6e\n" % (final_time))
119 inpf.write(
" Time_Steps: %d\n" % (num_steps))
124 inpf.write(
"Container:\n")
125 inpf.write(
" Geometry:\n")
126 inpf.write(
" Type: rectangle\n")
127 contain_params = [rect_center[0] - 0.5*Lx, rect_center[1] - 0.5*Ly, 0., rect_center[0] + 0.5*Lx, rect_center[1] + 0.5*Ly + particle_dist + 2*R1, 0.]
133 inpf.write(
"Zone:\n")
134 inpf.write(
" Zones: 2\n")
137 inpf.write(
" Zone_1:\n")
138 inpf.write(
" Is_Wall: false\n")
141 inpf.write(
" Zone_2:\n")
142 inpf.write(
" Is_Wall: false\n")
147 inpf.write(
"Particle:\n")
148 inpf.write(
" Zone_1:\n")
149 inpf.write(
" Type: rectangle\n")
150 inpf.write(
" Parameters: " +
print_dbl_list([Lx, Ly, rect_center[0], rect_center[1], rect_center[2]]))
151 inpf.write(
" Zone_2:\n")
152 inpf.write(
" Type: circle\n")
153 p2_geom = [R1, cir_center[0], cir_center[1], cir_center[2]]
159 inpf.write(
"Particle_Generation:\n")
160 inpf.write(
" From_File: particle_locations_" + str(pp_tag) +
".csv\n")
161 inpf.write(
" File_Data_Type: loc_rad_orient\n")
166 inpf.write(
"Mesh:\n")
168 for i
in range(len(zones_mesh_fnames)):
169 inpf.write(
" Zone_%d:\n" % (i+1))
170 inpf.write(
" File: %s\n" % (zones_mesh_fnames[i] +
"_" + str(pp_tag) +
".msh"))
173 inpf.write(
"Contact:\n")
176 write_contact_zone_part(inpf, R_contact_factor, damping_active, friction_active, beta_n_eps, friction_coeff, Kn_factor, beta_n_factor,
"11", Kn_11)
182 inpf.write(
"Neighbor:\n")
183 inpf.write(
" Update_Criteria: %s\n" % (neigh_search_criteria))
184 inpf.write(
" Search_Factor: %4.e\n" % (neigh_search_factor))
185 inpf.write(
" Search_Interval: %d\n" % (neigh_search_interval))
188 inpf.write(
"Material:\n")
194 inpf.write(
" Zone_2:\n")
195 inpf.write(
" Copy_Material_Data: 1\n")
200 if gravity_active ==
True:
201 inpf.write(
"Force_BC:\n")
208 inpf.write(
" Constant_Velocity:\n")
210 inpf.write(
" Particle_List: [1]\n")
215 inpf.write(
"Displacement_BC:\n")
216 inpf.write(
" Sets: 1\n")
218 inpf.write(
" Set_1:\n")
219 inpf.write(
" Particle_List: [0]\n")
220 inpf.write(
" Direction: [1,2]\n")
221 inpf.write(
" Time_Function:\n")
222 inpf.write(
" Type: constant\n")
223 inpf.write(
" Parameters:\n")
224 inpf.write(
" - 0.0\n")
225 inpf.write(
" Spatial_Function:\n")
226 inpf.write(
" Type: constant\n")
227 inpf.write(
" Zero_Displacement: true\n")
232 inpf.write(
"Output:\n")
233 inpf.write(
" Path: ../out/\n")
234 inpf.write(
" Tags:\n")
235 inpf.write(
" - Displacement\n")
236 inpf.write(
" - Velocity\n")
237 inpf.write(
" - Force\n")
238 inpf.write(
" - Force_Density\n")
239 inpf.write(
" - Damage_Z\n")
240 inpf.write(
" - Damage\n")
241 inpf.write(
" - Nodal_Volume\n")
242 inpf.write(
" - Zone_ID\n")
243 inpf.write(
" - Particle_ID\n")
244 inpf.write(
" - Fixity\n")
245 inpf.write(
" - Force_Fixity\n")
246 inpf.write(
" - Contact_Nodes\n")
247 inpf.write(
" - No_Fail_Node\n")
248 inpf.write(
" - Boundary_Node_Flag\n")
249 inpf.write(
" - Theta\n")
250 inpf.write(
" Output_Interval: %d\n" % (dt_out_n))
251 inpf.write(
" Compress_Type: zlib\n")
252 inpf.write(
" Perform_FE_Out: false\n")
254 inpf.write(
" Perform_Out: true\n")
256 inpf.write(
" Perform_Out: false\n")
257 inpf.write(
" Test_Output_Interval: %d\n" % (dt_out_n))
259 inpf.write(
" Debug: 3\n")
260 inpf.write(
" Tag_PP: %d\n" %(int(pp_tag)))
circle_mesh_symmetric(xc=[0., 0., 0.], r=1., h=0.1, filename='mesh', vtk_out=False, symmetric_mesh=True)
rectangle_mesh_symmetric(xc=[0., 0., 0.], Lx=1., Ly=1., h=0.1, filename='mesh', vtk_out=False, symmetric_mesh=True)
write_contact_zone_part(inpf, R_contact_factor, damping_active, friction_active, beta_n_eps, friction_coeff, Kn_factor, beta_n_factor, zone_string, Kn)