标签:
杂谈 |
这里谈的展宽,是对量子化学正则分析计算出来的分子的线性光谱(红外,拉曼等)展开成带状峰。这是一种经验处理,只是为了视觉上更接近于实验得到的光谱。既然实验得到的是带状光谱,那为什么量子化学正则分析计算得到是线性光谱呢?原因很简单,量子化学计算的气相分子在0K下的振动光谱,是在势能面的最低点根据二次简谐近似得到的振动频率。这个频率-吸收强度数据对,体现到谱图上就是一根线。实际的光谱总是在一定的温度下的凝聚相(固体或液体)下的振动光谱,它是极大量分子(~Na,
按照量子电动力学,这些展宽效应分为两类:非均展宽,和均匀展宽。这个均和非均,并非是指展宽的峰形是否对称,而是指效应本身是否对所有的分子造成的后果是否一样。比如,杂质效应(dopant
下面提供了3种展宽的fortran
...
190
200
210
220
230
240
...
如果你的频率值是
为什么会这样呢?因为我写这个code并非为了处理量子化学计算结果,而是对分子动力学模拟得到的红外光谱结果进行平滑(Smoothing)。Smoothing同样是一种展宽。因此下列code只处理x值有规律的输入文件。但是很容易改写。
三个code仅仅是计算公式不一样,差别只是几行而已。不过,Voigt展宽后的结果最好。
附件1.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
!--------------------------- PROGRAM !--------------------------- ! ! set of as input. ! ! in the ! is designed ! as to with gnuplot, as usage ! if you get an with final data, 2 lines. ! get 'g-broadened.dat' ! ! '< u 1 : 2 ... ! in which, 3.0 ! in output, 500 3000 ! in the 2 ! ! with input, 1 ! ! 2012.12 . 26 ! implicit integer, 1 .0d0) character(len= 20 ) character(len= 100 ) real(dp), 0 - 0 - integer,parameter 10 , 20 real(dp) is sigma integer logical CALL 1 , input inquire(file=input, if ( write(*,*) "does stop end if call 2 , read(arg, call 3 , read(arg, call 4 , read(arg, call 5 , read(arg, ! in input open(unit=inputfile, "sequential" , "old" ) nline 0 do read(unit=inputfile, 100 ) nline 1 end do 100 continue rewind(inputfile) ! for arrays allocate(X0( 1 :nline), 1 :nline)) ! in data do i 1 , read(unit=inputfile,FMT=*,iostat=stat) end do ! if you ! "g-broadended.dat" , 'replace' , 'write' ) pi 2.0 * 0 .0_dp) X do while (X Y 0.0 do i 1 , if ( 3 * Y 2 *pi)) 1.0 *(X 2.0 /( 2.0 *sigma*sigma) end if end do ! if you ! "(F6.2,1X,F8.6)" ) write(*,fmt= "(F9.1,1X,F15.8)" ) X end do ! deallocate(X0, stop END |
附件2.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
!--------------------------- PROGRAM !--------------------------- ! ! set of as input. ! ! in the ! is designed ! as to with gnuplot, as usage ! if you get an with final data, 2 lines. ! get 'g-broadened.dat' ! ! '< u 1 : 2 ... ! in which, 3.0 ! in output, 500 3000 ! in the 2 ! ! with input, 1 ! ! 2012.12 . 26 ! implicit integer, 1 .0d0) character(len= 20 ) character(len= 100 ) real(dp), 0 - 0 - integer,parameter 10 , 20 real(dp) is sigma integer logical CALL 1 , input inquire(file=input, if ( write(*,*) "does stop end if call 2 , read(arg, call 3 , read(arg, call 4 , read(arg, call 5 , read(arg, ! in input open(unit=inputfile, "sequential" , "old" ) nline 0 do read(unit=inputfile, 100 ) nline 1 end do 100 continue rewind(inputfile) ! for arrays allocate(X0( 1 :nline), 1 :nline)) |