Earth Tides分享 http://blog.sciencenet.cn/u/Earthtides 介绍大地测量和地球物理中的潮汐影响

博文

关于SPOTL程序包的nloadf程序如何在cvf中编译

已有 7995 次阅读 2010-6-24 22:15 |个人分类:就算经验吧|系统分类:科研笔记

nloadf是Agnew教授写的计算海潮负荷的程序,用于计算海潮对重力、位移、倾斜和应变的影响,最近添加了对位(potential)的影响。在众多子程序中包含了一个c子程序——ispand.c,用于计算两个整数的位“与”(&)运算。对于初学者,或对计算机软件不是很在行的人来说,在windows os 上(如visual fortran 软件)编译是不容易的。实际上只需要将这个运算用fortran 改写后,则问题就迎刃而解了。

 需要对文件lndsea3.f 中的function ibit()作如下修改

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

function ibit(in,nd)
 dimension m(32) //存储32位二进制编码,0或1。注意二进制编码的左右顺序
 integer*4 in //现在32位的os 整型都是4字节的了
 if(in.ge.0) then //非负数
   call bum(in,m)     //计算补码
 else   //负数
   in=in+1
   call bum(-in,m) 
   do i=1,31
      if(m(i).eq.1) then
        m(i)=0
      else
        m(i)=1
      endif
   enddo
   m(32)=1
 endif
 ibit=m(33-nd)
 end

subroutine bum(in,n) //计算正整数的补码, 右移位(/2)判断奇偶,奇为1,偶为0
 dimension n(32)
 integer*4 in
 n(32)=0
 do i=1,31
    if(mod(in,2).eq.0) then
       n(i)=0
    else
       n(i)=1
    endif
    in=in/2
 enddo
 return
 end

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

如果海陆边界采用的是一个ascii码的文件,则要对lndsea3.f 文件中文件打开和读取部分做适当修改。

示例:

         open(unit=llu,file='lndsea.ind',status='old',access='sequential',form="unformatted")

         read(llu) index

改成如下格式:

         open(unit=llu,file='lndsea.ascii',status='old') //lndsea.ind 改成lndsea.ascii,删除打开lndsea.bit部分

         read(llu,*) index //改成有格式读入ascii文件

另外如果要采用高空间分辨率的海潮模型fes2004,则要增大海潮模型数组的容量。读入部分也要改成有格式读入(文件ocstart.f),read(llu)---->read(llu,*)

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
最近发现用这个计算近海区域的结果有误,又重新调试了一下程序跟踪细节。发现是忽视了c和fortran的参数传递特性不同。c中只由形参到实参,而fortran是相互的,即也可以从实参到形参。所以解决的方法是在调用时将要用到的形参(某个数组元素)赋给另一个变量作为形参输入。

具体的就是在lndsea3.f中,

   it=mapful(nwd) //保险起见,文件前面加定义 integer*4 it,虽然现在整型都是4字节的,但是,,也许,可能,会让你郁闷死 
   iv = ibit(it,nbit)
替换
      iv = ibit(mapful(nwd),nbit)

这样运算后就不会改变mapful()的值了,出现错误的地方就是这里!!!
///////////////////////////////
运行示例:



https://blog.sciencenet.cn/blog-432384-338482.html


下一篇:关于潮汐相位
收藏 IP: 159.226.162.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (10 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-17 16:57

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部