Reputation: 31
I am using fortran f95. My OS is windows 7, 64-bit.
I would like to get the output into an excel file so that I may plot the data. Does anybody know how to do this? Your response is highly appreciated. PS: I would like the output file to contain x, f(i), fprime1,fprime2, fprime3, diff1,diff2 and diff3. The code is as mentioned below:
**
! This program calculates the first derivative of
! a function, where f(x)= sin x. It makes use of the
! centred-difference formula using 3 values of the step size: h1, h2, h3.
! It also calculates the
! analytical first derivative of the function.
Program centred_difference_first_derivative
implicit none
real :: x, h1, h2, h3, fprime1, fprime2, fprime3, diff1, diff2, diff3, pi, stepa
real,dimension(:), allocatable :: f
integer :: i
! Assignment of variables
x=0.0
pi=4*atan2(1.0,1.0)
allocate(f(41))
stepa=pi/20.0
h1=0.1
h2=0.01
h3=0.001
! Calculate analytical derivative of sin x
! for the domain x:[0,2pi]
do i=1,41
f(i)=cos(x)
x=x+stepa
end do
! Approximates first derivative of sin x
! step size h1, for the domain x:[0,2pi]
x=0.0
do i=1,41
fprime1=(sin(x+h1)-sin(x-h1))/(2*h1)
diff1=f(i)-fprime1
print 37, x,f(i),fprime1,diff1
x=x+stepa
end do
37 format(e15.8,3x,e15.8,3x,e15.8,3x,'ERROR1= ',e15.8)
! Approximates first derivative of sin x
! step size h2, for the domain x:[0,2pi]
x=0.0
do i=1,41
fprime2=(sin(x+h2)-sin(x-h2))/(2*h2)
diff2=f(i)-fprime2
print 49,x,f(i),fprime2,diff2
x=x+stepa
end do
49 format(e15.8,3x,e15.8,3x,e15.8,3x,'ERROR2= ',e15.8)
! Approximates first derivative of sin x
! step size h3, for the domain x:[0,2pi]
x=0.0
do i=1,41
fprime3=(sin(x+h3)-sin(x-h3))/(2*h3)
diff3=f(i)-fprime3
print 61,x,f(i),fprime3,diff3
x=x+stepa
end do
61 format(e15.8,3x,e15.8,3x,e15.8,3x,'ERROR3= ',e15.8)
end program
**
Upvotes: 3
Views: 490
Reputation:
Output your data to a file, separated by spaces or commas. Excel has text import features to properly process and display such files.
An example is ASCII tecplot files which you can simply write using Fortran, with source code and examples provided here - TECPLOT_WRITE. A short snippet follows.
!
! Write the zone header.
!
write ( iunit, '(a)' ) ' '
write ( iunit, '(a,i6,a,i6,a,i6,a)' ) 'Zone I=', nr, ', J=', nz, 'K=', &
nt, ', F=POINT'
!
! Write the zone data, one node at a time.
!
do k = 1, nt
do j = 1, nz
do i = 1, nr
x = r(i) * cos ( t(k) )
y = r(i) * sin ( t(k) )
vx = vr(i,j) * cos ( t(k) ) - vt(i,j) * sin ( t(k) )
vy = vr(i,j) * sin ( t(k) ) + vt(i,j) * cos ( t(k) )
write ( iunit, '(3f10.3,3g15.6)' ) x, y, z(j), vx, vy, vz(i,j)
end do
end do
end do
Upvotes: 1