803 bool clean_file_options) {
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());
814 auto add_block_attributes = [&](
auto prefix,
auto &block_lists,
auto &it) {
817 (prefix +
".number_of_attributes").c_str(),
818 po::value<int>(&block_lists[it->getMeshsetId()].numberOfAttributes)
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");
832 map<int, BlockData> block_lists;
834 const auto id = it->getMeshsetId();
835 block_lists[id].cubitMeshset = it->getMeshset();
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"),
843 (prefix +
".id").c_str(),
844 po::value<int>(&block_lists[it->getMeshsetId()].iD)->default_value(-1),
846 (prefix +
".name").c_str(),
847 po::value<string>(&block_lists[it->getMeshsetId()].nAme)
849 "Name of the meshset");
852 add_block_attributes(prefix, block_lists, it);
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;
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;
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;
877 "Thermal expansion");
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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();
1212 std::remove_if(block_name.begin(), block_name.end(), ::isspace),
1214 block_set_attributes[it->getMeshsetId()].nAme = block_name;
1216 if (block_name.compare(
"NoNameSet") != 0) {
1217 std::string prefix =
"SET_ATTR_" + block_name;
1219 add_block_attributes(prefix, block_set_attributes, it);
1223 po::parsed_options parsed =
1235 block_lists[it->getMeshsetId()].addType) {
1240 if (bc_type.none()) {
1241 block_lists[it->getMeshsetId()].bcType =
UNKNOWNSET;
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;
1254 "Not yet implemented type %s\n",
1255 block_lists[it->getMeshsetId()].addType.c_str());
1257 if (block_lists[it->getMeshsetId()].iD == -1) {
1259 "Unset iD number %d\n", block_lists[it->getMeshsetId()].iD);
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",
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");
1279 switch (mit->second.bcType) {
1283 if ((
CubitBCType(mit->second.bcType) & cubit_meshset_it->getBcType())
1285 mit->second.iD == cubit_meshset_it->getMeshsetId()) {
1297 if (mit->second.matElastic.data.Young != -1) {
1299 mit->second.matElastic);
1301 if (mit->second.matTransIso.data.Youngp != -1) {
1303 mit->second.matTransIso);
1305 if (mit->second.matThermal.data.Conductivity != -1) {
1307 mit->second.matThermal);
1309 if (mit->second.matInterf.data.ft != -1) {
1311 mit->second.matInterf);
1315 if ((
CubitBCType(mit->second.bcType) & cubit_meshset_it->getBcType())
1317 mit->second.iD == cubit_meshset_it->getMeshsetId()) {
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);
1368 if (mit->second.forceBc.data.value1 != 0 ||
1369 mit->second.forceBc.data.value2 != 0) {
1371 mit->second.forceBc);
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);
1386 if ((
CubitBCType(mit->second.bcType) & cubit_meshset_it->getBcType())
1388 mit->second.iD == cubit_meshset_it->getMeshsetId()) {
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);
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);
1419 if (mit->second.cfgBc.data.type != 0) {
1420 CHKERR setBcData(mit->second.bcType, mit->second.iD, mit->second.cfgBc);
1425 "Not yet implemented type\n");
1429 for (
auto set_attr : block_set_attributes) {
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);