【调剂】北京石油化工学院2024年16个专业接受调剂
查看: 8799  |  回复: 157
本帖产生 1 个 程序强帖 ,点击这里进行查看

maomao1210

金虫 (正式写手)

[交流] 【交流】Fortran语言答疑专帖已有46人参与

帖主寄言


其实语言并不是最重要的,形势的载体而已,fortran擅长工程计算,因为工作需要,偶尔用用fortran。在此开贴目的有二:

第一,希望能和大家交流的同时提高和丰富自己;

第二,认识来自五湖四海的朋友。

资料目前还没有整理,有机会整理上传一些。呵呵。


[ Last edited by nono2009 on 2009-11-18 at 10:34 ]
回复此楼

» 收录本帖的淘贴专辑推荐

硕博精华 基础知识 生活休闲 Monte Carlo 模拟(fortran 编程)
dragonlxd的专辑 专业相关 引力论与宇宙学

» 本帖已获得的红花(最新10朵)

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

RyanHusky

银虫 (初入文坛)


小木虫: 金币+0.5, 给个红包,谢谢回帖
最近正在编写的一段有关一个小型电网的拓扑搜索计算程序,以下我贴出我编写的拓扑搜索分支程序,请各位大牛多多赐教!
subroutine  PowerSystemParameterGetValue()
    use  PowerSystemConstant
    use  PowerSystemParameter
    use  Comp_TP
    implicit none  
    logical alive
!      PhysicalNodeNum=8  
!      GenNum=2
!      Tran2Num=1   
!      BreakerNum=2
!      IsolatorNum=2
!      GroundCapacitanceNum=1
!      LoadNum=2
!      BusNum=4
!      LineNum=3
   
    inquire(file="Data/PowerSystemParameter.txt",exist=alive)
    if (alive)then      
        open(unit=FileId,file='Data/PowerSystemParameter.txt')
        read(FileId,*)PhysicalNodeNum,GenNum,Tran2Num,BreakerNum,IsolatorNum,GroundCapacitanceNum,LoadNum,BusNum,LineNum
        write(*,*)"  Read PowerSystemParameter.txt is OK!"
        close(FileId,status='keep')
    else
        write(*,*)"  PowerSystemParameter.txt doesn't exist."
    endif  
   
endsubroutine

subroutine  Com_TPAllocate()
  
    use  PowerSystemParameter
    use  Comp_TP   
    implicit none

    if (BreakerNum/=0)then      
        allocate(TP_Breakers(BreakerNum))
    endif
    if (IsolatorNum/=0)then      
        allocate(TP_Isolators(IsolatorNum))
    endif
    if (BusNum/=0)then
        allocate(TP_Buss(BusNum))
    endif
    if (LoadNum/=0)then
        allocate(TP_Loads(LoadNum))
    endif
    if (GroundCapacitanceNum/=0)then
        allocate(TP_GroundCapacitances(GroundCapacitanceNum))
    endif
    if (LineNum/=0)then
        allocate(TP_Lines(LineNum))
    endif   
    if (GenNum/=0)then
        allocate(TP_Gens(GenNum))
    endif
    if (Tran2Num/=0)then
        allocate(TP_Tran2s(Tran2Num))
    endif

endsubroutine



!=========================================
!   拓扑分析元件数据初始化
!=========================================



