tangjunhao 6 ماه پیش
والد
کامیت
32d43de4f1
4فایلهای تغییر یافته به همراه300 افزوده شده و 118 حذف شده
  1. 61 6
      src/views/home.vue
  2. 194 71
      src/views/titlecomponent/ADflow.vue
  3. 43 40
      src/views/titlecomponent/Xfoil.vue
  4. 2 1
      src/views/titlecomponent/ffds.vue

+ 61 - 6
src/views/home.vue

@@ -1102,11 +1102,11 @@
               <el-form>
                 <el-tabs tab-position="left" class="demo-tabs" v-model="activeadf" @tab-click="adfhandleClick">
               <el-tab-pane label="Xfoil" name="Xfoil">
-                <Xfoil/>
+                <Xfoil ref="Xfoilref"/>
               </el-tab-pane>
               <!-- ADflow -->
               <el-tab-pane label="ADflow" name="ADflow">
-                <ADflow/>
+                <ADflow ref="ADflowref"/>
               </el-tab-pane>
             </el-tabs>
               </el-form>
@@ -1114,7 +1114,7 @@
             <template #footer>
               <div class="dialog-footer">
                 <el-button @click="dialog.XfAD = false">取消</el-button>
-                <el-button type="primary" @click="ok()">
+                <el-button type="primary" @click="getXfoilAdflowsave(activeadf);dialog.XfAD = false;">
                   确定
                 </el-button>
               </div>
@@ -1411,11 +1411,11 @@
                 <h4 :id="titleId" :class="titleClass">ADflow</h4>
               </div>
             </template>
-            <ADflow/>
+            <ADflow ref="ADflowref"/>
             <template #footer>
               <div class="dialog-footer">
                 <el-button @click="dialog.isADflow = false">取消</el-button>
-                <el-button type="primary" @click=" dialog.isADflow = false">
+                <el-button type="primary" @click=" adflowok();dialog.isADflow = false">
                   确定
                 </el-button>
               </div>
@@ -1839,6 +1839,7 @@ class Branin(BaseSolver):
 let Cstref = ref();
 let Ffdref = ref();
 let Xfoilref = ref();
+let ADflowref = ref();
 let Joptimizeref=ref();
 let Doptimizeref=ref();
 let Toptimizeref=ref();
@@ -2450,6 +2451,7 @@ const optimizerfalse = (val) => {
     dialog.value.cstffd = true;
   }else if (val == '气动分析') {
     activeadf.value='Xfoil'
+    intxfoiladflow();
     dialog.value.XfAD = true;
   } else if (val == '进化优化器') {
     activeadf.value='进化优化器';
@@ -2511,7 +2513,12 @@ const optimizerfalse = (val) => {
    // adfhandleClick();
    activeadf.value='ADflow';
    dialog.value.isADflow = true;
-    // dialog.value. = true;
+   nextTick(() => {
+      // 确保 ref 已经初始化
+      if (ADflowref.value) {
+        ADflowref.value.getadflow(pid.value);
+      }
+    });
   }else if(val == 'Xfoil'){
   //  activeadf.value='Xfiol';
    dialog.value.Xfiol = true;
@@ -2618,6 +2625,38 @@ const initcstffds = () => {
   });
 }
 
+// Xfoil/ADflow窗口初始化
+const intxfoiladflow = () => {
+  const params1 = {
+    transCode:'MDO0046',
+    pid: pid.value,
+  }
+  const params2 = {
+    transCode:'MDO0049',
+    pid: pid.value,
+  }
+  Promise.all([
+    request(params1),
+    request(params2),
+  ]).then(([res1, res2]) => {
+    console.log('1:', res1.checked);
+    console.log('2:', res2.checked);
+
+    Xfoilref.value.getxfoilAssign(res1);
+    ADflowref.value.getadflowAssign(res2);
+    
+    // 根据返回值来设置 activeadf
+    if (res1.checked === 1) {
+      activeadf.value = 'Xfoil';
+    } else if (res2.checked === 1) {
+      activeadf.value = 'ADflow';
+    }
+    console.log('Updated activeadf:', activeadf.value);
+  }).catch((err) => {
+    console.error('请求失败:', err);
+  });
+}
+
 // Python窗口初始化
 const initPython = () => {
   console.log('Pythonchushihua');
@@ -3818,6 +3857,22 @@ const xfoilok=()=>{
   }
 }
 
