几个耦合的例子

几个耦合的例子
几个耦合的例子

一般说来,ANSYS的流固耦合主要有4种方式:

1,sequential

这需要用户进行APDL编程进行流固耦合

sequentia指的是顺序耦合

以采用MpCCI为例,你可以利用ANSYS和一个第三方CFD产品执行流固耦合分析。在这个方法中,基于网格的平行代码耦合界面(MpCCI) 将ANSYS和CFD程序耦合起来。即使网格上存在差别,MpCCI也能够实现流固界面的数据转换。ANSYS CD中包含有MpCCI库和一个相关实例。关于该方法的详细信息,参见ANSYS Coupled-Field Analysis Guide中的Sequential Couplin

2,FSI solver

流固耦合的设置过程非常简单,推荐你使用这种方式

3,multi-field solver

这是FSI solver的扩展,你可以使用它实现流体,结构,热,电磁等的耦合

4,直接采用特殊的单元进行直接耦合,耦合计算直接发生在单元刚度矩阵

一个流固耦合的例子

length=2

width=3

height=2

/prep7

et,1,63

et,2,30 !选用FLUID30单元,用于流固耦合问题

r,1,0.01

mp,ex,1,2e11

mp,nuxy,1,0.3

mp,dens,1,7800

mp,dens,2,1000 !定义Acoustics材料来描述流体材料-水

mp,sonc,2,1400

mp,mu,0,

!

block,,length,,width,,height

esize,0.5

mshkey,1

!

type,1

mat,1

real,1

asel,u,loc,y,width

amesh,all

alls

!

type,2

mat,2

vmesh,all

fini

/solu

antype,2

modopt,unsym,10 !非对称模态提取方法处理流固耦合问题

eqslv,front

mxpand,10,,,1

nsel,s,loc,x,

nsel,a,loc,x,length

nsel,r,loc,y

d,all,,,,,,ux,uy,uz,

nsel,s,loc,y,width,

d,all,pres,0

alls

asel,u,loc,y,width,

sfa,all,,fsi !定义流固耦合界面

alls

solv

fini

/post1

set,first

plnsol,u,sum,2,1

fini

再给大家一个实例!

考虑结构在水中的自振频率:例子是一加筋板在水中的模态分析。命令流如下:

FINISH

/CLEAR

/FILENAME,plane

/UNITS,SI

/TITLE,plane

/PREP7

!*********ELEMENT DEFINE********

ET,63,63

ET,4,beam4

et,30,fluid30

!****MATERIAL DEFINE*********

MP,EX,1,2.10E11

MP,DENS,1,7850

MP,NUXY,1,0.3

mp,dens,30,1025

mp,sonc,30,1500

mp,mu,30,0.5

!*******REAL CONSTANT***********

r,30,1e-06

r,50,0.05

r,75,0.375e-02,0.78125e-06,0.000016406

k,1

k,4,1

kfill,1,4,2,,1

kgen,4,1,4,1,,1/3,,10

a,1,2,12,11

*do,i,0,2

*do,j,0,2*10,10

a,1+i+j,2+i+j,12+i+j,11+i+j

*enddo

*enddo

!***************************fluid element****************

k,100,-14.5,-14.5

k,101,-14.5,15.5

k,102,15.5,15.5

k,103,15.5,-14.5

k,140,-14.5,-14.5,30

k,141,-14.5,15.5,30

k,142,15.5,15.5,30

k,143,15.5,-14.5,30

a,100,101,102,103,4,14,24,34,33,32,31,21,11,1

a,1,2,3,4,103,100

a,140,141,142,143

a,100,101,141,140

a,101,102,142,141

a,142,143,103,102

a,140,143,103,100

a,14,24,34,33,32,31,21,11,1,2,3,4

asel,u,,,1,

FLST,2,8,5,ORDE,https://www.360docs.net/doc/1410762745.html,

FITEM,2,https://www.360docs.net/doc/1410762745.html,

FITEM,2,https://www.360docs.net/doc/1410762745.html,

V A,https://www.360docs.net/doc/1410762745.html,

nummrg,all

alls

MSHKEY,0 MSHAPE,0

esize,1

lsel,s,loc,y,1/3

lsel,r,loc,x,0,1

lsel,r,loc,z,0

latt,1,75,4

lmesh,all

lsel,s,loc,y,2/3

lsel,r,loc,x,0,1

lsel,r,loc,z,0

latt,1,75,4

lmesh,all

lsel,s,loc,x,1/3

lsel,r,loc,y,0,1

lsel,r,loc,z,0

latt,1,75,4

lmesh,all

lsel,s,loc,x,2/3

lsel,r,loc,y,0,1

lsel,r,loc,z,0

latt,1,75,4

lmesh,all

asel,s,,,1,9

aatt,1,50,63

amesh,all

alls

MSHAPE,1,3d

esize,3

vsel,s,,,1

type,30 $mat,30 $real,30 vmesh,all

alls

FINISH

/solu

alls

!**** 求解***********

!********************* ANTYPE,MODAL MODOPT,lanb,25,0 SOLVE

FINISH

总是出现error 说矩阵不对称,不可以用lanb计算。

总结:流体单元不能用对称的解法

应该采用非对称解法。

例子是一圆环在水中的模态分析。命令流如下:

finish

/clear

/PREP7

!定义单元类型

ET,1,PLANE42 ! structural element

ET,2,FLUID29 ! acoustic fluid element with ux & uy

ET,3,129 ! acoustic infinite line element

r,3,0.31242,0,0

ET,4,FLUID29,,1,0 ! acoustic fluid element without ux & uy !材料属性

MP,EX,1,2.068e11

MP,DENS,1,7929

MP,NUXY,1,0

MP,DENS,2,1030

MP,SONC,2,1460

! 创建四分之一模型

CYL4,0,0,0.254,0,0.26035,90

CYL4,0,0,0.26035,0,0.31242,90

! 选择属性,网格划分

ASEL,S,AREA,,1

AA TT,1,1,1,0

LESIZE,1,,,16,1

LESIZE,3,,,16,1

LESIZE,2,,,1,1

LESIZE,4,,,1,1

MSHKEY,1

MSHAPE,0,2D ! mapped quad mesh

AMESH,1

ASEL,S,AREA,,2

AA TT,2,1,2,0

LESIZE,5,,,16,1

LESIZE,7,,,16,1

LESIZE,6,,,5

LESIZE,8,,,5

MSHKEY,0

MSHAPE,0,2D ! mapped quad mesh

AMESH,2

! 关于Y轴镜像

nsym,x,1000,all ! offset node number by 1000 esym,,1000,all

! 关于y轴镜像

nsym,y,2000,all ! offset node number by 2000 esym,,2000,all

NUMMRG,ALL ! merge all quantities

esel,s,type,,1

nsle,s

esln,s,0

nsle,s

esel,inve

nsle,s

emodif,all,type,4

esel,all

nsel,all

! 指定无限吸收边界

csys,1

nsel,s,loc,x,0.31242

type,3

real,3

mat,2

esurf

esel,all

nsel,all

! 标识流固交接面

nsel,s,loc,x,0.26035

esel,s,type,,2

sf,all,fsi,1

