Browse Source

气弹求解

huangxingxing 4 months ago
parent
commit
232466c84b

+ 31 - 2
src/main/java/com/miniframe/bisiness/mdo/MDO0039Service.java

@@ -78,7 +78,7 @@ public class MDO0039Service extends MDO0039BaseModel implements ExecProcessFlow
 		String cpacsPath =TemplateGenerator.createcCpacsXml(pid,cspvo);
 
 
-		if(cspvo.getXfoil()!=null){//workflow 求解器
+		if(cspvo.getXfoil()!=null&&cspvo.getFsi()==null){//workflow 求解器
 			//创建workflow
 			String workflowPath =TemplateGenerator.createcWorkflowXml(pid,wvo);
 			List<Solver> solvers =new ArrayList<>();
@@ -93,7 +93,7 @@ public class MDO0039Service extends MDO0039BaseModel implements ExecProcessFlow
 			//创建run.py
 			TemplateGenerator.createRunpy2(pid);
 			run2(pid);
-		}else if(cspvo.getAdflow()!=null){ //adflow 求解器
+		}else if(cspvo.getAdflow()!=null&&cspvo.getFsi()==null){ //adflow 求解器
 			//创建adflow
 			String workflowPath =TemplateGenerator.createcWorkflowXml2(pid,wvo);
 			List<Solver> solvers =new ArrayList<>();
@@ -118,6 +118,35 @@ public class MDO0039Service extends MDO0039BaseModel implements ExecProcessFlow
 			//创建run.py
 			TemplateGenerator.createRunpy2(pid);
 			run3(pid);
+		}else if(cspvo.getAdflow()!=null&&cspvo.getFsi()!=null){ //气弹 求解器
+			//创建adflow
+			String workflowPath =TemplateGenerator.createcWorkflowXml3(pid,wvo);
+			List<Solver> solvers =new ArrayList<>();
+			Solver solver =new Solver();
+			solver.setWorkflowPath(workflowPath);
+			solver.setCpacsPath(cpacsPath);
+			solvers.add(solver);
+			provo.setSolvers(solvers);
+			//文件迁移
+			XIFileUtils.mkdir(LogService.BPATH+"/"+pro.getId()+"/in/model");
+			XIFileUtils.mkdir(LogService.BPATH+"/"+pro.getId()+"/in/model");
+			XIFileUtils.mkdir(LogService.BPATH+"/"+pro.getId()+"/in/model/aerodynamic");
+			XIFileUtils.mkdir(LogService.BPATH+"/"+pro.getId()+"/in/model/aerodynamic");
+			String xyzfid=cspvo.getFfd().getFid();
+			String gid =cspvo.getAdflow().getFid();
+			String xyzFile = XIFileUtils.getRootPathStr()+"/"+XIFileUtils.getFileUrl(xyzfid);
+			String gfile = XIFileUtils.getRootPathStr()+"/"+XIFileUtils.getFileUrl(gid);
+			XIFileUtils.fileCopy(xyzFile,LogService.BPATH+"/"+pro.getId()+"/in/model/aerodynamic/"+cspvo.getFfd().getFname());
+			XIFileUtils.fileCopy(gfile,LogService.BPATH+"/"+pro.getId()+"/in/model/aerodynamic/"+cspvo.getAdflow().getGridfile());
+			XIFileUtils.mkdir(LogService.BPATH+"/"+pro.getId()+"/in/model/structure");
+			String bdfid= cspvo.getTacs().getFid();
+			String bdffile = XIFileUtils.getRootPathStr()+"/"+XIFileUtils.getFileUrl(bdfid);
+			XIFileUtils.fileCopy(bdffile,LogService.BPATH+"/"+pro.getId()+"/in/model/structure/"+cspvo.getTacs().getFname());
+			//创建problem.xml
+			TemplateGenerator.createProblemXml(pid,provo);
+			//创建run.py
+			TemplateGenerator.createRunpy2(pid);
+			run2(pid);
 		}else{
 			if(StringUtil.isEmpty(pro.getStype())){
 				throw new BusinessException("MDO000011");

+ 143 - 4
src/main/java/com/miniframe/modo/temp/TemplateGenerator.java

@@ -168,6 +168,12 @@ public class TemplateGenerator {
         vo.setXfoil(xfoil);
         MdoProAdflow adflow = findAdflow(pid);
         vo.setAdflow(adflow);
+        MdoProMathfunc mathfunc = findMashfunc(pid);
+        vo.setMathfunc(mathfunc);
+        MdoProTacs tacs = findTasc(pid);
+        tacs.setThickness(tacs.getThickness().replace(",",";"));
+        vo.setTacs(tacs);
+        MdoProFsi fsi =findFsi(pid);
         //不用生成
         if(xfoil==null&& adflow==null){
             return null;
@@ -201,14 +207,75 @@ public class TemplateGenerator {
             vo.setAdinvo(adinvo);
 
             AdflowOutVo adoutvo = new AdflowOutVo();
-            adoutvo.setCl(getValByParaListAndCode(adInoutList,"cl"));
-            adoutvo.setCd(getValByParaListAndCode(adInoutList,"cd"));
-            adoutvo.setCmz(getValByParaListAndCode(adInoutList,"cmz"));
+
+            String cl = getValByParaListAndCode(adInoutList,"cl");
+            if("false".equals(cl)){
+                adoutvo.setIscl(false);
+            }else{
+                adoutvo.setIscl(true);
+                adoutvo.setCl(cl);
+            }
+            String cd = getValByParaListAndCode(adInoutList,"cd");
+            if("false".equals(cd)){
+                adoutvo.setIscd(false);
+            }else{
+                adoutvo.setIscd(true);
+                adoutvo.setCd(cd);
+            }
+
+            String cmz = getValByParaListAndCode(adInoutList,"cmz");
+            if("false".equals(cmz)){
+                adoutvo.setIscmz(false);
+            }else{
+                adoutvo.setIscmz(true);
+                adoutvo.setCmz(cmz);
+            }
+
+            String cmy = getValByParaListAndCode(adInoutList,"cmy");
+            if("false".equals(cmy)){
+                adoutvo.setIscmy(false);
+            }else{
+                adoutvo.setIscmy(true);
+                adoutvo.setCmy(cmy);
+            }
+
             vo.setAdoutvo(adoutvo);
         }
 
+        if(tacs!=null){
+            List<MdoProInoutPara> adInoutList = findMdoProInoutParas(pid, tacs.getId());
+            TacsOutVo tacsoutvo =new TacsOutVo();
 
+            String mass = getValByParaListAndCode(adInoutList,"mass");
+            if("false".equals(mass)){
+                tacsoutvo.setIsmass(false);
+            }else{
+                tacsoutvo.setIsmass(true);
+                tacsoutvo.setMass(mass);
+            }
+            String ks_vmfailure = getValByParaListAndCode(adInoutList,"ks_vmfailure");
+            if("false".equals(ks_vmfailure)){
+                tacsoutvo.setIsks_vmfailure(false);
+            }else{
+                tacsoutvo.setIsks_vmfailure(true);
+                tacsoutvo.setKs_vmfailure(ks_vmfailure);
+            }
+            String maxdeform = getValByParaListAndCode(adInoutList,"maxdeform");
+            if("false".equals(maxdeform)){
+                tacsoutvo.setIsmaxdeform(false);
+            }else{
+                tacsoutvo.setIsmaxdeform(true);
+                tacsoutvo.setMaxdeform(maxdeform);
+            }
+            vo.setTacsoutvo(tacsoutvo);
+        }
 
+        if(mathfunc!=null){
+            List<MdoProInoutPara> adInoutList = findMdoProInoutParas(pid, tacs.getId());
+            MathfuncVo mathfuncVo =new MathfuncVo();
+            mathfuncVo.setCd_mass(getValByParaListAndCode(adInoutList,"cd_mass"));
+            vo.setMathfuncVo(mathfuncVo);
+        }
 
         MdoProCst cst = findCst(pid);
         vo.setCst(cst);
@@ -217,6 +284,33 @@ public class TemplateGenerator {
         return vo;
     }
 
+    private static MdoProFsi findFsi(String pid) {
+        MdoProFsiMapper xdao = UtilTools.getBean(MdoProFsiMapper.class);
+        MdoProFsiSQLBuilder xsb  = new MdoProFsiSQLBuilder();
+        MdoProFsiSQLBuilder.Criteria xsc =xsb.createCriteria();
+        xsc.andPidEqualTo(pid);
+        List<MdoProFsi> xList = xdao.selectByExample(xsb);
+        MdoProFsi fsi =null;
+        if(xList!=null&&!xList.isEmpty()){
+            fsi=xList.get(0);
+        }
+        return fsi;
+    }
+
+    private static MdoProTacs findTasc(String pid) {
+        MdoProTacsMapper xdao = UtilTools.getBean(MdoProTacsMapper.class);
+        MdoProTacsSQLBuilder xsb  = new MdoProTacsSQLBuilder();
+        MdoProTacsSQLBuilder.Criteria xsc =xsb.createCriteria();
+        xsc.andPidEqualTo(pid);
+        List<MdoProTacs> xList = xdao.selectByExample(xsb);
+        MdoProTacs tacs =null;
+        if(xList!=null&&!xList.isEmpty()){
+            tacs=xList.get(0);
+        }
+        return tacs;
+    }
+
+
     private static List<MdoProInoutPara> findMdoProInoutParas(String pid, String fatherid) {
         MdoProInoutParaMapper xdao = UtilTools.getBean(MdoProInoutParaMapper.class);
         MdoProInoutParaSQLBuilder xsb  = new MdoProInoutParaSQLBuilder();
@@ -234,10 +328,23 @@ public class TemplateGenerator {
         }).collect(Collectors.toList());
         if(tList!=null&&!tList.isEmpty()){
             value = tList.get(0).getValue();
+        }else{
+            value ="false";
         }
         return value;
     }
-
+    private static MdoProMathfunc findMashfunc(String pid) {
+        MdoProMathfuncMapper mdao = UtilTools.getBean(MdoProMathfuncMapper.class);
+        MdoProMathfuncSQLBuilder sb  = new MdoProMathfuncSQLBuilder();
+        MdoProMathfuncSQLBuilder.Criteria sc =sb.createCriteria();
+        sc.andPidEqualTo(pid);
+        List<MdoProMathfunc> mList = mdao.selectByExample(sb);
+        MdoProMathfunc m =null;
+        if(mList!=null&&!mList.isEmpty()){
+            m=mList.get(0);
+        }
+        return m;
+    }
     private static MdoProFfd getFfd(String pid) {
         MdoProFfdMapper xdao = UtilTools.getBean(MdoProFfdMapper.class);
         MdoProFfdSQLBuilder xsb  = new MdoProFfdSQLBuilder();
@@ -293,6 +400,38 @@ public class TemplateGenerator {
         }
         return xfoil;
     }
+    /**
+     * TODO 创建 workflowXml
+     * @return
+     */
+    public static String createcWorkflowXml3(String pid,WorkflowVo vo){
+        try {
+            if(vo ==null){
+                return null;
+            }
+            Configuration cfg = new Configuration(Configuration.VERSION_2_3_0);
+            // 设置模板所在目录
+            cfg.setClassForTemplateLoading(TemplateGenerator.class, "/templates");
+            // 获取模板对象
+            Template template = cfg.getTemplate("workflow3.ftl");
+            // 定义数据模型(Map)
+            Map<String, Object> dataModel = new HashMap<>();
+//            CpacsVo vo = getCpacsVo(pid);
+
+            dataModel.put("vo",vo);
+            //dataModel.put("geoFilePath", BPATH + "/" + aid + "/" + jid + "/Geometry");
+            // 将数据模型传入模板进行处理
+            StringWriter writer = new StringWriter();
+            template.process(dataModel, writer);
+            FileWriter fileWriter = new FileWriter(LogService.BPATH + "/" + pid + "/in/workflow.xml");
+            fileWriter.write(writer.toString());
+            fileWriter.close();
+            return  LogService.BPATH + "/" + pid + "/in/workflow.xml";
+        }catch (Exception e){
+            return null;
+        }
+    }
+
     /**
      * TODO 创建 workflowXml
      * @return

+ 11 - 32
src/main/java/com/miniframe/modo/temp/cpacs/AdflowOutVo.java

@@ -1,38 +1,17 @@
 package com.miniframe.modo.temp.cpacs;
 
-public class AdflowOutVo {
-   private String cl;
-   private String cd;
-   private String cmz;
-
-    public AdflowOutVo() {
-        super();
-        this.cl ="0";
-        this.cd ="0";
-        this.cmz ="0";
-    }
-
-    public String getCl() {
-        return cl;
-    }
+import lombok.Data;
 
-    public void setCl(String cl) {
-        this.cl = cl;
-    }
-
-    public String getCd() {
-        return cd;
-    }
-
-    public void setCd(String cd) {
-        this.cd = cd;
-    }
+@Data
+public class AdflowOutVo {
+    private boolean iscl;
+    private String cl;
+    private boolean iscd;
+    private String cd;
+    private boolean iscmz;
+    private String cmz;
+    private boolean iscmy;
+    private String cmy;
 
-    public String getCmz() {
-        return cmz;
-    }
 
-    public void setCmz(String cmz) {
-        this.cmz = cmz;
-    }
 }

+ 7 - 69
src/main/java/com/miniframe/modo/temp/cpacs/CpacsVo.java

@@ -2,7 +2,9 @@ package com.miniframe.modo.temp.cpacs;
 
 import com.miniframe.model.mdo.*;
 import com.miniframe.modo.temp.problem.HeaderVo;
+import lombok.Data;
 
+@Data
 public class CpacsVo {
     private HeaderVo header;
     private MdoProXfoil xfoil;
@@ -14,75 +16,11 @@ public class CpacsVo {
     private MdoProFfd ffd;
     private MdoProCst cst;
 
-    public MdoProXfoil getXfoil() {
-        return xfoil;
-    }
+    private MdoProTacs tacs;
+    private TacsOutVo tacsoutvo;
+    private MdoProMathfunc mathfunc;
+    private MathfuncVo mathfuncVo;
+    private MdoProFsi fsi;
 
-    public void setXfoil(MdoProXfoil xfoil) {
-        this.xfoil = xfoil;
-    }
 
-    public XfoilInVo getXinvo() {
-        return xinvo;
-    }
-
-    public void setXinvo(XfoilInVo xinvo) {
-        this.xinvo = xinvo;
-    }
-
-    public XfoilOutVo getXoutvo() {
-        return xoutvo;
-    }
-
-    public void setXoutvo(XfoilOutVo xoutvo) {
-        this.xoutvo = xoutvo;
-    }
-
-    public MdoProAdflow getAdflow() {
-        return adflow;
-    }
-
-    public void setAdflow(MdoProAdflow adflow) {
-        this.adflow = adflow;
-    }
-
-    public AdflowInVo getAdinvo() {
-        return adinvo;
-    }
-
-    public void setAdinvo(AdflowInVo adinvo) {
-        this.adinvo = adinvo;
-    }
-
-    public AdflowOutVo getAdoutvo() {
-        return adoutvo;
-    }
-
-    public void setAdoutvo(AdflowOutVo adoutvo) {
-        this.adoutvo = adoutvo;
-    }
-
-    public MdoProFfd getFfd() {
-        return ffd;
-    }
-
-    public void setFfd(MdoProFfd ffd) {
-        this.ffd = ffd;
-    }
-
-    public MdoProCst getCst() {
-        return cst;
-    }
-
-    public void setCst(MdoProCst cst) {
-        this.cst = cst;
-    }
-
-    public HeaderVo getHeader() {
-        return header;
-    }
-
-    public void setHeader(HeaderVo header) {
-        this.header = header;
-    }
 }

+ 9 - 0
src/main/java/com/miniframe/modo/temp/cpacs/MathfuncVo.java

@@ -0,0 +1,9 @@
+package com.miniframe.modo.temp.cpacs;
+
+import lombok.Data;
+
+@Data
+public class MathfuncVo {
+    private String cd_mass;
+
+}

+ 13 - 0
src/main/java/com/miniframe/modo/temp/cpacs/TacsOutVo.java

@@ -0,0 +1,13 @@
+package com.miniframe.modo.temp.cpacs;
+
+import lombok.Data;
+
+@Data
+public class TacsOutVo {
+    private boolean ismass;
+    private String mass;
+    private boolean isks_vmfailure;
+    private String ks_vmfailure;
+    private boolean ismaxdeform;
+    private String maxdeform;
+}

+ 92 - 5
src/main/resources/templates/cpacs.ftl

@@ -125,9 +125,22 @@
              </condition>
              <evalFuncs mapType="complex">
                  <force mapType="complex">
-                     <cl mapType="double">${vo.adoutvo.cl}</cl>
-                     <cd mapType="double">${vo.adoutvo.cd}</cd>
-                     <cmz mapType="double">${vo.adoutvo.cmz}</cmz>
+                    <#if vo.adoutvo.iscl>
+                        <cl mapType="double">${vo.adoutvo.cl}</cl>
+                    <#else>
+                    </#if>
+                    <#if vo.adoutvo.iscd>
+                       <cd mapType="double">${vo.adoutvo.cd}</cd>
+                    <#else>
+                    </#if>
+                    <#if vo.adoutvo.iscmz>
+                       <cmz mapType="double">${vo.adoutvo.cmz}</cmz>
+                    <#else>
+                    </#if>
+                    <#if vo.adoutvo.iscmy>
+                       <cmy mapType="double">${vo.adoutvo.cmy}</cmy>
+                    <#else>
+                    </#if>
                  </force>
                  <geometry mapType="complex">
                         <volume mapType="complex">
@@ -140,13 +153,84 @@
                             <regionFile>leteList_T.dat</regionFile>
                             <value mapType="vector">1.0;1.0</value>
                         </thickness>
-                    </geometry>
+                 </geometry>
              </evalFuncs>
          </ADflow>
          <#else>
          </#if>
         </CFD>
-        <CSD/>
+         <#if vo.tacs??>
+             <CSD>
+               <TACS mapType="complex" uID="TACS">
+                 <switch mapType="boolean">1</switch>
+                 <proName>${vo.tacs.proname}</proName>
+                 <analyzed mapType="boolean">1</analyzed>
+                 <bdfFile>${vo.tacs.fname}</bdfFile>
+                 <bdfFully mapType="boolean">0</bdfFully>
+                 <useFFD mapType="boolean">${vo.tacs.useffd}</useFFD>
+                 <options mapType="complex">
+                   <writeSolution mapType="boolean">1</writeSolution>
+                   <L2Convergence mapType="double">${vo.tacs.l2convergence}</L2Convergence>
+                   <L2ConvergenceRel mapType="double">${vo.tacs.l2convergencerel}</L2ConvergenceRel>
+                   <nRestarts mapType="integer">15</nRestarts>
+                 </options>
+                 <material mapType="complex">
+                   <rho mapType="double">${vo.tacs.rho}</rho>
+                   <E mapType="double">${vo.tacs.e}</E>
+                   <nu mapType="double">${vo.tacs.nu}</nu>
+                   <ys mapType="double">${vo.tacs.ys}</ys>
+                   <thickness mapType="vector">${vo.tacs.thickness}</thickness>
+                 </material>
+                 <evalFuncs mapType="complex">
+                 <#if vo.tacsoutvo.ismass>
+                    <mass mapType="double">${vo.tacsoutvo.mass}</mass>
+                 <#else>
+                 </#if>
+                 <#if vo.tacsoutvo.ismaxdeform>
+                    <maxdeform mapType="double">${vo.tacsoutvo.maxdeform}</maxdeform>
+                 <#else>
+                 </#if>
+                 <#if vo.tacsoutvo.isks_vmfailure>
+                    <ks_vmfailure mapType="double">${vo.tacsoutvo.ks_vmfailure}</ks_vmfailure>
+                 <#else>
+                 </#if>
+                 </evalFuncs>
+               </TACS>
+             </CSD>
+          <#else>
+            <CSD/>
+          </#if>
+
+            <#if vo.fsi??>
+            <aeroelastic mapType="complex" uID="aeroelastic">
+                <stepMax mapType="integer">${vo.fsi.stepmax}</stepMax>
+                <outputSteps mapType="boolean">${vo.fsi.outputsteps}</outputSteps>
+                <datatransfer mapType="complex">
+                <method>${vo.fsi.method}</method>
+                <couplingGrid mapType="complex">
+                    <aeroGroup mapType="complex">
+                    <allWalls mapType="boolean">1</allWalls>
+                    </aeroGroup>
+                    <structGroup mapType="complex">
+                        <skin mapType="boolean">${vo.fsi.skin}</skin>
+                        <spar mapType="boolean">${vo.fsi.spar}</spar>
+                    </structGroup>
+                </couplingGrid>
+                </datatransfer>
+            </aeroelastic>
+            <#else>
+            </#if>
+
+
+        <#if vo.mathfunc??>
+        <mathematical>
+          <mathFunc mapType="complex" uID="mathFunc1">
+            <cd_mass mapType="double">${vo.mathfuncVo.cd_mass}</cd_mass>
+          </mathFunc>
+        </mathematical>
+         <#else>
+        </#if>
+
         <#if vo.ffd??>
          <FFD mapType="complex" uID="FFD">
                 <switch mapType="boolean">1</switch>
@@ -164,5 +248,8 @@
          </FFD>
           <#else>
           </#if>
+
+
+
     </toolspecific>
 </cpacs>

+ 95 - 0
src/main/resources/templates/workflow3.ftl

@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<opcs>
+    <header>
+        <name>SurroMDAO</name>
+        <creator>NWPU</creator>
+        <timestamp>2024-10-17T14:35:00</timestamp>
+        <version>0.1</version>
+        <opcsVersion>1.0</opcsVersion>
+    </header>
+	<schema>
+		<solvers>
+			<component uID="aeroelastic">
+				<name>pyAeroelasticADJ</name>
+				<input>
+					<parameterUID>/cpacs/toolspecific/FFD/vars/sample</parameterUID>
+				</input>
+				<input>
+					<parameterUID>/cpacs/toolspecific/CSD/TACS/material/thickness</parameterUID>
+				</input>
+				<output>
+					<parameterUID>/cpacs/toolspecific/CFD/ADflow/evalFuncs/force/cl</parameterUID>
+				</output>
+				<output>
+					<parameterUID>/cpacs/toolspecific/CFD/ADflow/evalFuncs/force/cd</parameterUID>
+				</output>
+				<output>
+					<parameterUID>/cpacs/toolspecific/CFD/ADflow/evalFuncs/force/cmy</parameterUID>
+				</output>
+				<output>
+					<parameterUID>/cpacs/toolspecific/CSD/TACS/evalFuncs/mass</parameterUID>
+				</output>
+				<output>
+					<parameterUID>/cpacs/toolspecific/CSD/TACS/evalFuncs/ks_vmfailure</parameterUID>
+				</output>
+				<execute tpye='component'>execute</execute>
+			</component>
+			<component uID="mathFunc1">
+				<name>MathFunc</name>
+				<execute tpye='component'>MathFunc</execute>
+				<input>
+					<parameterUID>/cpacs/toolspecific/CFD/ADflow/evalFuncs/force/cd</parameterUID>
+					<equationLabel>x1</equationLabel>
+				</input>
+				<input>
+					<parameterUID>/cpacs/toolspecific/CSD/TACS/evalFuncs/mass</parameterUID>
+					<equationLabel>x2</equationLabel>
+				</input>
+				<output>
+					<parameterUID>/cpacs/toolspecific/mathematical/mathFunc/cd_mass</parameterUID>
+					<equation language="Python">0.8*(x1-2.928702752230008186e-02)/2e-3+0.2*(x2-2.374579978214482253e+03)/600</equation>
+				</output>
+			</component>
+		</solvers>
+		<executeOrder>
+			<componentUID position="1">aeroelastic</componentUID>
+			<componentUID position="2">mathFunc1</componentUID>
+		</executeOrder>
+		<segments>
+            <segment uID="Seg1">
+                <fromParameterUID>/cpacs/toolspecific/FFD/vars/sample</fromParameterUID>
+                <toComponentUID>ADflow</toComponentUID>
+            </segment>
+            <segment uID="Seg2">
+                <fromComponentUID>ADflow</fromComponentUID>
+                <toParameterUID>/cpacs/toolspecific/CFD/ADflow/evalFuncs/cd</toParameterUID>
+            </segment>
+        </segments>
+        <parameters>
+            <parameter uID="/cpacs/toolspecific/FFD/vars/sample">
+                <label>FFD</label>
+            </parameter>
+			<parameter uID="/cpacs/toolspecific/CFD/ADflow/evalFuncs/force/cd">
+                <label>cd</label>
+            </parameter>
+            <parameter uID="/cpacs/toolspecific/CFD/ADflow/evalFuncs/force/cl">
+                <label>cl</label>
+            </parameter>
+			<parameter uID="/cpacs/toolspecific/CFD/ADflow/evalFuncs/force/cmy">
+                <label>cmy</label>
+            </parameter>
+			<parameter uID="/cpacs/toolspecific/CSD/TACS/evalFuncs/mass">
+                <label>mass</label>
+            </parameter>
+			<parameter uID="/cpacs/toolspecific/CSD/TACS/material/thickness">
+                <label>Thickness</label>
+            </parameter>
+			<parameter uID="/cpacs/toolspecific/CSD/TACS/evalFuncs/ks_vmfailure">
+                <label>ks_vmfailure</label>
+            </parameter>
+			<parameter uID="/cpacs/toolspecific/mathematical/mathFunc/cd_mass">
+                <label>cd_mass</label>
+            </parameter>
+        </parameters>
+	</schema>
+</opcs>