专栏首页气象杂货铺让模式源代码动起来

让模式源代码动起来

每个转数值模式的都逃不了查看源代码的命运。每当看源代码时,总是理不清那复杂的亲属关系。为了在查阅源代码时更好的理清思路,我们可以使用 f90tohtml 构建模式代码调用流程图。

f90tohtml 是转化 FORTRAN 源代码为 html 的 perl 脚本。所有子程序的调用关系都会被串起来,从而构建一个调用流程树。除此之外,还支持使用 正则表达式 对源代码进行检索,可以边查边搜索,多开(苦)心(逼)啊。

f90tohtml 的目的就是为了浏览数值预报模式的庞大程序库(作者估计也是一个搞模式的啊)。可以查看ARPS,MM5,PSU/UCAR,COAPMS等模式的源代码,当然少不了WRF模式了。

安装

  • 下载 源码安装包,然后解压
tar -zxvf f90tohtml.tar.gz
  • 进入 f90tohtml 目录下,编辑 f90tohtml 文件
cd f90tohtml
vi f90tohtml

更改 perl 的路径,文件中默认的为 #!/usr/bin/perl

将其更改为你的系统中的 perl 的路径,可能是 /usr/local/bin/perl 或 /usr/bin/perl

然后更改 f90tohtml 路径为解压后 f90tohtml 所在路径

$path_f90tohtml="/home/bfiedler/f90tohtml/"

  • 更改权限(根据你所使用的环境,可能需要使用 root 权限执行)
chmod u+x f90tohtml
  • 添加 f90tohtml 路径到 .bashrc 或 .cshrc 中
cd ~
vi .bashrc
export PATH=$PATH:/f90tohtmlpath/
  • 进入 f90tohtml 目录下的 examples 目录,然后编辑 d2ps_prepare.pl 和 crm_prepare.pl ,改变其中的 $the_path 为f90tohtml/examples/d2ps 所在路径。改变 d2ps.f2h 中的 $dir_html,这是用来指定要创建的 d2psbrowser 路径。注意:不要自行创建此目录。
  • 键入 perl d2ps_prepare.pl ,然后执行此脚本,最终会创建 d2ps_ls 目录和此目录下的 src.ls 文件
  • 然后键入 f90tohtml d2ps.f2h ,如果成功了的话,就可以使用任意浏览器查看源代码了

以上只是安装及测试,下面主要说一下WRF模式代码调用树的构建

  • 在 f90tohtml 目录下执行 ll 即可查看目录内容,可以看到 nwp_codes 目录,进入到此目录下
cd nwp_codes
vi wrf_prepare.pl
  • 然后更改 $the_path 为WRF源码路径 : /path/of/wrf/../WRFV3/
  • 键入 perl wrf_prepare.pl 生成 .ls 等文件(一般生成后就不用管了)
  • 改变 wrf.f2h 中的 $dir_html 为转换后的输出目录
  • 然后键入 f90tohtml wrf.f2h 即可得到你想要的结果了

:浏览代码时,程序旁的绿色圆表示打开流程树,青色的圆表示调用状态

后面就可以方便的看源代码了

以下是完成后的效果图

打开 index.html

以上就是构建后的所有代码,每一个模块和子程序的开始行都有两个数字,这就是代码的 被调用次数 调用其它子程序的次数。一般要查看的调用代码是在右下角的窗口显示。

左上角为目录窗口,底部提供了正则表达式引擎,用于进行代码检索

构建好流程树后也可以搭建个 ftp 服务器,供大家查看,如下图:

:不要好奇那个 IP 地址了,这仅是在本地搭建的 ftp,并没有放到外网,所以和我不在一个内网下的你是无法查看的

本文分享自微信公众号 - 气象杂货铺(meteogs),作者:lightning

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-03-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 模式检验库Meteva笔记:加载本地观测数据

    在 Meteva 中,使用 pandas.DataFrame 对象表示站点数据,类似 Excel 表格。

    bugsuse
  • xarry | 快速入门

    xarray (之前的 xray) 是一个开源的python库。通过提供 pandas 的核心数据结构N维变形功能,从而将 pandas 的标签数据功能应用到物...

    bugsuse
  • CDO:强大的气候数据处理软件

    CDO在处理气候及模式数据方面有着非常强大的功能,而且其中包含有一些简单的统计和计算函数,数据选择以及空间差值函数。支持常见的气象数据格式,比如GRIB,Net...

    bugsuse
  • python网络编程初级

    网络编程的专利权应该属于Unix,各个平台(如windows、Linux等)、各门语言(C、C++、Python、Java等)所实现的符合自身特性的语法都大同小...

    CloudDeveloper
  • 论Spark Streaming的数据可靠性和一致性

    摘要:Spark Streaming自发布起就得到了广泛的关注,然而作为一个年轻的项目,需要提升的地方同样很多,比如1.2之前版本driver挂掉可能会丢失数据...

    Spark学习技巧
  • 从面向过程出发到函数式编程(上篇)

    java8为我们引入的Lambda表达式、Stream ApI以及方法引用,它们为了java提供函数式编程的支持,虽然目前JDK已经出现到14的版本了,但是小编...

    用户7386338
  • PostgreSQL 操作命令

    认证方式除“trust”外,还有“peer”, “ident”, “md5”, “password”等

    Kevin song
  • 【Java】基础21:顶层父类Object

    只不过神话终归只是神话,是虚无缥缈的,但是计算机里面,Object类是真真实实存在的。

    刘小爱
  • Python+pandas处理Excel文件中的超市营业额数据

    Python小屋屋主
  • Spring切面中的正则表达式

    在上一篇中我们重写StaticMethodMatcherPointcutAdvisor类的matches方法,通过方法名定义了切点,但在这种方式创建的切点有很大...

    吉林乌拉

扫码关注云+社区

领取腾讯云代金券