nsel,all

esel,all

FINISH

/solu

antype,modal

modopt,damp,10

mxpand,10,,,yes

solve

finish

为了便于对比,也对圆环在空气中做了模态分析finish

/clear

/PREP7

!定义单元类型

ET,1,PLANE42 ! structural element

!材料属性

MP,EX,1,2.068e11

MP,DENS,1,7929

MP,NUXY,1,0

! 创建四分之一模型

CYL4,0,0,0.254,0,0.26035,90

! 选择属性,网格划分

ASEL,S,AREA,,1

AA TT,1,1,1,0

LESIZE,1,,,16,1

LESIZE,3,,,16,1

LESIZE,2,,,1,1

LESIZE,4,,,1,1

MSHKEY,1

MSHAPE,0,2D ! mapped quad mesh

AMESH,1

! 关于Y轴镜像

nsym,x,1000,all ! offset node number by 1000

esym,,1000,all

! 关于y轴镜像

nsym,y,2000,all ! offset node number by 2000

esym,,2000,all

NUMMRG,ALL

/solu

antype,modal

modopt,lanb,10

mxpand,10,,,yes

solve

finish

在水中的自振频率为

SET TIME/FREQ LOAD STEP SUBSTEP CUMULATIVE 1-0.19544E-10 1 1 1

2 0.29640E-0

3 1 1 1

3-0.21663E-10 1 2 2

4-0.29640E-03 1 2 2

5 0.30870E-03 1 3 3

6 0.0000 1 3 3

7-0.30870E-03 1 4 4

8 0.0000 1 4 4

9-0.53726E-03 1 5 5

10 0.57522E-11 1 5 5

11 0.53726E-03 1 6 6

12-0.89057E-11 1 6 6

13 0.98059E-01 1 7 7

14 35.232 1 7 7

15 0.98059E-01 1 8 8

16 -35.232 1 8 8

17 0.98061E-01 1 9 9

18 35.233 1 9 9

19 0.98061E-01 1 10 10

20 -35.233 1 10 10

在空气中的自振频率为

SET TIME/FREQ LOAD STEP SUBSTEP CUMULATIVE

1 0.0000 1 1 1

2 0.0000 1 2 2

3 0.73609E-03 1 3 3

4 60.80

5 1 4 4

5 60.805 1 5 5

6 172.9

7 1 6 6

7 172.97 1 7 7

8 334.40 1 8 8

9 334.40 1 9 9

10 546.59 1 10 10

主要有以下疑问:

1)考虑流固耦合,做模态分析时流体单元是否只能用fluid29(2d)和fluid30(3d),对于fluid129和fluid130在耦合中具体起到什么作用,能不能不设,而用边界约束条件代替?

2)流体范围怎样确定,如本例中(CYL4,0,0,0.26035,0,0.31242,90),外半径为0.31242。如果不是环形的,如一块当水板,该怎样考虑?

3)如果不考虑流体的压缩性,把声速设的很大,MP,SONC,2,1e20,就可以了。

4)从自振频率可以看出,在水中和在空气中,圆环的自振频率差别特别大,且振型也大相径庭,为什么?在水中时,模态提取方法用damp(为什么不能用unsym),特征值的虚部代表角频率,为什么第一阶为正,第二阶为负,而第三阶和第四阶都为0,第六阶、八阶、十阶都为负。应该是从小到大才对?

5)在空气中时,模态提取方法用lanb,为什么第一阶第二阶的频率都为0。

请高手指点迷津,急盼中

对以上问题的解答:

频率为零,一般是发生了刚体位移,估计你是把水抽走,而没有限制圆环。

1。圆环在水中振动必然导致波动(其实就是声波)在水中传播,当声波到达水的另一个界面时就会发生反射(除非水和另一个相邻体的声阻抗是匹配的)。水和金属中的声速相差不大,即可压缩性相差不大。两种可压缩性相差不大的物质的相互作用对两者影响都很大。圆环在水中振动,水对圆环的反作用是由于反射波引起的,流固耦合中采用fluid129和130就是最大程度的减弱反射波。

2。声波从圆环开始传播,随着传播距离的增加,波阵面不断增大,振幅不断减小。同时由于水的衰减,声波也不断减弱。如果水的空间越大,则反射波返回圆环的路径越长,衰减也就越多,影响也就越小。fluid129和130对反射波的衰减(通过很小的反射实现)有限,因此

还需要水要有足够的空间。fluid129和130离结构应该大于0.2λ(λ=c/f,c为水中声速)。以上的做法在误差允许的情况下等效于水在无限大水空间中的情况。如果是挡水板,水就是有限空间了,情况也不一样。

3。声速加大情况也不一样,就是不知是不是你所要的情况?

4。空气作为介质,由于其声速比金属小很多,可压缩性大很多,影响可以忽略不计。而水的影响就不同了。这可能就是频率和振型不同的原因吧?我试了你的例子,各种提取方法都可以。

5。空气的影响忽略不计,因此需要对圆环进行约束。你没有约束,那么就会发生静态位移即频率为零。圆环有两个对称轴,因此会发生频率成对出现的情况。也就是说,两个方向上有同样的振型。

接触分析实例---包含初始间隙

fini

/clear,nostart

/prep7

et,1,82

KEYOPT,1,3,3

r,1,0.5

mp,ex,1,1e9

mp,prxy,1,0.3

k,1,0,0

k,2,10,0

k,3,10,5

k,4,6.2,5

k,5,7.5,3.4

k,6,2.5,3.4

k,7,3.8,5

k,8,0,5

a,1,2,3,4,5,6,7,8

LFILLT,6,5,0.18, ,

LFILLT,5,4,0.18, ,

FLST,2,3,4

FITEM,2,9

FITEM,2,11

FITEM,2,10

AL,P51X

FLST,2,3,4

FITEM,2,13

FITEM,2,14

AL,P51X

FLST,2,3,5,ORDE,2

FITEM,2,1

FITEM,2,-3

AADD,P51X

rect,0,10,4.8,5

ASBA, 4, 1

gap=0.02

k,24,6.2-gap,5

k,25,7.5-gap,3.4

k,26,2.5+gap,3.4

k,27,3.8+gap,5

a,24,25,26,27

LFILLT,4,3,0.2, ,

LFILLT,3,2,0.2, ,

FLST,2,3,4

FITEM,2,7

FITEM,2,10

FITEM,2,8

AL,P51X

FLST,2,3,4

FITEM,2,13

FITEM,2,14

FITEM,2,11

AL,P51X

FLST,3,2,5,ORDE,2

FITEM,3,3

FITEM,3,-4

ASBA, 1,P51X

rect,3.8+gap,6.2-gap,5,10

rect,3.8+gap,3.8+gap+8,10,12 FLST,2,3,5,ORDE,3

FITEM,2,1

FITEM,2,3

FITEM,2,5

AADD,P51X

rect,3.8+gap+8,3.8+gap+8+2,10,12 FLST,2,2,5,ORDE,2

FITEM,2,1

AGLUE,P51X

CYL4,2.0,1.8,0.6

CYL4,7.0,1.8,0.6 FLST,2,3,5,ORDE,3 FITEM,2,2

