787 bool clean_file_options) {
790 std::ifstream ini_file(file_name.c_str(), std::ifstream::in);
791 po::variables_map vm;
792 if (clean_file_options) {
794 boost::shared_ptr<boost::program_options::options_description>(
795 new po::options_description());
798 auto add_block_attributes = [&](
auto prefix,
auto &block_lists,
auto &it) {
801 (prefix +
".number_of_attributes").c_str(),
802 po::value<int>(&block_lists[it->getMeshsetId()].numberOfAttributes)
804 "Number of blockset attribute");
805 for (
int ii = 1; ii <= 10; ii++) {
806 std::string surfix =
".user" + boost::lexical_cast<std::string>(ii);
808 (prefix + surfix).c_str(),
809 po::value<double>(&block_lists[it->getMeshsetId()].aTtr[ii - 1])
810 ->default_value(0.0),
811 "Add block attribute");
816 map<int, BlockData> block_lists;
818 block_lists[it->getMeshsetId()].cubitMeshset = it->getMeshset();
820 "block_" + boost::lexical_cast<std::string>(it->getMeshsetId());
822 (prefix +
".add").c_str(),
823 po::value<string>(&block_lists[it->getMeshsetId()].addType)
824 ->default_value(
"UNKNOWNSET"),
826 (prefix +
".id").c_str(),
827 po::value<int>(&block_lists[it->getMeshsetId()].iD)->default_value(-1),
829 (prefix +
".name").c_str(),
830 po::value<string>(&block_lists[it->getMeshsetId()].nAme)
832 "Name of the meshset");
835 add_block_attributes(prefix, block_lists, it);
843 (prefix +
".young").c_str(),
845 &block_lists[it->getMeshsetId()].matElastic.data.Young)
848 (prefix +
".poisson").c_str(),
850 &block_lists[it->getMeshsetId()].matElastic.data.Poisson)
853 (prefix +
".thermalexpansion").c_str(),
855 &block_lists[it->getMeshsetId()].matElastic.data.ThermalExpansion)
857 "Thermal expansion");
868 (prefix +
".Youngp").c_str(),
870 &block_lists[it->getMeshsetId()].matTransIso.data.Youngp)
873 (prefix +
".Youngz").c_str(),
875 &block_lists[it->getMeshsetId()].matTransIso.data.Youngz)
878 (prefix +
".Poissonp").c_str(),
880 &block_lists[it->getMeshsetId()].matTransIso.data.Poissonp)
883 (prefix +
".Poissonpz").c_str(),
885 &block_lists[it->getMeshsetId()].matTransIso.data.Poissonpz)
888 (prefix +
".Shearzp").c_str(),
890 &block_lists[it->getMeshsetId()].matTransIso.data.Shearzp)
900 (prefix +
".conductivity").c_str(),
902 &block_lists[it->getMeshsetId()].matThermal.data.Conductivity)
905 (prefix +
".capacity").c_str(),
907 &block_lists[it->getMeshsetId()].matThermal.data.HeatCapacity)
919 (prefix +
".interface_alpha").c_str(),
921 &block_lists[it->getMeshsetId()].matInterf.data.alpha)
923 "alpha")((prefix +
".interface_beta").c_str(),
925 &block_lists[it->getMeshsetId()].matInterf.data.beta)
928 (prefix +
".interface_ft").c_str(),
929 po::value<double>(&block_lists[it->getMeshsetId()].matInterf.data.ft)
932 (prefix +
".interface_Gf").c_str(),
933 po::value<double>(&block_lists[it->getMeshsetId()].matInterf.data.Gf)
954 (prefix +
".disp_flag1").c_str(),
955 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag1)
958 (prefix +
".disp_flag2").c_str(),
959 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag2)
962 (prefix +
".disp_flag3").c_str(),
963 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag3)
966 (prefix +
".disp_flag4").c_str(),
967 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag4)
970 (prefix +
".disp_flag5").c_str(),
971 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag5)
974 (prefix +
".disp_flag6").c_str(),
975 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag6)
978 (prefix +
".disp_ux").c_str(),
979 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value1)
982 (prefix +
".disp_uy").c_str(),
983 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value2)
986 (prefix +
".disp_uz").c_str(),
987 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value3)
990 (prefix +
".disp_rx").c_str(),
991 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value4)
994 (prefix +
".disp_ry").c_str(),
995 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value5)
998 (prefix +
".disp_rz").c_str(),
999 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value6)
1016 (prefix +
".force_magnitude").c_str(),
1018 &block_lists[it->getMeshsetId()].forceBc.data.value1)
1020 "value1")((prefix +
".moment_magnitude").c_str(),
1022 &block_lists[it->getMeshsetId()].forceBc.data.value2)
1025 (prefix +
".force_fx").c_str(),
1027 &block_lists[it->getMeshsetId()].forceBc.data.value3)
1029 "value3")((prefix +
".force_fy").c_str(),
1031 &block_lists[it->getMeshsetId()].forceBc.data.value4)
1034 (prefix +
".force_fz").c_str(),
1036 &block_lists[it->getMeshsetId()].forceBc.data.value5)
1038 "value5")((prefix +
".moment_mx").c_str(),
1040 &block_lists[it->getMeshsetId()].forceBc.data.value6)
1043 (prefix +
".moment_my").c_str(),
1045 &block_lists[it->getMeshsetId()].forceBc.data.value7)
1047 "value7")((prefix +
".moment_mz").c_str(),
1049 &block_lists[it->getMeshsetId()].forceBc.data.value8)
1070 (prefix +
".temperature_flag1").c_str(),
1072 &block_lists[it->getMeshsetId()].temperatureBc.data.flag1)
1075 (prefix +
".temperature_t").c_str(),
1077 &block_lists[it->getMeshsetId()].temperatureBc.data.value1)
1090 (prefix +
".pressure_flag2").c_str(),
1092 &block_lists[it->getMeshsetId()].pressureBc.data.flag2)
1094 "flag2")((prefix +
".pressure_magnitude").c_str(),
1096 &block_lists[it->getMeshsetId()].pressureBc.data.value1)
1112 (prefix +
".heatflux_flag1").c_str(),
1114 &block_lists[it->getMeshsetId()].heatFluxBc.data.flag1)
1116 "flag1")((prefix +
".heatflux_magnitude").c_str(),
1118 &block_lists[it->getMeshsetId()].heatFluxBc.data.value1)
1125 (prefix +
".interface_type").c_str(),
1126 po::value<char>(&block_lists[it->getMeshsetId()].cfgBc.data.type)
1132 map<int, BlockData> block_set_attributes;
1134 block_set_attributes[it->getMeshsetId()].cubitMeshset = it->getMeshset();
1135 block_set_attributes[it->getMeshsetId()].iD = it->getMeshsetId();
1136 block_set_attributes[it->getMeshsetId()].bcType =
BLOCKSET;
1137 std::string block_name = it->getName();
1139 std::remove_if(block_name.begin(), block_name.end(), ::isspace),
1141 block_set_attributes[it->getMeshsetId()].nAme = block_name;
1143 if (block_name.compare(
"NoNameSet") != 0) {
1144 std::string prefix =
"SET_ATTR_" + block_name;
1146 add_block_attributes(prefix, block_set_attributes, it);
1150 po::parsed_options parsed =
1162 block_lists[it->getMeshsetId()].addType) {
1167 if (bc_type.none()) {
1168 block_lists[it->getMeshsetId()].bcType =
UNKNOWNSET;
1173 if (bc_type.to_ulong() ==
BLOCKSET)
1174 block_lists[it->getMeshsetId()].bcType =
BLOCKSET;
1175 else if (bc_type.to_ulong() ==
NODESET)
1176 block_lists[it->getMeshsetId()].bcType =
NODESET;
1177 else if (bc_type.to_ulong() ==
SIDESET)
1178 block_lists[it->getMeshsetId()].bcType =
SIDESET;
1181 "Not yet implemented type %s\n",
1182 block_lists[it->getMeshsetId()].addType.c_str());
1184 if (block_lists[it->getMeshsetId()].iD == -1) {
1186 "Unset iD number %d\n", block_lists[it->getMeshsetId()].iD);
1190 std::vector<std::string> additional_parameters;
1191 additional_parameters =
1192 collect_unrecognized(parsed.options, po::include_positional);
1193 for (std::vector<std::string>::iterator vit = additional_parameters.begin();
1194 vit != additional_parameters.end(); vit++) {
1195 MOFEM_LOG_C(
"MeshsetMngSelf", Sev::warning,
"Unrecognized option %s",
1198 for (map<int, BlockData>::iterator mit = block_lists.begin();
1199 mit != block_lists.end(); mit++) {
1200 CubitMeshSet_multiIndex::iterator cubit_meshset_it =
1204 "Data inconsistency\n");
1206 switch (mit->second.bcType) {
1210 if ((
CubitBCType(mit->second.bcType) & cubit_meshset_it->getBcType())
1212 mit->second.iD == cubit_meshset_it->getMeshsetId()) {
1224 if (mit->second.matElastic.data.Young != -1) {
1226 mit->second.matElastic);
1228 if (mit->second.matTransIso.data.Youngp != -1) {
1230 mit->second.matTransIso);
1232 if (mit->second.matThermal.data.Conductivity != -1) {
1234 mit->second.matThermal);
1236 if (mit->second.matInterf.data.ft != -1) {
1238 mit->second.matInterf);
1242 if ((
CubitBCType(mit->second.bcType) & cubit_meshset_it->getBcType())
1244 mit->second.iD == cubit_meshset_it->getMeshsetId()) {
1253 if (mit->second.dispBc.data.flag1 || mit->second.dispBc.data.flag2 ||
1254 mit->second.dispBc.data.flag3 || mit->second.dispBc.data.flag4 ||
1255 mit->second.dispBc.data.flag5 || mit->second.dispBc.data.flag6) {
1256 if (mit->second.dispBc.data.flag1 ==
'0')
1257 mit->second.dispBc.data.flag1 = 0;
1258 if (mit->second.dispBc.data.flag1 ==
'N')
1259 mit->second.dispBc.data.flag1 = 0;
1260 if (mit->second.dispBc.data.flag1)
1261 mit->second.dispBc.data.flag1 = 1;
1262 if (mit->second.dispBc.data.flag2 ==
'0')
1263 mit->second.dispBc.data.flag2 = 0;
1264 if (mit->second.dispBc.data.flag2 ==
'N')
1265 mit->second.dispBc.data.flag2 = 0;
1266 if (mit->second.dispBc.data.flag2)
1267 mit->second.dispBc.data.flag2 = 1;
1268 if (mit->second.dispBc.data.flag3 ==
'0')
1269 mit->second.dispBc.data.flag3 = 0;
1270 if (mit->second.dispBc.data.flag3 ==
'N')
1271 mit->second.dispBc.data.flag3 = 0;
1272 if (mit->second.dispBc.data.flag3)
1273 mit->second.dispBc.data.flag3 = 1;
1274 if (mit->second.dispBc.data.flag4 ==
'0')
1275 mit->second.dispBc.data.flag4 = 0;
1276 if (mit->second.dispBc.data.flag4 ==
'N')
1277 mit->second.dispBc.data.flag4 = 0;
1278 if (mit->second.dispBc.data.flag4)
1279 mit->second.dispBc.data.flag4 = 1;
1280 if (mit->second.dispBc.data.flag5 ==
'0')
1281 mit->second.dispBc.data.flag5 = 0;
1282 if (mit->second.dispBc.data.flag5 ==
'N')
1283 mit->second.dispBc.data.flag5 = 0;
1284 if (mit->second.dispBc.data.flag5)
1285 mit->second.dispBc.data.flag5 = 1;
1286 if (mit->second.dispBc.data.flag6 ==
'0')
1287 mit->second.dispBc.data.flag6 = 0;
1288 if (mit->second.dispBc.data.flag6 ==
'N')
1289 mit->second.dispBc.data.flag6 = 0;
1290 if (mit->second.dispBc.data.flag6)
1291 mit->second.dispBc.data.flag6 = 1;
1293 mit->second.dispBc);
1295 if (mit->second.forceBc.data.value1 != 0 ||
1296 mit->second.forceBc.data.value2 != 0) {
1298 mit->second.forceBc);
1301 if (mit->second.temperatureBc.data.flag1) {
1302 if (mit->second.temperatureBc.data.flag1 ==
'0')
1303 mit->second.temperatureBc.data.flag1 = 0;
1304 if (mit->second.temperatureBc.data.flag1 ==
'N')
1305 mit->second.temperatureBc.data.flag1 = 0;
1306 if (mit->second.temperatureBc.data.flag1)
1307 mit->second.temperatureBc.data.flag1 = 1;
1309 mit->second.temperatureBc);
1313 if ((
CubitBCType(mit->second.bcType) & cubit_meshset_it->getBcType())
1315 mit->second.iD == cubit_meshset_it->getMeshsetId()) {
1324 if (mit->second.pressureBc.data.value1 != 0) {
1325 if (mit->second.pressureBc.data.flag2 ==
'0')
1326 mit->second.pressureBc.data.flag2 = 0;
1327 if (mit->second.pressureBc.data.flag2 ==
'N')
1328 mit->second.pressureBc.data.flag2 = 0;
1329 if (mit->second.pressureBc.data.flag2)
1330 mit->second.pressureBc.data.flag2 = 1;
1332 mit->second.pressureBc);
1335 if (mit->second.heatFluxBc.data.value1 != 0) {
1336 if (mit->second.heatFluxBc.data.flag1 ==
'0')
1337 mit->second.heatFluxBc.data.flag1 = 0;
1338 if (mit->second.heatFluxBc.data.flag1 ==
'N')
1339 mit->second.heatFluxBc.data.flag1 = 0;
1340 if (mit->second.heatFluxBc.data.flag1)
1341 mit->second.heatFluxBc.data.flag1 = 1;
1343 mit->second.heatFluxBc);
1346 if (mit->second.cfgBc.data.type != 0) {
1347 CHKERR setBcData(mit->second.bcType, mit->second.iD, mit->second.cfgBc);
1352 "Not yet implemented type\n");
1356 for (
auto set_attr : block_set_attributes) {
1358 if (set_attr.second.numberOfAttributes > 0) {
1359 MOFEM_LOG(
"MeshsetMngSelf", Sev::verbose)
1360 <<
"Set attributes to blockset " << set_attr.second.nAme;
1361 set_attr.second.aTtr.resize(set_attr.second.numberOfAttributes);
1363 set_attr.second.aTtr);