Kaynağa Gözat

10.9fem网格划分

liuqiao 1 yıl önce
ebeveyn
işleme
fcb20fa1b4
1 değiştirilmiş dosya ile 243 ekleme ve 59 silme
  1. 243 59
      src/views/index/FEMLab/fem.vue

+ 243 - 59
src/views/index/FEMLab/fem.vue

@@ -295,9 +295,9 @@
         >
       </div>
     </el-dialog>
-      <!-- 网格自动划分 -->
+        <!-- 网格自动划分 -->
     <el-dialog
-      v-if="active=='one-2'"
+         v-if="active=='one-2'"
       :visible.sync="dialog.mesh_generation"
       :close-on-click-modal="false"
       @close='activecleer()'
@@ -321,6 +321,23 @@
       </div>
     <div class="selecr">
       <el-form>
+           <el-form-item
+            label="格式选择"
+            :label-width="formLabelWidth5"
+          >
+            <el-select
+              v-model="objmesh.strResultFormat"
+              placeholder="请选择"
+            >
+              <el-option
+                v-for="item in strResultFormatlist"
+                :key="item.value"
+                :label="item.name"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
           <el-form-item
             label="划分类型"
             :label-width="formLabelWidth5"
@@ -328,6 +345,7 @@
             <el-select
               v-model="meshval"
               placeholder="请选择"
+              @change="Partitiontype"
             >
               <el-option
                 v-for="item in meshvallist"
@@ -359,7 +377,7 @@
             :label-width="formLabelWidth5"
           >
             <el-select
-              v-model="meshval1"
+              v-model="objmesh.surfParam.surfStyle"
               placeholder="请选择"
             >
               <el-option
@@ -370,7 +388,8 @@
               >
               </el-option>
             </el-select>
-          </el-form-item><el-form-item
+          </el-form-item>
+          <el-form-item
             label="模式类型"
             :label-width="formLabelWidth5"
           >
@@ -387,54 +406,93 @@
               </el-option>
             </el-select>
           </el-form-item>
-             <div class="radio_text text_color liangf" v-if="patternval=='1'">
+             <div class="radio_text text_color liangf" v-if="patternval=='1'" style="display:none">
               <div class="classfelx" style="text-align: center;">
-                <el-radio
-                      v-model="parameterObj.nmlParam.noninertial_Reference_Frame"
+                <el-checkbox 
+                      v-model="setface"
                       label="on"
-                      >面设置大小</el-radio>
+                      >面设置大小</el-checkbox >
                   </div>
                     <div class="classfelx">
-                    <el-radio
-                      v-model="parameterObj.nmlParam.noninertial_Reference_Frame"
+                    <el-checkbox 
+                      v-model="meshbrim"
                       label="off"
-                      >边设置大小</el-radio
+                      >边设置大小</el-checkbox 
                     >
                     </div>
             </div>
+             <div class='selecttype' v-if="setface==true">
+              <span class="meshcalss"> <el-checkbox v-model="facecheckbox" label="局部面Id设置大小" @change="facechange"></el-checkbox></span>
+                <div class="listbtn"> 
+            <el-button plain class="anniu">添加</el-button>
+              <el-button plain class="anniu">删除</el-button>
+              <el-button plain class="anniu">插入</el-button>
+            </div>
+            <el-form>
+              <el-table
+            :data="meshtableData"
+            style="width: 100%"
+             border
+            >
+            <el-table-column
+              type="index"
+              width="50">
+            </el-table-column>
+            <el-table-column  align="center" label="ID">
+              <!-- //slot-scope="scope" -->
+              <template slot-scope="scope" >
+                    <el-input v-model="scope.id" autocomplete="off"></el-input>
+              </template>
+            </el-table-column>
+              <el-table-column  align="center" label="大小">
+              <template slot-scope="scope">
+                    <el-input v-model="scope.da" autocomplete="off"></el-input>
+              </template>
+            </el-table-column>
+              </el-table>
+            </el-form>
+              </div>
+                <div class='selecttype'  v-if="meshbrim==true">
+              <span class="meshcalss"> <el-checkbox v-model="facecheckbox" label="局部边Id设置大小" @change="facechange"></el-checkbox></span>
+                   <div class="listbtn"> 
+            <el-button plain class="anniu">添加</el-button>
+              <el-button plain class="anniu">删除</el-button>
+              <el-button plain class="anniu">插入</el-button>
+            </div>
+              </div>
         <el-form-item label="最大尺寸" :label-width="formLabelWidth5">
