加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

fortran中数据传递的问题

(2013-02-03 14:40:08)
分类: 技术宅

1.循环定义文件名以供写入

采用do-enddo的loop,文件名的定义如下:

  • head=50  ! 变量类型为整形
  • write (temp,'(I3.3)') head  !'(I3.3)'为3个靠左的0的字符型,即将整形转化为字符“050”
  • newblock=trim(adjustl(nml_geo(i)))//'n'//trim(temp)//'.grd' !nml_geo(i)为字符串,通过trim(adjustl())函数,保证变量写入的整齐

假设在某部循环中,nml_geo(i)=c1,则文件名为:

  • c1n050.grd

2.fortran的数据传递

初学fortran,发现通过subroutine进行数据传递时,数据会发生变化。那是因为在fortran中,数据传递的是数据存储地址,所以在保证实参和形参数据类型和顺序完全一致的前提下,还要保证变量在定义时的顺序是完全一致的。其实对于这个到底怎么操作,我还是没有弄明白,于是我就用了一种保险的,但是据说太过古老现在基本不提倡的方法来出来,那就是定义common:通过把函数变量定义在common中,这样就保证了变量存储在公用区内,不会被其他东西打扰。(应该会有更聪明的办法,但是我现在好困了,先把这个问题解决了再来优化吧)

关于数据传递时地址的变化,可参考:

http://blog.sciencenet.cn/blog-47991-655489.html

 

3.trim(adjustl)的具体用法,还可以用于整形和字符串之间的相互转换

 

4.intent(in),可以保证传递子程序中变量时保证有一部分是不发生变化的。

 

 

 


 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有