+// adflow保存
+const adflowok=()=>{
+  if(ADflowref.value){
+    ADflowref.value.getadflowsave();
+  }
+}
+
+// xfoiladflow保存
+const getXfoilAdflowsave = (activeadf) => {
+  if (activeadf == 'XFOIL') {
+    xfoilok();
+  } else if (activeadf == 'ADFLOW') {
+    adflowok();
+  }
+}
+
 
 </script>
 <style lang="scss" scoped>

+ 194 - 71
src/views/titlecomponent/ADflow.vue

@@ -25,7 +25,7 @@
                             </el-option>
                           </el-select> -->
           <el-input
-            v-model="adiflowvalue.gridfile"
+            v-model="adflowvalue.gridfile"
             :step="100"
             :min="0"
             :max="1000"
@@ -38,26 +38,25 @@
     <!-- 来流参数 v-show="currentTab=='0'"-->
     <div v-show="currentTab1 == '1'">
       <div class="eldesign classtable" style="margin-top: 10px">
-        <el-table :data="lailiutable" border style="width: 100%; height: 400px">
+        <el-table :data="inParams" border style="width: 100%; height: 400px">
           <el-table-column type="index" width="70" label="编号" />
           <el-table-column prop="name" label="参数名称">
-            <template #default="{ row }">
+            <!-- <template #default="{ row }">
               <el-input v-model="row.name" @change="handleEdit(row)" />
-            </template>
+            </template> -->
           </el-table-column>
-          <el-table-column prop="data" label="参数值">
+          <el-table-column prop="value" label="参数值">
             <template #default="{ row }">
-              <el-input v-model.number="row.data" @change="handleEdit(row)" />
+              <el-input v-model="row.value" type="number" />
             </template>
           </el-table-column>
-          <el-table-column prop="con" label="启用" width="100">
+          <el-table-column prop="flag" label="启用" width="100">
             <template v-slot="scope">
               <el-checkbox
                 :false-label="-1"
                 :true-label="1"
                 :label="false"
-                v-model="scope.row.con"
-                @change="changecheck($event, scope.row)"
+                v-model="scope.row.flag"
               />
             </template>
           </el-table-column>
@@ -74,7 +73,7 @@
     >
       <el-form-item label="工况条件:" :label-width="formLabelWidth1">
         <el-select
-          v-model="adiflowvalue.proname"
+          v-model="adflowvalue.proname"
           :suffix-icon="CaretBottom"
           placeholder="请选择"
         >
@@ -104,12 +103,12 @@
       </el-form-item>
       <el-form-item label="控制方程:" :label-width="formLabelWidth1">
         <el-select
-          v-model="ad2"
+          v-model="equationtype"
           :suffix-icon="CaretBottom"
           placeholder="请选择"
         >
           <el-option
-            v-for="item in adlist2"
+            v-for="item in equationtypelist"
             :key="item.value"
             :label="item.label"
             :value="item.value"
@@ -119,12 +118,12 @@
       </el-form-item>
       <el-form-item label="升力定义方向:" :label-width="formLabelWidth1">
         <el-select
-          v-model="ad3"
+          v-model="liftindex"
           :suffix-icon="CaretBottom"
           placeholder="请选择"
         >
           <el-option
-            v-for="item in adlist3"
+            v-for="item in liftindexlist"
             :key="item.value"
             :label="item.label"
             :value="item.value"
@@ -134,7 +133,7 @@
       </el-form-item>
       <el-form-item label="特征长度:" :label-width="formLabelWidth1">
         <el-input
-          v-model="adiflowvalue.FeatureLength"
+          v-model="adflowvalue.length"
           :step="100"
           :min="0"
           :max="1000"
@@ -143,7 +142,7 @@
       </el-form-item>
       <el-form-item label="参考温度:" :label-width="formLabelWidth1">
         <el-input
-          v-model="adiflowvalue.ReferenceTemperature"
+          v-model="adflowvalue.temperature"
           :step="1"
           :min="0"
           :max="1000"
@@ -152,7 +151,7 @@
       </el-form-item>
       <el-form-item label="参考面积:" :label-width="formLabelWidth1">
         <el-input