-      <el-input v-model="form.name" autocomplete="off"></el-input>
+      <el-input v-model="objmesh.surfParam.max_size" autocomplete="off"></el-input>
     </el-form-item>
       <el-form-item label="最小尺寸" :label-width="formLabelWidth5">
-      <el-input v-model="form.name" autocomplete="off"></el-input>
+      <el-input v-model="objmesh.surfParam.min_size" autocomplete="off"></el-input>
     </el-form-item>
       <el-form-item label="相邻网格边比率" :label-width="formLabelWidth5">
       <el-input v-model="form.name" autocomplete="off"></el-input>
     </el-form-item>
       <el-form-item label="全局几何大小" :label-width="formLabelWidth5">
-      <el-input v-model="form.name" autocomplete="off"></el-input>
+      <el-input v-model="objmesh.surfParam.global_physical_size" autocomplete="off"></el-input>
     </el-form-item>
      <div v-if="meshface=='几何尺寸模型'">
           <el-form-item label="弦误差" :label-width="formLabelWidth5">
-      <el-input v-model="form.name" autocomplete="off"></el-input>
+      <el-input v-model="objmesh.surfParam1.chordal_error" autocomplete="off"></el-input>
     </el-form-item>
           <el-form-item label="逼近角度" :label-width="formLabelWidth5">
-      <el-input v-model="form.name" autocomplete="off"></el-input>
+      <el-input v-model="objmesh.surfParam1.geometric_approximation_angle" autocomplete="off"></el-input>
     </el-form-item>
     </div>
        <div class='selecttype'>
               <span class="meshcalss">优化设置选择</span>
-                <el-checkbox-group v-model="checkListset" @change="checksetchange">
-             <el-checkbox label="纠正表面相交"></el-checkbox>
-            <el-checkbox label="优化网络" :disabled='disabledset'></el-checkbox>
-           <el-checkbox label="移除重复CAD面"></el-checkbox>
-          </el-checkbox-group>
+                <!-- <el-checkbox-group @change="checksetchange"> -->
+             <el-checkbox v-model="objmesh.surfParam2.correct_surface_intersections" true-label="yes"  false-label="no"  @change="checksetchange"  label="纠正表面相交"></el-checkbox>
+            <el-checkbox v-model="objmesh.surfParam2.optimisation" true-label="yes"  false-label="no" label="优化网络" :disabled='disabledset'></el-checkbox>
+           <el-checkbox v-model="objmesh.surfParam2.remove_duplicate_cad_faces" true-label="yes"  false-label="no" label="移除重复CAD面"></el-checkbox>
+          <!-- </el-checkbox-group> -->
           <el-form-item
             label="单元阶数选择:"
             :label-width="formLabelWidth5"
           >
             <el-select
-              v-model="eleval"
+              v-model="objmesh.surfParam2.element_order"
               placeholder="请选择"
             >
               <el-option
@@ -447,7 +505,7 @@
             </el-select>
           </el-form-item>
              <el-form-item label="雅可比数值:" :label-width="formLabelWidth5">
-          <el-input v-model="form.name" autocomplete="off"></el-input>
+          <el-input v-model="objmesh.surfParam2.scaled_jacobian_threshold_value" autocomplete="off"></el-input>
         </el-form-item>    
           </div>
           <div class='selecttype'>
@@ -457,15 +515,15 @@
                 <div class="radio_text text_color liangf" style="line-height: 160px;">
               <div class="classfelx" style="text-align: center;">
                 <el-radio
-                      v-model="jiegradio"
-                      label="结构"
+                      v-model="cleanerParam1.use_default_settings_for"
+                      label="structure"
                       :disabled="disabledface"
                       >结构</el-radio>
                   </div>
                     <div class="classfelx">
                     <el-radio