subroutine  NodeInit()
!拓扑搜索赋值
    use  PowerSystemConstant
    use  PowerSystemParameter
    use  Comp_TP
    implicit none
    integer::i
    logical alive
    inquire(file="Data/Breaker.txt",exist=alive)
    if (alive)then      
        open(unit=FileId,file='Data/Breaker.txt')
        do i=1,BreakerNum
            read(FileId,*)TP_Breakers(i).P1,TP_Breakers(i).P2,TP_Breakers(i).isoff
        enddo
        close(FileId,status='keep')
        write(*,*)"  Read Breaker.txt is OK!"
        !write(*,*)TP_Breakers(BreakerNum)
    else
        write(*,*)"  Breaker.txt doesn't exist."
    endif

    inquire(file="Data/Isolator.txt",exist=alive)
    if (alive)then      
        open(unit=FileId,file='Data/Isolator.txt')
        do i=1,IsolatorNum
            read(FileId,*)TP_Isolators(i).P1,TP_Isolators(i).P2,TP_Isolators(i).isoff
        enddo
        close(FileId,status='keep')
        write(*,*)"  Read Isolator.txt is OK!"
       ! write(*,*)TP_Isolators(IsolatorNum)
    else
        write(*,*)"  Isolator.txt doesn't exist."
    endif

    inquire(file="Data/Bus.txt",exist=alive)
    if (alive)then      
        open(unit=FileId,file='Data/Bus.txt')
        do i=1,BusNum
            read(FileId,*)TP_Buss(i).Enable,TP_Buss(i).P1
        enddo
        close(FileId,status='keep')
        write(*,*)"  Read Bus.txt is OK!"
       ! write(*,*)TP_Buss(BusNum)
    else
        write(*,*)"  Bus.txt doesn't exist."
    endif

    inquire(file="Data/Load.txt",exist=alive)
    if (alive)then      
        open(unit=FileId,file='Data/Load.txt')
        do i=1,LoadNum
            read(FileId,*)TP_Loads(i).Enable,TP_Loads(i).P1
        enddo
        close(FileId,status='keep')
        write(*,*)"  Read Load.txt is OK!"
        !write(*,*)TP_Loads(LoadNum)
    else
        write(*,*)"  Load.txt doesn't exist."
    endif

    inquire(file="Data/GroundCapacitance.txt",exist=alive)
    if (alive)then      
        open(unit=FileId,file='Data/GroundCapacitance.txt')
        do i=1,GroundCapacitanceNum
            read(FileId,*)TP_GroundCapacitances(i).Enable,TP_GroundCapacitances(i).P1
        enddo
        close(FileId,status='keep')
        write(*,*)"  Read GroundCapacitance.txt is OK!"
        !write(*,*)TP_GroundCapacitances(GroundCapacitanceNum)
    else
        write(*,*)"  GroundCapacitance.txt doesn't exist."
    endif

    inquire(file="Data/Generator.txt",exist=alive)
    if (alive)then      
        open(unit=FileId,file='Data/Generator.txt')
        do i=1,GenNum
            read(FileId,*)TP_Gens(i).Enable,TP_Gens(i).P1,TP_Gens(i).NodeType
        enddo
        close(FileId,status='keep')
        write(*,*)"  Read Generator.txt is OK!"
        !write(*,*)TP_Gens(GenNum)
    else
        write(*,*)"  Generator.txt doesn't exist."
    endif

    inquire(file="Data/Tran2.txt",exist=alive)
    if (alive)then      
        open(unit=FileId,file='Data/Tran2.txt')
        do i=1,Tran2Num
            read(FileId,*)TP_Tran2s(i).Enable,TP_Tran2s(i).P1,TP_Tran2s(i).P2
        enddo
        close(FileId,status='keep')
        write(*,*)"  Read Tran2.txt is OK!"
        !write(*,*)TP_Tran2s(Tran2Num)
    else
        write(*,*)"  Tran2.txt doesn't exist."
    endif

    inquire(file="Data/Line.txt",exist=alive)
    if (alive)then      
        open(unit=FileId,file='Data/Line.txt')
        do i=1,LineNum
            read(FileId,*)TP_Lines(i).Enable,TP_Lines(i).P1,TP_Lines(i).P2
        enddo
        close(FileId,status='keep')
        write(*,*)"  Read Line.txt is OK!"
       ! write(*,*)TP_Lines(LineNum)
    else
        write(*,*)"  Line.txt doesn't exist."
    endif
endsubroutine

!=====================================================
!                   全网逻辑节点形成函数
!=====================================================
subroutine GetLogicalNode()
  use  PowerSystemParameter
  use  TopologyAanlysisVars
  use  Comp_TP
  implicit none
  integer(kind=4) i,j,max,min
  !动态开辟物理节点到逻辑节点数组(位于TopologyAanlysisVars模块)内存空间
  allocate(PhyicalToLogicalArray(PhysicalNodeNum))
