Saturday, April 26, 2014

用心去科研

要真正搞科研,必须用心去关顾和实践。
就如同当初你弄清楚全国粮食生产情况一样,如今并不需要爬过每一座高山,跨越每一条河流,你有着科技给你的馈赠,只需要坐在电脑面前敲敲键盘就可以掌握天下。现在面临的问题是如何利用这些浩瀚的信息。小伙伴,加油钻研,等到自己不是为了赶进度而赶进度,真正用心科研的那一天!
哈哈,科研也能成为惯性的哈!

Monday, April 21, 2014

既早不晚

好像突然就获得了phd的resilience,获得了不屈不挠,exponential的属性!
这来的既早不晚!

[R]time series

1. ts(): 将正常的数据变成时间序列,设定起始时间和间隔频率(单位),12表明单位是月
example: ts_pe <- ts(data_pe,start=c(1949,12),frequency = 12)
2. aggregate(): 将高频率时间序列数据转变成低频率时间数据(resample重采样,但必须往低精度采)
example: season_pe <- aggregate(ts_pe,nfrequency=4,FUN=mean)
这里表明按四个单位一平均。
FUN 可以变换成sum等功能。

Thursday, April 17, 2014

[Python] Install matplotlib and basemap in Centos

更新:安装anaconda,里面自带各种package,包括matplotlib。

主要方法就是全都用pip or easy_install!

1. python>=2.6

2. install pip 这是个强大的下载库工具
$ yum -y install python-pip

3. install numpy, 千万不要用yum.
如果之前用yum装过,要先remove:
$ yum remove numpy python-matplotlib pandas ...
然后install numpy:
$ pip install -U numpy

4. 在安装matplotlib之前,缺两个东西(真是很麻烦,是从报错和google中人肉出来的两个package,总之就是东缺一块西缺一块。。。)
$ easy_install -U distribute
$ yum install libpng-devel (这个是png处理时候需要的包)

5. 终于可以装matplotlib了。。。
$ pip install -U matplotlib

6. basemap这个是最麻烦的,如果前面条件有一环不符合,你就别想用了!
只要前面都好了,下面就照官网做:(官网有一个是给Ubuntu的,非常方便,但其他linux系统就还是要source安装)
先下载basemap -1.x.x版本,gz file 官网上有。
然后回到terminal 进入解压后的文件夹:
basemap-1.x.x $ cd geos-3.3.3 
basemap-1.x.x/geos-3.3.3 $ export GEOS_DIR=<home directory anywhere you put work space in
basemap-1.x.x/geos-3.3.3 $ ./configure --prefix=$GEOS_DIR 
basemap-1.x.x/geos-3.3.3 $ make 
basemap-1.x.x/geos-3.3.3 $ make install
basemap-1.x.x/geos-3.3.3 $ cd ..
basemap-1.x.x $ python setup.py install

DONE!!!

Friday, April 11, 2014

[大气物理]大气物理基础小结


有话要说:一把年纪了才开始温故知新……都是些粗浅的大白话理解……

一、基本定律
1. Ideal gas law 理想气体状态方程。
由微观的压力与分子动能(kinetic energy)即温度的关系可以导出(费曼讲义分子运动论),或者可以由
(1)玻意耳定律:常温下压强与体积成正比
(2)查理-盖·吕萨克定律:常压或等积,体积或压力与温度成正比
导出 PV = nRT  最普遍的形式,涉及摩尔数和摩尔体积,阿伏伽德罗常数的关系在此不进赘述。而大气物理中更常使用 P = rou·RT值得注意前者的R是universal gas constant,而后者的R是specific gas constant。可怜我刚开始看的时候并没有注意两者的区别,生生耽误了不少功夫。。。

2. Dalton's law 道尔顿分压定律。
P = e + P_d  
可以理解为气体状态下,分子间的距离过于遥远,以至于相互之间的分子作用力完全可以忽略不计,因此是independent的作用,故每个气体分子对整个气块的压力可以分离可以加和。
思考点在于分子作用力、独立性(概率事件、泊松随机过程)

3. First law of thermodynamics 热力学第一定律。
dU = dQ + dW 
内能的变化等于外界对气体的加热(辐射加热R、潜热加热LE、传导加热conduction==感热H?、湍流TKE(convective?)、摩擦生热,不一而足)与外界对气块做功的总和。
这里W是外界对气体做功,则气体压缩,W是正值。假设等压,气体压缩,估计是因为位移是负的(位移向-x轴方向),所以PdV是负值,则W=-PdV。
这个非常好理解,内能的变化等于外界能量的进出。
 或写成dQ = dU + PdV理解为传递给一个系统的热量,既对气体做功,气体膨胀(-dW = PdV),又改变了系统的内能。或方便假设系统中熵的变化(热与温度的关系)是dS 。


