726 {
729 std::ifstream ini_file(file_name.c_str(), std::ifstream::in);
730 po::variables_map vm;
731 if (clean_file_options) {
733 boost::shared_ptr<boost::program_options::options_description>(
734 new po::options_description());
735 }
736
737 auto add_block_attributes = [&](auto prefix, auto &block_lists, auto &it) {
738
740 (prefix + ".number_of_attributes").c_str(),
741 po::value<int>(&block_lists[it->getMeshsetId()].numberOfAttributes)
742 ->default_value(-1),
743 "Number of blockset attribute");
744 for (int ii = 1; ii <= 10; ii++) {
745 std::string surfix = ".user" + boost::lexical_cast<std::string>(ii);
747 (prefix + surfix).c_str(),
748 po::value<double>(&block_lists[it->getMeshsetId()].aTtr[ii - 1])
749 ->default_value(0.0),
750 "Add block attribute");
751 }
752 };
753
754
755 map<int, BlockData> block_lists;
757 block_lists[it->getMeshsetId()].cubitMeshset = it->getMeshset();
758 std::string prefix =
759 "block_" + boost::lexical_cast<std::string>(it->getMeshsetId());
761 (prefix + ".add").c_str(),
762 po::value<string>(&block_lists[it->getMeshsetId()].addType)
763 ->default_value("UNKNOWNSET"),
764 "Add block set")(
765 (prefix + ".id").c_str(),
766 po::value<int>(&block_lists[it->getMeshsetId()].iD)->default_value(-1),
767 "Id of meshset")(
768 (prefix + ".name").c_str(),
769 po::value<string>(&block_lists[it->getMeshsetId()].nAme)
770 ->default_value(""),
771 "Name of the meshset");
772
773
774 add_block_attributes(prefix, block_lists, it);
775
776
777 {
778
779
780
782 (prefix + ".young").c_str(),
783 po::value<double>(
784 &block_lists[it->getMeshsetId()].matElastic.data.Young)
785 ->default_value(-1),
786 "Young modulus")(
787 (prefix + ".poisson").c_str(),
788 po::value<double>(
789 &block_lists[it->getMeshsetId()].matElastic.data.Poisson)
790 ->default_value(-2),
791 "Poisson ratio")(
792 (prefix + ".thermalexpansion").c_str(),
793 po::value<double>(
794 &block_lists[it->getMeshsetId()].matElastic.data.ThermalExpansion)
795 ->default_value(-1),
796 "Thermal expansion");
797
798 }
799
800 {
801
802
803
804
805
807 (prefix + ".Youngp").c_str(),
808 po::value<double>(
809 &block_lists[it->getMeshsetId()].matTransIso.data.Youngp)
810 ->default_value(-1),
811 "Youngp")(
812 (prefix + ".Youngz").c_str(),
813 po::value<double>(
814 &block_lists[it->getMeshsetId()].matTransIso.data.Youngz)
815 ->default_value(-1),
816 "Youngz")(
817 (prefix + ".Poissonp").c_str(),
818 po::value<double>(
819 &block_lists[it->getMeshsetId()].matTransIso.data.Poissonp)
820 ->default_value(0),
821 "Poissonp")(
822 (prefix + ".Poissonpz").c_str(),
823 po::value<double>(
824 &block_lists[it->getMeshsetId()].matTransIso.data.Poissonpz)
825 ->default_value(0),
826 "Poissonpz")(
827 (prefix + ".Shearzp").c_str(),
828 po::value<double>(
829 &block_lists[it->getMeshsetId()].matTransIso.data.Shearzp)
830 ->default_value(-1),
831 "Shearzp");
832
833 }
834
835 {
836
837
839 (prefix + ".conductivity").c_str(),
840 po::value<double>(
841 &block_lists[it->getMeshsetId()].matThermal.data.Conductivity)
842 ->default_value(-1),
843 "Conductivity")(
844 (prefix + ".capacity").c_str(),
845 po::value<double>(
846 &block_lists[it->getMeshsetId()].matThermal.data.HeatCapacity)
847 ->default_value(-1),
848 "Capacity");
849
850 }
851
852 {
853
854
855
856
858 (prefix + ".interface_alpha").c_str(),
859 po::value<double>(
860 &block_lists[it->getMeshsetId()].matInterf.data.alpha)
861 ->default_value(-1),
862 "alpha")((prefix + ".interface_beta").c_str(),
863 po::value<double>(
864 &block_lists[it->getMeshsetId()].matInterf.data.beta)
865 ->default_value(-1),
866 "beta")(
867 (prefix + ".interface_ft").c_str(),
868 po::value<double>(&block_lists[it->getMeshsetId()].matInterf.data.ft)
869 ->default_value(-1),
870 "ft")(
871 (prefix + ".interface_Gf").c_str(),
872 po::value<double>(&block_lists[it->getMeshsetId()].matInterf.data.Gf)
873 ->default_value(-1),
874 "Gf");
875
876 }
877
878
879 {
880
881
882
883
884
885
886
887
888
889
890
891
893 (prefix + ".disp_flag1").c_str(),
894 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag1)
895 ->default_value(0),
896 "flag1")(
897 (prefix + ".disp_flag2").c_str(),
898 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag2)
899 ->default_value(0),
900 "flag2")(
901 (prefix + ".disp_flag3").c_str(),
902 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag3)
903 ->default_value(0),
904 "flag3")(
905 (prefix + ".disp_flag4").c_str(),
906 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag4)
907 ->default_value(0),
908 "flag4")(
909 (prefix + ".disp_flag5").c_str(),
910 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag5)
911 ->default_value(0),
912 "flag5")(
913 (prefix + ".disp_flag6").c_str(),
914 po::value<char>(&block_lists[it->getMeshsetId()].dispBc.data.flag6)
915 ->default_value(0),
916 "flag6")(
917 (prefix + ".disp_ux").c_str(),
918 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value1)
919 ->default_value(0),
920 "value1")(
921 (prefix + ".disp_uy").c_str(),
922 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value2)
923 ->default_value(0),
924 "value2")(
925 (prefix + ".disp_uz").c_str(),
926 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value3)
927 ->default_value(0),
928 "value3")(
929 (prefix + ".disp_rx").c_str(),
930 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value4)
931 ->default_value(0),
932 "value4")(
933 (prefix + ".disp_ry").c_str(),
934 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value5)
935 ->default_value(0),
936 "value5")(
937 (prefix + ".disp_rz").c_str(),
938 po::value<double>(&block_lists[it->getMeshsetId()].dispBc.data.value6)
939 ->default_value(0),
940 "value6");
941 }
942
943 {
944
945
946
947
948
949
950
951
952
953
955 (prefix + ".force_magnitude").c_str(),
956 po::value<double>(
957 &block_lists[it->getMeshsetId()].forceBc.data.value1)
958 ->default_value(0),
959 "value1")((prefix + ".moment_magnitude").c_str(),
960 po::value<double>(
961 &block_lists[it->getMeshsetId()].forceBc.data.value2)
962 ->default_value(0),
963 "value2")(
964 (prefix + ".force_fx").c_str(),
965 po::value<double>(
966 &block_lists[it->getMeshsetId()].forceBc.data.value3)
967 ->default_value(0),
968 "value3")((prefix + ".force_fy").c_str(),
969 po::value<double>(
970 &block_lists[it->getMeshsetId()].forceBc.data.value4)
971 ->default_value(0),
972 "value4")(
973 (prefix + ".force_fz").c_str(),
974 po::value<double>(
975 &block_lists[it->getMeshsetId()].forceBc.data.value5)
976 ->default_value(0),
977 "value5")((prefix + ".moment_mx").c_str(),
978 po::value<double>(
979 &block_lists[it->getMeshsetId()].forceBc.data.value6)
980 ->default_value(0),
981 "value6")(
982 (prefix + ".moment_my").c_str(),
983 po::value<double>(
984 &block_lists[it->getMeshsetId()].forceBc.data.value7)
985 ->default_value(0),
986 "value7")((prefix + ".moment_mz").c_str(),
987 po::value<double>(
988 &block_lists[it->getMeshsetId()].forceBc.data.value8)
989 ->default_value(0),
990 "value8");
991 }
992 {
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1009 (prefix + ".temperature_flag1").c_str(),
1010 po::value<char>(
1011 &block_lists[it->getMeshsetId()].temperatureBc.data.flag1)
1012 ->default_value(0),
1013 "flag1")(
1014 (prefix + ".temperature_t").c_str(),
1015 po::value<double>(
1016 &block_lists[it->getMeshsetId()].temperatureBc.data.value1)
1017 ->default_value(0),
1018 "value1");
1019
1020 }
1021
1022 {
1023
1024
1025
1026
1027
1029 (prefix + ".pressure_flag2").c_str(),
1030 po::value<char>(
1031 &block_lists[it->getMeshsetId()].pressureBc.data.flag2)
1032 ->default_value(0),
1033 "flag2")((prefix + ".pressure_magnitude").c_str(),
1034 po::value<double>(
1035 &block_lists[it->getMeshsetId()].pressureBc.data.value1)
1036 ->default_value(0),
1037 "value1");
1038 }
1039 {
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1051 (prefix + ".heatflux_flag1").c_str(),
1052 po::value<char>(
1053 &block_lists[it->getMeshsetId()].heatFluxBc.data.flag1)
1054 ->default_value(0),
1055 "flag1")((prefix + ".heatflux_magnitude").c_str(),
1056 po::value<double>(
1057 &block_lists[it->getMeshsetId()].heatFluxBc.data.value1)
1058 ->default_value(0),
1059 "value1");
1060 }
1061
1062 {
1064 (prefix + ".interface_type").c_str(),
1065 po::value<char>(&block_lists[it->getMeshsetId()].cfgBc.data.type)
1066 ->default_value(0),
1067 "type");
1068 }
1069 }
1070
1071 map<int, BlockData> block_set_attributes;
1073 block_set_attributes[it->getMeshsetId()].cubitMeshset = it->getMeshset();
1074 block_set_attributes[it->getMeshsetId()].iD = it->getMeshsetId();
1075 block_set_attributes[it->getMeshsetId()].bcType =
BLOCKSET;
1076 std::string block_name = it->getName();
1077 block_name.erase(
1078 std::remove_if(block_name.begin(), block_name.end(), ::isspace),
1079 block_name.end());
1080 block_set_attributes[it->getMeshsetId()].nAme = block_name;
1081
1082 if (block_name.compare("NoNameSet") != 0) {
1083 std::string prefix = "SET_ATTR_" + block_name;
1084
1085 add_block_attributes(prefix, block_set_attributes, it);
1086 }
1087 }
1088
1089 po::parsed_options parsed =
1091 store(parsed, vm);
1092 po::notify(vm);
1093
1094
1096
1098 unsigned jj = 0;
1101 block_lists[it->getMeshsetId()].addType) {
1102 bc_type = 1 << jj;
1103 }
1104 ++jj;
1105 }
1106 if (bc_type.none()) {
1107 block_lists[it->getMeshsetId()].bcType =
UNKNOWNSET;
1108
1109 continue;
1110 }
1111
1112 if (bc_type.to_ulong() ==
BLOCKSET)
1113 block_lists[it->getMeshsetId()].bcType =
BLOCKSET;
1114 else if (bc_type.to_ulong() ==
NODESET)
1115 block_lists[it->getMeshsetId()].bcType =
NODESET;
1116 else if (bc_type.to_ulong() ==
SIDESET)
1117 block_lists[it->getMeshsetId()].bcType =
SIDESET;
1118 else {
1120 "Not yet implemented type %s\n",
1121 block_lists[it->getMeshsetId()].addType.c_str());
1122 }
1123 if (block_lists[it->getMeshsetId()].iD == -1) {
1125 "Unset iD number %d\n", block_lists[it->getMeshsetId()].iD);
1126 }
1127 }
1128
1129 std::vector<std::string> additional_parameters;
1130 additional_parameters =
1131 collect_unrecognized(parsed.options, po::include_positional);
1132 for (std::vector<std::string>::iterator vit = additional_parameters.begin();
1133 vit != additional_parameters.end(); vit++) {
1134 MOFEM_LOG_C(
"MeshsetMngSelf", Sev::warning,
"Unrecognized option %s",
1135 vit->c_str());
1136 }
1137 for (map<int, BlockData>::iterator mit = block_lists.begin();
1138 mit != block_lists.end(); mit++) {
1139 CubitMeshSet_multiIndex::iterator cubit_meshset_it =
1143 "Data inconsistency\n");
1144 }
1145 switch (mit->second.bcType) {
1147 break;
1149 if ((
CubitBCType(mit->second.bcType) & cubit_meshset_it->getBcType())
1150 .any() &&
1151 mit->second.iD == cubit_meshset_it->getMeshsetId()) {
1152
1153 } else {
1157 &meshset, 1);
1158 }
1159
1161
1162
1163 if (mit->second.matElastic.data.Young != -1) {
1165 mit->second.matElastic);
1166 }
1167 if (mit->second.matTransIso.data.Youngp != -1) {
1169 mit->second.matTransIso);
1170 }
1171 if (mit->second.matThermal.data.Conductivity != -1) {
1173 mit->second.matThermal);
1174 }
1175 if (mit->second.matInterf.data.ft != -1) {
1177 mit->second.matInterf);
1178 }
1179 } break;
1181 if ((
CubitBCType(mit->second.bcType) & cubit_meshset_it->getBcType())
1182 .any() &&
1183 mit->second.iD == cubit_meshset_it->getMeshsetId()) {
1184
1185 } else {
1189 &meshset, 1);
1190 }
1191
1192 if (mit->second.dispBc.data.flag1 || mit->second.dispBc.data.flag2 ||
1193 mit->second.dispBc.data.flag3 || mit->second.dispBc.data.flag4 ||
1194 mit->second.dispBc.data.flag5 || mit->second.dispBc.data.flag6) {
1195 if (mit->second.dispBc.data.flag1 == '0')
1196 mit->second.dispBc.data.flag1 = 0;
1197 if (mit->second.dispBc.data.flag1 == 'N')
1198 mit->second.dispBc.data.flag1 = 0;
1199 if (mit->second.dispBc.data.flag1)
1200 mit->second.dispBc.data.flag1 = 1;
1201 if (mit->second.dispBc.data.flag2 == '0')
1202 mit->second.dispBc.data.flag2 = 0;
1203 if (mit->second.dispBc.data.flag2 == 'N')
1204 mit->second.dispBc.data.flag2 = 0;
1205 if (mit->second.dispBc.data.flag2)
1206 mit->second.dispBc.data.flag2 = 1;
1207 if (mit->second.dispBc.data.flag3 == '0')
1208 mit->second.dispBc.data.flag3 = 0;
1209 if (mit->second.dispBc.data.flag3 == 'N')
1210 mit->second.dispBc.data.flag3 = 0;
1211 if (mit->second.dispBc.data.flag3)
1212 mit->second.dispBc.data.flag3 = 1;
1213 if (mit->second.dispBc.data.flag4 == '0')
1214 mit->second.dispBc.data.flag4 = 0;
1215 if (mit->second.dispBc.data.flag4 == 'N')
1216 mit->second.dispBc.data.flag4 = 0;
1217 if (mit->second.dispBc.data.flag4)
1218 mit->second.dispBc.data.flag4 = 1;
1219 if (mit->second.dispBc.data.flag5 == '0')
1220 mit->second.dispBc.data.flag5 = 0;
1221 if (mit->second.dispBc.data.flag5 == 'N')
1222 mit->second.dispBc.data.flag5 = 0;
1223 if (mit->second.dispBc.data.flag5)
1224 mit->second.dispBc.data.flag5 = 1;
1225 if (mit->second.dispBc.data.flag6 == '0')
1226 mit->second.dispBc.data.flag6 = 0;
1227 if (mit->second.dispBc.data.flag6 == 'N')
1228 mit->second.dispBc.data.flag6 = 0;
1229 if (mit->second.dispBc.data.flag6)
1230 mit->second.dispBc.data.flag6 = 1;
1232 mit->second.dispBc);
1233 }
1234 if (mit->second.forceBc.data.value1 != 0 ||
1235 mit->second.forceBc.data.value2 != 0) {
1237 mit->second.forceBc);
1238 }
1239
1240 if (mit->second.temperatureBc.data.flag1) {
1241 if (mit->second.temperatureBc.data.flag1 == '0')
1242 mit->second.temperatureBc.data.flag1 = 0;
1243 if (mit->second.temperatureBc.data.flag1 == 'N')
1244 mit->second.temperatureBc.data.flag1 = 0;
1245 if (mit->second.temperatureBc.data.flag1)
1246 mit->second.temperatureBc.data.flag1 = 1;
1248 mit->second.temperatureBc);
1249 }
1250 } break;
1252 if ((
CubitBCType(mit->second.bcType) & cubit_meshset_it->getBcType())
1253 .any() &&
1254 mit->second.iD == cubit_meshset_it->getMeshsetId()) {
1255
1256 } else {
1260 &meshset, 1);
1261 }
1262
1263 if (mit->second.pressureBc.data.value1 != 0) {
1264 if (mit->second.pressureBc.data.flag2 == '0')
1265 mit->second.pressureBc.data.flag2 = 0;
1266 if (mit->second.pressureBc.data.flag2 == 'N')
1267 mit->second.pressureBc.data.flag2 = 0;
1268 if (mit->second.pressureBc.data.flag2)
1269 mit->second.pressureBc.data.flag2 = 1;
1271 mit->second.pressureBc);
1272 }
1273
1274 if (mit->second.heatFluxBc.data.value1 != 0) {
1275 if (mit->second.heatFluxBc.data.flag1 == '0')
1276 mit->second.heatFluxBc.data.flag1 = 0;
1277 if (mit->second.heatFluxBc.data.flag1 == 'N')
1278 mit->second.heatFluxBc.data.flag1 = 0;
1279 if (mit->second.heatFluxBc.data.flag1)
1280 mit->second.heatFluxBc.data.flag1 = 1;
1282 mit->second.heatFluxBc);
1283 }
1284
1285 if (mit->second.cfgBc.data.type != 0) {
1286 CHKERR setBcData(mit->second.bcType, mit->second.iD, mit->second.cfgBc);
1287 }
1288 } break;
1289 default:
1291 "Not yet implemented type\n");
1292 }
1293 }
1294
1295 for (auto set_attr : block_set_attributes) {
1296
1297 if (set_attr.second.numberOfAttributes > 0) {
1298 MOFEM_LOG(
"MeshsetMngSelf", Sev::verbose)
1299 << "Set attributes to blockset " << set_attr.second.nAme;
1300 set_attr.second.aTtr.resize(set_attr.second.numberOfAttributes);
1302 set_attr.second.aTtr);
1303 }
1304 }
1305
1307}
#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