!数组初始化
  do i=1,PhysicalNodeNum
    PhyicalToLogicalArray(i)=i
  enddo

  !隔离开关状态量处理——隔离开关融合
  if (IsolatorNum/=0)then
    do i=1,IsolatorNum
        if (TP_Isolators(i).isoff==1)then
            if(PhyicalToLogicalArray(TP_Isolators(i).P1)>PhyicalToLogicalArray(TP_Isolators(i).P2))then
                max=PhyicalToLogicalArray(TP_Isolators(i).P1)
                min=PhyicalToLogicalArray(TP_Isolators(i).P2)
            else
                max=PhyicalToLogicalArray(TP_Isolators(i).P2)
                min=PhyicalToLogicalArray(TP_Isolators(i).P1)
            endif
            PhyicalToLogicalArray(TP_Isolators(i).P1)=min
            PhyicalToLogicalArray(TP_Isolators(i).P2)=min
            if (max/=min)then
                do j=1,PhysicalNodeNum
                    if(PhyicalToLogicalArray(j)==max)then
                        PhyicalToLogicalArray(j)=min
                    elseif(PhyicalToLogicalArray(j)>max)then
                        PhyicalToLogicalArray(j)=PhyicalToLogicalArray(j)-1
                    endif
                enddo
            endif
        endif
    enddo
  endif

  !断路器状态量处理——断路器融合
  if (BreakerNum/=0)then
    do i=1,BreakerNum
        if (TP_Breakers(i).isoff==1)then
            if(PhyicalToLogicalArray(TP_Breakers(i).P1)>PhyicalToLogicalArray(TP_Breakers(i).P2))then
                max=PhyicalToLogicalArray(TP_Breakers(i).P1)
                min=PhyicalToLogicalArray(TP_Breakers(i).P2)
            else
                max=PhyicalToLogicalArray(TP_Breakers(i).P2)
                min=PhyicalToLogicalArray(TP_Breakers(i).P1)
            endif
            PhyicalToLogicalArray(TP_Breakers(i).P1)=min
            PhyicalToLogicalArray(TP_Breakers(i).P2)=min
            if (max/=min)then
                do j=1,PhysicalNodeNum
                    if(PhyicalToLogicalArray(j)==max)then
                        PhyicalToLogicalArray(j)=min
                    elseif(PhyicalToLogicalArray(j)>max)then
                        PhyicalToLogicalArray(j)=PhyicalToLogicalArray(j)-1
                    endif
                enddo
            endif
        endif
    enddo
  endif

  !查找网络逻辑节点最大值

  LogicalNodeNum= PhyicalToLogicalArray(1)
  do i=1,PhysicalNodeNum
    if( PhyicalToLogicalArray(i)>LogicalNodeNum)then
        LogicalNodeNum=PhyicalToLogicalArray(i)
    endif
  enddo
    write(*,*)"逻辑节点数组为:"
  write(*,*)PhyicalToLogicalArray
  write(*,*)"逻辑节点最大值为:"
  write(*,*)LogicalNodeNum
   
endsubroutine

!================================================================
!                               网络电气岛处理函数
!================================================================
subroutine  GetIsland()
  use  PowerSystemParameter
  use  TopologyAanlysisVars
  use  Comp_TP
  implicit none
  integer(kind=4)::i,j,max,min,SaveIsLandNum
  integer(kind=4)::iTemp,jTemp
  if(LogicalNodeNum/=0)then
    allocate(IsLandArray(LogicalNodeNum))
  endif
  if(LogicalNodeNum/=0)then
    do i=1,LogicalNodeNum
        IsLandArray(i)=i
    enddo
  endif

!输电线路电气岛融合
  if(LineNum/=0)then
    do i=1,LineNum
        if(IsLandArray(PhyicalToLogicalArray(TP_Lines(i).P1))>IsLandArray(PhyicalToLogicalArray(TP_Lines(i).P2)))then
        max=IsLandArray(PhyicalToLogicalArray(TP_Lines(i).P1))
        min=IsLandArray(PhyicalToLogicalArray(TP_Lines(i).P2))
        else
        max=IsLandArray(PhyicalToLogicalArray(TP_Lines(i).P2))
        min=IsLandArray(PhyicalToLogicalArray(TP_Lines(i).P1))
        endif
        IsLandArray(PhyicalToLogicalArray(TP_Lines(i).P1))=min
        IsLandArray(PhyicalToLogicalArray(TP_Lines(i).P2))=min
        if(max/=min)then
            do j=1,LogicalNodeNum
                if(IsLandArray(j)==max)then
                    IsLandArray(j)=min
                elseif(IsLandArray(j)>max)then
                    IsLandArray(j)=IsLandArray(j)-1
                endif
            enddo
        endif
    enddo
  endif

  !双绕组变压器电气岛融合
  if(Tran2Num/=0)then
    do i=1,Tran2Num
        if(IsLandArray(PhyicalToLogicalArray(TP_Tran2s(i).P1))>IsLandArray(PhyicalToLogicalArray(TP_Tran2s(i).P2)))then
        max=IsLandArray(PhyicalToLogicalArray(TP_Tran2s(i).P1))
        min=IsLandArray(PhyicalToLogicalArray(TP_Tran2s(i).P2))
        else
        max=IsLandArray(PhyicalToLogicalArray(TP_Tran2s(i).P2))
        min=IsLandArray(PhyicalToLogicalArray(TP_Tran2s(i).P1))
        endif
        IsLandArray(PhyicalToLogicalArray(TP_Tran2s(i).P1))=min
        IsLandArray(PhyicalToLogicalArray(TP_Tran2s(i).P2))=min
        if(max/=min)then
            do j=1,LogicalNodeNum
                if(IsLandArray(j)==max)then
                    IsLandArray(j)=min
                elseif(IsLandArray(j)>max)then
                    IsLandArray(j)=IsLandArray(j)-1
                endif
            enddo
        endif
    enddo
  endif