-          v-model="adiflowvalue.ReferenceArea"
+          v-model="adflowvalue.area"
           :step="100"
           :min="0"
           :max="1000"
@@ -163,7 +162,7 @@
         <div style="display: flex">
           <el-input
             style="margin-right: 10px"
-            v-model="adiflowvalue.MomentCenterX"
+            v-model="adflowvalue.momx"
             :step="100"
             :min="0"
             :max="1000"
@@ -171,14 +170,14 @@
           />
           <el-input
             style="margin-right: 10px"
-            v-model="adiflowvalue.MomentCenterY"
+            v-model="adflowvalue.momy"
             :step="100"
             :min="0"
             :max="1000"
             controls-position="right"
           />
           <el-input
-            v-model="adiflowvalue.MomentCenterZ"
+            v-model="adflowvalue.momz"
             :step="100"
             :min="0"
             :max="1000"
@@ -189,7 +188,7 @@
 
       <el-form-item label="多重网格:" :label-width="formLabelWidth1">
         <el-input
-          v-model="adiflowvalue.Multigrid"
+          v-model="adflowvalue.mgcycle"
           :step="100"
           :min="0"
           :max="1000"
@@ -198,7 +197,7 @@
       </el-form-item>
       <el-form-item label="计算步数:" :label-width="formLabelWidth1">
         <el-input
-          v-model="adiflowvalue.CalculationSteps"
+          v-model="adflowvalue.ncycles"
           :step="100"
           :min="0"
           :max="1000"
@@ -208,19 +207,28 @@
       <el-form-item label="监控变量:" :label-width="formLabelWidth1">
         <el-row>
         <el-col :span="12">
-          <el-checkbox v-model="checked2" label="升力系数Cl" size="large" />
-          <el-checkbox v-model="checked1" label="密度残差Resrho" size="large" />
+          <el-checkbox v-model="cl" label="升力系数Cl" size="large" />
+          <el-checkbox v-model="resrho" label="密度残差Resrho" size="large" />
       
         </el-col>
         <el-col :span="12">
-          <el-checkbox v-model="checked3" label="阻力系数Cd" size="large" />
-          <el-checkbox v-model="checked4" label="力矩系数Cm" size="large" />
+          <el-checkbox v-model="cd" label="阻力系数Cd" size="large" />
+          <el-checkbox v-model="cmz" label="力矩系数Cm" size="large" />
         </el-col>
       </el-row>
       </el-form-item>
       <el-form-item label="细网格收敛残差:" :label-width="formLabelWidth1">
         <el-input
-          v-model="adiflowvalue.popsize"
+          v-model="adflowvalue.l2convergence"
+          :step="100"
+          :min="0"
+          :max="1000"
+          controls-position="right"
+        />
+      </el-form-item>
+      <el-form-item label="粗网格收敛残差:" :label-width="formLabelWidth1">
+        <el-input
+          v-model="adflowvalue.l2convergencecoarse"
           :step="100"
           :min="0"
           :max="1000"
@@ -243,26 +251,25 @@
     <!-- 分析参数 v-show="currentTab=='0'"-->
     <div v-show="currentTab1 == '3'">
       <div class="eldesign classtable" style="margin-top: 10px">
-        <el-table :data="fenxitable" border style="width: 100%; height: 400px">
+        <el-table :data="outParams" border style="width: 100%; height: 400px">
           <el-table-column type="index" width="70" label="编号" />
           <el-table-column prop="name" label="参数名称">
-            <template #default="{ row }">
+            <!-- <template #default="{ row }">
               <el-input v-model="row.name" @change="handleEdit(row)" />
-            </template>
+            </template> -->
           </el-table-column>
-          <el-table-column prop="data" label="参数值">
+          <el-table-column prop="value" label="参数值">
             <template #default="{ row }">
-              <el-input v-model.number="row.data" @change="handleEdit(row)" />
+              <el-input v-model="row.value" type="number" />
             </template>
           </el-table-column>
-          <el-table-column prop="con" label="启用" width="100">
+          <el-table-column prop="flag" label="启用" width="100">
             <template v-slot="scope">
               <el-checkbox
                 :false-label="-1"
                 :true-label="1"
                 :label="false"