-                      v-model="jiegradio"
-                      label="流体"
+                      v-model="cleanerParam1.use_default_settings_for"
+                      label="fluid"
                        :disabled="disabledface"
                       >流体</el-radio
                     >
@@ -473,22 +531,22 @@
                     </div>
               </div>
               <div class="jiegright">
-                  <div class='selecttype' v-if="jiegradio=='结构'">
-                 <span class="meshcalss "> <el-checkbox    :disabled="disabledface"  label="结构使用默认值" v-model="jiegradioval"></el-checkbox></span>
-                   <el-form-item label="重叠角度" :label-width="formLabelWidth2" :disabled='jiegradioval'>
-                  <el-input v-model="form.name" autocomplete="off" ></el-input>
+                  <div class='selecttype' v-if="cleanerParam1.use_default_settings_for=='structure'">
+                 <span class="meshcalss "> <el-checkbox    :disabled="disabledface"  label="结构使用默认值" v-model="jiegradioval" @change="jiegchange"></el-checkbox></span>
+                   <el-form-item  label="重叠角度" :label-width="formLabelWidth2" >
+                  <el-input v-model="cleanerParam1.overlap_angle" autocomplete="off" :disabled='jiegdisabled' ></el-input>
                 </el-form-item>
-                  <el-form-item label="长度阀值" :label-width="formLabelWidth2" :disabled='jiegradioval'>
-                <el-input v-model="form.name" autocomplete="off"></el-input>
+                  <el-form-item label="长度阀值" :label-width="formLabelWidth2" >
+                <el-input v-model="cleanerParam1.resolution_length" autocomplete="off" :disabled='jiegdisabled'></el-input>
               </el-form-item>
                </div>
                 <div class='selecttype' v-else>
                  <span class="meshcalss"> <el-checkbox label="流体使用默认值" v-model="jiegradioval"></el-checkbox></span>
-                   <el-form-item label="重叠角度" :label-width="formLabelWidth2 " :disabled='jiegradioval'>
-                  <el-input v-model="form.name" autocomplete="off"></el-input>
+                   <el-form-item label="重叠角度" :label-width="formLabelWidth2 ">
+                  <el-input  v-model="cleanerParam1.overlap_angle" autocomplete="off"  :disabled='jiegdisabled'></el-input>
                 </el-form-item>
-                  <el-form-item label="长度阀值" :label-width="formLabelWidth2"  :disabled='jiegradioval'>
-                <el-input v-model="form.name" autocomplete="off"></el-input>
+                  <el-form-item label="长度阀值" :label-width="formLabelWidth2" >
+                <el-input v-model="cleanerParam1.resolution_length" autocomplete="off"  :disabled='jiegdisabled'></el-input>
               </el-form-item>
                </div>
               </div>
@@ -502,7 +560,7 @@
             :label-width="formLabelWidth5"
           >
             <el-select
-              v-model="traval"
+              v-model="tetraParam1.components"
               placeholder="请选择"
             >
               <el-option
@@ -515,7 +573,7 @@
             </el-select>
           </el-form-item>
              <el-form-item label="级配" :label-width="formLabelWidth5" >
-                <el-input v-model="form.name" autocomplete="off"></el-input>
+                <el-input v-model="tetraParam1.gradation" autocomplete="off"></el-input>
               </el-form-item>
               </div>
                  <div v-if="meshval=='2'">
@@ -524,7 +582,7 @@
             :label-width="formLabelWidth5"
           >
                      <el-select
-              v-model="hexaval"
+              v-model="hexaParam1.components"
               placeholder="请选择"
             >
               <el-option
@@ -543,7 +601,7 @@
             :label-width="formLabelWidth5"
           >
                      <el-select
-              v-model="mixval"
+              v-model="hybridParam1.element_generation"
               placeholder="请选择"
             >
               <el-option
@@ -560,7 +618,7 @@
             :label-width="formLabelWidth5"
           >
                      <el-select