!===========保留平衡节点所在的电气岛,其他岛不要==================
SaveIsLandNum=0
if(GenNum/=0)then
    do i=1,GenNum
        if((TP_Gens(i).Enable==1).and.(TP_Gens(i).NodeType==2))then
            SaveIsLandNum=IsLandArray(PhyicalToLogicalArray(TP_Gens(i).P1))
!            write(*,*)'平衡节点所在岛号'
!            write(*,*)SaveIsLandNum
        exit
        endif
    enddo
    if(SaveIsLandNum==0)then
        write(*,*) "未设置平衡节点!请先设置平衡节点再运行程序"
    endif
endif
if(LogicalNodeNum/=0)then
    do i=1,LogicalNodeNum
        if(SaveIsLandNum==IsLandArray(i))then      
            IsLandArray(i)=1
        else
            IsLandArray(i)=0
        endif
    enddo
endif
!================统计岛上逻辑节点数目==============
NodeNum=0
if(LogicalNodeNum/=0)then
    do i=1,LogicalNodeNum
        if(IsLandArray(i)==1)then      
            NodeNum=NodeNum+1
        endif
    enddo
endif
!===================逻辑节点再排序================

if(NodeNum/=0)then
    allocate(IsLandToNodeArray(NodeNum))
    allocate(NodeTypeArray(NodeNum))
    j=0
    do i=1,LogicalNodeNum        
        if(IsLandArray(i)==1)then
        j=j+1
        IsLandToNodeArray(j)=i
        NodeTypeArray(j)=0  !节点类型初始化,都为PQ节点0,pv=1,slack=2
        endif
    enddo   
endif

if(NodeNum/=0)then
    do i=1,NodeNum
        do j=1,GenNum
            if((TP_Gens(j).NodeType==2).and.(PhyicalToLogicalArray(TP_Gens(j).P1)==IsLandToNodeArray(i)))then
            NodeTypeArray(i)=2            
            elseif((TP_Gens(j).NodeType==1).and.(PhyicalToLogicalArray(TP_Gens(j).P1)==IsLandToNodeArray(i)))then
            NodeTypeArray(i)=1
            endif
        enddo
    enddo
