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),可以保证传递子程序中变量时保证有一部分是不发生变化的。
前一篇:假期结束,新年开始!
后一篇:不太积极的一些随想

加载中…