有时候,W是气体对外做功,(比如《大气物理基础》)即系统对外做功,如果气体压缩,气体对外做负功,W是负值,则-dW是正值写成dU = dQ - dW,写成dQ = dU - PdV的形式,
我觉得这个符号特别乱……
辨别: W1为外界对系统做功,W2为系统对外做功,W1=-PdV(压缩), W2=PdV(膨胀)

焦耳定律是指U只与温度有关dU=CvdT。Cv为定容热容量,定容比热C_v还要再除以质量m

终于明白可逆过程是神马意思了,这还真不是想当然。。。之所以要在很慢很慢的速度中推进,是因为要让系统压力与环境压力时时相等,功可逆就是说环境对系统做功与系统对环境做功是正负号关系。

4. Hydrostatic equation 静力平衡方程。 
dP = -rou·g dz  
个人理解是浮力与重力的平衡,就是上下压力差等于重力推导出来的,用到微元法。思考点在于压力是一个法向于受力面的力,而且各个方向都有,只是因为大气密度有垂直梯度,向上递减,所以净余的是下对上的力。 热力学的推导则用到了重力势能和内能的关系……能量转换什么的高洋上不明觉厉。。。

5. Clausius-Clapeyron equation: e_sat = 6.11·exp(17.3·T/(237.3+T)) (mb/hpa) 水汽量与温度的关系。这个太重要了!


二、基本物理量、常量
  1. 温度 temperature (T)
  2. 湿度:绝对湿度 absolute humidity (rou_v),比湿 specific humidity (q_v),水汽混合比 water vapor mixing ratio (r),相对湿度relative humidity (RH), 气压差VPD
  3. 虚温 virtual temperature (T_v)
  4. 位温 potential temperature (theta)
  5. 虚位温 virtual potential temperature (theta_v)
  6. 蒸汽压 water vapor pressure (e)
  7. 饱和蒸汽压 (e_sat)
  8. 气体常数 gas constant (R)
  9. 比热:等压比热(C_p) ,等容比热(C_v)
  10. 水气分子量比 ε=0.622=18/29

三、各物理量间基本关系
  1. q_v = rou_v/rou_a; r = rou_v/rou_d
  2. 空气密度rou_a = rou_v + rou_d
  3. 比湿与水汽混合比在数值上相近,因为水汽密度(绝对湿度rou_v)实在过于微小。
  4. 用露点温度Td 和 C-C equation可以算出实际蒸汽压e,露点温度可以看成是在同样的水汽量、蒸汽压e下,由原有温度降温到令该水汽饱和的温度,这个就是降雨的第一个条件。简而言之,温度决定了饱和需要多少水汽 demand,而露点温度就是现有水气的衡量 actual content。
  5. T_v = T(1+0.61q) 虚温是对理想气体方程应用在湿空气中的一个校正,因为密度、specific gas constant 都是会随着空气湿度变化的,因此简单运用理想气体方程的话要考虑R的变化,在保持R为干空气气体常数的情况下,虚温就变成绝对温度和比湿的函数。注意,虚温是对理想气体方程的校正,加入了水汽量的信息,我理解这不涉及物理过程,但如果按照物理模型理解则是:虚温是干空气为了具有与湿空气相同的压强和密度所具有的温度,由于湿空气密度小于干空气(注意,湿空气的水分子量小于空气平均分子量),根据理想气体方程,等压密度变小,则温度变大。另外还要注意的是,当上升气团中的水汽饱和之后,假设水汽量不变,即rou_w不变,原式子 rou_d = rou_a - rou_v 要变成 rou_d = rou_a - rou_w = rou_d = rou_a - (rou_v + rou_l) 所以结果是 T_v = T(1+0.61q_sat - q_liquid) 
  6. theta = T(P_0/P)^(R_a/C_p) 位温某种程度上容易理解一些,但是涉及的热力学知识更加复杂。这里常见的物理模型是假设理想气体绝热条件adiabatic下,未饱和的湿空气下降到标准气压P_0处时的温度。位温考虑了空气的可压缩性,被用来除去气团与绝热膨胀、压缩带来的cooling or warming effect,用来比较不同高度层中空气气团的温度。
I. (热力学第一定律) rouC_p·dT = dP
II. (理想气体方程) P = rouRT
III. (静力平衡方程) dP = -rougdz