FITEM,2,4

FITEM,2,-5 AOVLAP,P51X

esize,0.2

amesh,all

FLST,5,135,2,ORDE,32 FITEM,5,485 FITEM,5,576 FITEM,5,-577 FITEM,5,621 FITEM,5,-625 FITEM,5,707 FITEM,5,-711 FITEM,5,716 FITEM,5,741 FITEM,5,-745 FITEM,5,750 FITEM,5,-751 FITEM,5,766 FITEM,5,797 FITEM,5,-798 FITEM,5,854 FITEM,5,888 FITEM,5,-938 FITEM,5,1101 FITEM,5,1103 FITEM,5,1420 FITEM,5,1628 FITEM,5,1653 FITEM,5,1696 FITEM,5,1699 FITEM,5,-1702 FITEM,5,1726 FITEM,5,-1728 FITEM,5,1852

FITEM,5,-1874 FITEM,5,2044 FITEM,5,-2066 CM,_Y,ELEM ESEL, , , ,P51X CM,_Y1,ELEM CMSEL,S,_Y CMDELE,_Y EREF,_Y1, , ,1,0,1,1 CMDELE,_Y1

ET,2,TARGE169 ET,3,CONTA172 R,3, , ,

R,3,0,0,0.1, 10,0,0 R,4, , ,

R,4,0,0,0.1, 10,-0.02,0

lsel,s,,,9

lsel,a,,,5

lsel,a,,,12

nsll,s,1

type,3

real,3

esurf,all

alls,

lsel,s,,,19

lsel,a,,,20

nsll,s,1

type,3

real,4

esurf,all

alls,

lsel,s,,,7

lsel,a,,,3

lsel,a,,,11

nsll,s,1

type,2

real,3

esurf,all

alls,

lsel,s,,,25

lsel,a,,,26

nsll,s,1

type,2

real,4

esurf,all

alls,

FLST,2,2,5,ORDE,2

FITEM,2,4

FITEM,2,-5

DA,P51X,ALL,

FLST,2,1,4,ORDE,1

FITEM,2,6

SFL,P51X,PRES,500,

/solu

antype,0

nlgeom,on

outres,all,all

nsubst,200,200,2

neqit,1000

solve

耦合小程序

最近用到耦合,写了一段小程序,奉献出来,与大家共享。

如果有很多节点,每两个节点位置相同,如果将这些杂乱无章的节点耦合,是件很麻烦的事,可用这段程序,轻松解决。

cpnum=0

cmsel,s,n-zhong !需要耦合的节点

*GET,n_num,NODE,,COUNT, , , , !节点总数

*do,i,1,n_num

cmsel,s,n-zhong

*GET,n_lowest,NODE,,NUM,MIN, , , , !号码最小的节点

*GET,n_x,NODE,n_lowest,LOC,X !该节点坐标

*GET,n_y,NODE,n_lowest,LOC,Y

*GET,n_z,NODE,n_lowest,LOC,Z

NSEL,s,LOC,X,n_x-0.3,n_x+0.3 !寻找与该节点位置相同的节点NSEL,R,LOC,Y,n_y-0.3,n_y+0.3

NSEL,R,LOC,z,n_z-0.3,n_z+0.3

cm,n_cp_cp,node !位置相同的节点形成一个组

cmsel,s,n-zhong

cmsel,u,n_cp_cp

cm,n-zhong,node !取消这些点后剩余的点形成组

*GET,n_num_1,NODE,,COUNT, , , , !节点总数

*if,n_num_1,lt,2,exit !如果节点数小于二则退出

cmsel,s,n_cp_cp

*GET,n_num,NODE,,COUNT, , , ,

*if,n_num,gt,1,then

CP,cpnum+1,ux,all

CP,cpnum+2,uy,all

CP,cpnum+3,uz,all

cpnum=cpnum+3

*else

*endif

*enddo

该段程序可用

CPINTF,UX,0.001

CPINTF,UY,0.001

CPINTF,UZ,0.001

代替

*DO,I,2,296,3

CP,I,UX,I,I+2

*ENDDO

*DO,I,2,296,3

CP,I,UY,I,I+2

*ENDDO

*DO,I,2,296,3

CP,I,UZ,I,I+2

*ENDDO

DK,1, , , ,0,UX,UY,UZ, , , ,

以上几句改为:

*DO,I,2,296,3

CP,NEXT,ALL,I,I+2

*ENDDO

DK,1, , , ,0,ALL

或CPINTF,ALL,0.001

因为你选用的单元有六个自由度,如果只约束三个,程序是不会运行的.

另:三次循环语句的I相等,约束UY时,UX的耦合就被删掉了,最后只剩UZ了

这样修改:

c***耦合练习

/PREP7

K,1,0,0

L,1,2

K,300,0,-10000

LGEN,100,1,,,0.1,,,2

ET,1,BEAM188

MP,EX,1,2.1e11

MP,PRXY,1,0.3

MP,DENS,1,0.783e4

SECTYPE, 1, BEAM, T, , 0

SECOFFSET, CENT

SECDATA,0.06,0.03,0.003,0.006,0,0,0,0,0,0

LSEL,ALL

LATT,1,1,1,,300

LESIZE,ALL,,,1,,1,,,1

LMESH,ALL

cpintf,all

DK,1,ux,0, , ,UY,UZ

DK,200, , , , ,UY,UZ

ACEL,0,9.8,0,

FINISH

一个流固耦合的例子

这个例子关于装有水的水杯旋转,是轴对称问题,为了简化,所以选择了平面模型。*SET,RAD,0.8

*SET,h,1

*SET,g,9.8

*SET,OMEGAR,2

*SET,ROU,1000

/PREP7

ET,1,FLUID79

KEYOPT,1,3,1

MP,EX,1,2E9

MP,DENS,1,ROU

K,1

K,2,RAD

K,3,RAD,H

K,4,,,H

K,4,,H

A,1,2,3,4

LESIZE,ALL,,,10

AMESH,ALL

/SOL

DL,2,,UX

DL,1,,UY

NSEL,S,LOC,X

DSYM,SYMM,X

D,ALL,UX

D,ALL,UX

NSEL,ALL

ACEL,,G

OMEGA,,OMEGAR

SOLVE

FINISH

/POST1

SET,LAST

PLNSOL,U,X,0,1

*SET,UCENT,UY(22)

*SET,UEDGE,UY(12)

*SET,UELEV,UEDGE-UCENT

ansys从9.0发展到10.0,一个最大的进步就是流固耦合计算更加规范,这一点已远领先于其他同类软件,实现了单向耦合到即时双向耦合的飞跃,使用户对于解决流固耦合问题又多了一种选择,希望大家对多种方法-----物理环境转换,fsi,mfx等进行讨论,提供一下案例

本人抛砖引玉:

使用物理环境法进行流固耦合的实例及讲解

流道中有一橡胶垫阻碍水的流动,入口速度为2m/s,其他参数将在命令流中详细给出。求解水通过此流道的压力降,以及稳态条件下橡胶垫的变形。

/prep7

/sho,gasket,grph

shpp,off

ET,1,141 ! Fluid - static mesh

ET,2,56, ! Hyperelastic element

