编辑代码

program finite_element_mesh
    implicit none
    
    ! 声明变量
    real :: a, b
    integer :: m, n, i, j, node_num, element_num, elem
    real, allocatable :: x(:,:), y(:,:)
    integer, allocatable :: element(:,:)
    
    ! 设置基本参数
    a = 10.0    ! 矩形长度
    b = 5.0     ! 矩形宽度
    m = 4       ! x方向分段数
    n = 2       ! y方向分段数
    
    ! 计算节点和单元数量
    node_num = (m + 1) * (n + 1)
    element_num = 2 * m * n
    
    ! 分配数组
    allocate(x(m+1, n+1))
    allocate(y(m+1, n+1))
    allocate(element(3, element_num))
    
    ! 计算节点坐标
    do i = 1, m + 1
        do j = 1, n + 1
            x(i,j) = (i - 1) * a / m
            y(i,j) = (j - 1) * b / n
        end do
    end do
    
    ! 生成单元连接信息
    elem = 1
    do i = 1, m
        do j = 1, n
            ! 第一个三角形单元
            element(1, elem) = (j - 1) * (m + 1) + i
            element(2, elem) = (j - 1) * (m + 1) + i + 1
            element(3, elem) = j * (m + 1) + i
            elem = elem + 1
            
            ! 第二个三角形单元
            element(1, elem) = (j - 1) * (m + 1) + i + 1
            element(2, elem) = j * (m + 1) + i + 1
            element(3, elem) = j * (m + 1) + i
            elem = elem + 1
        end do
    end do
    
    ! 输出结果
    print *, "节点坐标:"
    do i = 1, m + 1
        do j = 1, n + 1
            print *, "节点", (j-1)*(m+1)+i, ": (", x(i,j), ",", y(i,j), ")"
        end do
    end do
    
    print *, "单元连接信息:"
    do i = 1, element_num
        print *, "单元", i, ": ", element(1,i), element(2,i), element(3,i)
    end do
    
    ! 释放内存
    deallocate(x)
    deallocate(y)
    deallocate(element)
    
end program finite_element_mesh