43 lines
		
	
	
		
			687 B
		
	
	
	
		
			Fortran
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			687 B
		
	
	
	
		
			Fortran
		
	
	
	
	
	
| !program smolorentz
 | |
| subroutine smolorentz(s1,nz,w,s2)
 | |
| 
 | |
| !  parameter (nz=512)
 | |
|   real s1(nz),s2(nz)
 | |
|   real y(-50:50)
 | |
| !  character*8 arg
 | |
| 
 | |
| !  s1=0.
 | |
| !  s1(256)=1.
 | |
| 
 | |
| !  call getarg(1,arg)
 | |
| !  read(arg,*) w
 | |
|   
 | |
|   do i=-50,50
 | |
|      x=i
 | |
|      z=x/(0.5*w)
 | |
|      y(i)=0.
 | |
|      if(abs(z).lt.3.0) then
 | |
|         d=1.0 + z*z
 | |
|         y(i)=(1.0/d - 0.1)*10.0/9.0
 | |
|      endif
 | |
|   enddo
 | |
| 
 | |
|   jz=nint(1.5*w)
 | |
|   if(jz.gt.50) jz=50
 | |
|   do i=1,nz
 | |
|      s=0.
 | |
|      sy=0.
 | |
|      do j=-jz,jz
 | |
|         k=i+j
 | |
|         if(k.ge.1 .and. k.le.nz) then
 | |
|            s=s + s1(k)*y(j)
 | |
|            sy=sy+y(j)
 | |
|         endif
 | |
|      enddo
 | |
|      s2(i)=s/sy
 | |
| !     write(52,3002) i-256,s1(i),s2(i)
 | |
| !3002 format(i5,2f10.4)
 | |
|   enddo
 | |
| 
 | |
| end subroutine smolorentz
 | 