!!!!!!! Fluid Structure Interaction - Multiphysics

!!!!!!! Deformation of a gasket in a flow field.

!

!!!!!!! Element plots are written to the file gasket.grph.

!

! - Water flows in a vertical pipe through a construction

! formed by a rubber gasket.

! - Determine the equilibrium position of the gasket and

! the resulting flow field

!

! | |

! | |

! |----------| Boundary of "morphing fluid"

! | ______|

! | |______ gasket

! | |

! |----------| Boundary of "morphing fluid" (sf)

! | |

!

!! 1. Build the model of the entire domain:

!! Fluid region - static mesh

!!

!! Gasket leaves a hole in the center of the duct

!! Morphing Fluid region is a user defined region around

!! the gasket. The fluid mesh here will deform and be

!! updated as the gasket deforms.

!!

!! Parameterize Dimensions in the flow direction

!!

yent = 0.0 ! Y coordinate of the entrance to the pipe

dyen = 1.0 ! Undeformed geometry flow entrance length

ysf1 = yent+dyen ! Y coordinate of entrance to the morphing fluid region dsf1 = 0.5 ! Thickness of upstream

ygas = ysf1+dsf1 ! Y coordinate of the bottom of the gasket

dg = 0.02 ! Thickness of the gasket

dg2=dg/2.

ytg = ygas+dg ! Y coordinate of the initial top of the gasket

dsf2 = 0.5 ! Thickness of downstream region

ysf2 = ytg + dsf2! Y of Top of the downstream morphing fluids region dyex = 6.0 ! Exit fluid length

x = 0. ! Location of the axisymmetric Centerline

dgasr =.20 ! Initial span of gasket

piper = 0.3 ! Radius of the pipe

xrgap = piper-dgasr!! radius of completely unobtructed flow passage

!!

!!! Create geometry

!!

rect,xrgap,piper,ygas,ytg ! A1:Gasket (keypoints 1-4)

rect,x,piper,ysf1,ysf2 ! A2: Morphing fluid region

rect,x,piper,yent,ysf1 ! A3: Fluid region with static mesh rect,x,piper,ysf2,ysf2+dyex ! A4: Fluid region with static mesh aovlap,all

k,22,xrgap+dg2,ygas+dg2

rarc = dg2*1.1

larc,1,4,22,rarc

al,6,4

adelete,7

al,6,3,22,7,8,5,21,1

!!Mesh Division information

ngap = 10 ! Number elements across the gap

ngas = 10 ! Number of elements along the gasket

rgas = -2 ! Spacing ratio along gasket

nflu = ngap+ngas ! Number of elements across the fluid region raflu = -3 ! Space fluid elements near the walls and center nenty =8 ! Elements along flow - entrance

raent =5 ! Size ratio in the inlet region

nfl1 = 20 ! Elements along flow - first morph.fluid. nthgas = 4 ! Elements in the gasket

nfl2 = 3 ! Elements along flow - second morph.fluid. next = 30 ! Elements along flow - exit region

rext = 6 ! Size ratio in flow direction of outlet

rafls = 12 ! Initial element spacing ratio - morph.fluid lesize,1,,,ngas,rgas

lesize,3,,,ngas,rgas

nfl11= nfl1*2+9

lsel,s,,,2,4,2 ! (Modify lesize of line 8 if changing gasket mesh) lesize,all,,,nthgas

alls

lesize,5,,,nflu,raflu

lesize,7,,,nflu,raflu

lesize,9,,,nflu,raflu

lesize,15,,,nflu,raflu

lesize,18,,,nenty,1./raent

lesize,17,,,nenty,1./raent

lesize,21,,,nfl1,rafls

lesize,8,,,nfl11,-1./(rafls+3)

lesize,22,,,nfl1,rafls

lesize,19,,,next,rext

lesize,20,,,next,rext

!!! AATT,MA T,REAL,TYPE - Set the attributes for the areas asel,s,,,1,2

aatt,2,2,2 ! Gasket (material 2)

asel,s,,,3

cm,area2,area

alist ! List area selected for further morphing

asel,a,,,5,6

aatt,1,1,1 ! Fluid area (material 1)

alls

eshape,2

asel,u,,,2,3

amesh,all

eshape,0

asel,s,,,2,3

amesh,all

!-----------------

!!!!! Create element plot and write to the file gasket.grph asel,s,,,1,3

esla,s

/Title, Initial mesh for gasket and neighborhood

eplot

/ZOOM,1,RECT,0.3,-0.6,0.4,-0.5

alls

!-----------------

!!

!!!!! 2. Create Physics Environment for the Fluid

et,1,141

et,2,0 ! Gasket becomes the Null Element

vin=3.5e-1 ! Inlet water velocity (meters/second)

!! CFD Solution Control

flda,solu,flow,1

flda,solu,turb,1

flda,iter,exec,400

flda,outp,sumf,10

!! CFD Property Information

flda,prot,dens,constant

flda,prot,visc,constant

flda,nomi,dens,1000. ! 1000 kg/m3 for density - water flda,nomi,visc,4.6E-4 ! 4.6E-4 kg-s/m (viscosity of water) flda,conv,pres,1.E-8 ! Tighten pressure equation convergence !! CFD Boundary Conditions (Applied to Solid Model) lsel,s,,,8,17,9

lsel,a,,,20

dl,all,,vx,0.,1 ! Centerline symmetry

耦合与内聚

耦合性与内聚性 Posted on 2010-04-20 21:54 东苑草根阅读(364) 评论(1)编辑收藏 1) 耦合性 ?耦合性是对一个软件结构内部不同模块间联系紧密程度的度量指标。 ?决定耦合性高低的主要因素 由于模块间的联系是通过模块接口实现的,因此,模块耦合性的高低主要取决于模块接口的复杂程度、调用模块的方式以及通过模块接口的数据。模块间的耦合性主要可划分为如下几种类型。 (1) 数据耦合。若两个模块之间仅通过模块参数交换信息,且交换的信息全部为简单数据,则称这种耦合为数据耦合。数据耦合的耦合性最低,通常软件中都包含有数据耦合。数据耦合的例子如下所示: sum(int a,int b) {int c; c=a+b; return(c); } main() {int x,y; printf("x+y= %d",sum(x,y)); }/*主函数与sum函数之间即为数据耦合关系*/ (2) 公共耦合。若两个或多个模块通过引用公共数据相互联系,则称这种耦合为公共耦合。例如,在程序中定义了全局变量,并在多个模块中对全局变量进行了引用,则引用全局变量的多个模块间就具有了公共耦合关系。

(3) 控制耦合。若模块之间交换的信息中包含有控制信息(尽管有时控制信息是以数据的形式出现的),则称这种耦合为控制耦合。控制耦合是中等程度的耦合,它会增加程序的复杂性。控制耦合的例子如下所示:void output(flag) {if (flag) printf("OK! "); else printf("NO! "); } main() { int flag; output(flag); }/*主函数与output函数之间即为控制耦合关系*/ (4) 内容耦合。若一个模块对另一模块中的内容(包括数据和程序段)进行了直接的引用甚至修改,或通过非正常入口进入到另一模块内部,或一个模块具有多个入口,或两个模块共享一部分代码,则称模块间的这种耦合为内容耦合。内容耦合是所有耦合关系中程度最高的,会使因模块间的联系过于紧密而对后期的开发和维护工作带来很大的麻烦。

