1. 科研目录配置
1.1 根目录
对于台式机与笔记本,根目录为~/Documents/,如:/Users/yao/Documents
;
对于超算集群服务器,根目录为大容量用户根目录,如:
ada:/scratch/user/hengkai.yao/
ls5:/scratch/06660/hengkai/
normal:/home/hengkai/
1.2 一级目录
一级目录设置4个主目录,全部大写:
<rootpath>/SOFTWARE #软件、模式等工具包
<rootpath>/DATA #非本人生成的数据
<rootpath>/WORK #工作目录
<rootpath>/pub #分享和公开目录
1.3 二级目录
1.3.1 SOFTWARE
<rootpath>/SOFTWARE/Matlab/Packages/ROMS_matlab
<rootpath>/SOFTWARE/Matlab/Toolboxes
<rootpath>/SOFTWARE/Python/tutorial
<rootpath>/SOFTWARE/ROMS/Roms_tools
<rootpath>/SOFTWARE/WRF/Packages
...
1.3.2 DATA
<rootpath>/DATA/AVISO
<rootpath>/DATA/ETOPO1
<rootpath>/DATA/ETOPO2
<rootpath>/DATA/ARGO
<rootpath>/DATA/JAMSTEC
<rootpath>/DATA/CESM
<rootpath>/DATA/CMEMS
<rootpath>/DATA/GSHHG
1.3.3 WORK
<rootpath>/WORK/Models
<rootpath>/WORK/Papers
<rootpath>/WORK/Projects
<rootpath>/WORK/trials
1.3.3.1 WORK/Models 三级目录
四级目录为具体模式,五级目录为某一类文件,六级目录为某一个项目,七级目录可包含archive存档目录。
五级目录中通常包含src,run,doc等。
<rootpath>/WORK/Models/CRCM
<rootpath>/WORK/Models/CRESM
<rootpath>/WORK/Models/WPS
<rootpath>/WORK/Models/WRF
<rootpath>/WORK/Models/ROMS/atm
<rootpath>/WORK/Models/ROMS/bry
<rootpath>/WORK/Models/ROMS/grid/kuro03
<rootpath>/WORK/Models/ROMS/ini/kuro03
<rootpath>/WORK/Models/ROMS/input
<rootpath>/WORK/Models/ROMS/nudg
<rootpath>/WORK/Models/ROMS/run/kuro03
<rootpath>/WORK/Models/ROMS/src
1.3.3.2 /WORK/Projects
根文件夹:01_Project_name
一级文件夹:01_Code、02_Output、03_Figure
- Code-涉及到的程序:如-cal.m 和 -plot.m
- Output-涉及到中间过程保存的变量:如.mat
- Figure-涉及到的画出的图片
- 一级文件夹下可包含old文件夹,存放可能存在错误的文件
2. 文件命名规则
- 起始项为数据来源:如 OFES10_
- 中间项为变量内容:如 heat_flux_
- 中二项为执行动作:如 cal_
- 结尾项为版本次数:如 01,当01版本下出现更多子版本时,使用 01_01_
- 后缀项为扩展名:.m.png.mat.fig
Tips:
- 命名对应的-cal.m-plot.m-.mat-.png应统一版本次数“01”“02”
- 图片输出格式最好为.png,投稿论文使用.pdf
- -cal.m要在末尾save .mat文件给Output文件夹,一个-cal文件通常只save一个.mat文件
3. 编程习惯
3.1 一个良好的编程题头习惯
- 动词+名词:程序简介:Purpose:
- 生成时间:create on 2017-08-04,by Hengkai Yao,@Laoshan OUC
- 修改时间:revise on 2017-10-07
程序的题头应充分写明程序的作用,涉及的输入输出变量,变更事项及修改时间,新文件版本应完全拷贝前一版本的文件后再做修改
3.2 一个良好的对齐习惯
- 使用Ctl+I只能对齐
- 确定在系统默认的10号字大小下
- 使用同一字母数字大小的字体,如 YaHei Consolas Hybrid
使用空格隔开字母、数字、符号等、
3.3 一个良好的变量名习惯
- 驼峰式,小写开头,大小写混合
- 循环:iLevel,nLevel;jPosition,nPosition
- 单个变量+No:tableNo
- 常量、全局变量用全部大写及下划线
- 结构体:大写开头,大小写混合,如Segment.length.
- 函数:全小写,但Compute、Find、Initialize、is应大写开头,大小写混合
3.4 一个良好的m文件编辑习惯
- 模块化,不宜超过两页80列
- 多次调用封装函数,单次调用只作为子函数
- 每个函数都写一个测试脚本
- 在嵌套式循环的时候应该在end行加上注释
- 在文件开始部分的注释中为重要变量编写文档
- 在语句行注释的最后为常数编写文档
- 应该避免复杂的条件表示式,而采用临时逻辑变量进行替代
- 在if else 结构的时候,发生较频繁的事件应该放在if 部分,例外情况放在else部分
- 浮点常数应该在小数点前面写上一个阿拉伯数据
clc;clear;close all
在一般的M文件开头,写这三个东西- 文件结束应在屏幕输出结束提示'Program finished.',最后发送一条邮件给自己,以便知道程序运行结束。
一个function的例子:
%================================================================
% 功能: 求圆孔的夫琅禾费衍射光强分布
% 参数: CircleHoleFD为圆孔结构体,包含圆孔衍射相关信息;
% theta为衍射场的次波方向,可以为向量,求取各方向的光强
% 返回值: I为衍射光强分布
% 主要思路:使用夫琅禾费单缝衍射公式计算
% 备注: 入射角只考虑一个维度的
% 调用方法:见CalcCircleHoleFD_Test文件
% 日期: 2011/7/12 20:37
%================================================================
function vonz = func_zsurf(var, zfield, zval, dbm)
%----------------------------------------------------------------
% Description : Extract variable at specified z-surface (depth or isopycnal).
% This is a slightly modified version of sigma2z.m taken from
% Francois Colas (belongs to ROMS TOOLS or not??).
%
% Input : 1. var (3D ZYX Matrix) - variable to be extracted
% 2. zfield (3D ZYX Matrix) - extract based on this field (can be +ve/-ve)
% 3. zval (scalar) - extract var on zfield=zval surface ( " )
% 4. dbm (scalar,optional) - debug mode, 1 for debugging and 0 for not.
% (overrides the global variable "dbmod").
%
% Global : dbmod (scalar) - debug mode, 1 for debugging and 0 for not
%
% Output : vonz (2D YX Matrix): variable on specified Z-surface
%
%
% Based on : sigma2z.m ( c/o Francois Colas )
% Written By : UCLA ROMS Team (jaison@atmos.ucla.edu)
% Written On : June/11/2008
% Copyright @ UCLA ROMS Team
% Tool : Eddy Tracker
% Version : 1.0
%
%----------------------------------------------------------------
Ref: http://blog.sciencenet.cn/blog-437026-779476.html
鸣谢
特别感谢郭师兄的大力帮助!
另附一篇NATURE发表的“The key to a happy lab life is in the manual”(“如何做一只快乐的科研狗”)
以及一篇文章作者Mariam Aly所在实验室的Manual
p.s.
有时matlab不识别文件路径中的减号“-”,建议都用下划线"_"。