标签:
杂谈 |
这里谈的展宽,是对量子化学正则分析计算出来的分子的线性光谱(红外,拉曼等)展开成带状峰。这是一种经验处理,只是为了视觉上更接近于实验得到的光谱。既然实验得到的是带状光谱,那为什么量子化学正则分析计算得到是线性光谱呢?原因很简单,量子化学计算的气相分子在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, stopEND |
附件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)) |

加载中…