几个耦合的例子

一般说来,ANSYS的流固耦合主要有4种方式: 1,sequential 这需要用户进行APDL编程进行流固耦合 sequentia指的是顺序耦合 以采用MpCCI为例,你可以利用ANSYS和一个第三方CFD产品执行流固耦合分析。在这个方法中,基于网格的平行代码耦合界面(MpCCI) 将ANSYS和CFD程序耦合起来。即使网格上存在差别,MpCCI也能够实现流固界面的数据转换。ANSYS CD中包含有MpCCI库和一个相关实例。关于该方法的详细信息,参见ANSYS Coupled-Field Analysis Guide中的Sequential Couplin 2,FSI solver 流固耦合的设置过程非常简单,推荐你使用这种方式 3,multi-field solver 这是FSI solver的扩展,你可以使用它实现流体,结构,热,电磁等的耦合 4,直接采用特殊的单元进行直接耦合,耦合计算直接发生在单元刚度矩阵 一个流固耦合的例子 length=2 width=3 height=2 /prep7 et,1,63 et,2,30 !选用FLUID30单元,用于流固耦合问题 r,1,0.01 mp,ex,1,2e11 mp,nuxy,1,0.3 mp,dens,1,7800 mp,dens,2,1000 !定义Acoustics材料来描述流体材料-水 mp,sonc,2,1400 mp,mu,0, ! block,,length,,width,,height esize,0.5 mshkey,1 ! type,1 mat,1 real,1 asel,u,loc,y,width amesh,all alls ! type,2 mat,2 vmesh,all

耦合与内聚例子

耦合 (1)数据耦合。若两个模块之间仅通过模块参数交换信息,且交换的信息全部为简单数据,则称这种耦合为数据耦合。数据耦合的耦合性最低,通常软件中都包含有数据耦合。 数据耦合的例子: /* * 数据耦合 * 主函数main()和Multiply(int x, int y)之间为数据耦合关系 */ #include int Multiply(int x, int y) { return(x * y); } void main() { int x = 0; int y = 0; scanf("%d%d", &x, &y); printf("x * y = %d\n", Multiply(x,y)); } (2)控制耦合。若模块之间交换的信息中包含有控制信息(尽管有时控制信息是以数据的形式出现的),则称这种耦合为控制耦合。控制耦合是中等程度的耦合,它会增加程序的复杂性。 控制耦合的例子: /* * 控制耦合 * 根据年龄判断是否大于岁,然后根据是否满十八岁判断是否到达法定饮酒年龄 */ #include static bool Signal; void AdultOrNot(int age) { if (age > 18) { Signal = 1; } else { Signal = 0;

} } void WineOrNot() { if (Signal == 1) { printf("%s\n", "您已到达法定饮酒年龄!"); } else { printf("%s\n","您未到达法定饮酒年龄!"); } } int main() { int Age = 0; printf("%s","请输入您的年龄:"); scanf("%d", &Age); AdultOrNot(Age); WineOrNot(); } (3)公共耦合。若两个或多个模块通过引用公共数据相互联系,则称这种耦合为公共耦合。公共耦合的例子:在程序中定义了全局变量,并在多个模块中对全局变量进行了引用,则引用全局变量的多个模块间就具有了公共耦合关系。 (4)内容耦合。若一个模块对另一模块中的内容(包括数据和程序段)进行了直接的引用甚至修改,或通过非正常入口进入到另一模块内部,或一个模块具有多个入口,或两个模块共享一部分代码,则称模块间的这种耦合为内容耦合。内容耦合是所有耦合关系中程度最高的,会使因模块间的联系过于紧密而对后期的开发和维护工作带来很大的麻烦。 内聚 (1)偶然内聚。若一个模块由多个完成不同任务的语句段组成,各语句段之间的联系十分松散或根本没有任何联系,则称此模块的内聚为偶然内聚。 偶然内聚的例子:在模块T有三条语句。至少从表面上看不出这三条语句之间有什么联系,只是由于P,Q,R,S四个模块中都有这三条语句,为了节省空间才把它们作为一个模块放在一起。这完全是偶然性的。

软件工程中的耦合

软件工程中的耦合 软件工程中的耦合:简单地说,对象之间的耦合度就是对象之间的依赖性。指导使用和维护对象的主要问题是对象之间的多重依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小。就是依赖性,相关性吧!!!有软硬件之间的耦合,还有软件各模块之间的耦合。耦合性是程序结构中各个模块之间相互关联的度量.它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息通过接口.一般模块之间可能的连接方式有七种,耦合性由低到高分别是:非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合。耦合是对一个软件结构内各个模块之间互连程度的度量。内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。 1.什么是内聚?什么是耦合?内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系;耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。2.内聚分为哪几类?耦合分为哪几类?内聚有如下的种类,它们之间的内聚度由弱到强排列如下:(1)

偶然内聚。模块中的代码无法定义其不同功能的调用。但它使该模块能执行不同的功能,这种模块称为巧合强度模块。(2)逻辑内聚。这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块参数来确定该模块应完成哪一种功能(3)时间内聚(4)过程内聚(5)通信内聚(6)顺序内聚(7)功能内聚耦合可以分为以下几种,它们之间的耦合度由高到低排列如下:(1)内容耦合:如果发生下列情形,两个模块之间就发生了内容耦合 1. 一个模块直接访问另一个模块的内部数据; 2. 一个模块不通过正常入 口转到另一模块内部; 3.两个模块有一部分 程序代码重迭(只可能出现在汇编语言中); 4.一个模块有多个入口。(2)公共耦合:若一组模块 都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。(3)外部耦合:一组模块都 访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。(4)控制耦合:如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。(5)标记耦合:一组模块通过参数表传递记录 信息,就是标记耦合。这个记录是某一数据结构的子结构,

内聚耦合以及uml各图的关系

>>uml在软件开发各个阶段的应用: 采用面向对象技术设计软件系统时,使用用例图来描述用户需求;使 用类图、对象图、包图、构件图和部署图描述系统的静态结构;使用 顺序图、合作图、活动图和状态图描述动态行为。 抽象得到类、属性、方法;关系来描述;组织成类图。部署图:将来在现场如何实现的设备等。状态图:状态转换过程(状态机)。 >>specific diagrams for each phase: --需求:用例图描述需求(角色、功能、外部交互) --分析:明确解决问题的细节 类图来描述静态结构; 顺序图、合作图、活动图、状态图来描述动态结构; --设计:给出解决方案 类图、包,对类的接口进行设计 --实现:将类用某面向对象语言实现 --集成与交付: 构件图、包、部署图 --测试 ·单元测试使用类图和类的规格说明书 ·集成测试使用类图、包、构件图和合作图 ·系统测试使用用例图来测试系统功能 >>内聚类型 内聚强度类型[从低到高]: (1)偶然内聚 如果一个模块的各成分之间毫无关系,则称为偶然内聚,也就是说模块完成一组任务,这些任务之间的关系松散,实际上没有什么联系。

