makecpt小技巧

操作环境为GMT4.5,需求和对应的解决方式为:

  • 绘图颜色限定在某个范围,而不是使用默认的背景(color_background)和前景(color_foreground)来表示超出的值——解决方法:加-D参数,用制定色标范围的最大最小值替换;也可以用gmtset来更换;
  • NaN不用缺省的灰色——解决方法:使用gmtset更改COLOR_NAN的值,0为黑色,128为灰色,255为白色。

kiwi

安装kiwi时如果收到没有找到libmseed的头文件信息的错误,那就是没有安装libmseed,只支持libmseed2的版本。如果之前安装了libmseed3,那么一定要在lib库里把so文件删除干净,再重新安装libmseed2。

可能会提示找不到hdf5,安装hdf5,同时在makefile文件中,给定INCHDF和LIBHDF的路径,lib的库名也要给定好。运行过程中有可能会找不到hdf5.mod,但可以在系统的lib中找到,拷贝过来,并想办法留在本地。

fftw3的头文件和库位置同样在makefile中给定。如果一直提示找不到fftw3f的库,生成一个软链接。

安装成功后,一定要试运行某个程序,可能会出行找不到某个so库的情况。找到这个库文件的真身,然后复制到系统lib下,一定要复制,软链接不行。

openMP中的动态数组私有化

有一个需求,需要对for循环中创建的动态数组进行操作,记录一下历程:

最开始在函数开头定义了循环变量i和动态数组trace,并紧接着用malloc对trace分配空间,在for循环的前一行用#pragma omp for private(i)能编译成功,但结果错误。分析原因是因为每次循环都共享了trace,导致计算错误;

然后将for前定义改为#pragma omp for private(i,trace),编译出现段错误;

https://www.coder.work/article/1564167给出了解决问题的正确方法:先用omp定义parallel块,然后动态分配内存,再用omp开启for循环,结束for循环后释放内存,并结束parallel块。如下:

#pragma omp parallel num_threads(40) private(i,trace)
{ // parallel 块是需要大括号的
    trace=(float *)malloc(sizeof(float)*sz);
    # pragma omp for 
    for(i=0;i<len;i++)
    {
        trace=xxxxxxx;
        .......
    }
    free(trace);
}

shell小技巧

1.seq嵌入for循环

for i in $(seq 0 10)
do
xxxxxx
done

2.expr不支持非整型运算

###############
c=echo “13.2-10.1” | bc
echo $c
###############
a=13.2
b=10.1
c=$(echo “$a-$b” | bc)
echo $c

3. bc计算精度

echo “6/9” | bc 的计算结果会是0,可以事先设置精度
echo “scale=3;6/9” | bc就会得到指定精度的结果

4. gawk中调用shell变量

awk -v awk变量名= shell变量名

 #!/bin/bash

var4bash=test

awk -v var4awk=”$var4bash”  ‘BEGIN { print  var4awk}’