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