Minh họ a việ c kế t hợ p c ácc ông c ụ mã nguồ n mở để tìm   hiể u mộhtlong77@gmail.com v ậ t lý            t bài toán   ...
Dao Động Tử Điều Hòa Một Chiều
… và trong Cơ học lượng tử                  2ω=  √k   m            H=               P 1   2                 + mω X        ...
Trạng thái kích thích tổng quát
Fortran code : Hàm sóng bậc n ứng              với trị x bất kỳ    DOUBLE PRECISION FUNCTION ODHON(BETA,X,N)    PARAMETER ...
Tạo tệp thực thi với Makefile     1
Makefileobjects = objs/initialization.o objs/debug.o objs/quadrature.o objs/odho.o objs/main.oforcomp = gfortran#forcomp =...
Chương trình chính, dữ liệu đầu vào0                      và kết quả        #Print initialized values 0=No 1=Yes20        ...
Gnuplot để hiển thị kết quả
Python : tăng hiệu suất công việc#!/usr/bin/env pythonimport sys,os#using the executable file in "run" directory       Ra ...
Python : Thay đổi tham số trực tiếp...          trên dòng lệnh#Read variables from the command line, one by one:while len(...
Vai trò của tham số beta
Python : Tạo dữ liệu đầu vào...#Make input file to the programf = open(input,w)f.write("""%(print_init_values)g           ...
Python : Hiển thị bằng hình ảnh...               kết quả tính toán# make file with gnuplot commands:gnuplotfile=phi_%i__be...
Trạng thái kích thích bậc 100
Cải tiến●    Chuyển dữ liệu đầu vào và đầu ra của một    tính ../odho vào cùng một thư mục    cmd =          toán < input ...
Tính toàn bộ các trạng thái kích               thích từ 0 tới 100#!/usr/bin/env pythonimport sys,osfor n in range(0,100): ...
Còn gì nữa
Thank you for your atte ntion!!!
Upcoming SlideShare
Loading in …5
×

Sfd2012Hanoi - Hà Thụy Long - Odho: Mã nguồn mở và các bài toán vật lý

413 views
345 views

Published on

