代码适用性-低耦合案例

背景:公司要写一个js方法,要求处理一写数据,然后显示在页面上。


这个是最开始写的,重要的是LCTShow(obj)方法,以后还要被其他人引用,所以要尽量做到低耦合。但是很明显,这段代码是一段失败的代码

document.getElementById("content").innerHTML = '<table><tr id="lct"></tr><tr id="ms"></tr></table>';
因为doucument.getElemnetById("content")这一句代码依赖于 html页面上的id=“content”的标签

所以要尽量在通用方法内部不出现像doucument.getElemnetById()之类的代码。

跳到修改完最终的代码,再看红色部分。


<script type="text/javascript">

        //搜狗、chrome、360、IE 兼容
        function LCTShow(obj) {
            document.getElementById("content").innerHTML = '<table><tr id="lct"></tr><tr id="ms"></tr></table>';
            var $lct = document.getElementById("lct");
            var $ms = document.getElementById("ms");
            if (obj.length > 0) {
                        for (var i = 0; i < obj.length; i++) {
                            if (obj[i].netState == '1') {
                                $lct.innerHTML = $lct.innerHTML  //后面几个一样的红色就不标注可
                                + '<td class="lct_1" ><image src="Images/DGBtn/y1.png" alt="无"></image></td>'
                            }
                            else {
                                $lct.innerHTML = $lct.innerHTML
                                + '<td class="lct_1""><image src="Images/DGBtn/y2.png" alt="无"></image></td>'
                            }
                            if (i != obj.length - 1) {
                                if (obj[i].netState == '1') {
                                    $lct.innerHTML = $lct.innerHTML
                                + '<td class="lct_2"><image src="Images/DGBtn/d1.png" alt="无"></image></td>'
                                }
                                else {
                                    lct.innerHTMLL = lct.innerHTML
                                + '<td class="lct_2"><image src="Images/DGBtn/d2.png" alt="无"></image></td>'
                                }
                            }

                            $ms.innerHTML = $ms.innerHTML
                            + '<td class="lct_3">' + '<p>' +obj[i].notes.slice(0,2) + obj[i].notes.slice(5, 7) + '</p>'
                            + '<p>' + obj[i].userName + '</p>'
                            + '</td>' + '<td></td>'

                        }
                    }
        }


        function fun(tn) {;
            var s = "4f57f884937c4cf086c5489b070da7f6";   //测试数据可以不理会
            var $url = "http://192.168.180.8:8001/CCServer/WebService/Webservice1.asmx/GetWorkFlow";    //测试用的接口可以不理会

           // var tn = "zxcg_sq";
       
            $.ajax({
                type: "post",
                url: $url,
                data: { guid: s, tableName: tn },
                success: function (result) {
                    var obj = eval('(' + result + ')');
                    LCTShow(obj);  //这里为什么标注红色?想想看。
                }
            })
        } 
        
    </script>





这个是最后版本

这里讲要显示的html代码用一个table变量记录下来再返回,这样这个js方法就算拿到其他地方也不会有人和的问题。


总结:写一个通用的方法,或者以后要被常用,写代码时就不得不考虑到耦合性问题,代码低耦合的考察标注一般可以这样来看:

你写的代码,别人拿过去用(处理同类问题,和数据类型),需要修改的地方多不多。如果一段通用代码的可植入性很低那就要仔细思考下,这个通用方法是不是有什么地方没考虑周全,他依赖于这个页面的元素是不是太多。


<script type="text/javascript">

        //搜狗、chrome、360、IE 兼容
        function LCTShow(obj) {
            var table = "";
            var lct = "";
            var ms = "";
            if (obj.length > 0) {
                        for (var i = 0; i < obj.length; i++) {
                            if (obj[i].netState == '1') {
                                lct = lct
                                + '<td class="lct_1" ><image src="Images/DGBtn/y1.png" alt="无"></image></td>';
                            }
                            else {
                                lct = lct
                                + '<td class="lct_1""><image src="Images/DGBtn/y2.png" alt="无"></image></td>';
                            }
                            if (i != obj.length - 1) {
                                if (obj[i].netState == '1') {
                                    lct = lct
                                + '<td class="lct_2"><image src="Images/DGBtn/d1.png" alt="无"></image></td>';
                                }
                                else {
                                    lct = lct
                                + '<td class="lct_2"><image src="Images/DGBtn/d2.png" alt="无"></image></td>';
                                }
                            }
                            ms = ms
                            + '<td class="lct_3">' + '<p>' + obj[i].notes.slice(0, 2) + obj[i].notes.slice(5, 7) + '</p>'
                            + '<p>' + obj[i].userName + '</p>'
                            + '</td>' + '<td></td>';
                        }
                    }
                    table = '<table><tr class="lct">'+lct+'</tr><tr class="ms">'+ms+'</tr></table>';
             return table;        
        }


        function fun(tn) {
            var s = "4f57f884937c4cf086c5489b070da7f6";
            var url = "http://192.168.180.8:8001/CCServer/WebService/Webservice1.asmx/GetWorkFlow";
           // var tn = "zxcg_sq";
       
            $.ajax({
                type: "post",
                url: url,
                data: { guid: s, tableName: tn },
                success: function (result) {
                    var obj = eval('(' + result + ')');
                    document.getElementById("content").innerHTML = LCTShow(obj);
                }
            })
        } 
        
    </script>