endif
!===============节点排序===========
if(NodeNum/=0)then  
    !==========slack节点排序到最后==============
        do j=1,NodeNum
            if(NodeTypeArray(j)==2)then
            jTemp=NodeTypeArray(j)            
            NodeTypeArray(j)= NodeTypeArray(NodeNum)
            NodeTypeArray(NodeNum)=jTemp
            jTemp=IsLandToNodeArray(j)
            IsLandToNodeArray(j)=IsLandToNodeArray(NodeNum)
            IsLandToNodeArray(NodeNum)=jTemp
            endif
        enddo
  !=====================pv节点排序================  
    do i=1,NodeNum-1
        do j=NodeNum-1,1,-1
          if(i             if((NodeTypeArray(i)==1).and.(NodeTypeArray(j)==0))then
            iTemp=NodeTypeArray(i)
            NodeTypeArray(i)=NodeTypeArray(j)
            NodeTypeArray(j)=iTemp
            iTemp=IsLandToNodeArray(i)
            IsLandToNodeArray(i)=IsLandToNodeArray(j)
            IsLandToNodeArray(j)=iTemp
            endif
          endif
        enddo
    enddo
!            i=1
!        do j=1,NodeNum-1
!            if(NodeTypeArray(j)==1)then
!            jTemp=NodeTypeArray(j)            
!            NodeTypeArray(j)=NodeTypeArray(NodeNum-i)
!            NodeTypeArray(NodeNum-i)=jTemp
!            jTemp=IsLandToNodeArray(j)
!            IsLandToNodeArray(j)=IsLandToNodeArray(NodeNum-i)
!            IsLandToNodeArray(NodeNum-i)=jTemp
!            i=i+1
!            endif
!        enddo
   ! enddo
endif
!============排序后的物理节点和电气岛上的逻辑节点对应关系======
if(PhysicalNodeNum/=0)then
   allocate(PhyicalToNodeArray(PhysicalNodeNum))
   do i=1,PhysicalNodeNum
   PhyicalToNodeArray(i)=0
   enddo
   do i=1,NodeNum
       do j=1,PhysicalNodeNum
           if (IsLandToNodeArray(i)==PhyicalToLogicalArray(j))then
           PhyicalToNodeArray(j)=i
           endif
       enddo         
   enddo
   
endif
  write(*,*)"电气岛处理结果如下"
  write(*,*)IsLandArray
  write(*,*)"岛上的逻辑节点编号为:"
  write(*,*)IsLandToNodeArray
  write(*,*)"岛上的逻辑节点编号对应的节点类型为:"
  write(*,*)NodeTypeArray
  write(*,*)"岛上的逻辑节点数目为:"
  write(*,*)NodeNum
  write(*,*)"拓扑搜索的最终成果为:"
  write(*,*)PhyicalToNodeArray

endsubroutine
虚怀若谷,深藏若虚。
140楼2012-10-11 15:43:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yy3780

木虫 (著名写手)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
woshilsh(金币+3,VIP+0):可以单独开贴,接受大家的奖励,如何? 7-11 23:24
我平时多用fortran处理问题,也在学习中。
自己也练习编了些小程序。
自己也看了别人写的程序,但是感觉感触最深的是,编程规范也很重要,这样自己、大家看了也会舒服些。
自己总结了一点点。
11楼2009-07-05 12:02:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
wangen994(金币+2,VIP+0):欢迎常来,受教了 8-27 16:42
写 fortran 程序时,最好还是考虑一下可移植性,不要局限于某一个平台,或随意使用某一平台的特有函数啥的……

所以看 fortran 的书,最好不要局限于某一系统相关的书。
37楼2009-08-16 16:11:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

★ ★ ★ ★ ★ ★
nono2009(金币+6,VIP+0):专家辛苦了!新年快乐! 1-1 14:36
没什么大事情,就是变量类型没有声明,我给你加了contains ,把end program拿后面去了。去掉了原来的一些声明。

你自己也可以自己把变量类型声明上就可以了。其实你声明了,只不过是数组后声明的,你挪前面就可以了。 自己好好看看吧。我加了注释了。
72楼2010-01-01 13:20:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)