-              v-model="layerval"
+              v-model="hybridParam1.normal_direction"
               placeholder="请选择"
             >
               <el-option
@@ -573,21 +631,21 @@
             </el-select>
                </el-form-item>
                 <el-form-item label="边界层层数" :label-width="formLabelWidth5" >
-                <el-input v-model="form.name" autocomplete="off"></el-input>
+                <el-input v-model="hybridParam1.number_of_boundary_layers" autocomplete="off"></el-input>
               </el-form-item>
                <el-form-item label="边界层增长参数" :label-width="formLabelWidth5" >
-                <el-input v-model="form.name" autocomplete="off"></el-input>
+                <el-input v-model="hybridParam1.boundary_layer_geometric_progression" autocomplete="off"></el-input>
               </el-form-item>
                <el-form-item label="初始层高度" :label-width="formLabelWidth5" >
-                <el-input v-model="form.name" autocomplete="off"></el-input>
+                <el-input v-model="hybridParam1.boundary_layer_global_initial_height" autocomplete="off"></el-input>
               </el-form-item>
                  </div>
-              <div class="heigeinput">
+              <!-- <div class="heigeinput">
                 <div class="listbtn"> 
                     <el-button plain class="anniu">写入参数文件</el-button>
                       <el-button plain class="anniu">进行网格划分</el-button>
                     </div>
-              </div> 
+              </div>  -->
       </el-form>
     </div>
       <div
@@ -597,8 +655,8 @@
         <el-button @click="dialog.mesh_generation = false">{{ $t("HCFD.file.cancel")}}</el-button>
         <el-button
           type="primary"
-          @click="dialog.mesh_generation = false"
-        >{{ $t("HCFD.file.ok")}}</el-button>
+          @click="meshSplitok()"
+        >网格划分</el-button>
       </div>
     </el-dialog>
           <!-- 弹出框 创建集合-->