<think>嗯,用户想了解FEM-DEM耦合的技术或实现方法。首先,我需要回忆一下FEM和DEM各自的特点。FEM是有限元法,主要用于连续介质的力学分析,比如结构应力、变形等。而DEM是离散元法,处理的是离散颗粒间的相互作用,比如颗粒流动、碰撞。两者的耦合可以用于模拟既有连续介质又有离散颗粒相互作用的复杂系统,比如土壤与机械的相互作用、破碎过程等。 接下来,我应该考虑常见的耦合方法。根据之前的引用内容,耦合通常涉及数据交换,比如力、位移的传递。引用3提到Flac和PFC的耦合,可能属于区域分解法。区域分解法是将不同区域分配给不同方法,比如DEM处理颗粒区域,FEM处理结构区域,然后在交界处交换数据。另一种可能是嵌入式耦合,将DEM颗粒嵌入到FEM网格中,实时交互,比如机械臂与颗粒物料的作用。 然后,实现步骤需要分阶段。首先软件选择,比如EDEM和ANSYS Workbench,如引用1中用户提到的EDEM和workbench的耦合经验。数据接口部分,可能需要编写脚本或使用现有接口,比如EDEM的API或ANSYS的耦合模块。网格划分要注意交界处的兼容性,可能需要映射或插值算法。时间步长同步也是个问题,因为DEM的时间步通常比FEM小很多,需要动态调整或子循环技术。验证部分,需要实验或理论对比,如引用2中的CFD-FEM耦合验证。 挑战方面,计算资源是个大问题,DEM的计算量本身就大,加上FEM会更复杂。数据传递的精度和稳定性也需要考虑,比如力如何从离散颗粒传递到连续网格。还有时间同步,可能需要隐式或显式耦合策略。 应用案例方面,岩土工程中的桩土相互作用,机械设计中的颗粒-结构磨损分析,如引用3中的隧道工程。还有引用1提到的EDEM和Workbench的具体实现步骤,可能包括软件设置、数据输出和导入等。 用户可能还想知道具体的代码实现或软件操作步骤,但问题中没有提到,可能需要进一步询问。另外,相关引用中的信息需要正确使用,比如引用1中的EDEM和ANSYS耦合方法,引用3中的Flac和PFC耦合。需要确保回答中提到的技术与引用内容一致,并正确标注来源。 最后,生成的相关问题需要围绕FEM-DEM耦合的挑战、应用、软件选择等,帮助用户深入理解。比如不同耦合方法的比较,典型工程案例,或者具体软件的操作教程。这些都需要在回答后列出,引导用户进一步探索。</think># FEM-DEM耦合方法实现解析 ## 一、基本原理 FEM-DEM耦合通过$F_{\text{contact}}=K\Delta x$实现连续介质与离散颗粒的相互作用,其中接触力计算基于DEM离散元法,结构变形分析采用FEM有限元法[^1]。耦合核心在于建立两种方法间的数据交互通道,实现位移场与应力场的双向传递。 ## 二、典型耦合方法 ### 1. 区域分解法 将计算域划分为FEM区域和DEM区域,在交界面通过MPI接口进行数据交换。例如: $$ \sigma_{\text{FEM}} = \frac{1}{V}\sum_{i=1}^{n}F_{\text{DEM},i} $$ 适用于岩土-结构相互作用模拟[^3] ### 2. 嵌入式耦合 将DEM颗粒系统嵌入FEM网格,通过接触算法实时交互: ```python def contact_detection(fem_nodes, dem_particles): for particle in dem_particles: nearest_node = find_nearest_node(particle.position, fem_nodes) apply_force(particle.force, nearest_node) ``` ## 三、实现步骤 1. **软件配置**:采用EDEM+ANSYS Workbench组合时,需安装EDEM Coupling Interface模块[^1] 2. **数据接口**:通过API实现双向耦合 - DEM→FEM:输出颗粒接触力 - FEM→DEM:输入结构位移 3. **时间步协调**:采用子循环算法保持时间同步 $$ \Delta t_{\text{FEM}} = N \cdot \Delta t_{\text{DEM}} \quad (N\geq10) $$ ## 四、技术挑战 1. 接触力振荡:采用移动平均滤波处理高频波动 2. 尺度差异:引入多尺度耦合算法 3. 计算效率:GPU加速DEM计算,HPC集群并行求解 ## 五、应用案例 1. 盾构机刀盘-岩土相互作用分析[^3] 2. 颗粒分选机筛网疲劳预测 3. 滑坡防护结构优化设计
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值