StVKReducedInternalForces::StVKReducedInternalForces(int r, double * U, VolumetricMesh * volumetricMesh, StVKElementABCD * precomputedABCDIntegrals, int initOnly, bool addGravity_, double g_, int verbose_): precomputedIntegrals(precomputedABCDIntegrals), unitReducedGravityForce(NULL), reducedGravityForce(NULL), addGravity(addGravity_), g(g_), useSingleThread(0), shallowCopy(0), verbose(verbose_) { int numElements = volumetricMesh->getNumElements(); lambdaLame = (double*) malloc (sizeof(double) * numElements); muLame = (double*) malloc (sizeof(double) * numElements); for(int el=0; el<numElements; el++) { VolumetricMesh::Material * material = volumetricMesh->getElementMaterial(el); VolumetricMesh::ENuMaterial * eNuMaterial = downcastENuMaterial(material); if (eNuMaterial == NULL) { printf("Error: StVKReducedInternalForces: mesh does not consist of E, nu materials.\n"); throw 1; } lambdaLame[el] = eNuMaterial->getLambda(); muLame[el] = eNuMaterial->getMu(); } InitComputation(r, U, volumetricMesh); if (!initOnly) ProcessElements(0, volumetricMesh->getNumElements()); InitGravity(); }
bool myAssetSystem::LoadAssets() { tinyxml2::XMLDocument doc; std::string filename = _workspace + "/assets.xml"; if (doc.LoadFile(filename.c_str()) != tinyxml2::XML_SUCCESS) { myDebug::Log(myDebug::LOG_ERROR, "Could Not Load: %s", filename.c_str()); return false; } myDebug::Log(myDebug::LOG_ENTRY, "Processing: %s", filename.c_str()); tinyxml2::XMLNode* Tree = doc.FirstChild(); if (Tree) { ProcessElements(Tree); } myDebug::Log(myDebug::LOG_INFO, "Total Assets Loaded: %i", _sharedAssets.size()); myDebug::Log(myDebug::LOG_ENTRY, "Finished Processing: %s", filename.c_str()); return true; }
/** * Gmsh file contains a list of nodes and their coordinates, along with * a list of elements and those nodes which define them. We read in and * store the list of nodes in #m_node and store the list of elements in * #m_element. Each new element is supplied with a list of entries from * #m_node which defines the element. Finally some mesh statistics are * printed. * * @param pFilename Filename of Gmsh file to read. */ void InputVtk::Process() { if (m_mesh->m_verbose) { cout << "InputVtk: Start reading file..." << endl; } vtkPolyDataReader *vtkMeshReader = vtkPolyDataReader::New(); vtkMeshReader->SetFileName(m_config["infile"].as<string>().c_str()); vtkMeshReader->Update(); vtkPolyData *vtkMesh = vtkMeshReader->GetOutput(); vtkPoints *vtkPoints = vtkMesh->GetPoints(); const int numCellTypes = 3; vtkCellArray* vtkCells[numCellTypes]; LibUtilities::ShapeType vtkCellTypes[numCellTypes]; int vtkNumPoints[numCellTypes]; vtkCells[0] = vtkMesh->GetPolys(); vtkCells[1] = vtkMesh->GetStrips(); vtkCells[2] = vtkMesh->GetLines(); vtkCellTypes[0] = LibUtilities::eTriangle; vtkCellTypes[1] = LibUtilities::eTriangle; vtkCellTypes[2] = LibUtilities::eSegment; vtkNumPoints[0] = 3; vtkNumPoints[1] = 3; vtkNumPoints[2] = 2; vtkIdType npts; vtkIdType *pts = 0; double p[3]; for (int i = 0; i < vtkPoints->GetNumberOfPoints(); ++i) { vtkPoints->GetPoint(i, p); if ((p[0] * p[0]) > 0.000001 && m_mesh->m_spaceDim < 1) { m_mesh->m_spaceDim = 1; } if ((p[1] * p[1]) > 0.000001 && m_mesh->m_spaceDim < 2) { m_mesh->m_spaceDim = 2; } if ((p[2] * p[2]) > 0.000001 && m_mesh->m_spaceDim < 3) { m_mesh->m_spaceDim = 3; } m_mesh->m_node.push_back(boost::shared_ptr<Node>(new Node(i, p[0], p[1], p[2]))); } for (int c = 0; c < numCellTypes; ++c) { vtkCells[c]->InitTraversal(); for (int i = 0; vtkCells[c]->GetNextCell(npts, pts); ++i) { for (int j = 0; j < npts - vtkNumPoints[c] + 1; ++j) { // Create element tags vector<int> tags; tags.push_back(0); // composite tags.push_back(vtkCellTypes[c]); // element type // Read element node list vector<NodeSharedPtr> nodeList; for (int k = j; k < j + vtkNumPoints[c]; ++k) { nodeList.push_back(m_mesh->m_node[pts[k]]); } // Create element ElmtConfig conf(vtkCellTypes[c],1,false,false); ElementSharedPtr E = GetElementFactory(). CreateInstance(vtkCellTypes[c], conf,nodeList,tags); // Determine mesh expansion dimension if (E->GetDim() > m_mesh->m_expDim) { m_mesh->m_expDim = E->GetDim(); } m_mesh->m_element[E->GetDim()].push_back(E); } } } ProcessVertices(); ProcessEdges(); ProcessFaces(); ProcessElements(); ProcessComposites(); }