diff --git a/src/main.cpp b/src/main.cpp index 9948fa9..6812189 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -49,56 +49,61 @@ int main(int argc, char *argv[]) { singleBarReducedModelEdges); singleBarReducedModel.setLabel("Single bar reduced model"); - // std::vector CCWreducedModelEdges{vcg::Point2i(1, 5), - // vcg::Point2i(3, 5)}; - // FlatPattern CWReducedModel(numberOfNodesPerSlot, CCWreducedModelEdges); - // CWReducedModel.setLabel("CW reduced model"); + std::vector CCWreducedModelEdges{vcg::Point2i(1, 5), + vcg::Point2i(3, 5)}; + FlatPattern CWReducedModel(numberOfNodesPerSlot, CCWreducedModelEdges); + CWReducedModel.setLabel("CW reduced model"); - // std::vector CWreducedModelEdges{vcg::Point2i(1, 5), - // vcg::Point2i(3, 1)}; - // FlatPattern CCWReducedModel(numberOfNodesPerSlot, CWreducedModelEdges); - // CCWReducedModel.setLabel("CCW reduced model"); + std::vector CWreducedModelEdges{vcg::Point2i(1, 5), + vcg::Point2i(3, 1)}; + FlatPattern CCWReducedModel(numberOfNodesPerSlot, CWreducedModelEdges); + CCWReducedModel.setLabel("CCW reduced model"); - // std::vector reducedModels{&singleBarReducedModel, - // &CWReducedModel, - // &CCWReducedModel}; + std::vector reducedModels{&singleBarReducedModel, + &CWReducedModel, &CCWReducedModel}; - // ReducedModelOptimizer optimizer(numberOfNodesPerSlot); - // std::string fullPatternsTestSetDirectory = - // "/home/iason/Models/TestSet_validPatterns"; - // for (const auto &entry : - // filesystem::directory_iterator(fullPatternsTestSetDirectory)) { - // const auto filepath = - // std::filesystem::path("/home/iason/Models/valid_6777.ply"); - // // std::filesystem::path( - // // "/home/iason/Documents/PhD/Research/Pattern_enumerator/Results/" - // // "1v_0v_2e_1e_1c_6fan/3/Valid/431.ply"); - // // std::filesystem::path( - // // "/home/iason/Models/TestSet_validPatterns/865.ply"); - // // entry.path(); - // const auto filepathString = filepath.string(); - // // Use only the base triangle version - // const std::string tiledSuffix = "_tiled.ply"; - // if (filepathString.compare(filepathString.size() - tiledSuffix.size(), - // tiledSuffix.size(), tiledSuffix) == 0) { - // continue; - // } - // FlatPattern pattern(filepathString); - // pattern.setLabel(filepath.stem().string()); - // std::cout << "Testing Pattern:" << filepathString << std::endl; - // for (FlatPattern *pReducedModel : reducedModels) { - // // pReducedModel = reducedModels[1]; - // std::unordered_set optimizationExcludedEi; - // if (pReducedModel != - // reducedModels[0]) { // assumes that the singleBar reduced model is - // // the - // // first in the reducedModels vector - // optimizationExcludedEi.insert(0); - // } - // optimizer.initialize(pattern, *pReducedModel, optimizationExcludedEi); - // Eigen::VectorXd optimalParameters = optimizer.optimize(); - // } - // } + ReducedModelOptimizer optimizer(numberOfNodesPerSlot); + std::string fullPatternsTestSetDirectory = + "/home/iason/Models/TestSet_validPatterns"; + for (const auto &entry : + filesystem::directory_iterator(fullPatternsTestSetDirectory)) { + const auto filepath = + // std::filesystem::path("/home/iason/Models/valid_6777.ply"); + // std::filesystem::path( + // "/home/iason/Documents/PhD/Research/Pattern_enumerator/Results/" + // "1v_0v_2e_1e_1c_6fan/3/Valid/222.ply"); + // std::filesystem::path( + // "/home/iason/Documents/PhD/Research/Pattern_enumerator/Results/" + // "1v_0v_2e_1e_1c_6fan/2/Valid/33.ply"); + std::filesystem::path( + "/home/iason/Documents/PhD/Research/Pattern_enumerator/Results/" + "1v_0v_2e_1e_1c_6fan/3/Valid/431.ply"); + // std::filesystem::path( + // "/home/iason/Models/TestSet_validPatterns/865.ply"); + entry.path(); + const auto filepathString = filepath.string(); + // Use only the base triangle version + const std::string tiledSuffix = "_tiled.ply"; + if (filepathString.compare(filepathString.size() - tiledSuffix.size(), + tiledSuffix.size(), tiledSuffix) == 0) { + continue; + } + FlatPattern pattern(filepathString); + pattern.setLabel(filepath.stem().string()); + std::cout << "Testing Pattern:" << filepathString << std::endl; + for (FlatPattern *pReducedModel : reducedModels) { + // pReducedModel = reducedModels[1]; + std::unordered_set optimizationExcludedEi; + if (pReducedModel != + reducedModels[0]) { // assumes that the singleBar reduced model is + // the + // first in the reducedModels vector + optimizationExcludedEi.insert(0); + } + optimizer.initialize(pattern, *pReducedModel, optimizationExcludedEi); + Eigen::VectorXd optimalParameters = optimizer.optimize(); + } + } // // Full model simulation // std::unordered_map> @@ -166,28 +171,56 @@ int main(int argc, char *argv[]) { // } // Beam + // registerWorldAxes(); VCGEdgeMesh mesh; - mesh.loadFromPly("/home/iason/Models/simple_beam_model_10elem_1m.ply"); + // mesh.loadFromPly("/home/iason/Models/simple_beam_model_10elem_1m.ply"); + mesh.loadFromPly("/home/iason/Coding/Projects/Approximating shapes with flat " + "patterns/RodModelOptimizationForPatterns/build/Debug/" + "Fanned_Single bar reduced model.ply"); + // vcg::Matrix44d R; + // R.SetRotateDeg(45, {0, 0, 1}); + // vcg::tri::UpdatePosition::Matrix(mesh, R); + // mesh.updateEigenEdgeAndVertices(); FormFinder formFinder; + formFinder.runUnitTests(); std::unordered_map> fixedVertices; - fixedVertices[0] = std::unordered_set{0, 1, 2, 3, 4, 5}; - std::unordered_map nodalForces{ - {10, Vector6d({0, 0, 0, 0.00001, 0, 0})}}; + fixedVertices[1] = std::unordered_set{2}; + fixedVertices[2] = std::unordered_set{2}; + fixedVertices[3] = std::unordered_set{1, 2}; + fixedVertices[4] = std::unordered_set{2}; + fixedVertices[5] = std::unordered_set{2}; + fixedVertices[6] = std::unordered_set{0, 1, 2}; // Forced displacements std::unordered_map nodalForcedDisplacements; + // nodalForcedDisplacements[10] = Eigen::Vector3d(0, 0.1, 0.1); std::unordered_map nodalForcedNormal; - // CoordType v = (mesh.vert[10].cP() - mesh.vert[0].cP()).Normalize(); + CoordType v14 = (mesh.vert[4].cP() - mesh.vert[0].cP()).Normalize(); + CoordType v25 = (mesh.vert[5].cP() - mesh.vert[0].cP()).Normalize(); + CoordType v36 = (mesh.vert[6].cP() - mesh.vert[0].cP()).Normalize(); + const double forceMagnitude = 0.4; + std::unordered_map nodalForces{ + // {4, Vector6d({0, 0, 0, v14[0], v14[1], 0}) * forceMagnitude}, + // {1, Vector6d({0, 0, 0, -v14[0], -v14[1], 0}) * forceMagnitude}, + // {5, Vector6d({0, 0, 0, v25[0], v25[1], 0}) * forceMagnitude}, + // {2, Vector6d({0, 0, 0, -v25[0], -v25[1], 0}) * forceMagnitude}, + // {6, Vector6d({0, 0, 0, v36[0], v36[1], 0}) * forceMagnitude}, + {3, Vector6d({0, 0, 0, -v36[0], -v36[1], 0}) * forceMagnitude}}; // nodalForcedNormal[10] = v; - fixedVertices[10] = {0, 1, 2}; + // nodalForcedNormal[0] = -v; + // fixedVertices[10] = {0, 1}; SimulationJob beamSimulationJob{std::make_shared(mesh), - fixedVertices, nodalForces, - nodalForcedDisplacements, nodalForcedNormal}; + fixedVertices, + nodalForces, + {}, + {}}; beamSimulationJob.mesh->setBeamMaterial(0.3, 1); beamSimulationJob.mesh->setBeamCrossSection( RectangularBeamDimensions{0.002, 0.002}); - // registerWorldAxes(); + beamSimulationJob.registerForDrawing(); + registerWorldAxes(); + polyscope::show(); SimulationResults beamSimulationResults = formFinder.executeSimulation(beamSimulationJob, true, true); beamSimulationResults.simulationLabel = "Beam"; diff --git a/src/reducedmodeloptimizer.cpp b/src/reducedmodeloptimizer.cpp index 3dd77e0..88e35ae 100644 --- a/src/reducedmodeloptimizer.cpp +++ b/src/reducedmodeloptimizer.cpp @@ -10,7 +10,7 @@ const bool gShouldDraw = true; FormFinder simulator; Eigen::MatrixX3d g_optimalReducedModelDisplacements; SimulationJob g_reducedPatternSimulationJob; -std::unordered_map +std::unordered_map g_reducedToFullInterfaceViMap; matplot::line_handle gPlotHandle; std::vector gObjectiveValueHistory; @@ -145,10 +145,10 @@ double ReducedModelOptimizer::objective(long n, const double *x) { error += errorVector.norm(); } - gObjectiveValueHistory.push_back(error); - auto xPlot = matplot::linspace(0, gObjectiveValueHistory.size(), - gObjectiveValueHistory.size()); - gPlotHandle = matplot::scatter(xPlot, gObjectiveValueHistory); + // gObjectiveValueHistory.push_back(error); + // auto xPlot = matplot::linspace(0, gObjectiveValueHistory.size(), + // gObjectiveValueHistory.size()); + // gPlotHandle = matplot::scatter(xPlot, gObjectiveValueHistory); return error; } @@ -278,13 +278,15 @@ void ReducedModelOptimizer::computeMaps( void ReducedModelOptimizer::createSimulationMeshes(FlatPattern &fullModel, FlatPattern &reducedModel) { - pReducedModelElementalMesh = std::make_shared(reducedModel); - pReducedModelElementalMesh->setBeamCrossSection( + m_pReducedPatternElementalMesh = + std::make_shared(reducedModel); + m_pReducedPatternElementalMesh->setBeamCrossSection( CrossSectionType{0.002, 0.002}); - pReducedModelElementalMesh->setBeamMaterial(0.3, 1); - pFullModelElementalMesh = std::make_shared(fullModel); - pFullModelElementalMesh->setBeamCrossSection(CrossSectionType{0.002, 0.002}); - pFullModelElementalMesh->setBeamMaterial(0.3, 1); + m_pReducedPatternElementalMesh->setBeamMaterial(0.3, 1); + m_pFullModelElementalMesh = std::make_shared(fullModel); + m_pFullModelElementalMesh->setBeamCrossSection( + CrossSectionType{0.002, 0.002}); + m_pFullModelElementalMesh->setBeamMaterial(0.3, 1); } ReducedModelOptimizer::ReducedModelOptimizer( @@ -297,7 +299,7 @@ void ReducedModelOptimizer::initialize( FlatPattern &fullPattern, FlatPattern &reducedPattern, const std::unordered_set &reducedModelExcludedEdges) { assert(fullPattern.VN() == reducedPattern.VN() && - fullPattern.EN() > reducedPattern.EN()); + fullPattern.EN() >= reducedPattern.EN()); polyscope::removeAllStructures(); // Create copies of the input models FlatPattern copyFullPattern; @@ -307,9 +309,6 @@ void ReducedModelOptimizer::initialize( computeMaps(copyFullPattern, copyReducedPattern, reducedModelExcludedEdges); createSimulationMeshes(copyFullPattern, copyReducedPattern); initializeStiffnesses(); - - int i = 0; - i++; } void ReducedModelOptimizer::initializeStiffnesses() { @@ -324,7 +323,8 @@ void ReducedModelOptimizer::initializeStiffnesses() { // e.firstBendingConstFactor *= stiffnessFactor; // e.secondBendingConstFactor *= stiffnessFactor; // } - g_initialParameters = pReducedModelElementalMesh->elements[0].properties.E; + g_initialParameters = + m_pReducedPatternElementalMesh->elements[0].properties.E; // g_initialParameters(1) = // pReducedModelElementalMesh->elements[0].properties.G; // g_initialParameters(0, 0) = @@ -363,7 +363,7 @@ void ReducedModelOptimizer::computeReducedModelSimulationJob( fullModelNodalForcedRotation.second; } - simulationJobOfReducedModel = SimulationJob{pReducedModelElementalMesh, + simulationJobOfReducedModel = SimulationJob{m_pReducedPatternElementalMesh, reducedModelFixedVertices, reducedModelNodalForces, {}, @@ -383,8 +383,8 @@ void ReducedModelOptimizer::computeDesiredReducedModelDisplacements( Eigen::MatrixX3d &optimalDisplacementsOfReducedModel) { optimalDisplacementsOfReducedModel.resize(0, 3); - optimalDisplacementsOfReducedModel.resize(pReducedModelElementalMesh->VN(), - 3); + optimalDisplacementsOfReducedModel.resize( + m_pReducedPatternElementalMesh->VN(), 3); optimalDisplacementsOfReducedModel.setZero( optimalDisplacementsOfReducedModel.rows(), optimalDisplacementsOfReducedModel.cols()); @@ -403,20 +403,21 @@ void ReducedModelOptimizer::computeDesiredReducedModelDisplacements( Eigen::VectorXd ReducedModelOptimizer::optimizeForSimulationJob( const SimulationJob &fullPatternSimulationJob) { - gObjectiveValueHistory.clear(); // fullPatternSimulationJob.registerForDrawing(); // polyscope::show(); + gObjectiveValueHistory.clear(); fullPatternSimulationJob.mesh->savePly( - "Fanned_" + pFullModelElementalMesh->getLabel() + ".ply"); + "Fanned_" + m_pFullModelElementalMesh->getLabel() + ".ply"); SimulationResults fullModelResults = simulator.executeSimulation(fullPatternSimulationJob, false, true); fullModelResults.simulationLabel = "fullModel"; + fullModelResults.registerForDrawing(fullPatternSimulationJob); + registerWorldAxes(); + polyscope::show(); computeDesiredReducedModelDisplacements(fullModelResults, g_optimalReducedModelDisplacements); computeReducedModelSimulationJob(fullPatternSimulationJob, g_reducedPatternSimulationJob); - // fullModelSimulationJob.registerForDrawing(); - // polyscope::show(); // gReducedPatternSimulationJob.registerForDrawing(); // polyscope::show(); fullModelResults.registerForDrawing(fullPatternSimulationJob); @@ -490,12 +491,31 @@ std::vector ReducedModelOptimizer::createScenarios( std::vector scenarios; std::unordered_map> fixedVertices; std::unordered_map nodalForces; - std::unordered_map nodalForcedNormals; const double forceMagnitude = 1; // Assuming the patterns lays on the x-y plane const CoordType patternPlaneNormal(0, 0, 1); + // Make the first interface node lay on the x axis + const size_t fullPatternFirstInterfaceNodeIndex = + m_fullPatternOppositeInterfaceViMap.begin()->second; + CoordType fullPatternFirstInterfaceNodePosition = + m_pFullModelElementalMesh->vert[fullPatternFirstInterfaceNodeIndex].cP(); + const vcg::Matrix33d R = vcg::RotationMatrix( + fullPatternFirstInterfaceNodePosition, + CoordType(fullPatternFirstInterfaceNodePosition.Norm(), 0, 0), false); + std::for_each(m_pFullModelElementalMesh->vert.begin(), + m_pFullModelElementalMesh->vert.end(), [&](auto &v) { + v.P() = R * v.P(); + v.N() = R * v.N(); + }); + std::for_each(m_pReducedPatternElementalMesh->vert.begin(), + m_pReducedPatternElementalMesh->vert.end(), [&](auto &v) { + v.P() = R * v.P(); + v.N() = R * v.N(); + }); + m_pFullModelElementalMesh->updateEigenEdgeAndVertices(); + m_pReducedPatternElementalMesh->updateEigenEdgeAndVertices(); - // // Axial + // //// Axial // for (const auto &viPair : m_fullPatternOppositeInterfaceViMap) { // CoordType forceDirection = // (pMesh->vert[viPair.first].cP() - pMesh->vert[viPair.second].cP()) @@ -509,7 +529,7 @@ std::vector ReducedModelOptimizer::createScenarios( // } // scenarios.push_back({pMesh, fixedVertices, nodalForces, {}}); - // // In-plane Bending + // //// In-plane Bending // fixedVertices.clear(); // nodalForces.clear(); // for (const auto &viPair : m_fullPatternOppositeInterfaceViMap) { @@ -526,7 +546,7 @@ std::vector ReducedModelOptimizer::createScenarios( // } // scenarios.push_back({pMesh, fixedVertices, nodalForces, {}}); - // // Torsion + // //// Torsion // fixedVertices.clear(); // nodalForces.clear(); // for (auto viPairIt = m_fullPatternOppositeInterfaceViMap.begin(); @@ -537,125 +557,83 @@ std::vector ReducedModelOptimizer::createScenarios( // (pMesh->vert[viPair.first].cP() - pMesh->vert[viPair.second].cP()) // .Normalize(); // CoordType normalVDerivativeDir = (v ^ patternPlaneNormal).Normalize(); - // fixedVertices[viPair.first] = std::unordered_set{0, 1, 2}; - // nodalForcedNormals[viPair.first] = normalVDerivativeDir; - // } else { - // fixedVertices[viPair.first] = + // nodalForces[viPair.first] = Vector6d{ + // 0, 0, 0, normalVDerivativeDir[0], normalVDerivativeDir[1], 0}; + // fixedVertices[viPair.second] = // std::unordered_set{0, 1, 2, 3, 4, 5}; + // fixedVertices[viPair.first] = std::unordered_set{0, 1, 2}; + // } else { + // fixedVertices[viPair.first] = std::unordered_set{0, 1, 2}; + // fixedVertices[viPair.second] = std::unordered_set{0, 1, 2}; // } - // fixedVertices[viPair.second] = - // std::unordered_set{0, 1, 2, 3, 4, 5}; // } - // scenarios.push_back( - // {pMesh, fixedVertices, nodalForces, {}, nodalForcedNormals}); + // scenarios.push_back({pMesh, fixedVertices, nodalForces}); // // Out - of - plane bending.Pull towards Z // fixedVertices.clear(); // nodalForces.clear(); // for (const auto &viPair : m_fullPatternOppositeInterfaceViMap) { // nodalForces[viPair.first] = Vector6d({0, 0, forceMagnitude, 0, 0, 0}) * - // 2; fixedVertices[viPair.second] = + // 1; fixedVertices[viPair.second] = // std::unordered_set{0, 1, 2, 3, 4, 5}; // } // scenarios.push_back({pMesh, fixedVertices, nodalForces, {}}); - // Double - // fixedVertices.clear(); - // nodalForces.clear(); - // nodalForcedNormals.clear(); - // int counter = 0; - // for (const auto &viPair : m_fullPatternOppositeInterfaceViMap) { - // CoordType v = - // (pMesh->vert[viPair.first].cP() - pMesh->vert[viPair.second].cP()) - // .Normalize(); - // nodalForcedNormals[viPair.first] = -v; - // if (counter++ == 1) { - // fixedVertices[viPair.first] = std::unordered_set{0}; - - // } else { - // fixedVertices[viPair.first] = std::unordered_set{0, 1, 2}; - // } - // fixedVertices[viPair.second] = std::unordered_set{0, 1, 2}; - // } - // scenarios.push_back( - // {pMesh, fixedVertices, nodalForces, {}, nodalForcedNormals}); - - // Double - fixedVertices.clear(); - nodalForces.clear(); - for (const auto &viPair : m_fullPatternOppositeInterfaceViMap) { - CoordType v = - (pMesh->vert[viPair.first].cP() - pMesh->vert[viPair.second].cP()) - .Normalize(); - CoordType momentDirection = patternPlaneNormal ^ v; - nodalForces[viPair.first] = - Vector6d({0, 0, 0, momentDirection[1], momentDirection[0], 0}) * - forceMagnitude; - fixedVertices[viPair.first] = std::unordered_set{2}; - fixedVertices[viPair.second] = std::unordered_set{0, 1, 2}; - } - scenarios.push_back({pMesh, fixedVertices, nodalForces, {}}); - - //// Saddle using moments + // //// Double using moments // fixedVertices.clear(); // nodalForces.clear(); // for (auto viPairIt = m_fullPatternOppositeInterfaceViMap.begin(); // viPairIt != m_fullPatternOppositeInterfaceViMap.end(); viPairIt++) { - // const auto &viPair = *viPairIt; + // const auto viPair = *viPairIt; + // if (viPairIt == m_fullPatternOppositeInterfaceViMap.begin()) { + // fixedVertices[viPair.first] = std::unordered_set{0, 1, 2}; + // fixedVertices[viPair.second] = std::unordered_set{1, 2}; + // } else { + // fixedVertices[viPair.first] = std::unordered_set{2}; + // fixedVertices[viPair.second] = std::unordered_set{2}; + // } // CoordType v = // (pMesh->vert[viPair.first].cP() - pMesh->vert[viPair.second].cP()) // .Normalize(); - // // CoordType momentDirection = (patternPlane ^ v).Normalize(); - // if (viPairIt == m_fullPatternOppositeInterfaceViMap.begin()) { - // nodalForces[viPair.first] = - // Vector6d({0, 0, 0, v[0], v[1], 0}) * 5 * forceMagnitude; - // nodalForces[viPair.second] = - // Vector6d({0, 0, 0, -v[0], -v[1], 0}) * 5 * forceMagnitude; - // } else { - // fixedVertices[viPair.first] = std::unordered_set{2}; - // // nodalForces[viPair.first] = - // // Vector6d({0, 0, 0, -v[0], -v[1], 0}) * 2 * forceMagnitude; - // fixedVertices[viPair.second] = std::unordered_set{2}; - - // nodalForces[viPair.first] = - // Vector6d({0, 0, 0, -v[0], -v[1], 0}) * 2 * forceMagnitude; - // nodalForces[viPair.second] = - // Vector6d({0, 0, 0, v[0], v[1], 0}) * 2 * forceMagnitude; - // } + // nodalForces[viPair.first] = + // Vector6d({0, 0, 0, v[0], v[1], 0}) * forceMagnitude * 0.1; + // nodalForces[viPair.second] = + // Vector6d({0, 0, 0, -v[0], -v[1], 0}) * forceMagnitude * 0.1; // } // scenarios.push_back({pMesh, fixedVertices, nodalForces, {}}); - //// Saddle using forced normals + //// Saddle fixedVertices.clear(); nodalForces.clear(); - nodalForcedNormals.clear(); for (auto viPairIt = m_fullPatternOppositeInterfaceViMap.begin(); viPairIt != m_fullPatternOppositeInterfaceViMap.end(); viPairIt++) { const auto &viPair = *viPairIt; CoordType v = (pMesh->vert[viPair.first].cP() - pMesh->vert[viPair.second].cP()) .Normalize(); - // CoordType momentDirection = (patternPlane ^ v).Normalize(); if (viPairIt == m_fullPatternOppositeInterfaceViMap.begin()) { - nodalForcedNormals[viPair.first] = v; - nodalForcedNormals[viPair.second] = -v; + nodalForces[viPair.first] = + Vector6d({0, 0, 0, v[0], v[1], 0}) * 0.02 * forceMagnitude; + nodalForces[viPair.second] = + Vector6d({0, 0, 0, -v[0], -v[1], 0}) * 0.02 * forceMagnitude; } else { + fixedVertices[viPair.first] = std::unordered_set{2}; + fixedVertices[viPair.second] = std::unordered_set{0, 1, 2}; - nodalForcedNormals[viPair.first] = -v; - nodalForcedNormals[viPair.second] = v; + nodalForces[viPair.first] = + Vector6d({0, 0, 0, -v[0], -v[1], 0}) * 0.01 * forceMagnitude; + nodalForces[viPair.second] = + Vector6d({0, 0, 0, v[0], v[1], 0}) * 0.01 * forceMagnitude; } - fixedVertices[viPair.first] = std::unordered_set{0, 1, 2}; - fixedVertices[viPair.second] = std::unordered_set{0, 1, 2}; } - scenarios.push_back( - {pMesh, fixedVertices, nodalForces, {}, nodalForcedNormals}); + scenarios.push_back({pMesh, fixedVertices, nodalForces, {}}); return scenarios; } Eigen::VectorXd ReducedModelOptimizer::optimize() { std::vector simulationJobs = - createScenarios(pFullModelElementalMesh); + createScenarios(m_pFullModelElementalMesh); std::vector results; for (const SimulationJob &job : simulationJobs) { polyscope::removeAllStructures(); diff --git a/src/reducedmodeloptimizer.hpp b/src/reducedmodeloptimizer.hpp index ec89164..ceb1b81 100644 --- a/src/reducedmodeloptimizer.hpp +++ b/src/reducedmodeloptimizer.hpp @@ -7,15 +7,15 @@ #include "matplot/matplot.h" #include -using FullModelVertexIndex = VertexIndex; -using ReducedModelVertexIndex = VertexIndex; +using FullPatternVertexIndex = VertexIndex; +using ReducedPatternVertexIndex = VertexIndex; class ReducedModelOptimizer { - std::shared_ptr pReducedModelElementalMesh; - std::shared_ptr pFullModelElementalMesh; - std::unordered_map + std::shared_ptr m_pReducedPatternElementalMesh; + std::shared_ptr m_pFullModelElementalMesh; + std::unordered_map m_fullToReducedInterfaceViMap; - std::unordered_map + std::unordered_map m_fullPatternOppositeInterfaceViMap; std::unordered_map nodeToSlot; std::unordered_map> slotToNode;