由I,II 可得到位温,泊松方程
I. 推导可有三种思路:
(A)根据热力学第一定律 dU = dQ + dW / dQ = dU + PdV
(1)内能变化受温度变化调控,dU = dT×等容比热×质量m,定容热容量C_v = dU/dT
(2)外界对气体做功dW = -PdV,等压绝热过程中,气块与周围环境气压的调整是相当迅速的,每一时刻,做功的气压P是已经调整后的气压,由于气块气压在下降、上升过程中会不断变化,所谓等压,其实是微元后的等压,并不是恒压(气块在整个上下移动过程中压力不变)。。。
(3)绝热令dQ=0,
针对每一时刻每单位变化的体积气体列以下方程,C_v·dT = -PdV, 
(4)对理想气体公式两边求导, PdV + VdP = RdT,得到C_v·dT + RdT = VdP,
C_p·dT = (C_v+R) dT = VdP,可得rouC_p·dT = dP
气块上升根本不是等压或等容过程,两者都在变化,所以用焓的状态来想也挺好的,
绝热,焓没有发生变化,所以温度的变化就来自于体积和压力的共同变化。
等容过程,需要等价于体积变化的热能,而等压过程,需要等价于压力变化的热能,
由于等容过程难以计算和接近,所以通过等压过程,实际上要求的就是压力变化下的热能,再引入压力的垂直梯度,就可以得到温度如何随高度变化的压力变化而变化。

(B)如果引入焓的定义,关于等压比热,定压热容量C_p = dH/dT
C_pdT = dU + dPV = dQ + VdP
焓是状态描述量:H = U + PV,dH = dU + PdV + VdP = dQ + VdP
在等压过程中,VdP = 0, 所以等压过程中焓变就是热量变化。如果是等压绝热,dQ = 0,则是等焓过程。

(C)如果要引入熵的定义,那就是s=Q/T,温度是分子热动能,是布朗运动、随机过程,而熵是有序程度,突然觉得好神奇的热统计学!热量由动能和秩序共同决定,比如同样温度的气体和固体,当然是气体的热量大……,这个和比热的关系是什么?很好奇!!
那么等压绝热地把气体从一个高度放到海平面的过程就是一个等熵过程,令ds = 0。
因为dQ = Tds,
所以dQ = dH - VdP = Tds => dH = Tds + VdP 
=> ds = dH/T - V/TdP =  C_pdT/T - V/TdP
加入理想气体方程,
ds = C_pdT/T - RdP/P。
ds = 0, 则C_pdT/T = RdP/P


由I,III可得到气温与高度的关系,即干绝热直减率,dT/dz = -g/Cp
由I,II,III联立,还是得到气压与温度的关系。
要得到气压与海拔的关系,假设温度不变,则有P = P_0·exp(-z/H),其中标高H = RT_0/g0。


(2)另外,这个泊松方程只是针对理想气体,对于湿空气又要另外处理,这就是为什么有假相对位温。。。静力平衡方程




四、重要概念
  1. 静力稳定性:以前不知道这个词那么奇怪,干嘛起那么长
  2. 绝热递减率:大气大部分过程都是绝热过程,这意味着没有热量进出。干绝热递减率,发生原因是因为气压的变化,体积的膨胀,
    位温描述了绝热过程下保持大气标准压强时的温度,位温是一个守恒的量


Monday, April 7, 2014

不要自乱阵脚

1、在规定的时间内完成任务,不要占用其他时间(即拖延)来完成单项任务。
之所以后期速率下降,就是因为所谓的八十/二十原则,可以理解为一个对数曲线,到后期就无法加速,既是感觉到快要饱和,就有刹车的意思。只有告诉自己还有下一个明确的任务,才能够继续保持较高的效率。

2、要学会多任务切换
灵活转换能力太弱

想要做的事情实在太多:
1、完成donohue's method 本来就已经有代码,只需要迅速改完就可以,已经有计算各种各样trend的代码
2、开始看新代码,justin邮件里面的代码。

Wednesday, April 2, 2014

EU watch 数据处理基本流程

1. download data from EU watch (I looked for the data for nearly one month... just because of the wrong ftp site...)
2. use R script to make the land vector into a normal 3d array (terrible!)
3. use R script to write netcdf file
4. compress the nc file
   $ ncks -4 -L9 input.nc output.nc
5. use GrADS to resample 0.5 deg to 1.0 deg into control file and binary file
   fwrite use different time settings to put the data into one written file
6. use CDO to convert binary and control files into netcdf again!
   $ cdo -f nc import_binary input.ctl output.nc