diff --git a/NonLinearSolver/modelReduction/Clustering.cpp b/NonLinearSolver/modelReduction/Clustering.cpp index 68f61e4be3653c3e82b51e09053ef4ae6d5c9780..c79eca2fe8d9156e5fafd29bca2664fab0e07d25 100644 --- a/NonLinearSolver/modelReduction/Clustering.cpp +++ b/NonLinearSolver/modelReduction/Clustering.cpp @@ -756,7 +756,8 @@ void Clustering::setNumberOfClustersForMaterialHierarchical(int matNum, int nbCl } void Clustering::solveStrainConcentration(nonLinearMechSolver& solver, - int computeHomStiffness, int homStiffnessFromLocal, + int computeHomStiffness, + int homStiffnessFromLocal, int getLocalOrientation, bool saveToFile, const std::string strainConcentrationFileName, bool saveLocalOrientationDataToFile, const std::string localOrientationFileName) @@ -1280,7 +1281,7 @@ void Clustering::solveStrainConcentration(nonLinearMechSolver& solver, fclose(f); printf("done writing strain concentration tensor to file\n"); } - if (saveLocalOrientationDataToFile and getLocalOrientation) + if (saveLocalOrientationDataToFile) { printf("start writing local orientation to file\n"); FILE* f = fopen(localOrientationFileName.c_str(),"w"); @@ -2298,8 +2299,6 @@ bool Clustering::computeClustersElasticity(int minNumberElementEachCluster, int bool saveToFile, std::string clusterFileName, bool saveSummaryFile, std::string summaryFileName, bool saveMostStrainIPFile, const std::string saveMostStrainIPFileName, - bool saveStrainConcStDFile, const std::string saveStrainConcStDFileName, - bool saveClusterPositionFile, const std::string saveClusterPositionFileName, bool saveClusterMeanFiberOrientationFile, const std::string saveClusterMeanFiberOrientationFileName ) { @@ -2368,17 +2367,7 @@ bool Clustering::computeClustersElasticity(int minNumberElementEachCluster, int // most strain IP mostStrainIP[clusterNum] = clutering_impls::maxConcentrationCluster(cluster); - Msg::Info("most strain in cluster = %d is IP %d",clusterNum,mostStrainIP[clusterNum]); - - /*fullVector<double> cluster_position(3); - double x_mean(0.), y_mean(0.), z_mean(0.); - clutering_impls::meanClusterPosition(cluster,_mapGaussPoints,x_mean,y_mean,z_mean); - cluster_position(0) = x_mean; - cluster_position(1) = y_mean; - cluster_position(2) = z_mean; - _clusterPositionMap[clusterNum] = cluster_position; - Msg::Info("position of cluster = %d is %.16g,%.16g,%.16g ",clusterNum,x_mean,y_mean,z_mean);*/ - + Msg::Info("most strain in cluster = %d is IP %d",clusterNum,mostStrainIP[clusterNum]); /*fullVector<double> cluster_fiberOrientation(3); double E1_mean(0.), E2_mean(0.), E3_mean(0.); @@ -2417,28 +2406,7 @@ bool Clustering::computeClustersElasticity(int minNumberElementEachCluster, int fclose(f); printf("done writing data to file: %s \n",fname.c_str()); } - - if (saveClusterPositionFile) - { - std::vector<std::string> splitFileName = SplitFileName(saveClusterPositionFileName); - std::string fname = splitFileName[1]+"_nbClusters_"+std::to_string(_totalNumberOfClusters)+splitFileName[2]; - FILE* f = fopen(fname.c_str(),"w"); - printf("start writing cluster position to file: %s\n",fname.c_str()); - std::string str ="CLUSTER_ID X Y Z"; - fprintf(f,"%s\n",str.c_str()); - for (std::map<int, fullVector<double> >::const_iterator it = _clusterPositionMap.begin(); it!= _clusterPositionMap.end(); it++) - { - int clusterId = it->first; - fullVector<double> xyz = it->second; - double x = xyz(0); - double y = xyz(1); - double z = xyz(2); - fprintf(f, "%d %.16g %.16g %.16g\n",clusterId,x,y,z); - } - fclose(f); - printf("done writing cluster position to file: %s \n",fname.c_str()); - } - + if (saveClusterMeanFiberOrientationFile) { std::vector<std::string> splitFileName = SplitFileName(saveClusterMeanFiberOrientationFileName); @@ -2523,48 +2491,6 @@ bool Clustering::computeClustersElasticity(int minNumberElementEachCluster, int fclose(f); printf("done writing cluster summary to file: %s \n",fname.c_str()); } - - - if(saveStrainConcStDFile) - { - std::vector<std::string> splitFileName = SplitFileName(saveStrainConcStDFileName); - std::string fname = splitFileName[1]+"_nbClusters_"+std::to_string(_totalNumberOfClusters)+splitFileName[2]; - FILE* f = fopen(fname.c_str(),"w"); - printf("start writing cluster std to file: %s\n",fname.c_str()); - std::string str ="CLUSTER_ID MAT_NUM VOLUME"; - // write data - for (int i=0; i<6; i++) - { - for (int j=0; j<6; j++) - { - str += " STD_A_"+std::to_string(i)+std::to_string(j); - } - } - fprintf(f,"%s\n",str.c_str()); - // write data - for (std::map<int, STensor43>::const_iterator it = _clusterSTDTensorMap.begin(); it!= _clusterSTDTensorMap.end(); it++) - { - int cluster = it->first; - int matNum = _clusterMaterialMap[cluster]; - double volume = _clusterVolumeMap[cluster]; - fprintf(f,"%d %d %.16g",cluster, matNum, volume); - const STensor43& Astd = it->second; - static fullMatrix<double> mat(6,6); - STensorOperation::fromSTensor43ToFullMatrix(Astd,mat); - printf("writing data for cluster %d\n",cluster); - mat.print("std strain concentration tensor"); - for (int i=0; i<6; i++) - { - for (int j=0; j<6; j++) - { - fprintf(f, " %.16g",mat(i,j)); - } - } - fprintf(f, "\n"); - } - fclose(f); - printf("done writing cluster std to file: %s \n",fname.c_str()); - } return true; }; @@ -2846,9 +2772,6 @@ bool Clustering::computeClustersPlasticity(int minNumberElementEachCluster, int bool saveSummaryFile, std::string summaryFileName, bool savePlastStrainConcFile, std::string plastStrainconcFileName, bool savePlastEqStrainConcFile, std::string plastEqstrainconcFileName, - bool savePlastStrainConcSTDFile, std::string plastStrainconcstdevFileName, - bool saveMostStrainIPFile, const std::string saveMostStrainIPFileName, - bool saveClusterPositionFile, const std::string saveClusterPositionFileName, bool saveClusterMeanFiberOrientationFile, const std::string saveClusterMeanFiberOrientationFileName ) { @@ -3040,45 +2963,6 @@ bool Clustering::computeClustersPlasticity(int minNumberElementEachCluster, int } } // - if (saveMostStrainIPFile) - { - std::vector<std::string> splitFileName = SplitFileName(saveMostStrainIPFileName); - std::string fname = splitFileName[1]+"_nbClusters_"+std::to_string(_totalNumberOfClusters)+splitFileName[2]; - FILE* f = fopen(fname.c_str(),"w"); - std::string str ="CLUSTER_ID ELE_NUM GP_NUM"; - fprintf(f,"%s\n",str.c_str()); - for (std::map<int, int >::const_iterator it = mostStrainIP.begin(); it!= mostStrainIP.end(); it++) - { - int clusterId = it->first; - int ipType = it->second; - int ele, gp; - numericalMaterialBase::getTwoIntsFromType(ipType,ele,gp); - fprintf(f, "%d %d %d\n",clusterId, ele, gp); - } - fclose(f); - printf("done writing data to file: %s \n",fname.c_str()); - } - - if (saveClusterPositionFile) - { - std::vector<std::string> splitFileName = SplitFileName(saveClusterPositionFileName); - std::string fname = splitFileName[1]+"_nbClusters_"+std::to_string(_totalNumberOfClusters)+splitFileName[2]; - FILE* f = fopen(fname.c_str(),"w"); - printf("start writing cluster position to file: %s\n",fname.c_str()); - std::string str ="CLUSTER_ID X Y Z"; - fprintf(f,"%s\n",str.c_str()); - for (std::map<int, fullVector<double> >::const_iterator it = _clusterPositionMap.begin(); it!= _clusterPositionMap.end(); it++) - { - int clusterId = it->first; - fullVector<double> xyz = it->second; - double x = xyz(0); - double y = xyz(1); - double z = xyz(2); - fprintf(f, "%d %.16g %.16g %.16g\n",clusterId,x,y,z); - } - fclose(f); - printf("done writing cluster position to file: %s \n",fname.c_str()); - } if (saveClusterMeanFiberOrientationFile) { @@ -3288,36 +3172,6 @@ bool Clustering::computeClustersPlasticity(int minNumberElementEachCluster, int fclose(fplPowMean); printf("done writing cluster plastic eq. power mean summary to file: %s \n",fnamePlPowMean.c_str()); } - - if (savePlastStrainConcSTDFile) - { - std::vector<std::string> splitFileNameSTD = SplitFileName(plastStrainconcstdevFileName); - std::string fnamePlStd = splitFileNameSTD[1]+"_nbClusters_"+std::to_string(_totalNumberOfClusters)+splitFileNameSTD[2]; - FILE* fplstd = fopen(fnamePlStd.c_str(),"w"); - std::string strPlSTD ="CLUSTER_ID MAT_NUM VOLUME"; - // write data - for (int i=0; i<36; i++) - { - strPlSTD += " STD_A_pl_"+std::to_string(i); - } - fprintf(fplstd,"%s\n",strPlSTD.c_str()); - // write data - for (std::map<int, fullVector<double>>::const_iterator it = _clusterPlSTDVectorMap.begin(); it!= _clusterPlSTDVectorMap.end(); it++) - { - int cluster = it->first; - int matNum = _clusterMaterialMap[cluster]; - double volume = _clusterVolumeMap[cluster]; - fprintf(fplstd,"%d %d %.16g",cluster, matNum, volume); - const fullVector<double>& plasticSTD = it->second; - for (int i=0; i<36; i++) - { - fprintf(fplstd, " %.16g",plasticSTD(i)); - } - fprintf(fplstd, "\n"); - } - fclose(fplstd); - printf("done writing cluster plastic eq. std to file: %s \n",fnamePlStd.c_str()); - } return true; }; diff --git a/NonLinearSolver/modelReduction/Clustering.h b/NonLinearSolver/modelReduction/Clustering.h index 0288a3466037e3153372782f29010be22bbeab4a..7fa9082f840066cc2f7972ef36a364fc9ca61dd4 100644 --- a/NonLinearSolver/modelReduction/Clustering.h +++ b/NonLinearSolver/modelReduction/Clustering.h @@ -217,8 +217,9 @@ class Clustering Clustering(); // solve strain concentrartion tensor at gauss points and save to file void solveStrainConcentration(nonLinearMechSolver& solver, - int computeHomStiffness = 0, int homStiffnessFromLocal=0, - int getLocalOrientation = 0, + int computeHomStiffness = 0, // compute homogenized elastic stiffness: 0=no; 1=yes + int homStiffnessFromLocal=0, // 0= compute hom el. stiffness from hom. stress, strain; 1=compute hom. el. stiffness as local average over C(x):A(x) + int getLocalOrientation = 0, // for materials with microstructure, e.g. woven composite bool saveToFile=true, const std::string strainConcentrationFileName = "strainConcentrationData.csv", bool saveLocalOrientationDataToFile=true, const std::string localOrientationFileName = "orientationData.csv"); void solveStrainConcentrationInelastic(nonLinearMechSolver& solverInelastic,bool saveToFile=true, @@ -249,10 +250,8 @@ class Clustering bool computeClustersElasticity(int minNumberElementEachCluster, int maxNbIterations=10000, bool saveToFile=true, const std::string clusterFileName = "ClusterData.csv", - bool saveSummaryFile=true, const std::string summaryFileName = "ClusterDataSummary.csv", - bool saveMostStrainIPFile = true, const std::string saveMostStrainIPFileName = "MostStrainingIPSummary.csv", - bool saveStrainConcStDFile = true, const std::string saveStrainConcStDFileName = "ClusterStrainConcStD.csv", - bool saveClusterPositionFile = true, const std::string saveClusterPositionFileName = "ClusterPosition.csv", + bool saveSummaryFile=true, const std::string summaryFileName = "ClusterDataSummary.csv", + bool saveMostStrainIPFile=true, const std::string saveMostStrainIPFileName = "MostStrainingIPSummary.csv", bool saveClusterMeanFiberOrientationFile=true, const std::string saveClusterMeanFiberOrientationFileName = "ClusterMeanFiberOrientation.csv" ); @@ -266,9 +265,6 @@ class Clustering bool saveSummaryFile=true, const std::string summaryFileName = "ClusterDataSummary.csv", bool savePlastStrainConcFile=true, std::string plastStrainconcFileName = "ClusterPlasticSummary.csv", bool savePlastEqStrainConcFile=true, std::string plastEqstrainconcFileName = "ClusterPlasticEqSummary.csv", - bool savePlastStrainConcSTDFile=true, std::string plastStrainconcstdevFileName = "ClusterPlasticStrainTensorSTD.csv", - bool saveMostStrainIPFile = true, const std::string saveMostStrainIPFileName = "MostStrainingIPSummary.csv", - bool saveClusterPositionFile = true, const std::string saveClusterPositionFileName = "ClusterPosition.csv", bool saveClusterMeanFiberOrientationFile=true, const std::string saveClusterMeanFiberOrientationFileName = "ClusterMeanFiberOrientation.csv" );