Skip to content
Snippets Groups Projects
rhinoTestChiral.jl 6.11 KiB
Newer Older
  • Learn to ignore specific revisions
  • Amira Abdel-Rahman's avatar
    Amira Abdel-Rahman committed
    # 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/trial.3dm";
    setup["layerIndex"]="4";
    
    setup["useVoxelList"]=false
    
    
    Amira Abdel-Rahman's avatar
    Amira Abdel-Rahman committed
    
    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
    
    
    ###########################################################################