jjdg(金币+1): 感谢参与 2011-10-23 02:38:49
引用回帖:
114楼: Originally posted by cody945 at 2011-10-16 10:03:28:
我是过程系统工程专业的,硕博连读,做一个反应的全系统模拟包括反应精馏换热,现在想用fortran编程做二次开发,建立系统的优化数学模型,还有就是运用数学规划法建立MINLP换热网络数学模型并求解(还分为无分流 ...

简单的学习一些FORTRN的入门语法知识,再自己多练习一些,多读读自己本专业领域的代码,尝试着多看多想多模仿,路自然慢慢就顺了。
115楼2011-10-20 09:31:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

argo

铁杆木虫 (著名写手)

上善若水

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
woshilsh(金币+2,VIP+0):argo虫虫很热心,提供的资料也不错,希望常来啊! 6-5 15:16
一般问题都有现成的子程序(个人认为这是目前还有不少人在使用fortran的一大原因),国内的可以参考徐士良的(这个一定要配书看,要不然仅仅看代码估计有点难度,这是我不太喜欢的原因),国外的可以参考Numerical Recipes 以及netlib(http://www.netlib.org/
居善地,心善渊,与善仁,言善信,正善治,事善能,动善时。
5楼2009-06-05 15:04:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dellus

木虫 (职业作家)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
wangen994(金币+2,VIP+0):谢谢交流 6-13 12:05
引用回帖:
Originally posted by anbb1009 at 2009-6-5 14:35:
我同意楼上的观点,因为我以前也这样做过,而且效果不错,但顺便问一下:目前fortran中用的最好的求 非线性方程一组实根的方法有哪几种,有没有现成的子程序?谢谢

算法和使用哪种语言无关
求非线性方程组比较好的是broydn方法,基于牛顿法,但效率更高。Numerical Recipe上有现成程序,有C和Fortran版本的

[ Last edited by dellus on 2009-6-13 at 05:47 ]
岂能尽如人意,但求无愧于心。
7楼2009-06-13 05:43:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
woshilsh(金币+3,VIP+0):辛苦了,常来哦 8-5 19:21
其实大概就是这个样子吧……
read(5,*)a, b, c, d,e,f
if (b .eq. 300) write(6,*) a, e

自己写个循环就可以了……
15楼2009-08-05 17:21:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiejieshuo

铁虫 (小有名气)


小木虫(金币+0.5):给个红包,谢谢回帖交流
我第一次用fortran,花了两三个月编了一个七八百行的程序,现在结果还行
20楼2009-08-10 15:18:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
wangen994(金币+1,VIP+0):有时候真的需要看英文手册,哈哈 8-27 16:44
嗯,有点儿累,不过这些材料的英文还算浅显,话又是说回来,打算在这一行混的,不过英文手册这一关是不行的,呵呵……
31楼2009-08-10 17:59:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

argo

铁杆木虫 (著名写手)

上善若水

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
wangen994(金币+3,VIP+0):欢迎常来程序软件版 8-27 16:44
引用回帖:
Originally posted by snoopyzhao at 2009-8-5 21:10:



我只会一点 fortran77,下面是个简单的程序,你凑合着看吧。

[code]
C234567
      PROGRAM YL
      CHARACTER COMMENT*128
      REAL*8 EF, T, N, DOS, S, ST
      OPEN(4,FILE="YL.TRACE ...

实数判断相等会有结果出来吗?
引用回帖:
IF (T .EQ. 300.0D0) WRITE(7,30) EF, ST

要让两个实数相等,好象苛刻了点,不知道这里能否按作者的意愿出来。好象更常用的方法是取两个数的差的绝对值为一个很小的数,来作为两个数接近的判断。
居善地,心善渊,与善仁,言善信,正善治,事善能,动善时。
32楼2009-08-13 16:16:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fengyun19

银虫 (小有名气)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
nono2009(金币+1,VIP+0):谢谢交流。欢迎常来。 10-24 17:07
我学习时用的是彭国伦的(应该是这个名字),感觉很好!
46楼2009-09-28 14:56:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

senlia

木虫 (小有名气)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
wangen994(金币+3,VIP+0):不错,呵呵 12-12 12:43
引用回帖:
Originally posted by cxc521 at 2009-12-12 07:55:
大家好,我们老板让今天开始自学Fortran,以前只学过C语言,对Fortran一点接触没有,请问各位高手,如何学习Fortran 有点茫然呀 希望能给点好的经验和方法小弟在此先谢过了!

fortran和c有本质的区别么?没有!
编程主要是一种思想 你会了这种思想 拿到什么语言都是一样的
你只需要花半个星期的时间 把fortran里面的语句和函数的写法弄清楚就行
比如c里面是for加大括号 matlab里面是for-end Fortran里面是do-enddo
还有就是fortran的指针不大方便 函数的参量传递是地址传递 不像c里面是值传递[不用指针的时候] 注意一下在fortran的子程序[函数或者子例程]里面不要随便改动参量的值
还有一些注意的地方 多练习一下就知道了
另外 可以直接学Fortran90 不用先学77 我觉得77让人头大
77里面很喜欢用goto 尽量少用[并不是不能用 因为偶尔用一下 程序反而会更清晰]

[ Last edited by senlia on 2009-12-12 at 10:13 ]
书到用时方恨少, 天涯何处无芳草.
65楼2009-12-12 10:11:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

★ ★ ★ ★ ★
余泽成(金币+5, 程序强帖+1): 谢谢分享经验! 2011-01-21 13:37:58
引用回帖:
Originally posted by Jeydragon at 2010-12-18 20:25:29:
我也是一个新手,最近学习Fortran。
我想问几个简单的问题:
1、高手一般都是经过哪些途径成立的?主要是通过完成哪些任务呢?
2、我在实现一个功能:我有一些数据,我想通过Fortran的open函数,达到从这个数据 ...

我不知道你所谓的高手 是 玩程序的高手,还是靠程序解决实际问题的高手。
但我可以的肯定的是 巅峰之路无捷径,需要你平时的点点滴滴的积累和沉淀了。
如果非要问完成多少任务才能成为高手的话,这个还真有点不好说。举个具体例子吧。

利用分子轨道理论写一个解决Hartree Fock方程的程序,求解一个小分子的HARTREE FOCK能量,当然了,这个一个很基本的问题了。但如果要解决这个问题,我们需要具备如下几点 必要 但 非充分条件:

1)扎实的专业理论基础功底,有清晰的物理图像以及对问题的深刻理解
2) 扎实的数学基础,可以轻松熟练的推导出这个理论的所有公式。
3) 熟练掌握了一门或者几门计算机语言,能熟练运用各种数值算法以及手段
4) 要有充分的耐心,细心,专心以及对你从事问题的喜欢迷恋之心

