标签: 教育 | 分类:madagascar |
Madagascar是一款非常优秀的地震处理系统,在很多方面甚至超过了su。利用该处理系统主要包括两方面,一个是如何用Python语言组织处理流程,简洁高效的进行较复杂的地震处理;另一个是如何利用该系统自带的函数库,正确合理的将自己的程序融入该系统中。本文主要介绍第二个方面——如何在madagascar环境下进行编程。
一、编程的基本步骤
1.程序的主体结构
首先程序要按madagascar的架构要求进行编写。其结构可以参考Paul Sava编写的有限差分法正演程序http://www.reproducibility.org/RSF/book/rsf/manual/manual_html/node6.html;
2.程序命名为M*.c的形式,然后从其他的user目录下拷贝一份SConstruct文件,将文件中变量progs的值改写为你的程序名,此时程序名为*.c。
3.在自己的目录下scons进行编译;
4.回到安装目录,运行sconsinstall。则会形成以sf开头的madagascar指令。
二、编程注意的问题
1.sf_error和sf_warning的用法
我们在调试过程中经常需要输出一些变量,来检查程序哪地方出现了问题。当然你肯定会想到用printf函数来做,但是由于运行程序是按指令的形式执行的,printf的输出结果会直接写入你的输出文件,而不会打印到屏幕上。事实上,madagascar内部设计了打印到屏幕的函数,分别是sf_error和sf_warning,sf_error只能输出一次,而sf_warning可以输出多次。用户可以根据自身需要进行选取。
2.程序头文件的生成
程序头文件是根据一定的规范自动生成,因此编写函数时第二行必须按的格式编写,否则无法生成正确的头文件。如果头文件生成错误,参数无法传递,程序运行结果也就无法预料了。
3.文件读写
先定义文件指针sf_file *in,*out;然后对其赋值in=sf_input("in");out=sf_output("out");中间可以从输入文件读入可用参数n1,d1,o1。写文件时,先写入数据的相关信息sf_putint(out,"n1",n1);sf_putfloat(out,"d1",d1);sf_putfloat(out,"o1",o1)...然后再写入数据sf_floatwrite(dat,nd,out);最后关闭文件sf_fileclose(out)。