还有10天就到月底了,这个月有好几个deadline,估计是没法全部完成了,spin-up了半个多月终于快完了,月底前必须要稀里哗啦把结果都搞出来发给何老师,paper的deadline指定是完成不了了,一张图都没有pannel出来,囧。还要上课,还要课堂展示,还要组会还要报告还要培训~Anyway,事情虽多,但是没有感到厌烦,内心还是很有斗志很有激情的,这种状态很好,最后十天加大工作强度提高效率,继续保持!
heating试验结果发给何老师后将是一个段落,确定paper的figures后也是一个段落。一步步来,自顶向下,分而治之,问题终归能够解决。最近真的不再打怵改源码的事情了,接下来把技术巩固好,虽然在搬砖期,图书馆不能少去,英语和运动和文献涉猎要坚持,更不能忽略感情和保持稳定良好的心态,加油!
转自:http://www.cnblogs.com/end/archive/2012/06/12/2546757.html
1、在同一窗口中打开多个文件:
vi file1 file2 file3 :n 切换到下一个文件 (n=next) :N 切换到上一个文件 2、在不同窗口中打开多个文件:
如果已经打开一个了一个文件, 则在vi的命令输入状态下输入 :sp 另外一个文件的路径及文件名, 如此就可以在一个窗口打开多个文件了。
或者用 vi -o file1 file2 file3….用分割屏幕窗口方式同时打开多个文件。 可以使用 ctrl + 两次按 w 或者ctrl + w 然后按上下键在上下窗口间切换。 2.窗口分割实现编辑多文件 *先使用vi打开一个文件,例如vi actinia_proenrule.sh *分割窗口打开另外的文件 命令行模式下输入 sp 另外一个文件 就可以水平分割继续打开第二个文件,如果想纵向分割,可以使用vsp 文件名 注:sp=split,vsp=vsplit. 上面的写法是vi支持的简略写法,v实际就是vertical,从中我们可以看出改命令的含义,另外vi不仅仅支持两个文件,还支持更多个文件同时在一个 大的窗口中显示编辑,同时还支持同时打开的两个文件是同一个文件。 *窗口切换 可以使用 ctrl +两次按 w,这样就可以在各个文件中切换
之前觉得vi的多文档编辑用着很不方便,现在接触了几个,用过了MiniBufExplorer,发现看着不是很舒服。还是使用ls比较好看一些。
:ls 展示全部的打开文档
:xn 切换到向下的第x个文档
n ctrl+6 : 切换到第n个buffer
ctrl+6 或 :e# 回到前一个编辑文件
分屏
:new xxx
ctrl+w s 对当前文档内容分屏显示
ctrl+w q 关闭所处分屏
ctrl+w o 仅显示当前分屏内容
ctrl+w j k 上下选择分屏
个人觉得最值得用的命令就是ctrl+w w 快速在分屏的两个屏幕中切换
下面写的还没用过~看了大家的分享觉得这几个还不错
:n1,n2 co n3: 将n1行到n2行之间的内容拷贝到第n3行下 :n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下 :n1,n2 d: 将 n1行到n2行之间的内容删除 :n1,n2 w!command: 将文件中n1行至n2行的内容作为command的输入并执行之, 若不指定n1,n2,则表示将整个文件内容作为command的输入 方式2的优点在可以直接使用nyy和pp命令在各个窗口的文件之间进行拷贝和粘贴,操作比较方便。
ncl写二进制文件非常方便,setfileoption+fbinrecwrite语句即可。处理模式输出的加热数据测试了一下,非常迅速搞定。随后需要用到fortran代码来读写二进制文件,没想到却遇到大问题。
ncl下采用fbinrecwrite写入的文件为fortran下的sequential读取方式(貌似这个才是符合ieee标准的),按照官网指示,代码很容易编译通过,但是执行出错。ifort编译执行错误结果:
forrtl: severe (98): cannot allocate memory for the file buffer - out of memory, unit 100, file /users/yangsong3/L_Zealot/F/f90/CAM4_PTENDT_DIFF_mon.dat
采用gfortran编译,同样执行出错:
At line 12 of file read_heat_diff.f90 (unit = 100, file = '../data/model_post/CAM4_PTENDT_DIFF_mon.dat') Fortran runtime error: End of file
第一次在linux平台下编译自己写的fortran代码,多少还是有些心虚。ifort表示内存不足,gfortran表示读到文件末尾,有些莫名其妙,检查路径文件名,文件大小,读取方式,貌似都没问题,折腾许久没有结果。
问题只能回溯到ncl那么简单的二进制写入上,fbinrecwrite看上去没什么问题,setfileoption中的几个选项值得怀疑,查了下BigEndian的问题,是这样描述的:
其实big endian是指低地址存放最高有效字节(MSB),而little endian则是低地址存放最低有效字节(LSB)。 用文字说明可能比较抽象,下面用图像加以说明。比如数字0x12345678在两种不同字节序CPU中的存储顺序如下所示: Big Endian 低地址 高地址 -----------------------------------------> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 12 | 34 | 56 | 78 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Little Endian 低地址 高地址 -----------------------------------------> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 78| 56 | 34 | 12 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
虽然看上去出错信息并不是这么指向的,但还是要试一试,查了下fortran在字节序处理的问题,果然,一行open语句赫然入眼:
open(…,convert=”big_endian”)
加入测试,我擦嘞……居然可以了,果然是字节序的问题。原来fortran默认的是非人的little endian,好吧……关键是运行出错给出的那些错误信息,完全无厘头,真是对编译器失望了。另外SGI编译器默认为BigEndian。
另外fortran读ncl写出的多维二进制数据的时候,注意维数方向是相反的哦!如ncl数组(33,44),fortran(44,33)
【参考资料】
http://blog.csdn.net/sunshine1314/article/details/2309655 BigEndian和LittleEndian
http://bbs.lasg.ac.cn/?action-viewthread-tid-13303
http://www.360doc.com/content/11/0216/10/2609140_93438395.shtml