You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					74 lines
				
				1.8 KiB
			
		
		
			
		
	
	
					74 lines
				
				1.8 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								import sys
							 | 
						||
| 
								 | 
							
								import json
							 | 
						||
| 
								 | 
							
								import pathlib
							 | 
						||
| 
								 | 
							
								import copy
							 | 
						||
| 
								 | 
							
								import math
							 | 
						||
| 
								 | 
							
								import itertools
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import numpy
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import context
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from fixture_utils import save_fixture, get_fixture_dir_path
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# padded_link_thickness (actual thickness: 0.190211)
							 | 
						||
| 
								 | 
							
								link_thickness = 0.2005  # taught
							 | 
						||
| 
								 | 
							
								# link_thickness = 0.201  # loose
							 | 
						||
| 
								 | 
							
								link_height = 1.5
							 | 
						||
| 
								 | 
							
								link_width = 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								scene = {
							 | 
						||
| 
								 | 
							
								    "scene_type": "distance_barrier_rb_problem",
							 | 
						||
| 
								 | 
							
								    "solver": "ipc_solver",
							 | 
						||
| 
								 | 
							
								    "timestep": 0.01,
							 | 
						||
| 
								 | 
							
								    "max_time": 1.0,
							 | 
						||
| 
								 | 
							
								    "ipc_solver": {
							 | 
						||
| 
								 | 
							
								        "velocity_conv_tol": 0.01,
							 | 
						||
| 
								 | 
							
								        "is_velocity_conv_tol_abs": True
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    "rigid_body_problem": {
							 | 
						||
| 
								 | 
							
								        "gravity": [0, -9.81, 0],
							 | 
						||
| 
								 | 
							
								        "rigid_bodies": []
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								link = {
							 | 
						||
| 
								 | 
							
								    "mesh": "wrecking-ball/link-sub4.obj",
							 | 
						||
| 
								 | 
							
								    "position": [0, 0, 0],
							 | 
						||
| 
								 | 
							
								    "rotation": [0, 0, 0],
							 | 
						||
| 
								 | 
							
								    "density": 7680
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bodies = scene["rigid_body_problem"]["rigid_bodies"]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bodies.append(copy.deepcopy(link))
							 | 
						||
| 
								 | 
							
								bodies[-1]["rotation"] = [90, 90, 0]
							 | 
						||
| 
								 | 
							
								bodies[-1]["type"] = "static"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bodies.append(copy.deepcopy(link))
							 | 
						||
| 
								 | 
							
								bodies[-1]["position"] = [link_height - 2 * link_thickness, 0, 0]
							 | 
						||
| 
								 | 
							
								bodies[-1]["rotation"] = [0, 0, 90]
							 | 
						||
| 
								 | 
							
								bodies[-1]["type"] = "static"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								weak_scaling_output_dir = (
							 | 
						||
| 
								 | 
							
								    get_fixture_dir_path() / "3D" / "scalability" / "weak")
							 | 
						||
| 
								 | 
							
								weak_scaling_output_dir.mkdir(parents=True, exist_ok=True)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Weak scaling
							 | 
						||
| 
								 | 
							
								for i in range(1, 65):
							 | 
						||
| 
								 | 
							
								    use_sub4 = True
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Insert new free link
							 | 
						||
| 
								 | 
							
								    bodies.insert(len(bodies) - 1, copy.deepcopy(link))
							 | 
						||
| 
								 | 
							
								    bodies[-2]["position"][0] = i * (link_height - 2 * link_thickness)
							 | 
						||
| 
								 | 
							
								    bodies[-2]["rotation"] = [0, 0, 90] if i % 2 else [90, 90, 0]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Shift over static link
							 | 
						||
| 
								 | 
							
								    bodies[-1]["position"][0] += link_height - 2 * link_thickness
							 | 
						||
| 
								 | 
							
								    bodies[-1]["rotation"] = [0, 0, 90] if (i + 1) % 2 else [90, 90, 0]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    save_fixture(scene, weak_scaling_output_dir / f"{i:02d}threads.json")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								save_fixture(scene, weak_scaling_output_dir.parent / f"strong.json")
							 |