(2)逻辑内聚 几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。如 一个模块读取各种不同类型外设的输入。尽管逻辑内聚比偶然内聚合 理一些,但逻辑内聚的模块各成分在功能上并无关系,即使局部功能 的修改有时也会影响全局,因此这类模块的修改也比较困难。 (3)时间内聚 如果一个模块完成的功能必须在同一时间内执行(如系统初始化 ),但这些功能只是因为时间因素关联在一起,则称为时间内聚。 (4)通信内聚 如果一个模块的所有成分都操作同一数据集或生成同一数据集, 则称为通信内聚。 (5)顺序内聚 如果一个模块的各个成分和同一个功能密切相关,而且一个成分 的输出作为另一个成分的输入,则称为顺序内聚。 (6)功能内聚 模块的所有成分对于完成单一的功能都是必须的,则称为功能内 聚。 (7)信息内聚 模块完成多个功能,各个功能都在同一数据结构上操作,每一项 功能有一个唯一的入口点。这个模块将根据不同的要求,确定该模块 执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构 (符号表),因此,它是一个信息内聚的模块。 >>耦合类型 一般模块之间可能的连接方式有七种,构成耦合性的七种类型。它们之间的关系为(由弱到强) 非直接耦合(Nondirect Coupling) 如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强。。 数据耦合(Data Coupling) 如果一个模块访问另一个模块时,彼此之间是通过数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。由于限制了只通过参数表传递数据,按数据耦合开发的程序界面简单、安全可靠。因此,数据耦合是松散的耦合,模块之间的独立性比较强。在软件程序结构中至少必须有这类耦合。

模型耦合与模型内聚举例分析

模型耦合与模型内聚举例分析 耦合是程序结构内不同模块之间相互关联程度的度量。它是由模块间接口的复杂程度调用模块的方式及接口传递的信息类型决定的。模块之间的连接越紧密,联系越多,耦合性越高,而其模块独立性就越弱。模块化设计的目标是:建立模块间耦合尽可能松散的系统。其优点在于:(1)在设计、编码、测试和维护系统中的任何一个模块时,不需要对系统中的其他模块有很多了解。(2)当某个模块出错时,对系统的其他部分影响小。 内聚性标志一个模块内部各元素彼此结合的紧密程度。理想情况下,一个内聚的模块只做一件事。在进行概要设计时,要尽量采取高内聚。内聚与耦合呈反比关系,模块内的内聚越高,模块间的耦合度就越低。在概要设计阶段,模块内聚更重要。只要做到各个模块的高内聚,模块间的耦合程度自然降低,模块的独立性也越高。下面举例分析 1) 耦合性 耦合性是对一个软件结构内部不同模块间联系紧密程度的度量指标。决定耦合性高低的主要因素 由于模块间的联系是通过模块接口实现的,因此,模块耦合性的高低主要取决于模块接口的复杂程度、调用模块的方式以及通过模块接口的数据。模块间的耦合性主要可划分为如下几种类型。 (1) 数据耦合。若两个模块之间仅通过模块参数交换信息,且交换的信息全部为简单数据,则称这种耦合为数据耦合。数据耦合的耦合性最低,通常软件中都包含有数据耦合。数据耦合的例子如下所示: sum(int a,int b) {int c; c=a+b; return(c); } main() {int x,y; printf("x+y= %d",sum(x,y)); }/*主函数与sum函数之间即为数据耦合关系*/ (2) 公共耦合。若两个或多个模块通过引用公共数据相互联系,则称这种耦合为公共耦合。例如,在程序中定义了全局变量,并在多个模块中对全局变量进

软件工程低耦合高内聚

基本解释 高内聚低耦合,是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,主要是看类的内聚性是否高,耦合度是否低。 高内聚 内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧密程度高。所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。 低耦合 耦合:一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。) 对于低耦合,粗浅的理解是:一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。这样有利于修改和组合。[1] 为什么要追求高内聚和低耦合 软件架构设计的目的简单说就是在保持软件内在联系的前提下,分解软件系统,降低软件系统开发的复杂性,而分解软件系统的基本方法无外乎分层和分割。但是在保持软件内在联系的前提下,如何分层分割系统,分层分割到什么样的粒度,并不是一件容易的事,这方面有各种各样的分解方法,比如:关注点分离,面向方面,面向对象,面向接口,面向服务,依赖注入,以及各种各样的设计原则等,而所有这些方法都基于高内聚,低耦合的原则。高内聚和低耦合是相互矛盾的,分解粒度越粗的系统耦合性越低,分解粒度越细的系统内聚性越高,过度低耦合的软件系统,软件模块内部不可能高内聚,而过度高内聚的软件模块之间必然是高度依赖的,因此如何兼顾高内聚和低耦合是软件架构师功力的体现。高内聚,低耦合的系统有什么好处呢?事实上,短期来看,并没有很明显的好处,甚至短期内会影响系统的开发进度,因为高内聚,低耦合的系统对开发设计人员提出了更高的要求。高内聚,低耦合的好处体现在系统持续发展的过程中,高内聚,低耦合的系统具有更好的重用性,维护性,扩展性,可以更高效的完成系统的维护开发,持续的支持业务的发展,而不会成为业务发展的障碍。[2]

高内聚低耦合原则

高内聚低耦合原则 一、什么是耦合度 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分摸块的一个准则就是高内聚低耦合。耦合度(Coupling)是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。降低模块间的耦合度能减少模块间的影响,防止对某一模块修改所引起的“牵一发动全身”的水波效应,保证系统设计顺利进行。内聚和耦合密切相关,同其它模块存在强耦合关系的模块常意味这弱内聚,强内聚常意味着弱耦合。耦合度就是某模块(类)与其它模块(类)之间的关联、感知和依赖的程度,是衡量代码独立性的一个指标,也是软件工程设计及编码质量评价的一个标准。耦合的强度依赖于以下几个因素: (1)一个模块对另一个模块的调用; (2)一个模块向另一个模块传递的数据量; (3)一个模块施加到另一个模块的控制的多少; (4)模块之间接口的复杂程度。 耦合按从强到弱的顺序可分为以下几种类型: a)非直接耦合:两模块间没有直接关系,之间的联系完全是通过主模块的控制和调用来实现的 b)数据耦合:一个模块访问另一模块,彼此间通过简单数据参数来交换输入、输出信息。这里的简单数据参数不同于控制参数、公共数据结构或外部变量。 c)标记耦合:如一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,不是简单变量。 d)控制耦合:一个模块通过传递开关、标志、名字等控制信息,明显的控制选择另一模块的功能 e)外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数传递该全局变量的信息 f)公共耦合:一组模块都访问同一个公共数据环境。该公共数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。 g)内容耦合:一个模块直接修改另一个模块的数据,或直接转入另一个模块内聚度是指内部各元素之间联系的紧密程度,模块的内聚种类通常可分为7种,按其内聚度从低到高的次序依此为:偶然内聚、逻辑内聚、瞬时内聚、过程内聚、通信内聚、顺序内聚、功能内聚。 二、为什么要低耦合 了解什么是耦合及耦合的分类后,我想大家对为什么要降低耦合度已经有一定的认识,并且多数开发人员也大概尝尽了高耦合带来的苦头。道理很简单,耦合度很高的情况下,维护代码时修改一个地方会牵连到很多地方,如果修改时没有理清这些耦合关系,那么带来的后果可能会是灾难性的,特别是对于需求变化较多以及多人协作开发维护的项目,修改一个地方会引起本来已经运行稳定的模块错误,严重时会导致恶性循环,问题永远改不完,开发和测试都在各种问题之间奔波劳累,最后导致项目延期,用户满意度降低,成本也增加了,这对用户和开发商影响都是很恶劣的,各种风险也就不言而喻了。 为了预防这些问题的发生,其中一个重要手段就是降低代码的耦合度。但也不可能有绝对的零耦合,比如基于J2EE编程那就必须和JDK耦合,而且高耦合也不是一无是处,如果在设计前期预料到某功能后期基本不用修改,那么即使高耦合了也关系不大。但是,在还没有能力设计出基本不用修改的代码前,还得要求以低耦合为标准。那么怎样才能最大限度地降低耦合度呢?下面介绍降低耦合度的几种方法。 三、降低耦合度的方法 1、少使用类的继承,多用接口隐藏实现的细节。 Java面向对象编程引入接口除了支持多态外,隐藏实现细节也是其中一

