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 const auto id = it->getMeshsetId();
835 block_lists[id].cubitMeshset = it->getMeshset();
836 std::string prefix =
837 "block_" + boost::lexical_cast<std::string>(id);
839 (prefix + ".add").c_str(),
840 po::value<string>(&block_lists[it->getMeshsetId()].addType)
841 ->default_value("UNKNOWNSET"),
842 "Add block set")(
843 (prefix + ".id").c_str(),
844 po::value<int>(&block_lists[it->getMeshsetId()].iD)->default_value(-1),
845 "Id of meshset")(
846 (prefix + ".name").c_str(),
847 po::value<string>(&block_lists[it->getMeshsetId()].nAme)
848 ->default_value(""),
849 "Name of the meshset");
850
851
852 add_block_attributes(prefix, block_lists, it);
853
854
855 {
856
857
858
860 (prefix + ".young").c_str(),
861 po::value<double>()->default_value(-1)->notifier(
862 [&block_lists,
id](
double v) {
863 block_lists[id].matElastic.data.Young =
v;
864 }),
865 "Young modulus")(
866 (prefix + ".poisson").c_str(),
867 po::value<double>()->default_value(-2)->notifier(
868 [&block_lists,
id](
double v) {
869 block_lists[id].matElastic.data.Poisson =
v;
870 }),
871 "Poisson ratio")(
872 (prefix + ".thermalexpansion").c_str(),
873 po::value<double>()->default_value(-1)->notifier(
874 [&block_lists,
id](
double v) {
875 block_lists[id].matElastic.data.ThermalExpansion =
v;
876 }),
877 "Thermal expansion");
878
879 }
880
881 {
882
883
884
885
886
888 (prefix + ".Youngp").c_str(),
889 po::value<double>()->default_value(-1)->notifier(
890 [&block_lists,
id](
double v) {
891 block_lists[id].matTransIso.data.Youngp =
v;
892 }),
893 "Youngp")(
894 (prefix + ".Youngz").c_str(),
895 po::value<double>()->default_value(-1)->notifier(
896 [&block_lists,
id](
double v) {
897 block_lists[id].matTransIso.data.Youngz =
v;
898 }),
899 "Youngz")(
900 (prefix + ".Poissonp").c_str(),
901 po::value<double>()->default_value(0)->notifier(
902 [&block_lists,
id](
double v) {
903 block_lists[id].matTransIso.data.Poissonp =
v;
904 }),
905 "Poissonp")(
906 (prefix + ".Poissonpz").c_str(),
907 po::value<double>()->default_value(0)->notifier(
908 [&block_lists,
id](
double v) {
909 block_lists[id].matTransIso.data.Poissonpz =
v;
910 }),
911 "Poissonpz")(
912 (prefix + ".Shearzp").c_str(),
913 po::value<double>()->default_value(-1)->notifier(
914 [&block_lists,
id](
double v) {
915 block_lists[id].matTransIso.data.Shearzp =
v;
916 }),
917 "Shearzp");
918
919 }
920
921 {
922
923
925 (prefix + ".conductivity").c_str(),
926 po::value<double>()->default_value(-1)->notifier(
927 [&block_lists,
id](
double v) {
928 block_lists[id].matThermal.data.Conductivity =
v;
929 }),
930 "Conductivity")(
931 (prefix + ".capacity").c_str(),
932 po::value<double>()->default_value(-1)->notifier(
933 [&block_lists,
id](
double v) {
934 block_lists[id].matThermal.data.HeatCapacity =
v;
935 }),
936 "Capacity");
937
938 }
939
940 {
941
942
943
944
946 (prefix + ".interface_alpha").c_str(),
947 po::value<double>()->default_value(-1)->notifier(
948 [&block_lists,
id](
double v) {
949 block_lists[id].matInterf.data.alpha =
v;
950 }),
951 "alpha")((prefix + ".interface_beta").c_str(),
952 po::value<double>()->default_value(-1)->notifier(
953 [&block_lists,
id](
double v) {
954 block_lists[id].matInterf.data.beta =
v;
955 }),
956 "beta")(
957 (prefix + ".interface_ft").c_str(),
958 po::value<double>()->default_value(-1)->notifier(
959 [&block_lists,
id](
double v) {
960 block_lists[id].matInterf.data.ft =
v;
961 }),
962 "ft")(
963 (prefix + ".interface_Gf").c_str(),
964 po::value<double>()->default_value(-1)->notifier(
965 [&block_lists,
id](
double v) {
966 block_lists[id].matInterf.data.Gf =
v;
967 }),
968 "Gf");
969
970 }
971
972
973 {
974
975
976
977
978
979
980
981
982
983
984
985
987 (prefix + ".disp_flag1").c_str(),
988 po::value<char>()->default_value(0)->notifier(
989 [&block_lists,
id](
char v) {
990 block_lists[id].dispBc.data.flag1 =
v;
991 }),
992 "flag1")(
993 (prefix + ".disp_flag2").c_str(),
994 po::value<char>()->default_value(0)->notifier(
995 [&block_lists,
id](
char v) {
996 block_lists[id].dispBc.data.flag2 =
v;
997 }),
998 "flag2")(
999 (prefix + ".disp_flag3").c_str(),
1000 po::value<char>()->default_value(0)->notifier(
1001 [&block_lists,
id](
char v) {
1002 block_lists[id].dispBc.data.flag3 =
v;
1003 }),
1004 "flag3")(
1005 (prefix + ".disp_flag4").c_str(),
1006 po::value<char>()->default_value(0)->notifier(
1007 [&block_lists,
id](
char v) {
1008 block_lists[id].dispBc.data.flag4 =
v;
1009 }),
1010 "flag4")(
1011 (prefix + ".disp_flag5").c_str(),
1012 po::value<char>()->default_value(0)->notifier(
1013 [&block_lists,
id](
char v) {
1014 block_lists[id].dispBc.data.flag5 =
v;
1015 }),
1016 "flag5")(
1017 (prefix + ".disp_flag6").c_str(),
1018 po::value<char>()->default_value(0)->notifier(
1019 [&block_lists,
id](
char v) {
1020 block_lists[id].dispBc.data.flag6 =
v;
1021 }),
1022 "flag6")(
1023 (prefix + ".disp_ux").c_str(),
1024 po::value<double>()->default_value(0)->notifier(
1025 [&block_lists,
id](
double v) {
1026 block_lists[id].dispBc.data.value1 =
v;
1027 }),
1028 "value1")(
1029 (prefix + ".disp_uy").c_str(),
1030 po::value<double>()->default_value(0)->notifier(
1031 [&block_lists,
id](
double v) {
1032 block_lists[id].dispBc.data.value2 =
v;
1033 }),
1034 "value2")(
1035 (prefix + ".disp_uz").c_str(),
1036 po::value<double>()->default_value(0)->notifier(
1037 [&block_lists,
id](
double v) {
1038 block_lists[id].dispBc.data.value3 =
v;
1039 }),
1040 "value3")(
1041 (prefix + ".disp_rx").c_str(),
1042 po::value<double>()->default_value(0)->notifier(
1043 [&block_lists,
id](
double v) {
1044 block_lists[id].dispBc.data.value4 =
v;
1045 }),
1046 "value4")(
1047 (prefix + ".disp_ry").c_str(),
1048 po::value<double>()->default_value(0)->notifier(
1049 [&block_lists,
id](
double v) {
1050 block_lists[id].dispBc.data.value5 =
v;
1051 }),
1052 "value5")(
1053 (prefix + ".disp_rz").c_str(),
1054 po::value<double>()->default_value(0)->notifier(
1055 [&block_lists,
id](
double v) {
1056 block_lists[id].dispBc.data.value6 =
v;
1057 }),
1058 "value6");
1059 }
1060
1061 {
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1073 (prefix + ".force_magnitude").c_str(),
1074 po::value<double>()->default_value(0)->notifier(
1075 [&block_lists,
id](
double v) {
1076 block_lists[id].forceBc.data.value1 =
v;
1077 }),
1078 "value1")((prefix + ".moment_magnitude").c_str(),
1079 po::value<double>()->default_value(0)->notifier(
1080 [&block_lists,
id](
double v) {
1081 block_lists[id].forceBc.data.value2 =
v;
1082 }),
1083 "value2")(
1084 (prefix + ".force_fx").c_str(),
1085 po::value<double>()->default_value(0)->notifier(
1086 [&block_lists,
id](
double v) {
1087 block_lists[id].forceBc.data.value3 =
v;
1088 }),
1089 "value3")((prefix + ".force_fy").c_str(),
1090 po::value<double>()->default_value(0)->notifier(
1091 [&block_lists,
id](
double v) {
1092 block_lists[id].forceBc.data.value4 =
v;
1093 }),
1094 "value4")(
1095 (prefix + ".force_fz").c_str(),
1096 po::value<double>()->default_value(0)->notifier(
1097 [&block_lists,
id](
double v) {
1098 block_lists[id].forceBc.data.value5 =
v;
1099 }),
1100 "value5")((prefix + ".moment_mx").c_str(),
1101 po::value<double>()->default_value(0)->notifier(
1102 [&block_lists,
id](
double v) {
1103 block_lists[id].forceBc.data.value6 =
v;
1104 }),
1105 "value6")(
1106 (prefix + ".moment_my").c_str(),
1107 po::value<double>()->default_value(0)->notifier(
1108 [&block_lists,
id](
double v) {
1109 block_lists[id].forceBc.data.value7 =
v;
1110 }),
1111 "value7")((prefix + ".moment_mz").c_str(),
1112 po::value<double>()->default_value(0)->notifier(
1113 [&block_lists,
id](
double v) {
1114 block_lists[id].forceBc.data.value8 =
v;
1115 }),
1116 "value8");
1117 }
1118 {
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1135 (prefix + ".temperature_flag1").c_str(),
1136 po::value<char>()->default_value(0)->notifier(
1137 [&block_lists,
id](
char v) {
1138 block_lists[id].temperatureBc.data.flag1 =
v;
1139 }),
1140 "flag1")(
1141 (prefix + ".temperature_t").c_str(),
1142 po::value<double>()->default_value(0)->notifier(
1143 [&block_lists,
id](
double v) {
1144 block_lists[id].temperatureBc.data.value1 =
v;
1145 }),
1146 "value1");
1147
1148 }
1149
1150 {
1151
1152
1153
1154
1155
1157 (prefix + ".pressure_flag2").c_str(),
1158 po::value<char>()->default_value(0)->notifier(
1159 [&block_lists,
id](
char v) {
1160 block_lists[id].pressureBc.data.flag2 =
v;
1161 }),
1162 "flag2")((prefix + ".pressure_magnitude").c_str(),
1163 po::value<double>()->default_value(0)->notifier(
1164 [&block_lists,
id](
double v) {
1165 block_lists[id].pressureBc.data.value1 =
v;
1166 }),
1167 "value1");
1168 }
1169 {
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1181 (prefix + ".heatflux_flag1").c_str(),
1182 po::value<char>()->default_value(0)->notifier(
1183 [&block_lists,
id](
char v) {
1184 block_lists[id].heatFluxBc.data.flag1 =
v;
1185 }),
1186 "flag1")((prefix + ".heatflux_magnitude").c_str(),
1187 po::value<double>()->default_value(0)->notifier(
1188 [&block_lists,
id](
double v) {
1189 block_lists[id].heatFluxBc.data.value1 =
v;
1190 }),
1191 "value1");
1192 }
1193
1194 {
1196 (prefix + ".interface_type").c_str(),
1197 po::value<char>()->default_value(0)->notifier(
1198 [&block_lists,
id](
char v) {
1199 block_lists[id].cfgBc.data.type =
v;
1200 }),
1201 "type");
1202 }
1203 }
1204
1205 map<int, BlockData> block_set_attributes;
1207 block_set_attributes[it->getMeshsetId()].cubitMeshset = it->getMeshset();
1208 block_set_attributes[it->getMeshsetId()].iD = it->getMeshsetId();
1209 block_set_attributes[it->getMeshsetId()].bcType =
BLOCKSET;
1210 std::string block_name = it->getName();
1211 block_name.erase(
1212 std::remove_if(block_name.begin(), block_name.end(), ::isspace),
1213 block_name.end());
1214 block_set_attributes[it->getMeshsetId()].nAme = block_name;
1215
1216 if (block_name.compare("NoNameSet") != 0) {
1217 std::string prefix = "SET_ATTR_" + block_name;
1218
1219 add_block_attributes(prefix, block_set_attributes, it);
1220 }
1221 }
1222
1223 po::parsed_options parsed =
1225 store(parsed, vm);
1226 po::notify(vm);
1227
1228
1230
1232 unsigned jj = 0;
1235 block_lists[it->getMeshsetId()].addType) {
1236 bc_type = 1 << jj;
1237 }
1238 ++jj;
1239 }
1240 if (bc_type.none()) {
1241 block_lists[it->getMeshsetId()].bcType =
UNKNOWNSET;
1242
1243 continue;
1244 }
1245
1246 if (bc_type.to_ulong() ==
BLOCKSET)
1247 block_lists[it->getMeshsetId()].bcType =
BLOCKSET;
1248 else if (bc_type.to_ulong() ==
NODESET)
1249 block_lists[it->getMeshsetId()].bcType =
NODESET;
1250 else if (bc_type.to_ulong() ==
SIDESET)
1251 block_lists[it->getMeshsetId()].bcType =
SIDESET;
1252 else {
1254 "Not yet implemented type %s\n",
1255 block_lists[it->getMeshsetId()].addType.c_str());
1256 }
1257 if (block_lists[it->getMeshsetId()].iD == -1) {
1259 "Unset iD number %d\n", block_lists[it->getMeshsetId()].iD);
1260 }
1261 }
1262
1263 std::vector<std::string> additional_parameters;
1264 additional_parameters =
1265 collect_unrecognized(parsed.options, po::include_positional);
1266 for (std::vector<std::string>::iterator vit = additional_parameters.begin();
1267 vit != additional_parameters.end(); vit++) {
1268 MOFEM_LOG_C(
"MeshsetMngSelf", Sev::warning,
"Unrecognized option %s",
1269 vit->c_str());
1270 }
1271 for (map<int, BlockData>::iterator mit = block_lists.begin();
1272 mit != block_lists.end(); mit++) {
1273 CubitMeshSet_multiIndex::iterator cubit_meshset_it =
1277 "Data inconsistency\n");
1278 }
1279 switch (mit->second.bcType) {
1281 break;
1283 if ((
CubitBCType(mit->second.bcType) & cubit_meshset_it->getBcType())
1284 .any() &&
1285 mit->second.iD == cubit_meshset_it->getMeshsetId()) {
1286
1287 } else {
1291 &meshset, 1);
1292 }
1293
1295
1296
1297 if (mit->second.matElastic.data.Young != -1) {
1299 mit->second.matElastic);
1300 }
1301 if (mit->second.matTransIso.data.Youngp != -1) {
1303 mit->second.matTransIso);
1304 }
1305 if (mit->second.matThermal.data.Conductivity != -1) {
1307 mit->second.matThermal);
1308 }
1309 if (mit->second.matInterf.data.ft != -1) {
1311 mit->second.matInterf);
1312 }
1313 } break;
1315 if ((
CubitBCType(mit->second.bcType) & cubit_meshset_it->getBcType())
1316 .any() &&
1317 mit->second.iD == cubit_meshset_it->getMeshsetId()) {
1318
1319 } else {
1323 &meshset, 1);
1324 }
1325
1326 if (mit->second.dispBc.data.flag1 || mit->second.dispBc.data.flag2 ||
1327 mit->second.dispBc.data.flag3 || mit->second.dispBc.data.flag4 ||
1328 mit->second.dispBc.data.flag5 || mit->second.dispBc.data.flag6) {
1329 if (mit->second.dispBc.data.flag1 == '0')
1330 mit->second.dispBc.data.flag1 = 0;
1331 if (mit->second.dispBc.data.flag1 == 'N')
1332 mit->second.dispBc.data.flag1 = 0;
1333 if (mit->second.dispBc.data.flag1)
1334 mit->second.dispBc.data.flag1 = 1;
1335 if (mit->second.dispBc.data.flag2 == '0')
1336 mit->second.dispBc.data.flag2 = 0;
1337 if (mit->second.dispBc.data.flag2 == 'N')
1338 mit->second.dispBc.data.flag2 = 0;
1339 if (mit->second.dispBc.data.flag2)
1340 mit->second.dispBc.data.flag2 = 1;
1341 if (mit->second.dispBc.data.flag3 == '0')
1342 mit->second.dispBc.data.flag3 = 0;
1343 if (mit->second.dispBc.data.flag3 == 'N')
1344 mit->second.dispBc.data.flag3 = 0;
1345 if (mit->second.dispBc.data.flag3)
1346 mit->second.dispBc.data.flag3 = 1;
1347 if (mit->second.dispBc.data.flag4 == '0')
1348 mit->second.dispBc.data.flag4 = 0;
1349 if (mit->second.dispBc.data.flag4 == 'N')
1350 mit->second.dispBc.data.flag4 = 0;
1351 if (mit->second.dispBc.data.flag4)
1352 mit->second.dispBc.data.flag4 = 1;
1353 if (mit->second.dispBc.data.flag5 == '0')
1354 mit->second.dispBc.data.flag5 = 0;
1355 if (mit->second.dispBc.data.flag5 == 'N')
1356 mit->second.dispBc.data.flag5 = 0;
1357 if (mit->second.dispBc.data.flag5)
1358 mit->second.dispBc.data.flag5 = 1;
1359 if (mit->second.dispBc.data.flag6 == '0')
1360 mit->second.dispBc.data.flag6 = 0;
1361 if (mit->second.dispBc.data.flag6 == 'N')
1362 mit->second.dispBc.data.flag6 = 0;
1363 if (mit->second.dispBc.data.flag6)
1364 mit->second.dispBc.data.flag6 = 1;
1366 mit->second.dispBc);
1367 }
1368 if (mit->second.forceBc.data.value1 != 0 ||
1369 mit->second.forceBc.data.value2 != 0) {
1371 mit->second.forceBc);
1372 }
1373
1374 if (mit->second.temperatureBc.data.flag1) {
1375 if (mit->second.temperatureBc.data.flag1 == '0')
1376 mit->second.temperatureBc.data.flag1 = 0;
1377 if (mit->second.temperatureBc.data.flag1 == 'N')
1378 mit->second.temperatureBc.data.flag1 = 0;
1379 if (mit->second.temperatureBc.data.flag1)
1380 mit->second.temperatureBc.data.flag1 = 1;
1382 mit->second.temperatureBc);
1383 }
1384 } break;
1386 if ((
CubitBCType(mit->second.bcType) & cubit_meshset_it->getBcType())
1387 .any() &&
1388 mit->second.iD == cubit_meshset_it->getMeshsetId()) {
1389
1390 } else {
1394 &meshset, 1);
1395 }
1396
1397 if (mit->second.pressureBc.data.value1 != 0) {
1398 if (mit->second.pressureBc.data.flag2 == '0')
1399 mit->second.pressureBc.data.flag2 = 0;
1400 if (mit->second.pressureBc.data.flag2 == 'N')
1401 mit->second.pressureBc.data.flag2 = 0;
1402 if (mit->second.pressureBc.data.flag2)
1403 mit->second.pressureBc.data.flag2 = 1;
1405 mit->second.pressureBc);
1406 }
1407
1408 if (mit->second.heatFluxBc.data.value1 != 0) {
1409 if (mit->second.heatFluxBc.data.flag1 == '0')
1410 mit->second.heatFluxBc.data.flag1 = 0;
1411 if (mit->second.heatFluxBc.data.flag1 == 'N')
1412 mit->second.heatFluxBc.data.flag1 = 0;
1413 if (mit->second.heatFluxBc.data.flag1)
1414 mit->second.heatFluxBc.data.flag1 = 1;
1416 mit->second.heatFluxBc);
1417 }
1418
1419 if (mit->second.cfgBc.data.type != 0) {
1420 CHKERR setBcData(mit->second.bcType, mit->second.iD, mit->second.cfgBc);
1421 }
1422 } break;
1423 default:
1425 "Not yet implemented type\n");
1426 }
1427 }
1428
1429 for (auto set_attr : block_set_attributes) {
1430
1431 if (set_attr.second.numberOfAttributes > 0) {
1432 MOFEM_LOG(
"MeshsetMngSelf", Sev::verbose)
1433 << "Set attributes to blockset " << set_attr.second.nAme;
1434 set_attr.second.aTtr.resize(set_attr.second.numberOfAttributes);
1436 set_attr.second.aTtr);
1437 }
1438 }
1439
1441}
#define MOFEM_LOG_C(channel, severity, format,...)
@ MOFEM_DATA_INCONSISTENCY
static const char *const CubitBCNames[]
Names of types of sets and boundary conditions.
MoFEMErrorCode setBcData(const CubitBCType cubit_bc_type, const int ms_id, const GenericCubitBcData &data)
Set boundary condition data for meshset.
MoFEMErrorCode addEntitiesToMeshset(const CubitBCType cubit_bc_type, const int ms_id, const Range &ents)
Add entities to CUBIT meshset.
MoFEMErrorCode addMeshset(const CubitBCType cubit_bc_type, const int ms_id, const std::string name="")
Add CUBIT meshset to manager.
#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.
const double v
phase velocity of light in medium (cm/ns)
std::bitset< 32 > CubitBCType