Fortran Coder

查看: 4350|回复: 2
打印 上一主题 下一主题

[有限元] 请教一个温度在网格上分配的算法

[复制链接]

1

帖子

1

主题

0

精华

新人

F 币
18 元
贡献
8 点
跳转到指定楼层
楼主
发表于 2014-12-20 13:58:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
如图所示,将单元所得温度值分配到1-9节点上,其中:
节点1379 分别为单元1-4温度值;节点2为单元12的平均值;节点4为单元13的平均值;节点6为单元24的平均值;节点8为单元34的平均值;
节点5为单元1234的平均值;
请教一下,下面的算法哪里有问题?



算法伪代码:
[Fortran] 纯文本查看 复制代码
tem = [6 12 24 36]!单元温度
NJoints = 6 !节点数
NElems = 4 !单元数
NJE = 4      !每个单元节点数
Elems = [1 2 5 4; 
                2 3 6 5;
                4 5 8 7;
                5 6 9 8!单元节点构造
node_tem = zeros(NJoints,1)
do k = 1:NJoints
        t = 0;
        ne = 0;
     do iel = 1:NElems
         do jel =1: NJE 
             if  Elems(iel,jel) == k
                 ne = ne+1;
                 t = t + tem(iel);
             end
         enddo
     enddo
    node_tem = t/ne;
 enddo


分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

725

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
657 元
贡献
337 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2014-12-20 16:00:14 | 只看该作者
你这算法有点罗嗦,还不如分情况填呢。

[Fortran] 纯文本查看 复制代码
Module MeshDistribution_Mod
  Implicit None
contains
  Function MeshDistribution( r )
    Real , Intent( IN ) :: r(:,:)
    Real :: MeshDistribution(size(r,dim=1)+1,size(r,dim=2)+1)
    Integer :: n , m , i , j
    MeshDistribution = 0.0
    n = size(r,dim=1)+1
    m = size(r,dim=2)+1
    MeshDistribution( 1 , 1 ) = r(1,1)
    MeshDistribution( 1 , m ) = r(1,m-1)
    MeshDistribution( n , 1 ) = r(n-1,1)
    MeshDistribution( n , m ) = r(n-1,m-1)
    Do i = 2 , n-1
      MeshDistribution( i , 1 ) = sum(r(i-1:i,1))/2.0
      Do j = 2 , m-1
        MeshDistribution( i , j ) = sum(r(i-1:i,j-1:j))/4.0
      End Do
      MeshDistribution( i , m ) = sum(r(i-1:i,m-1))/2.0
    End Do
    Do j = 2 , m-1
      MeshDistribution( 1 , j ) = sum(r(1,j-1:j))/2.0
      MeshDistribution( n , j ) = sum(r(n-1,j-1:j))/2.0
    End Do
  End Function MeshDistribution
End Module MeshDistribution_Mod

Program www_fcode_cn
  Use MeshDistribution_Mod  
  Implicit None
  real :: v(4,3) = reshape( (/ &
          3,5,6,0, &
          8,3,5,4, & 
          8,6,8,1  /) , (/4,3/) )
  write(*,'(4(5f5.2,/))') MeshDistribution( v )
End Program www_fcode_cn

135

帖子

15

主题

0

精华

版主

F 币
1159 元
贡献
637 点

爱心勋章管理勋章

板凳
发表于 2014-12-20 20:42:42 | 只看该作者
建议参照有限元后处理应力磨平操作进行计算,即对每个单元进行循环,循环的过程中累积节点的温度,并且记录每个节点所在的单元数,最后用累积温度除以每个节点所在的单元数即可:
do ie=1,ne       !单元总数循环
do inode=1,nd  !每个单元的节点数
T(ELEMS(inode.ie))=T(ELEMS(inode.ie))+每个单元计算出来的节点温度  !累积单元节点温度
nn(ELEMS(inode.ie))=nn(ELEMS(inode.ie))+1                                    !累积每个节点所在的单元数
enddo
enddo
! 再平均
T(1:NNODE)=T(1:NNODE)/NN(1:NNODE)
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-24 02:18

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表