软件工程习题解答(含基本章节应试例子以及一个UML案例)

软件工程习题解答 一、软件生存周期各阶段的基本任务? 1. 问题定义: (1)回答要解决的问题是什么。 (2)系统分析员应该提出关于问题性质、工程目标和规模的书面报告。 (3)经过和用户讨论,澄清含糊不清的地方,改正理解不正确的地方,得出一份双方都满意的文档。 (4)问题定义是软件生命周期中最简短的阶段。 2.可行性研究: (1)前一阶段定义的问题有可行的解决办法吗? (2)系统分析员要进行一次大大压缩和简化了的系统分析和设计。导出高层逻辑模型(用数据流图表示)。确定工程规模和目标,准确估计系统的成本和效益。 (3)使用部门的负责人根据可行性研究的结果决定是否继续进行该工程的开发工作。 3.需求分析: (1)主要确定目标系统必须具备哪些功能。 (2)系统分析员和用户密切配合,充分交流,得出经用户确认的系统逻辑模型(数据流图、数据字典、算法描述)。 4.总体设计: (1)回答如何解决问题。 (2)系统分析员 应使用系统流程图或其他工具描述每种可能系统; 估计每种方案的成本和效益。 推荐一较好的系统──有其详细计划。 设计软件的结构(用层次图或结构图描述)。 5.详细设计: (1)回答应该怎样具体地实现这个系统。 (2)设计出程序的详细规格说明(用HIPO层次图加输入/处理/输出图)或PDL语言(过程设计语言)。 6.编码和单元测试: (1)写出正确的容易理解,容易维护的程序模块。 (2)程序员: 选取一种适当的用高级语言书写程序(或汇编语言)。 仔细测试编写出的每一个模块。 7.综合测试: (1)通过各种类型的测试,使软件达到预定的要求。 (2)最基本的测试是集成测试和验收测试方法。 集成测试是根据设计的软件结构,把经过单元测试检验的模块按某种选定的策略装配起来,在装配的过程中对程序进行必要的测试。 验收测试是按照需求规格说明书的规定,由用户对目标系统进行验收。 (3)用正式文档将测试计划、详细测试方案以及实际测试结果保存。 (4)以正式或非正式的方式对用户进行培训。 8.软件维护: (1)使系统持久地满足用户的需要。 (2)四类维护: 改正性维护:诊断和改正使用过程中发现的软件错误。

高内聚低耦合

高内聚低耦合 1.什么是内聚?什么是耦合? 内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系; 耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。 耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。 2.内聚分为哪几类?耦合分为哪几类? 内聚有如下的种类,它们之间的内聚度由弱到强排列如下:(1)偶然内聚。模块中的代码无法定义其不同功能的调用。但它使该模块能执行不同的功能,这种模块称为巧合强度模块。 (2)逻辑内聚。这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块参数来确定该模块应完成哪一种功能(3)时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块。

(4)过程内聚:构件或者操作的组合方式是,允许在调用前面的构件或操作之后,马上调用后面的构件或操作,即使两者之间没有数据进行传递。 (5)通信内聚:指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。 (6)顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。 (7)功能内聚:这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。 耦合可以分为以下几种,它们之间的耦合度由高到低排列如下: (1)内容耦合:如果发生下列情形,两个模块之间就发生了内容耦合 ?一个模块直接访问另一个模块的内部数据 ?一个模块不通过正常入口转到另一模块内部; ?两个模块有一部分程序代码重叠(只可能出现在汇编语言中); ?一个模块有多个入口。

耦合与MPC

没有特别的区分,各有优缺点而已。如果能满足你的要求,用哪个都行。MPC下面有很多子类,相对而言选择性强些,对于点对点的约束很直观,如果能结合一些网格划分工具中的功能,是很容易定义多个点和另外多个点之间的对应MPC关系的。对于Coupling,容易定义一些,可以说更好用些,特别是对于很多点和另外很多点之间的耦合,可以直接通过定义面和面之间的耦合关系定义,由算法自动定义相应的点和点之间的耦合(通常是一个点和几个点之间的对应耦合,有加权系数),如果是K-coupling,则是和对应的MPC完全等价的。对于一个点和多个点之间的对应刚性耦合,K-coupling和MPC完全等价,可以通过定义一点和一个面的耦合来定义,所有方便些。D-coupling则是着重于强调耦合间的力和力矩的传递,对于位移的耦合不是刚性的,这对于某些边界条件的定义或者壳与固体的连接关系定义是有用的。通常如果不关心耦合定义所在部位的计算精度的话,用K-coupling即可。 K-coupling在约束的自由度上主节点和从节点有相同的位移; D-coupling传递力,不传递位移,力的大小可以通过定义分布系数如uniform或者线性或者二次函数来分布,函数是以从节点与主节点之间的距离作为自变量的; S-coupling传递力,也传递位移,力的分布同D-coupling(这一点我不是很确定),主节点的位移在help-theory文件中是这么说明的:把所有从节点当做刚性体,主节点的位移和这个刚性体的位移等效。(这一点我也不是很确定), C-D和S-D两种连接方式的原则都是载荷/质量的再分配,与刚度无关。 MPC实际上是建立了主点与从点间的自由度约束,各种形式约束的自由度不尽相同而已。连接提高了模型刚度,其提高的不同程度由各个种类下约束的自由度决定。

内聚性与耦合性

耦合性与内聚性 (2010-06-20 12:13:39) 转载 标签: 分类:概念文章 耦合性 内聚性 it 1) 耦合性 ?耦合性是对一个软件结构内部不同模块间联系紧密程度的度量指标。 ?决定耦合性高低的主要因素 由于模块间的联系是通过模块接口实现的,因此,模块耦合性的高低主要取决于模块接口的复杂程度、调用模块的方式以及通过模块接口的数据。模块间的耦合性主要可划分为如下几种类型。 (1) 数据耦合。若两个模块之间仅通过模块参数交换信息,且交换的信息全部为简单数据,则称这种耦合为数据耦合。数据耦合的耦合性最低,通常软件中都包含有数据耦合。数据耦合的例子如下所示: sum(int a,int b) {int c; c=a+b; return(c); } main()