-                v-model="scope.row.con"
-                @change="changecheck($event, scope.row)"
+                v-model="scope.row.flag"
               />
             </template>
           </el-table-column>
@@ -275,18 +282,21 @@
 import { ref, onMounted, reactive, provide, nextTick } from "vue"
 import { ElMessage, ElButton, ElDialog, ElSelect } from "element-plus"
 import { Edit, CaretBottom } from "@element-plus/icons-vue"
+import { request, uploadFile } from "@/utils/request"
 let formLabelWidth3 = ref(100)
 let formLabelWidth1 = ref(170)
 let formLabelWidth200 = ref(200)
 let currentTab1 = ref(0)
-let checked1 = ref(true)
-let checked2 = ref(true)
-let checked3 = ref(true)
-let checked4 = ref(true)
+let resrho = ref(1)
+let pid = ref()
+let adid = ref()
+let cl = ref(1)
+let cd = ref(1)
+let cmz = ref(1)
 let writetecplotsurfacesolution = ref(1)
 let radioq = ref(1)
-let ad2 = ref("RANS")
-let adlist2 = ref([
+let equationtype = ref("RANS")
+let equationtypelist = ref([
   { label: "RANS", value: "RANS" },
   { label: "Euler", value: "Euler" }
 ])
@@ -295,66 +305,82 @@ let isairfoilList = ref([
   { label: "二维", value: 1 },
   { label: "三维", value: 0 }
 ])
-let ad3 = ref("x")
-let adlist3 = ref([
-  { label: "x", value: "x" },
-  { label: "y", value: "y" },
-  { label: "z", value: "z" }
+let liftindex = ref("x")
+let liftindexlist = ref([
+  { label: "x", value: 1 },
+  { label: "y", value: 2 },
+  { label: "z", value: 3 }
 ])
-let lailiutable = ref([
+let inParams = ref([
   {
-    data: 2.66482,
+    code:'alpha',
+    value: 2.66482,
     name: "攻角",
-    con: 1
+    type: 1,
+    flag: 1
   },
   {
-    data: 0.734,
+    code:'mach',
+    value: 0.734,
     name: "马赫数",
-    con: 1
+    type: 1,
+    flag: 1
   },
   {
-    data: 6.5e6,
+    code:'reynolds',
+    value: 6.5e6,
     name: "雷诺数",
-    con: 1
+    type: 1,
+    flag: 1
   }
 ])
 
-let fenxitable = ref([
+let outParams = ref([
   {
-    data: "0.0",
+    code: "cl",
+    value: "0.0",
     name: "升力系数Cl",
-    con: 1
+    type: 2,
+    flag: 1
   },
   {
-    data: "0.0",
+    code: "cd",
+    value: "0.0",
     name: "阻力系数Cd",
-    con: 1
+    type: 2,
+    flag: 1
   },
   {
-    data: "0.0",
+    code: "cm",
+    value: "0.0",
     name: "力矩系数Cm",
-    con: 1
+    type: 2,
+    flag: 1
   },
   {
-    data: "0.0",
+    code: " ",
+    value: "0.0",
     name: "体积",
-    con: 1
+    type: 2,
+    flag: 1
   }
 ])
 
 
-let adiflowvalue = ref({
+let adflowvalue = ref({
   gridfile: "",
   proname: "巡航工况",
   isairfoil: 1,
-  ReferenceTemperature: 288.15,
-  ReferenceArea: 1,
-  MomentCenterX: 0.25,
-  MomentCenterY: 0,
-  MomentCenterZ: 0,
-  Multigrid: "sg",
-  CalculationSteps: 500,
-  popsize: 1.00E-5
+  temperature: 288.15,
+  length: 1,
+  area: 1,
+  momx: 0.25,
+  momy: 0,
+  momz: 0,
+  mgcycle: "sg",
+  ncycles: 500,
+  l2convergence: 1.00E-5,
+  l2convergencecoarse: 1.00E-4,
 })
 
 let wclist = ref([
@@ -369,6 +395,103 @@ let tabslist1 = ref([
 const selectTab1 = (index) => {
   currentTab1.value = index
 }
+
+const convertToStringArray = (result, Data) => {
+  console.log('Data:', Data);
+
+  // 安全检查 Data,确保它是一个数组
+  if (!Array.isArray(Data)) {
+    console.error('Data should be an array');
+    return result; // 返回原 result 或者根据需要返回其他默认值
+  }
+
+  result = Data.map(row => {
+    // 获取每一行的 `code`, `name`, `value` 和 `flag`
+    const code = row.code || ' ';
+    const name = row.name || ' ';
+    const value = (row.value === null || row.value === undefined || row.value === '') ? ' ' : row.value;
+    const flag = row.flag || ' ';
+
+    // 将字段连接为一个以逗号分隔的字符串
+    return `${code},${name},${value},${flag}`;
+  }).join(';');  // 每行之间用分号分隔
+
+  return result;
+}
+
+const getadflow = (id) => {
+  pid.value = id;
+  const params = {
+    transCode: "MDO0049",
+    pid: pid.value,
+  };
+  request(params).then((res) => {
+    if (res.hasOwnProperty("adid")) {
+      getadflowAssign(res);
+    }
+  })
+  .catch((err) => {
+      ElMessage.error(err.returnMsg)
+    })
+}
+
+const getadflowAssign = (data) => {
+  adflowvalue.value.gridfile = data.gridfile
+  adflowvalue.value.proname = data.proname
+  adflowvalue.value.isairfoil = data.isairfoil
+  adflowvalue.value.temperature = data.temperature
+  adflowvalue.value.length = data.length
+  adflowvalue.value.area = data.area
+  adflowvalue.value.momx = data.momx
+  adflowvalue.value.momy = data.momy
+  adflowvalue.value.momz = data.momz
+  adflowvalue.value.mgcycle = data.mgcycle
+  adflowvalue.value.ncycles = data.ncycles
+  adflowvalue.value.l2convergence = data.l2convergence
+  adflowvalue.value.l2convergencecoarse = data.l2convergencecoarse
+  inParams.value = data.inParams
+  outParams.value = data.outParams
+}
+
+const getadflowsave = () => {
+  const params = {
+    transCode: "MDO0050",
+    pid: pid.value,
+    gridfile: adflowvalue.value.gridfile,
+    fid:'', 
+    proname: adflowvalue.value.proname,
+    isairfoil: adflowvalue.value.isairfoil,
+    temperature: adflowvalue.value.temperature,
+    length: adflowvalue.value.length,
+    area: adflowvalue.value.area,
+    momx: adflowvalue.value.momx,
+    momy: adflowvalue.value.momy,
+    momz: adflowvalue.value.momz,
+    mgcycle: adflowvalue.value.mgcycle,
+    ncycles: adflowvalue.value.ncycles,
+    l2convergence: adflowvalue.value.l2convergence,
+    l2convergencecoarse: adflowvalue.value.l2convergencecoarse,
+    checked:1,
+    inParams: convertToStringArray([],inParams.value),
+    outParams: convertToStringArray([],outParams.value)
+  }
+  request(params).then((res) => {
+    ElMessage({
+        message: res.returnMsg,
+        type: 'success',
+      })
+  })
+  .catch((err) => {
+      ElMessage.error(err.returnMsg)
+    })
+}
+
+defineExpose({
+  getadflow,
+  getadflowAssign,
+  getadflowsave
+})
+
 </script>
 
 

+ 43 - 40
src/views/titlecomponent/Xfoil.vue

@@ -15,15 +15,16 @@
     <div v-show="currentTab == '0'">
       <div class="eldesign classtable" style="margin-top: 10px">
         <el-table :data="inParams" border style="width: 100%; height: 400px">
-          <el-table-column prop="code" width="70" label="编号" />
+          <el-table-column type="index" width="70" label="编号"/>
+          <!-- <el-table-column prop="code" width="70" label="编码" /> -->
           <el-table-column prop="name" label="参数名称">
-            <template #default="{ row }">
+            <!-- <template #default="{ row }">
               <el-input v-model="row.name" />
-            </template>
+            </template> -->
           </el-table-column>
           <el-table-column prop="value" label="参数值">
             <template #default="{ row }">
-              <el-input v-model.number="row.value"  />
+              <el-input v-model="row.value" type="number" />
             </template>
           </el-table-column>
           <el-table-column prop="flag" label="启用" width="100">
@@ -43,11 +44,12 @@
     <div v-show="currentTab == '2'">
       <div class="eldesign classtable" style="margin-top: 10px">
         <el-table :data="outParams" border style="width: 100%">
-          <el-table-column prop="code" width="70" label="编号" />
+          <el-table-column type="index" width="70" label="编号" />
+          <!-- <el-table-column prop="code" width="70" label="编码" /> -->
           <el-table-column prop="name" label="参数名称">
-            <template #default="{ row }">
+            <!-- <template #default="{ row }">
               <el-input v-model="row.name" @change="handleEdit(row)" />
-            </template>
+            </template> -->
           </el-table-column>
           <el-table-column prop="value" label="参数值">
             <template #default="{ row }">
@@ -171,69 +173,69 @@ let tabslist = ref([
 
 let inParams = ref([
   {
-    code: "1",
+    code: "alpha",
     value: 0.1,
     name: "AoA",
     flag: 1,
-    type: 1
+    
   },
   {
-    code: "2",
+    code: "mach,",
     value: 0.1,
-    name: "Ma",
+    name: "MA",
     flag: 1,
-    type: 1
+    
   },
   {
-    code: "3",
+    code: "reynolds",
     value: 6.5e6,
     name: "Re",
     flag: 1,
-    type: 1
+    
   }
 ])
 let outParams = ref([
 {
-    code: "1",
-    value: "000",
+    code: "cl",
+    value: "0.0",
     name: "升力系数Cl",
     flag: 1,
-    type: 2
+    
   },
   {
-    code: "2",
-    value: "000",
+    code: "cd",
+    value: "0.00436",
     name: "阻力系数Cd",
     flag: 1,
-    type: 2
+    
   },
   {
-    code: "3",
-    value: "000",
+    code: "cdp",
+    value: "0.1",
     name: "压阻力系数Cdp",
     flag: 1,
-    type: 2
+    
   },
   {
-    code: "4",
-    value: "000",
+    code: "cm",
+    value: "0.1",
     name: "力矩系数Cm",
     flag: 1,
-    type: 2
+    
   },
   {
-    code: "5",
-    value: "000",
+    code: "xtr_upper",
+    value: "0.1",
     name: "上表面转换点位置xtr-upper",
     flag: 1,
-    type: 2
+    
   },
   {
-    code: "6",
-    value: "000",
+    code: "xtr_lower",
+    value: "0.1",
     name: "下表面转换点位置xtr-lower",
     flag: 1,
-    type: 2
+    
   }
 ])
 // 选项卡
@@ -260,14 +262,15 @@ const convertToStringArray = (result, Data) => {
   }
 
   result = Data.map(row => {
-    // 获取每一列的数据,排除带有 'id' 的字段
-    return Object.keys(row)
-      .map(key => {
-        const value = row[key];
-        return (value === null || value === undefined || value === '') ? ' ' : value; // 处理 null、undefined 和空字符串
-      })
-      .join(',');  // 将每个字段的值用逗号连接
-  }).join(';');
+    // 获取每一行的 `code`, `name`, `value` 和 `flag`
+    const code = row.code || ' ';
+    const name = row.name || ' ';
+    const value = (row.value === null || row.value === undefined || row.value === '') ? ' ' : row.value;
+    const flag = row.flag || ' ';
+
+    // 将字段连接为一个以逗号分隔的字符串
+    return `${code},${name},${value},${flag}`;
+  }).join(';');  // 每行之间用分号分隔
 
   return result;
 }

+ 2 - 1
src/views/titlecomponent/ffds.vue

@@ -48,7 +48,7 @@
     </el-form-item>
     <div class="classtable">
       <el-table :data="tableDatacst1" style="width: 100%" border>
-        <el-table-column prop="表格" label="表格" width="180" />
+        <el-table-column prop="表格" label="" width="180" />
         <el-table-column
           v-for="(item, index) in tablecstHeaders"
           :key="index"
@@ -161,6 +161,7 @@ const generateVars = () => {
   vars.value = values.join(',');
 };
 
+// 用来初始化表格,将 vars 中的值填充到表格中
 const initializeTableFromVars = () => {
   if (!vars.value) return;