@@ -2470,11 +2528,66 @@ export default {
     },
   data() {
     return {
+       objmesh:{
+    strResultFormat:".vtk",
+    surfParam:{
+        max_size:"10",
+        min_size:"1",
+        surfStyle:"triangle",
+        global_physical_size:"1.0"
+    },
+    surfParam1:{
+        gradation:"1",
+        anisotropic_ratio:"0",
+        chordal_error:"0",
+        debug:"no",
+        closed_geometry:"no",
+        enforce_cad_edge_sizes:"1",
+        force_bad_surface_element_removal:"no",
+        discard_input_topology:"no",
+        create_tag_on_collision:"yes"
+    },
+    surfParam2:{
+        element_order:"linear",
+        remove_duplicate_cad_faces:"yes",
+        scaled_jacobian_threshold_value:"0.001",
+        optimisation:"no",
+        correct_surface_intersections:"yes"
+    },
+    cleanerParam:null,
+     tetraParam:null,
+    hexaParam:null,
+    hybridParam:null,
+    },
+     cleanerParam1:{
+        folding_angle:"1",
+        min_hole_size:"1",
+        overlap_distance:"1",
+        use_default_settings_for:"structure",
+        overlap_angle:"15",
+        resolution_length:"5"
+    },
+    tetraParam1:{
+        components:"outside_components",
+         gradation:"1.0"
+    },
+    hexaParam1:{
+        components:"all",
+    },
+    hybridParam1:{
+        element_generation:"tetra_dominant",
+        normal_direction:'1',
+        boundary_layer_global_initial_height:'',
+        boundary_layer_geometric_progression:'',
+        number_of_boundary_layers:'',
+    },
+      setface:false,
+      meshbrim:false,
     meshface:'物理尺寸模型',
       jiegradioval:false,
-      facecheckbox:false,
-      disabledface:true,
-      jiegradioval:false,
+      facecheckbox:true,
+      disabledface:false,
+      jiegdisabled:true,
        jiegradio:"结构",
       checkListset:['纠正表面相交'],
       disabledset:true,
@@ -2632,6 +2745,14 @@ export default {
            { icon: p21, titlie: "网格自动划分" },
           
         ],
+          strResultFormatlist:[
+          { value: ".vtk", name: ".vtk" },
+        { value: ".mesh", name: ".mesh" },
+        { value: ".ugrid", name: ".ugrid" },
+        { value: ".bdf", name: ".bdf" },
+        { value: ".neu", name: ".neu" },
+   
+      ],
          meshvallist:[
         { value: "0", name: "面网格" },
         { value: "1", name: "四面体网格" },
@@ -3419,7 +3540,7 @@ let g=(Number(this.colorobj.G)/255).toFixed(4);
 let b=(Number(this.colorobj.B)/255).toFixed(4);
  const params = {
         transCode: 'AFT001',
-        pid:this.project.projectId,
+         pid:this.project.projectId,
         solverConfigId:this.femsolverConfigid,
         action:'SolidSurfaceDisplay',
         paramJson:'',
@@ -3996,23 +4117,86 @@ this.bStepok("animation",'','')
             .catch((err) => {
             }); 
       },
-      checksetchange(val){
-      if(val.includes("纠正表面相交")){
+         // 划分类型按钮
+    Partitiontype(){
+  if(this.meshval=='1'){
+      this.objmesh.tetraParam=this.tetraParam1;
+      this.objmesh.hexaParam=null;
+      this.objmesh.hybridParam=null;
+    }else if(this.meshval=='2'){
+      this.objmesh.tetraParam=null;
+      this.objmesh.hexaParam=this.hexaParam1;
+      this.objmesh.hybridParam=null;
+    }else if(this.meshval=='3'){
+      this.objmesh.tetraParam=null;
+      this.objmesh.hexaParam=null;
+      this.objmesh.hybridParam=this.hybridParam1;
+    }else{
+      this.objmesh.tetraParam=null;
+      this.objmesh.hexaParam=null;
+      this.objmesh.hybridParam=null;
+    }
+    },
+        checksetchange(val){
+       console.log(val);
+       let correct_surface_intersections=this.objmesh.surfParam2.correct_surface_intersections;
+      if(correct_surface_intersections=='yes'){
         this.disabledset=true;
-     let myArray=this.checkListset;
-      this.checkListset = myArray.filter(function(item) {return item !== "优化网络"
-});
+      this.objmesh.surfParam2.optimisation='no';
       }else{
          this.disabledset=false;
       }
     },
    facechange(){
+     let that=this;
       if(this.facecheckbox){
+  
         this.disabledface=false;
+          this.objmesh.cleanerParam=this.cleanerParam1;
       }else{
+        this.objmesh.cleanerParam=null;
         this.disabledface=true;
       }
-   }
+   },
+    jiegchange(){
+  
+     if(this.jiegradioval==true){
+       this.objmesh.cleanerParam.overlap_angle=  this.cleanerParam1.overlap_angle
+       this.objmesh.cleanerParam.resolution_length= this.cleanerParam1.resolution_length
+       this.jiegdisabled=false;
+     }else{
+       this.jiegdisabled=true;
+    
+     }
+   },
+   //上传网格划分参数接口
+   meshSplitok() {
+     if(this.facecheckbox==false){
+       this.objmesh.cleanerParam=null
+     }else{
+          this.objmesh.cleanerParam=this.cleanerParam1;
+     if(this.jiegradioval==true){
+         this.objmesh.cleanerParam.overlap_angle=  this.cleanerParam1.overlap_angle;
+       this.objmesh.cleanerParam.resolution_length= this.cleanerParam1.resolution_length;
+     }else{
+     this.objmesh.cleanerParam.overlap_angle= '';
+       this.objmesh.cleanerParam.resolution_length= '';
+     }
+      }
+      console.log(this.objmesh);
+      const params = {
+        transCode: "AFT001",
+        pid: this.project.projectId,
+        solverConfigId:this.femsolverConfigid,
+        action:"meshSplit",
+        paramJson:JSON.stringify(this.objmesh),
+      };
+      request(params)
+        .then((res) => {
+          console.log(res);
+        })
+        .catch((err) => {});
+    },
   },
     watch: {
        'animationobj.currentstep' () {