{int x,y; printf("x+y= %d",sum(x,y)); } (2) 公共耦合。若两个或多个模块通过引用公共数据相互联系,则称这种耦合为公共耦合。例如,在程序中定义了全局变量,并在多个模块中对全局变量进行了引用,则引用全局变量的多个模块间就具有了公共耦合关系。 (3) 控制耦合。若模块之间交换的信息中包含有控制信息(尽管有时控制信息是以数据的形式出现的),则称这种耦合为控制耦合。控制耦合是中等程度的耦合,它会增加程序的复杂性。控制耦合的例子如下所示: void output(flag) {if (flag) printf("OK! "); else printf("NO! "); } main() { int flag; output(flag);

} (4) 内容耦合。若一个模块对另一模块中的内容(包括数据和程序段)进行了直接的引用甚至修改,或通过非正常入口进入到另一模块内部,或一个模块具有多个入口,或两个模块共享一部分代码,则称模块间的这种耦合为内容耦合。内容耦合是所有耦合关系中程度最高的,会使因模块间的联系过于紧密而对后期的开发和维护工作带来很大的麻烦。 2) 内聚性 内聚性是对一个模块内部各个组成元素之间相互结合的紧密程度的度量指标。模块中组成元素结合的越紧密,模块的内聚性就越高,模块的独立性也就越高。理想的内聚性要求模块的功能应明确、单一,即一个模块只做一件事情。模块的内聚性和耦合性是两个相互对立且又密切相关的概念。 经实践证明,保证模块的高内聚性比低耦合性更为重要,在软件设计时应将更多的注意力集中在提高模块的内聚性上。模块的内聚性主要可划分为如下几种不同的类型。 (1) 偶然内聚。若一个模块由多个完成不同任务的语句段组成,各语句段之间的联系十分松散或根本没有任何联系,则称此模块的内聚为偶然内聚。 (2) 逻辑内聚。这种模块是把几种功能组合在一起,每次调用时,则由传递给模块的判定参数来确定该模块应执行哪一种功能。

高内聚,低耦合

对高内聚,低耦合的理解 内聚:一个模块内各个元素彼此结合的紧密程度 耦合:一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系。指软件系统结构中个模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。) 最近编码的时候,总是在犹豫是把某个方法封装在一个类里,还是单独的封装成一个类。这让我突然想起内聚耦合这两个名词。 我们一直追求着,高内聚,低耦合。 对于低耦合,粗浅的理解是: 一个完整的系统,模块与模块之间,尽可能的使其独立存在。 也就是说,让每个模块,尽可能的独立完成某个特定的子功能。 模块与模块之间的接口,尽量的少而简单。 如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。 这样有利于修改和组合。 对于低耦合,我粗浅的理解是: 在一个模块内,让每个元素之间都尽可能的紧密相连。 也就是充分利用每一个元素的功能,各施所能,以最终实现某个功能。 如果某个元素与该模块的关系比较疏松的话,可能该模块的结构还不够完善,或者是该元素是多余的。 内聚和耦合,包含了横向和纵向的关系。功能内聚和数据耦合,是我们需要达成的目标。横向的内聚和耦合,通常体现在系统的各个模块、类之间的关系,而纵向的耦合,体现在系统的各个层次之间的关系。 对于我在编码中的困惑,我是这样想的,用面向对象的思想去考虑一个类的封装。一个方法,如何封装,拿到现实生活中来看,看这种能力(方法)是否是属于这类事物(类)的本能。 如果是,就封装在这个类里。

如果不是,则考虑封装在其它类里。 如果这种能力,很多事物都具有,则一定要封装在这类事物的总类里。 如果这种能力,很多事物都会经常用到,则可以封装成一个总类的静态方法。 关于耦合内聚的概念 这些是软件工程中的知识,我上网查过,总结着几位大虾的评论,关于耦合的概念应该是这样的: 1,对象之间的耦合度就是对象之间的依赖性.指导使用和维护对象的主要问题是对象之间的多重依赖性.对象之间的耦合性越高.维护成本越高.因此对象的设计应使类和构件之间的耦合最小. 2,耦合性是程序结构中各个模块之间相互关联的度量.它取决于各个模块之间的接口的复杂程度,调用模块的方式一级哪些信息通过接口,一般模块之间可能的连接方式有七种,耦合性由低到高分别是:非直接耦合,数据耦合,标记耦合,控制耦合,外部耦合,公共耦合,内容耦合. 一个软件是由多个子程序组装而成,而一个程序由多个模块(方法)构成. 耦合是指各个外部程序(子程序)之间的关系紧密度 而内聚就是指程序内的各个模块之间的关系紧密度 所以说,为什么要高内聚,模块之间的关系越紧密,出错就越少!低耦合就是说,子程序之间的关系越复杂,就会产生出更多的意想不到的错误!会给以后的维护工作带来很多麻烦 一个优秀软件开发人员的必修课:高内聚 高内聚Java 软件工程软件模式 一个重要的模式:高内聚。 2. 高内聚(High Cohesion) 高内聚是另一个普遍用来评判软件设计质量的标准。内聚,更为专业的说法叫功能内聚,是对软件系统中元素职责相关性和集中度的度量。如果元素具有高度相关的职责,除了这些职责内的任务,没有其它过多的工作,那么该元素就具有高内聚性,反之则为低内聚性。高内聚要求软件系统中的各个元素具有较高的协作性,因为在我们在完成软件需求中的一个功能,可能需要做各种事情,但是具有高内聚性的一个元素,只完成它职责内的事情,而把那些不在它职责内的事情拿去请求别人来完成。这就好像,如果我是一个项目经理,我的职责是监控和协调我的项目各个阶段的工作。当我的项目进入需求分析阶段,我会请求需求分析员来完成;当我的项目进入开发阶段,我会请求软件开发人员来完成;当我的项目需要测试

高内聚低耦合

高内聚低耦合 1.什么是内聚什么是耦合 内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系; 耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。 耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。 2.内聚分为哪几类耦合分为哪几类 内聚有如下的种类,它们之间的内聚度由弱到强排列如下:(1)偶然内聚。模块中的代码无法定义其不同功能的调用。但它使该模块能执行不同的功能,这种模块称为巧合强度模块。 (2)逻辑内聚。这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块参数来确定该模块应完成哪一种功能(3)时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块。

(4)过程内聚:构件或者操作的组合方式是,允许在调用前面的构件或操作之后,马上调用后面的构件或操作,即使两者之间没有数据进行传递。 (5)通信内聚:指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。 (6)顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。 (7)功能内聚:这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。 耦合可以分为以下几种,它们之间的耦合度由高到低排列如下: (1)内容耦合:如果发生下列情形,两个模块之间就发生了内容耦合 一个模块直接访问另一个模块的内部数据 一个模块不通过正常入口转到另一模块内部; 两个模块有一部分程序代码重叠(只可能出现在汇编语言中); 一个模块有多个入口。

相关主题
相关文档
最新文档