Minh họa việc kết hợp các công cụ mã nguồn mở để tìm hiểu một bài toán vật lý

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
413
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Sfd2012Hanoi - Hà Thụy Long - Odho: Mã nguồn mở và các bài toán vật lý

  1. 1. Minh họ a việ c kế t hợ p c ácc ông c ụ mã nguồ n mở để tìm hiể u mộhtlong77@gmail.com v ậ t lý t bài toán Hà Nộ i, 15/09/2012
  2. 2. Dao Động Tử Điều Hòa Một Chiều
  3. 3. … và trong Cơ học lượng tử 2ω= √k m H= P 1 2 + mω X 2m 2 2
  4. 4. Trạng thái kích thích tổng quát
  5. 5. Fortran code : Hàm sóng bậc n ứng với trị x bất kỳ DOUBLE PRECISION FUNCTION ODHON(BETA,X,N) PARAMETER (NFMAX=100) COMMON/CONSTS/PIO4,PIO2,PI,SQRT2,SQRTN(NFMAX),SQRTNF(NFMAX) DOUBLE PRECISION PIO4,PIO2,PI,SQRT2,SQRTN,SQRTNF DOUBLE PRECISION BETA,X,BETAX DOUBLE PRECISION PHIN,PHINM1,PHINM2 DOUBLE PRECISION ODHO0,ODHO1 INTEGER I,NC IF (N.EQ.0) THEN ODHON=ODHO0(BETA,X) ELSEIF (N.EQ.1) THEN ODHON=ODHO1(BETA,X) ELSE BETAX=BETA*X PHINM2=ODHO0(BETA,X) PHINM1=ODHO1(BETA,X) DO I=2,N PHIN=(PHINM1*BETAX*SQRT2-SQRTN(I-1)*PHINM2)/SQRTN(I) PHINM2 = PHINM1 PHINM1 = PHIN ENDDO ODHON=PHIN ENDIFC END
  6. 6. Tạo tệp thực thi với Makefile 1
  7. 7. Makefileobjects = objs/initialization.o objs/debug.o objs/quadrature.o objs/odho.o objs/main.oforcomp = gfortran#forcomp = fort77run/odho: $(objects) time $(forcomp) -o run/odho $(objects)objs/initialization.o: initialization.f time $(forcomp) -c -O4 -o objs/initialization.o initialization.fobjs/debug.o: debug.f time $(forcomp) -c -O4 -o objs/debug.o debug.fobjs/quadrature.o: quadrature.f time $(forcomp) -c -O4 -o objs/quadrature.o quadrature.fobjs/odho.o: odho.f time $(forcomp) -c -O4 -o objs/odho.o odho.fobjs/main.o: main.f time $(forcomp) -c -O4 -o objs/main.o main.f.PHONY: clean runclean: rm -rf run/odho $(objects) *~run: cd run;./odho < input
  8. 8. Chương trình chính, dữ liệu đầu vào0 và kết quả #Print initialized values 0=No 1=Yes20 #Order of the wave-function of Harmonical Oscillator1 #beta = sqrt(m.omega/hbar) : harmonical oscillator parameter-10 10 #the domain of the function1000 #number of sample points of the function20 #number of Gauss-Hermite sample pointsC ... -10.000000000000000 3.31402378637182642E-009 OPEN(UNIT=20,FILE=data) -9.9800000000000004 3.86975188178886400E-009C -9.9600000000000009 -9.9400000000000013 4.51634903048100019E-009 5.26827539296001357E-009 READ *,BETA -9.9200000000000017 -9.9000000000000021 6.14222537578560566E-009 7.15746188556575456E-009 READ *,XMIN,XMAX -9.8800000000000026 8.33619883446549584E-009 -9.8600000000000030 9.70403858885294332E-009 READ *,NSP -9.8400000000000034 1.12904719391459490E-008 -9.8200000000000038 1.31294491666361272E-008 READ *,NGH -9.8000000000000043 1.52600319051601025E-008 WRITE(21,100) BETA,NGH -9.7800000000000047 -9.7600000000000051 1.77271367564591956E-008 2.05823830339850479E-008 CALL ROOTHE(HERRTS,NGH) -9.7400000000000055 -9.7200000000000060 2.38850585985262592E-008 2.77032195299829601E-008 WRITE(21,105) (I,HERRTS(I),I=1,NGH) -9.7000000000000064 3.21149413745403316E-008 -9.6800000000000068 3.72097419392771055E-008 DX=(XMAX-XMIN)/DBLE(NSP) -9.6600000000000072 4.30901981031658081E-008 ... X=XMIN DO I=0,NSP WRITE (20,*) X,ODHON(BETA,X,N) X=X+DX ENDDOC ...
  9. 9. Gnuplot để hiển thị kết quả
  10. 10. Python : tăng hiệu suất công việc#!/usr/bin/env pythonimport sys,os#using the executable file in "run" directory Ra lệnh cho hệ thốngdir=run;os.chdir(dir) thực hiện chương trìnhcmd = ./odho < input#Data preparation#default values of input parametersprint_init_values = 0order_wave_function = 20beta = 1.0 Chạy chương trình với cácxmin = -10 thông số mặc địnhxmax = 10nsp = 1000ngh = 20#Read variables from the command line, one by one:...failure = os.system(cmd)if failure: print running the code failed; sys.exit(1)
  11. 11. Python : Thay đổi tham số trực tiếp... trên dòng lệnh#Read variables from the command line, one by one:while len(sys.argv)>1: option=sys.argv[1]; del sys.argv[1] if option == --print-init-values: print_init_values=int(sys.argv[1]); del sys.argv[1] elif option == --order-wave-function: order_wave_function =int(sys.argv[1]); del sys.argv[1] elif option == --beta: beta =float(sys.argv[1]); del sys.argv[1] elif option == --xmin: xmin =float(sys.argv[1]); del sys.argv[1] elif option == --xmax: xmax =float(sys.argv[1]); del sys.argv[1] elif option == --number-sample-points: nsp =int(sys.argv[1]); del sys.argv[1] elif option == --number-gh-sample-points: ngh =int(sys.argv[1]); del sys.argv[1] else: print sys.argv[0],: invalid option,option sys.exit(1)#Make input file to the program...
  12. 12. Vai trò của tham số beta
  13. 13. Python : Tạo dữ liệu đầu vào...#Make input file to the programf = open(input,w)f.write("""%(print_init_values)g #Print initialized values 0=No 1=Yes%(order_wave_function)g #Order of the wave-function of Harmonical Oscillator%(beta)g #beta = sqrt(m.omega/hbar) : harmonical oscillator parameter%(xmin)g %(xmax)g #the domain of the function%(nsp)g #number of sample points of the function%(ngh)g #number of Gauss-Hermite sample points""" % vars() )f.close()... 0 #Print initialized values 0=No 1=Yes 2 #Order of the wave-function of Harmonical Oscillator 0.4 #beta = sqrt(m.omega/hbar) : harmonical oscillator parameter -10 10 #the domain of the function 1000 #number of sample points of the function 20 #number of Gauss-Hermite sample points
  14. 14. Python : Hiển thị bằng hình ảnh... kết quả tính toán# make file with gnuplot commands:gnuplotfile=phi_%i__beta_%g.gnuplot % (order_wave_function,beta)f = open(gnuplotfile,w)f.write("""reset Tạo tệp chứa lệnh vẽ cho gnuplot : phương pháp truyền thống#set title "Harmonical Oscillator Wave Function of order %(order_wave_function)g, beta=%(beta)g"set xlabel "x(fm)"set ylabel "fm^{-1/2}"#set xrange [%(xmin)g:%(xmax)g]# Line width of the axesset border linewidth 1.5# Line stylesset style line 1 linecolor rgb #0060ad linetype 1 linewidth 2set style line 2 linecolor rgb #dd181f linetype 1 linewidth 2# make a plot in PNG format:set term png small Tạo hình vẽ với đuôi .pngset output phi_%(order_wave_function)i__beta_%(beta)g.png;plot "data" with lines linestyle 2 notitle# define the postscript output format: Tích hợp thông tin tham số sử dụngset term postscript enhanced Times-Roman 20; vào tên tệpset output phi_%(order_wave_function)i__beta_%(beta)g.ps;set title "Harmonical Oscillator Wave Function of order %(order_wave_function)g, {/Symbol b}=%(beta)g"plot "data" with lines linestyle 2 notitle""" % vars() )f.close()# make plotcmd = gnuplot -persist +gnuplotfilefailure = os.system(cmd)if failure: print running gnuplot failed; sys.exit(1)...
  15. 15. Trạng thái kích thích bậc 100
  16. 16. Cải tiến● Chuyển dữ liệu đầu vào và đầu ra của một tính ../odho vào cùng một thư mục cmd = toán < input ... caldir=tmp ... elif option == --calcul-directory: caldir =sys.argv[1]; del sys.argv[1] ... import shutil if os.path.isdir(caldir): #does caldir exist shutil.rmtree(caldir) # yes, remove old directory os.mkdir(caldir) #make caldir directory os.chdir(caldir) #move to dir ...
  17. 17. Tính toàn bộ các trạng thái kích thích từ 0 tới 100#!/usr/bin/env pythonimport sys,osfor n in range(0,100): cmd = "./odho_improved.py --beta 1.5 --order-wave-function %g --number-sample-points 1000 --calcul-directory beta1.5n%g" %(n,n) failure = os.system(cmd) if failure: print running gnuplot failed; sys.exit(1)
  18. 18. Còn gì nữa
  19. 19. Thank you for your atte ntion!!!

×