具备了上述四点,你就具备了解决上述的那个问题的必要非充分的能力。
我不知道 如果可以轻松的解决自己工作中遇到的各种问题的话,算不算是你所说的所谓的高手呢?


另外你问的第二个问题,关于OPEN的用法,我建议你可以先看一下FORTRAN入门书,看一些使用例子,我相信你会很快入门的,祝你好运、

[ Last edited by maomao1210 on 2010-12-18 at 22:16 ]
95楼2010-12-18 21:50:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

★ ★
微尘、梦想(金币+2): 辛苦了 2011-10-26 19:34:40
引用回帖:
114楼: Originally posted by cody945 at 2011-10-16 10:03:28:
我是过程系统工程专业的,硕博连读,做一个反应的全系统模拟包括反应精馏换热,现在想用fortran编程做二次开发,建立系统的优化数学模型,还有就是运用数学规划法建立MINLP换热网络数学模型并求解(还分为无分流 ...

找本FORTRAN书,看看简单的语法知识,练习一下简单的程序,尝试着去读一些本专业相关的程序代码,借鉴,模仿,进步,升华。平时注意多练习写代码,积累,总结。经验很重要。
120楼2011-10-25 14:27:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

stereochemistry


小木虫(金币+0.5):给个红包,谢谢回帖交流
你好,最近写程序遇见一个问题,一个对称矩阵想线性存储,请问怎么实现呢?
2楼2009-06-01 12:32:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

★ ★ ★ ★ ★
wangen994(金币+2,VIP+0):鼓励一下,哈哈 6-4 11:55
gwdavid(金币+3,VIP+0):辛苦了!答疑帖加大奖励力度!;) 6-7 10:32
wangen994(金币+0,VIP+0):请你讲九月份十月份的参与应助的帖子整理附在http://emuch.net/bbs/viewthread.php?tid=1358729&fpage=1后面,以便发放津贴 11-9 19:00
哦。我给你举个例子吧,比如对称矩阵 A[3,3]
                              A(1,1)     A(1,2)     A(1,3)
                              A(2,1)     A(2,2)     A(2,3)
                              A(3,1)     A(3,2)     A(3,3)
只要存储成一个一维数组即可: B(1)=A(1,1),B(2)=A(2,1),B(3)=A(2,2), B(4)=A(3,1),B(5)=A(3,2),B(6)=A(3,3).
还要记住这个: 行和列与存储该值的关系为:II=MAX(I,J)*(MAX(I,J)+1)/2+MIN(I,J), 那么B(II)==A(I,J).
不知道我讲的能听懂与否。如果不懂,继续发问。
3楼2009-06-01 12:41:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

anbb1009

金虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖交流
我同意楼上的观点,因为我以前也这样做过,而且效果不错,但顺便问一下:目前fortran中用的最好的求 非线性方程一组实根的方法有哪几种,有没有现成的子程序?谢谢
4楼2009-06-05 14:35:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

老虎大王

