803 {
806 std::ifstream ini_file(file_name.c_str(), std::ifstream::in);
807 po::variables_map vm;
808 if (clean_file_options) {
810 boost::shared_ptr<boost::program_options::options_description>(
811 new po::options_description());
812 }
813
814 auto add_block_attributes = [&](auto prefix, auto &block_lists, auto &it) {
815
817 (prefix + ".number_of_attributes").c_str(),
818 po::value<int>(&block_lists[it->getMeshsetId()].numberOfAttributes)
819 ->default_value(-1),
820 "Number of blockset attribute");
821 for (int ii = 1; ii <= 10; ii++) {
822 std::string surfix = ".user" + boost::lexical_cast<std::string>(ii);
824 (prefix + surfix).c_str(),
825 po::value<double>(&block_lists[it->getMeshsetId()].aTtr[ii - 1])
826 ->default_value(0.0),
827 "Add block attribute");
828 }
829 };
830
831
832 map<int, BlockData> block_lists;
834 block_lists[it->getMeshsetId()].cubitMeshset = it->getMeshset();
835 std::string prefix =
836 "block_" + boost::lexical_cast<std::string>(it->getMeshsetId());
838 (prefix + ".add").c_str(),
839 po::value<string>(&block_lists[it->getMeshsetId()].addType)
840 ->default_value("UNKNOWNSET"),
841 "Add block set")(
842 (prefix + ".id").c_str(),
843 po::value<int>(&block_lists[it->getMeshsetId()].iD)->default_value(-1),
844 "Id of meshset")(
845 (prefix + ".name").c_str(),
846 po::value<string>(&block_lists[it->getMeshsetId()].nAme)
847 ->default_value(""),
848 "Name of the meshset");
849
850
851 add_block_attributes(prefix, block_lists, it);
852
853
854 {
855
856
857
859 (prefix + ".young").c_str(),
860 po::value<double>(
861 &block_lists[it->getMeshsetId()].matElastic.data.Young)
862 ->default_value(-1),
863 "Young modulus")(
864 (prefix + ".poisson").c_str(),
865 po::value<double>(
866 &block_lists[it->getMeshsetId()].matElastic.data.Poisson)
867 ->default_value(-2),
868 "Poisson ratio")(
869 (prefix + ".thermalexpansion").c_str(),
870 po::value<double>(
871 &block_lists[it->getMeshsetId()].matElastic.data.ThermalExpansion)
872 ->default_value(-1),
873 "Thermal expansion");
874
875 }
876
877 {
878
879
880
881
882
884 (prefix + ".Youngp").c_str(),
885 po::value<double>(
886 &block_lists[it->getMeshsetId()].matTransIso.data.Youngp)
887 ->default_value(-1),
888 "Youngp")(
889 (prefix + ".Youngz").c_str(),
890 po::value<double>(
891 &block_lists[it->getMeshsetId()].matTransIso.data.Youngz)
892 ->default_value(-1),
893 "Youngz")(
894 (prefix + ".Poissonp").c_str(),
895 po::value<double>(
896 &block_lists[it->getMeshsetId()].matTransIso.data.Poissonp)
897 ->default_value(0),
898 "Poissonp")(
899 (prefix + ".Poissonpz").c_str(),
900 po::value<double>(
901 &block_lists[it->getMeshsetId()].matTransIso.data.Poissonpz)
902 ->default_value(0),
903 "Poissonpz")(
904 (prefix + ".Shearzp").c_str(),
905 po::value<double>(
906 &block_lists[it->getMeshsetId()].matTransIso.data.Shearzp)
907 ->default_value(-1),
908 "Shearzp");
909
910 }
911
912 {
913
914
916 (prefix + ".conductivity").c_str(),
917 po::value<double>(
918 &block_lists[it->getMeshsetId()].matThermal.data.Conductivity)
919 ->default_value(-1),
920 "Conductivity")(
921 (prefix + ".capacity").c_str(),
922 po::value<double>(
923 &block_lists[it->getMeshsetId()].matThermal.data.HeatCapacity)
924 ->default_value(-1),
925 "Capacity");
926
927 }
928
929 {
930
931
932
933
935 (prefix + ".interface_alpha").c_str(),
936 po::value<double>(
937 &block_lists[it->getMeshsetId()].matInterf.data.alpha)
938 ->default_value(-1),
939 "alpha")((prefix + ".interface_beta").c_str(),
940 po::value<double>(
941 &block_lists[it->getMeshsetId()].matInterf.data.beta)
942 ->default_value(-1),
943 "beta")(
944 (prefix + ".interface_ft").c_str(),
945 po::value<double>(&block_lists[it->getMeshsetId()].matInterf.data.ft)
946 ->default_value(-1),
947 "ft")(
948 (prefix + ".interface_Gf").c_str(),
949 po::value<double>(&block_lists[it->getMeshsetId()].matInterf.data.Gf)
950 ->default_value(-1),
951 "Gf");
952
953 }
954
955
956 {
957
958
959
960
961
962
963
964
965
966
967
968
970 (prefix + ".disp_flag1").c_str(),
971 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag1)
972 ->default_value(0),
973 "flag1")(
974 (prefix + ".disp_flag2").c_str(),
975 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag2)
976 ->default_value(0),
977 "flag2")(
978 (prefix + ".disp_flag3").c_str(),
979 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag3)
980 ->default_value(0),
981 "flag3")(
982 (prefix + ".disp_flag4").c_str(),
983 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag4)
984 ->default_value(0),
985 "flag4")(
986 (prefix + ".disp_flag5").c_str(),
987 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag5)
988 ->default_value(0),
989 "flag5")(
990 (prefix + ".disp_flag6").c_str(),
991 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag6)
992 ->default_value(0),
993 "flag6")(
994 (prefix + ".disp_ux").c_str(),
995 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value1)
996 ->default_value(0),
997 "value1")(
998 (prefix + ".disp_uy").c_str(),
999 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value2)
1000 ->default_value(0),
1001 "value2")(
1002 (prefix + ".disp_uz").c_str(),
1003 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value3)
1004 ->default_value(0),
1005 "value3")(
1006 (prefix + ".disp_rx").c_str(),
1007 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value4)
1008 ->default_value(0),
1009 "value4")(
1010 (prefix + ".disp_ry").c_str(),
1011 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value5)
1012 ->default_value(0),
1013 "value5")(
1014 (prefix + ".disp_rz").c_str(),
1015 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value6)
1016 ->default_value(0),
1017 "value6");
1018 }
1019
1020 {
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1032 (prefix + ".force_magnitude").c_str(),
1033 po::value<double>(
1034 &block_lists[it->getMeshsetId()].forceBc.data.value1)
1035 ->default_value(0),
1036 "value1")((prefix + ".moment_magnitude").c_str(),
1037 po::value<double>(
1038 &block_lists[it->getMeshsetId()].forceBc.data.value2)
1039 ->default_value(0),
1040 "value2")(
1041 (prefix + ".force_fx").c_str(),
1042 po::value<double>(
1043 &block_lists[it->getMeshsetId()].forceBc.data.value3)
1044 ->default_value(0),
1045 "value3")((prefix + ".force_fy").c_str(),
1046 po::value<double>(
1047 &block_lists[it->getMeshsetId()].forceBc.data.value4)
1048 ->default_value(0),
1049 "value4")(
1050 (prefix + ".force_fz").c_str(),
1051 po::value<double>(
1052 &block_lists[it->getMeshsetId()].forceBc.data.value5)
1053 ->default_value(0),
1054 "value5")((prefix + ".moment_mx").c_str(),
1055 po::value<double>(
1056 &block_lists[it->getMeshsetId()].forceBc.data.value6)
1057 ->default_value(0),
1058 "value6")(
1059 (prefix + ".moment_my").c_str(),
1060 po::value<double>(
1061 &block_lists[it->getMeshsetId()].forceBc.data.value7)
1062 ->default_value(0),
1063 "value7")((prefix + ".moment_mz").c_str(),
1064 po::value<double>(
1065 &block_lists[it->getMeshsetId()].forceBc.data.value8)
1066 ->default_value(0),
1067 "value8");
1068 }
1069 {
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1086 (prefix + ".temperature_flag1").c_str(),
1087 po::value<char>(
1088 &block_lists[it->getMeshsetId()].temperatureBc.data.flag1)
1089 ->default_value(0),
1090 "flag1")(
1091 (prefix + ".temperature_t").c_str(),
1092 po::value<double>(
1093 &block_lists[it->getMeshsetId()].temperatureBc.data.value1)
1094 ->default_value(0),
1095 "value1");
1096
1097 }
1098
1099 {
1100
1101
1102
1103
1104
1106 (prefix + ".pressure_flag2").c_str(),
1107 po::value<char>(
1108 &block_lists[it->getMeshsetId()].pressureBc.data.flag2)
1109 ->default_value(0),
1110 "flag2")((prefix + ".pressure_magnitude").c_str(),
1111 po::value<double>(
1112 &block_lists[it->getMeshsetId()].pressureBc.data.value1)
1113 ->default_value(0),
1114 "value1");
1115 }
1116 {
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1128 (prefix + ".heatflux_flag1").c_str(),
1129 po::value<char>(
1130 &block_lists[it->getMeshsetId()].heatFluxBc.data.flag1)
1131 ->default_value(0),
1132 "flag1")((prefix + ".heatflux_magnitude").c_str(),
1133 po::value<double>(
1134 &block_lists[it->getMeshsetId()].heatFluxBc.data.value1)
1135 ->default_value(0),
1136 "value1");
1137 }
1138
1139 {
1141 (prefix + ".interface_type").c_str(),
1142 po::value<char>(&block_lists[it->getMeshsetId()].cfgBc.data.type)
1143 ->default_value(0),
1144 "type");
1145 }
1146 }
1147
1148 map<int, BlockData> block_set_attributes;
1150 block_set_attributes[it->getMeshsetId()].cubitMeshset = it->getMeshset();
1151 block_set_attributes[it->getMeshsetId()].iD = it->getMeshsetId();
1152 block_set_attributes[it->getMeshsetId()].bcType =
BLOCKSET;
1153 std::string block_name = it->getName();
1154 block_name.erase(
1155 std::remove_if(block_name.begin(), block_name.end(), ::isspace),
1156 block_name.end());
1157 block_set_attributes[it->getMeshsetId()].nAme = block_name;
1158
1159 if (block_name.compare("NoNameSet") != 0) {
1160 std::string prefix = "SET_ATTR_" + block_name;
1161
1162 add_block_attributes(prefix, block_set_attributes, it);
1163 }
1164 }
1165
1166 po::parsed_options parsed =
1168 store(parsed, vm);
1169 po::notify(vm);
1170
1171
1173
1175 unsigned jj = 0;
1178 block_lists[it->getMeshsetId()].addType) {
1179 bc_type = 1 << jj;
1180 }
1181 ++jj;
1182 }
1183 if (bc_type.none()) {
1184 block_lists[it->getMeshsetId()].bcType =
UNKNOWNSET;
1185
1186 continue;
1187 }
1188
1189 if (bc_type.to_ulong() ==
BLOCKSET)
1190 block_lists[it->getMeshsetId()].bcType =
BLOCKSET;
1191 else if (bc_type.to_ulong() ==
NODESET)
1192 block_lists[it->getMeshsetId()].bcType =
NODESET;
1193 else if (bc_type.to_ulong() ==
SIDESET)
1194 block_lists[it->getMeshsetId()].bcType =
SIDESET;
1195 else {
1197 "Not yet implemented type %s\n",
1198 block_lists[it->getMeshsetId()].addType.c_str());
1199 }
1200 if (block_lists[it->getMeshsetId()].iD == -1) {
1202 "Unset iD number %d\n", block_lists[it->getMeshsetId()].iD);
1203 }
1204 }
1205
1206 std::vector<std::string> additional_parameters;
1207 additional_parameters =
1208 collect_unrecognized(parsed.options, po::include_positional);
1209 for (std::vector<std::string>::iterator vit = additional_parameters.begin();
1210 vit != additional_parameters.end(); vit++) {
1211 MOFEM_LOG_C(
"MeshsetMngSelf", Sev::warning,
"Unrecognized option %s",
1212 vit->c_str());
1213 }
1214 for (map<int, BlockData>::iterator mit = block_lists.begin();
1215 mit != block_lists.end(); mit++) {
1216 CubitMeshSet_multiIndex::iterator cubit_meshset_it =
1220 "Data inconsistency\n");
1221 }
1222 switch (mit->second.bcType) {
1224 break;
1226 if ((
CubitBCType(mit->second.bcType) & cubit_meshset_it->getBcType())
1227 .any() &&
1228 mit->second.iD == cubit_meshset_it->getMeshsetId()) {
1229
1230 } else {
1234 &meshset, 1);
1235 }
1236
1238
1239
1240 if (mit->second.matElastic.data.Young != -1) {
1242 mit->second.matElastic);
1243 }
1244 if (mit->second.matTransIso.data.Youngp != -1) {
1246 mit->second.matTransIso);
1247 }
1248 if (mit->second.matThermal.data.Conductivity != -1) {
1250 mit->second.matThermal);
1251 }
1252 if (mit->second.matInterf.data.ft != -1) {
1254 mit->second.matInterf);
1255 }
1256 } break;
1258 if ((
CubitBCType(mit->second.bcType) & cubit_meshset_it->getBcType())
1259 .any() &&
1260 mit->second.iD == cubit_meshset_it->getMeshsetId()) {
1261
1262 } else {
1266 &meshset, 1);
1267 }
1268
1269 if (mit->second.dispBc.data.flag1 || mit->second.dispBc.data.flag2 ||
1270 mit->second.dispBc.data.flag3 || mit->second.dispBc.data.flag4 ||
1271 mit->second.dispBc.data.flag5 || mit->second.dispBc.data.flag6) {
1272 if (mit->second.dispBc.data.flag1 == '0')
1273 mit->second.dispBc.data.flag1 = 0;
1274 if (mit->second.dispBc.data.flag1 == 'N')
1275 mit->second.dispBc.data.flag1 = 0;
1276 if (mit->second.dispBc.data.flag1)
1277 mit->second.dispBc.data.flag1 = 1;
1278 if (mit->second.dispBc.data.flag2 == '0')
1279 mit->second.dispBc.data.flag2 = 0;
1280 if (mit->second.dispBc.data.flag2 == 'N')
1281 mit->second.dispBc.data.flag2 = 0;
1282 if (mit->second.dispBc.data.flag2)
1283 mit->second.dispBc.data.flag2 = 1;
1284 if (mit->second.dispBc.data.flag3 == '0')
1285 mit->second.dispBc.data.flag3 = 0;
1286 if (mit->second.dispBc.data.flag3 == 'N')
1287 mit->second.dispBc.data.flag3 = 0;
1288 if (mit->second.dispBc.data.flag3)
1289 mit->second.dispBc.data.flag3 = 1;
1290 if (mit->second.dispBc.data.flag4 == '0')
1291 mit->second.dispBc.data.flag4 = 0;
1292 if (mit->second.dispBc.data.flag4 == 'N')
1293 mit->second.dispBc.data.flag4 = 0;
1294 if (mit->second.dispBc.data.flag4)
1295 mit->second.dispBc.data.flag4 = 1;
1296 if (mit->second.dispBc.data.flag5 == '0')
1297 mit->second.dispBc.data.flag5 = 0;
1298 if (mit->second.dispBc.data.flag5 == 'N')
1299 mit->second.dispBc.data.flag5 = 0;
1300 if (mit->second.dispBc.data.flag5)
1301 mit->second.dispBc.data.flag5 = 1;
1302 if (mit->second.dispBc.data.flag6 == '0')
1303 mit->second.dispBc.data.flag6 = 0;
1304 if (mit->second.dispBc.data.flag6 == 'N')
1305 mit->second.dispBc.data.flag6 = 0;
1306 if (mit->second.dispBc.data.flag6)
1307 mit->second.dispBc.data.flag6 = 1;
1309 mit->second.dispBc);
1310 }
1311 if (mit->second.forceBc.data.value1 != 0 ||
1312 mit->second.forceBc.data.value2 != 0) {
1314 mit->second.forceBc);
1315 }
1316
1317 if (mit->second.temperatureBc.data.flag1) {
1318 if (mit->second.temperatureBc.data.flag1 == '0')
1319 mit->second.temperatureBc.data.flag1 = 0;
1320 if (mit->second.temperatureBc.data.flag1 == 'N')
1321 mit->second.temperatureBc.data.flag1 = 0;
1322 if (mit->second.temperatureBc.data.flag1)
1323 mit->second.temperatureBc.data.flag1 = 1;
1325 mit->second.temperatureBc);
1326 }
1327 } break;
1329 if ((
CubitBCType(mit->second.bcType) & cubit_meshset_it->getBcType())
1330 .any() &&
1331 mit->second.iD == cubit_meshset_it->getMeshsetId()) {
1332
1333 } else {
1337 &meshset, 1);
1338 }
1339
1340 if (mit->second.pressureBc.data.value1 != 0) {
1341 if (mit->second.pressureBc.data.flag2 == '0')
1342 mit->second.pressureBc.data.flag2 = 0;
1343 if (mit->second.pressureBc.data.flag2 == 'N')
1344 mit->second.pressureBc.data.flag2 = 0;
1345 if (mit->second.pressureBc.data.flag2)
1346 mit->second.pressureBc.data.flag2 = 1;
1348 mit->second.pressureBc);
1349 }
1350
1351 if (mit->second.heatFluxBc.data.value1 != 0) {
1352 if (mit->second.heatFluxBc.data.flag1 == '0')
1353 mit->second.heatFluxBc.data.flag1 = 0;
1354 if (mit->second.heatFluxBc.data.flag1 == 'N')
1355 mit->second.heatFluxBc.data.flag1 = 0;
1356 if (mit->second.heatFluxBc.data.flag1)
1357 mit->second.heatFluxBc.data.flag1 = 1;
1359 mit->second.heatFluxBc);
1360 }
1361
1362 if (mit->second.cfgBc.data.type != 0) {
1363 CHKERR setBcData(mit->second.bcType, mit->second.iD, mit->second.cfgBc);
1364 }
1365 } break;
1366 default:
1368 "Not yet implemented type\n");
1369 }
1370 }
1371
1372 for (auto set_attr : block_set_attributes) {
1373
1374 if (set_attr.second.numberOfAttributes > 0) {
1375 MOFEM_LOG(
"MeshsetMngSelf", Sev::verbose)
1376 << "Set attributes to blockset " << set_attr.second.nAme;
1377 set_attr.second.aTtr.resize(set_attr.second.numberOfAttributes);
1379 set_attr.second.aTtr);
1380 }
1381 }
1382
1384}
#define MOFEM_LOG_C(channel, severity, format,...)
static const char *const CubitBCNames[]
Names of types of sets and boundary conditions.
MoFEMErrorCode addMeshset(const CubitBCType cubit_bc_type, const int ms_id, const std::string name="")
add cubit meshset
#define _IT_CUBITMESHSETS_BY_SET_TYPE_FOR_LOOP_(MESHSET_MANAGER, CUBITBCTYPE, IT)
Iterator that loops over a specific Cubit MeshSet having a particular BC meshset in a moFEM field.
MoFEMErrorCode setBcData(const CubitBCType cubit_bc_type, const int ms_id, const GenericCubitBcData &data)
set boundary data structure to meshset
MoFEMErrorCode setAtributes(const CubitBCType cubit_bc_type, const int ms_id, const std::vector< double > &attributes, const std::string name="")
set attributes to cubit meshset
MoFEMErrorCode addEntitiesToMeshset(const CubitBCType cubit_bc_type, const int ms_id, const Range &ents)
add entities to cubit meshset
MoFEMErrorCode setAtributesByDataStructure(const CubitBCType cubit_bc_type, const int ms_id, const GenericAttributeData &data, const std::string name="")
set (material) data structure to cubit meshset