使用Madagascar软件编写程序有时需要其他软件进行辅助运算,在调试时没法对madagascar程序的rsf数据直接进行处理,但Madagascar提供了一种可交互式的接口函数库。
Matlab接口安装
安装madagascar时,输出安装文件规则文件时使用以下命令:
./configure ~/安装路径
但实际上可以在后面加入参数以安装对应的接口库如matlab接口参数为:
./configure ~/安装路径 API=matlab
Matlab接口函数库
主要使用的有:
获取RSF数据:维度rsf_dim(datain) #datain 为输入 .rsf数据名
读取RSF数据:rsf_read(data_matlab,datain)
#data_matlab为 输出.mat数据名 , datain 为 输入.rsf数据名
创建RSF数据:rsf_create(dataout,size(data_matlab))
#dataout 为输出.rsf数据名,data_matlab为输入的.mat数据名,以.mat规模创建RSF数据文件
写入RSF数据:rsf_write(data_matlab,dataout) #将数据写入RSF文件
函数使用实例
概念流程图
3.1 Madagascar程序编写
初始化matlab路径及.m文件路径
# INITIALIZATION
########################################################################
matlab = WhereIs('matlab') #获取matlab.exe路径
matROOT = '../Matfun' #.m文件目录
matfun= 'datin #''内为.m文件名字
matlabpath = os.environ.get('MATLABPATH',os.path.join(RSFROOT,'lib'))
if not matlab:
sys.stderr.write('\nCannot find Matlab.\n')
sys.exit(1)
############################################################
调用matlab
Flow('dout0',['c',os.path.join(matROOT,matfun+'.m')], #dout0 - 输出文件名 ,c - 输入数据名
'''MATLABPATH=%(matlabpath)s %(matlab)s
-nosplash -nojvm -r "addpath %(matROOT)s;%(matfun)s('${SOURCES[0]}','${TARGETS[0]}');quit"
'''%vars(),stdin=0,stdout=-1)
3.2 matlab文件编写
function datin(datain,dataout)
% from Madagascar to Matlab
dims=rsf_dim(datain); %获取维度
read_data=zeros(dims'); %以dim维度数组创建数据变量read_data
rsf_read(read_data,datain); %将datain RSF数据写入read_data
%save read_data.mat read_data; %可将.mat文件输出
% from Matlab to Madagascar
rsf_create(dataout,size(read_data)');%以read_data数据大小生成dataout文件
rsf_write(read_data,dataout); %将read_data数据写入dataout
end
实例演示
4.1 手动导入.rsf文件进行mat文件转换
b为你要转换的RSF数据文件名(输入matlab程序),dout0为经matlab处理后的数据文件转换回rsf数据的文件名。
执行scons后生成mat数据
4.2 在madagascar环境下生成模型并转换成mat数据
执行程序
生成mat数据
使用vpconvert函数转换vpl文件到eps进行查看
查看结果