Skip to content
Snippets Groups Projects
latticeThermalTest.js 3.75 KiB
Newer Older
Amira Abdel-Rahman's avatar
Amira Abdel-Rahman committed

// Amira Abdel-Rahman
// (c) Massachusetts Institute of Technology 2020

///////////call from node app.js code///////////////
// wait for the rhino3dm web assembly to load asynchronously
// rhino3dm().then(function(m) {// todo change call to app.js
// 	_rhino3dm = m; // global
// 	initRhino3dm(1,10,createVoxel,true,true);
// 	saveJSON();
// });
/////////////////////////////////////

var three; //todo change location
var three1; //todo change location
var setup=JSON.parse(JSON.stringify(setupEmpty));
var gridSize=20;
// var setup1=JSON.parse(JSON.stringify(setupEmpty));
var globalSetup={
    exaggeration:1.0,
    speed:3.0,
    updateStress:false
};

rhino3dm().then(async m => {
    console.log('Loaded rhino3dm.');

    _rhino3dm = m; // global

    var latticeSizeX=7;
    var latticeSizeY=2;
    var latticeSizeZ=2;


    var voxelSize=5.0;
    var voxelSize=0.001;
    

    var material={
      area:voxelSize*voxelSize,
      density:0.028,
      stiffness:2000,
      poissonRatio:0.3
    };

    var material={
      area:voxelSize*voxelSize,
      density:1e3,
      stiffness:1e6,
      poissonRatio:0.0,
      cTE:0.01
    };

    const position=new THREE.Vector3(0,0,0);
    
    setup=JSON.parse(JSON.stringify(setupEmpty));

    setup.hierarchical=true;
    
    setup.voxelSize=voxelSize;
    voxelSize=voxelSize/15.0;

    createLattice(setup,voxelSize,latticeSizeX,latticeSizeY,latticeSizeZ,createHierarchalVoxel,material);

    var support=new _rhino3dm.BoundingBox(
      [
          -voxelSize/2+position.x,
          -voxelSize/2+position.y,
          -voxelSize/2+position.z
      ], [
          voxelSize/2+position.x,
          voxelSize/2+position.y +voxelSize*(latticeSizeY-1),
          voxelSize/2+position.z +voxelSize*(latticeSizeZ-1)
    ]);


    var load=new _rhino3dm.BoundingBox(
        [
            -voxelSize/2+position.x +voxelSize*(latticeSizeX-1),
            -voxelSize/2+position.y,
            -voxelSize/2+position.z
        ], [
            voxelSize/2+position.x +voxelSize*(latticeSizeX-1),
            voxelSize/2+position.y +voxelSize*(latticeSizeY-1),
            voxelSize/2+position.z +voxelSize*(latticeSizeZ-1)
    ]);
    

    var dof=[true,true,true,true,true,true];
    var supports=[[support,dof]];
    var loads=[[load,{x:0.0,y:0.0,z:0.0}]];

    restrainFromBox(setup,supports);
    // loadFromBox(setup,loads);
    
    setup.supports=[
        // [{
        //     min:[
        //         support.min[0],
        //         support.min[1],
        //         support.min[2]
        //     ],
        //     max:[
        //         support.max[0],
        //         support.max[1],
        //         support.max[2]
        //     ]
        // }]
    ];
    setup.loads=[
    //   [{
    //       min:[
    //           load.min[0],
    //           load.min[1],
    //           load.min[2]
    //       ],
    //       max:[
    //           load.max[0],
    //           load.max[1],
    //           load.max[2]
    //       ]
    //   }],
      // [{
      //     min:[
      //         load1.min[0],
      //         load1.min[1],
      //         load1.min[2]
      //     ],
      //     max:[
      //         load1.max[0],
      //         load1.max[1],
      //         load1.max[2]
      //     ]
      // }]
    ];

    // latticeSetup(setup,latticeSize,voxelSize,createHierarchalVoxel,{x:0,y:-400,z:0},material);


    // setup.viz.colorMaps=[YlGnBu,coolwarm, winter ,jet];
    setup.viz.minStress=10e6;
    setup.viz.maxStress=-10e6;

    setup.viz.exaggeration=1.0;
    setup.numTimeSteps=100;

    setup.floorEnabled=false;
    setup.gravityEnabled=false;
    setup.staticSimulation=true; 
    setup.poisson=false;
    setup.scale=1e5;
    setup.linear=true;
    setup.globalDamping=0.15;
    setup.thermal=true;
    

    saveJSON();
});