-
Amira Abdel-Rahman authoredAmira Abdel-Rahman authored
rhinoTestChiral.jl 6.12 KiB
# Amira Abdel-Rahman
# (c) Massachusetts Institute of Technology 2020
######################### 1. Voxel Design ###########################
setup = Dict()
### 1.b Draw Lattice
rhino=true
voxelSize=75
latticeSizeX=1
latticeSizeY=4
latticeSizeZ=1
gridSize=10
setup["gridSize"]=gridSize
setup["rhino"]=rhino
setup["rhinoFileName"]="./julia/examples/CAD_Rhino/trial.3dm";
setup["layerIndex"]="4";
setup["useVoxelList"]=false
setup["latticeSizeX"]=1
setup["latticeSizeY"]=1
setup["latticeSizeZ"]=1
######################### 2. Boundary Conditions #########################
######################### 2.a. Global Settings #########################
#scaling params
setup["voxelSize"]=voxelSize; #voxel size
setup["scale"]=0.1; #scale for visualization
setup["hierarchical"]=false; #hierachical simualtion
#simulation params
setup["numTimeSteps"]=10000; #num of saved timesteps for simulation
setup["poisson"]=false; # account for poisson ration (only for hierarchical)
setup["linear"]=true; # linear vs non-linear
setup["thermal"]=false; #if there is change in temperature
setup["globalDamping"]=0.2; # (usually from 0.1 to 0.4)
#visualization params
setup["maxNumFiles"]=200; #num of saved timesteps for visualization, make sure it's bigger than numTimeSteps
######################### 2.b. Materials #########################
#default material
material1= Dict()
material1["area"]=2.38*2.38*7*7
material1["density"]=0.028
material1["stiffness"]=2000.0
material1["poissonRatio"]=0.0
material1["cTE"]=0.0 #coefficient of thermal expansion
#large bounding box for default material
boundingBoxMaterial1=Dict()
boundingBoxMaterial1["min"]=Dict()
boundingBoxMaterial1["max"]=Dict()
boundingBoxMaterial1["min"]["x"]=-voxelSize*gridSize;
boundingBoxMaterial1["min"]["y"]=-voxelSize*gridSize;
boundingBoxMaterial1["min"]["z"]=-voxelSize*gridSize;
boundingBoxMaterial1["max"]["x"]= voxelSize*gridSize;
boundingBoxMaterial1["max"]["y"]= voxelSize*gridSize;
boundingBoxMaterial1["max"]["z"]= voxelSize*gridSize;
setup["materials"]=[
[boundingBoxMaterial1,material1]
];
######################### 2.c. Supports #########################
#x,y,z,rx,ry,rz (default is pinned joing i.e [false,false,false,true,true,true])
dof=[true,true,true,true,true,true]
boundingBoxSupport1=Dict()
boundingBoxSupport1["min"]=Dict()
boundingBoxSupport1["max"]=Dict()
boundingBoxSupport1["min"]["x"]=-voxelSize/2.0;
boundingBoxSupport1["min"]["y"]=-voxelSize/2.0;
boundingBoxSupport1["min"]["z"]=-voxelSize/2.0;
boundingBoxSupport1["max"]["x"]= voxelSize*(latticeSizeX)+voxelSize/2.0;
boundingBoxSupport1["max"]["y"]= voxelSize/8;
boundingBoxSupport1["max"]["z"]= voxelSize*(latticeSizeZ)+voxelSize/2.0;
setup["supports"]=[
[boundingBoxSupport1,dof]
];
######################### 2.d. Loads #########################
#### 2.d.1 Static Loads
load1=Dict()
load1["x"]=0.0
load1["y"]=-1e3
load1["z"]=0.0
boundingBoxLoad1=Dict()
boundingBoxLoad1["min"]=Dict()
boundingBoxLoad1["max"]=Dict()
boundingBoxLoad1["min"]["x"]=-voxelSize/2.0;
boundingBoxLoad1["min"]["y"]=voxelSize*(latticeSizeY)-voxelSize/8;
boundingBoxLoad1["min"]["z"]=-voxelSize/2.0;
boundingBoxLoad1["max"]["x"]=voxelSize*(latticeSizeX)+voxelSize/2.0;
boundingBoxLoad1["max"]["y"]=voxelSize*(latticeSizeY)+voxelSize/2.0;
boundingBoxLoad1["max"]["z"]=voxelSize*(latticeSizeZ)+voxelSize/2.0;
load2=Dict()
load2["x"]=-load1["x"]
load2["y"]=-load1["y"]
load2["z"]=-load1["z"]
boundingBoxLoad2=Dict()
boundingBoxLoad2["min"]=Dict()
boundingBoxLoad2["max"]=Dict()
boundingBoxLoad2["min"]["x"]=voxelSize/4;
boundingBoxLoad2["min"]["y"]=voxelSize*(latticeSizeY)-voxelSize/8;
boundingBoxLoad2["min"]["z"]=voxelSize/4;
boundingBoxLoad2["max"]["x"]=voxelSize*(latticeSizeX)-voxelSize/8.0;
boundingBoxLoad2["max"]["y"]=voxelSize*(latticeSizeY)+voxelSize/2.0;
boundingBoxLoad2["max"]["z"]=voxelSize*(latticeSizeZ)-voxelSize/8.0;
load3=Dict()
load3["x"]=load1["x"]
load3["y"]=load1["y"]
load3["z"]=load1["z"]
boundingBoxLoad3=Dict()
boundingBoxLoad3["min"]=Dict()
boundingBoxLoad3["max"]=Dict()
boundingBoxLoad3["min"]["x"]=voxelSize-voxelSize/8;
boundingBoxLoad3["min"]["y"]=voxelSize*(latticeSizeY)-voxelSize/8;
boundingBoxLoad3["min"]["z"]=-voxelSize/2.0;
boundingBoxLoad3["max"]["x"]=voxelSize+voxelSize/8;
boundingBoxLoad3["max"]["y"]=voxelSize*(latticeSizeY)+voxelSize/2.0;
boundingBoxLoad3["max"]["z"]=voxelSize*(latticeSizeZ)+voxelSize/2.0;
load4=Dict()
load4["x"]=load1["x"]
load4["y"]=load1["y"]
load4["z"]=load1["z"]
boundingBoxLoad4=Dict()
boundingBoxLoad4["min"]=Dict()
boundingBoxLoad4["max"]=Dict()
boundingBoxLoad4["min"]["x"]=-voxelSize/2.0;
boundingBoxLoad4["min"]["y"]=voxelSize*(latticeSizeY)-voxelSize/8;
boundingBoxLoad4["min"]["z"]=voxelSize-voxelSize/8;
boundingBoxLoad4["max"]["x"]=voxelSize*(latticeSizeX)+voxelSize/2.0;
boundingBoxLoad4["max"]["y"]=voxelSize*(latticeSizeY)+voxelSize/2.0;
boundingBoxLoad4["max"]["z"]=voxelSize+voxelSize/8;
setup["loads"]=[
# [boundingBoxLoad1,load1],
# [boundingBoxLoad2,load2],
# [boundingBoxLoad3,load3],
# [boundingBoxLoad4,load4]
];
#### 2.d.2 Fixed Displacements
dis1=Dict()
dis1["x"]=0.0
dis1["y"]=-5e-3
dis1["z"]=0.0
boundingBoxDis1=Dict()
boundingBoxDis1["min"]=Dict()
boundingBoxDis1["max"]=Dict()
boundingBoxDis1["min"]["x"]=-voxelSize/2.0;
boundingBoxDis1["min"]["y"]=voxelSize*(latticeSizeY)-voxelSize/8;
boundingBoxDis1["min"]["z"]=-voxelSize/2.0;
boundingBoxDis1["max"]["x"]=voxelSize*(latticeSizeX)+voxelSize/2.0;
boundingBoxDis1["max"]["y"]=voxelSize*(latticeSizeY)+voxelSize/2.0;
boundingBoxDis1["max"]["z"]=voxelSize*(latticeSizeZ)+voxelSize/2.0;
setup["fixedDisplacements"]=[
[boundingBoxDis1,dis1]
];
#### 2.d.3 Dynamic Loads
function floorEnabled()
return false
end
function gravityEnabled()
return false
end
function externalDisplacement(currentTimeStep,N_position,N_fixedDisplacement)
return N_fixedDisplacement
end
function externalForce(currentTimeStep,N_position,N_force)
return N_force
end
function updateTemperature(currentRestLength,currentTimeStep,mat)
# @cuprintln("currentRestLength $currentRestLength")
return currentRestLength
end
###########################################################################