fortran有限元分析程序,有偿代写

对于fortran编程不懂,有限元也学的不好,求一位代写,有偿,有意留言我,谢谢了。

img

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7566808
  • 这篇博客也不错, 你可以看下【历史上的今天】11 月 28 日:中国顶级域名 CN 被注册;上世纪最大的论坛诞生;首个 Fortran 程序开发者逝世
  • 除此之外, 这篇博客: Fortran保姆级教学——考试所有知识点看这一篇就够了中的 4.fortran中传参是地址传参 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 向传参传过去的是地址而不是值,传过去的参数在函数/子程序中修改了,主函数中的变量值也会随之改变,必须注意这一点!

    program main
        external fun
        integer ::a,x=17,b,fun
        a=fun(x)/fun(x)
        b=fun(x)-fun(x)
        write(*,*)a,b
        pause
        end
        
    integer function fun(x)
        integer x  
        x=x/2	
        =>传来的x在此处的改动会改变主函数中的x的值,第一次进来时候x=17,第一次出去时x=8,当主程序a在计算分母的时候
        再次调用的时候x=8,之后以此类推
        fun=x*x
    end
    
    输出:4 3
    
    • 当传过去的时候是一个表达式的时候,子程序中修改的是表达式整体的量,而不是表达式中各个变量的值
    program main
        real::a=3.0,b=5.0,c=4.0
        call subt(b-a,c) =>1. 传过去的第一个参数是b-a这个整体
        write(*,*)b-a,c => 3. 这里的b-a是用原函数中的b-a重新计算,5-2=3.0 
        pause
        end
        
    subroutine subt(x,y)
        real x,y
        x=x+2 => 2. 修改的是b-a这个整体,原函数的b,a并没有被修改
        y=y+1
    end
    

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
很抱歉,作为一个AI语言模型,我并不能提供有偿代写的服务,也无法通过代码给出完整的有限元分析程序。但是,我可以提供一些有用的信息和建议。

首先,从程序设计角度来看,有限元分析程序是一种比较复杂的数值计算程序,需要考虑各种数值方法、算法和数据结构。如果您不熟悉Fortran和有限元方法,建议先学习一些基本知识和相关的书籍、论文和课程。

关于Fortran编程语言,您可以阅读一些Fortran编程手册和教程,例如Fortran 95/2003编程手册和Fortran语言程序设计。这些资源可以帮助您了解Fortran的语法、数据类型、控制结构、函数和模块等基本知识。

关于有限元方法,需要了解有限元模型的基本概念、离散化方法、求解算法、网格生成、后处理和可视化等方面。有关有限元的书籍包括《有限元方法基础》、《非线性有限元分析:基础与应用》。也可以学习一些在线课程,例如Coursera上的《有限元方法》、MIT OpenCourseWare上的《有限元分析》。

最后,如果您已经理解了Fortran和有限元方法的基本知识,并且已经有一些经验和代码,但需要代写程序的话,建议您在相关论坛或社区发布招标信息或邀请程序员合作,这样可以找到合适的人或团队来帮助您完成项目。
如果我的回答解决了您的问题,请采纳!

一个示例,用于计算二维平面应力问题


program fem
    implicit none
    integer, parameter :: nelem=4, nnodes=4, ndim=2
    real, parameter :: pi=3.14159
    integer :: conn(2,nelem), i, j, k
    real :: coord(ndim, nnodes), f(nelem), kmat(ndim*nnodes,ndim*nnodes)
    real :: x, y, d, c, s, phi, theta, r
    ! 节点和单元信息
    conn(:,1) = [1,2]
    conn(:,2) = [2,3]
    conn(:,3) = [3,4]
    conn(:,4) = [4,1]
    coord(:,1) = [0.0, 0.0]
    coord(:,2) = [1.0, 0.0]
    coord(:,3) = [1.0, 1.0]
    coord(:,4) = [0.0, 1.0]
    ! 初始化矩阵
    kmat = 0.0
    f = 0.0
    ! 循环每个单元
    do i = 1, nelem
        ! 计算单元刚度矩阵
        x = coord(1,conn(1,i))
        y = coord(2,conn(1,i))
        d = sqrt(x**2 + y**2)
        c = x/d
        s = y/d
        phi = atan2(s,c)
        theta = atan2(y,x)
        r = 1.0
        kmat(ndim*conn(1,i)-1,ndim*conn(1,i)-1) = kmat(ndim*conn(1,i)-1,ndim*conn(1,i)-1) + r*d*phi/pi
        kmat(ndim*conn(1,i)-1,ndim*conn(2,i)-1) = kmat(ndim*conn(1,i)-1,ndim*conn(2,i)-1) - r*d*phi/pi
        kmat(ndim*conn(2,i)-1,ndim*conn(1,i)-1) = kmat(ndim*conn(2,i)-1,ndim*conn(1,i)-1) - r*d*phi/pi
        kmat(ndim*conn(2,i)-1,ndim*conn(2,i)-1) = kmat(ndim*conn(2,i)-1,ndim*conn(2,i)-1) + r*d*phi/pi
        kmat(ndim*conn(1,i),ndim*conn(1,i)) = kmat(ndim*conn(1,i),ndim*conn(1,i)) + r*d*theta/pi
        kmat(ndim*conn(1,i),ndim*conn(2,i)) = kmat(ndim*conn(1,i),ndim*conn(2,i)) - r*d*theta/pi
        kmat(ndim*conn(2,i),ndim*conn(1,i)) = kmat(ndim*conn(2,i),ndim*conn(1,i)) - r*d*theta/pi
        kmat(ndim*conn(2,i),ndim*conn(2,i)) = kmat(ndim*conn(2,i),ndim*conn(2,i)) + r*d*theta/pi
        ! 计算单元载荷向量
        f(i) = 1.0
    end do
    ! 解方程
    call solve(kmat,f)
    ! 输出结果
    write(*,*) 'Displacements:'
    do i = 1, nnodes
        write(*,*) 'Node ',i,': ',f(2*i-1),f(2*i)
    end do
contains
    ! 解线性方程组的函数
    subroutine solve(a, b)
        implicit none
        integer :: n, info
        integer :: ipiv(ndim*nnodes)
        real :: a(ndim*nnodes, ndim*nnodes), b(ndim*nnodes)
        ! 调用LAPACK库中的sgesv函数解线性方程组
        n = ndim * nnodes
        call sgesv(n, 1, a, n, ipiv, b, n, info)
        ! 如果解决方案失败,则输出错误信息
        if (info /= 0) then
            write(*,*) 'Failed to solve linear system'
        end if
    end subroutine solve
end program fem