木虫 (著名写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
woshilsh(金币+2,VIP+0):恩,专家常来哈! 6-5 19:51
引用回帖:
Originally posted by anbb1009 at 2009-6-5 14:35:
我同意楼上的观点,因为我以前也这样做过,而且效果不错,但顺便问一下:目前fortran中用的最好的求 非线性方程一组实根的方法有哪几种,有没有现成的子程序?谢谢

如果你用的是Visual Fortran,附带的IMSL(CXML)库里就有这方便的程序,优化得相当好。如果在Linux下用Intel的编译器,你还可以下载InteL的MKL数学库。当然,何光渝、徐士良,以及其他人的书上,也提供类似的子程序。

[ Last edited by 老虎大王 on 2009-6-5 at 19:51 ]
6楼2009-06-05 19:43:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xuefeifei

银虫 (小有名气)


小木虫(金币+0.5):给个红包,谢谢回帖交流
你好,我以前用过fortran,以前都是在别人装好了红帽子下用的,现在我想自己在windows下,能不能用,应该怎么用,谢谢!
8楼2009-06-16 09:28:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

★ ★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
gwdavid(金币+3,VIP+0):3q 6-16 19:01
引用回帖:
Originally posted by xuefeifei at 2009-6-16 09:28:
你好,我以前用过fortran,以前都是在别人装好了红帽子下用的,现在我想自己在windows下,能不能用,应该怎么用,谢谢!

只要你的程序中没有依赖于特定编译器的子程序就没有问题。前提是,你要在 windows 下装一个 fortran 的编译器
9楼2009-06-16 09:39:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

★ ★ ★
gwdavid(金币+3,VIP+0):3q 6-16 19:02
引用回帖:
Originally posted by argo at 2009-6-5 15:04:
一般问题都有现成的子程序(个人认为这是目前还有不少人在使用fortran的一大原因),国内的可以参考徐士良的(这个一定要配书看,要不然仅仅看代码估计有点难度,这是我不太喜欢的原因),国外的可以参考Numerica ...

个人认为,如果选择现成的子程序的话,一定要优先考虑 blas  或 lapack 等经过历史检验的,其次才是徐士良、NC 等……
10楼2009-06-16 09:42:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 maomao1210 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 特别资助审核状态 +7 pantray 2024-04-17 8/400 2024-04-20 11:40 by wolfgangHugh
[基金申请] 前同事拿我以前未中的国自然标书申请今年的国自然,现在基金委发来调查函 +11 bjdxyxy 2024-04-19 16/800 2024-04-20 10:09 by bjdxyxy
[找工作] 事业单位还是大学好? +18 青萍之沫 2024-04-16 19/950 2024-04-20 08:46 by 小辰子
[基金申请] 申请省自然科学基金,研究区能否是省外区域 100+3 喜欢兔兔的我 2024-04-15 13/650 2024-04-19 21:49 by 喜欢兔兔的我
[公派出国] CSC在职申请求问 +7 Amber0919 2024-04-16 7/350 2024-04-19 21:37 by 小狐_小胡
[教师之家] 某系主任被同校教授举报包养情妇、长期嫖娼 +15 zju2000 2024-04-13 17/850 2024-04-19 18:17 by ZHONGWU_U
[考博] 24/25读博求博导 +4 宝23 2024-04-16 4/200 2024-04-19 17:18 by wangzhe_bs
[考博] 山东大学化学与化工学院刘磊课题组博士研究生招生启事 +3 sdorganic 2024-04-17 5/250 2024-04-19 17:04 by 368ghnf
[考博] 25申博记录贴 +3 我属驴核动力驴 2024-04-18 4/200 2024-04-19 10:53 by 安塔瓦拉多
[有机交流] 紫外光谱 50+3 54胡 2024-04-17 3/150 2024-04-19 10:48 by Nanamiwww
[论文投稿] 发个文章,结果被某学报请的外审PUA了 +3 ziniu168 2024-04-18 8/400 2024-04-18 21:40 by xli1984
[博后之家] 博后换方向可行吗? +3 越越不暴躁 2024-04-15 3/150 2024-04-18 10:58 by ciompman
[考研] 322求调剂 +7 本己上岸 2024-04-16 7/350 2024-04-17 11:49 by duanxz
[考研] 广州大学光电信息工程专业调剂,招收物理学专业学生 +5 txhx4010 2024-04-14 7/350 2024-04-16 10:52 by domax
[考研] 312求调剂 +3 Lauhalo 2024-04-15 3/150 2024-04-16 10:16 by 19862091
[考研] 329求调剂 +18 王郁洁哈哈哈 2024-04-14 26/1300 2024-04-15 19:10 by mumin1990
[考研] 求调剂 +4 桃岸雪 2024-04-15 5/250 2024-04-15 18:49 by mthwyj
[论文投稿] with efitor 越久是不是越容易拒稿。我的已经一个多月了 +5 lizhengke06 2024-04-14 5/250 2024-04-15 18:33 by jonewore
[考研] 347求调剂 +4 安谷先生 2024-04-15 4/200 2024-04-15 18:27 by huao连
[考研] 278求调剂 +4 月亮就蒜 2024-04-13 5/250 2024-04-14 23:03 by 永字号
信息提示
请填处理意见