Comp Sci Output format of a matrix in Fortran 90

AI Thread Summary
The discussion revolves around a user's challenge in Fortran 90 regarding the output format of a matrix for plotting Fourier series results. The user initially struggles with a fixed 4x4 matrix but needs a larger 32x4 matrix to accommodate finer steps in their calculations. Suggestions include changing the matrix declaration and adjusting loop parameters to fit the new size. Ultimately, the user resolves the issue by implementing an allocatable array, indicating a successful solution to their problem. The thread concludes with the user expressing gratitude and stating that the issue is resolved.
Boltzmann
Messages
7
Reaction score
2
Hello,
I'm new here and I'm also new in programming. I never did it before and now I have a problem with one of the programs in fortran 90 and I can't figure out how to solve it. Maybe some of you can help me. Many thanks in advance.

1. Homework Statement

I need to plot the results of a Fourier series. In the first column the time and in the followings the results and the changes if the degree changes. Therefore I need to create a matrix. And that's where I have the problems. I can't figure out, how to choose the format.

Homework Equations

The Attempt at a Solution



Here is how I tried it. It works if I choose a 4x4 matrix and step=1, so that I only get 4 results of each but I want to use a step like 0.1 and a higher degree of the series therefore I need at least a 32x4 matrix. When I change the 4x4 matrix to anything else, the output starts getting messed up.
Here is my program
Fortran:
PROGRAM fourier
IMPLICIT NONE
INTEGER :: b, i
REAL :: t, x, step=1,a
REAL, PARAMETER :: pi= 4.D0*DATAN(1.D0)
REAL :: r(4,4)=0.0
!READ (*,*) step                                                                                
x=0
t=0
i=1
! OPEN (15,file="Data.dat")                                                                      
DO WHILE ( t<pi )
  DO b=0,2
   a=b
   x=x+1/(2*a+1)*SIN((2.0*a+1)*t)
   r(b+2,i)=x
  ! WRITE(*,*) x,t                                                                               
  ENDDO
  r(1,i)=t
  t=t+step
  i = i+1
  x=0
  !WRITE (*,*) t                                                                                 
ENDDO

!WRITE (*,*) t                                                                                  
WRITE(*,'(4(F9.6,X))') r

END PROGRAM fourier
 
Last edited by a moderator:
Physics news on Phys.org
Boltzmann said:
Hello,
I'm new here and I'm also new in programming. I never did it before and now I have a problem with one of the programs in fortran 90 and I can't figure out how to solve it. Maybe some of you can help me. Many thanks in advance.

1. Homework Statement

I need to plot the results of a Fourier series. In the first column the time and in the followings the results and the changes if the degree changes. Therefore I need to create a matrix. And that's where I have the problems. I can't figure out, how to choose the format.

Homework Equations

The Attempt at a Solution



Here is how I tried it. It works if I choose a 4x4 matrix and step=1, so that I only get 4 results of each but I want to use a step like 0.1 and a higher degree of the series therefore I need at least a 32x4 matrix. When I change the 4x4 matrix to anything else, the output starts getting messed up.
Here is my program
Fortran:
PROGRAM fourier
IMPLICIT NONE
INTEGER :: b, i
REAL :: t, x, step=1,a
REAL, PARAMETER :: pi= 4.D0*DATAN(1.D0)
REAL :: r(4,4)=0.0
!READ (*,*) step                                                                                 
x=0
t=0
i=1
! OPEN (15,file="Data.dat")                                                                       
DO WHILE ( t<pi )
  DO b=0,2
   a=b
   x=x+1/(2*a+1)*SIN((2.0*a+1)*t)
   r(b+2,i)=x
  ! WRITE(*,*) x,t                                                                                
  ENDDO
  r(1,i)=t
  t=t+step
  i = i+1
  x=0
  !WRITE (*,*) t                                                                                  
ENDDO

!WRITE (*,*) t                                                                                   
WRITE(*,'(4(F9.6,X))') r

END PROGRAM fourier
Change the declaration of your r matrix like so:
Code:
REAL :: r(32,4)
Since you will be modifying the matrix elements, you don't need to initialize them, as far as I can tell.

You will also need to modify your DO loop to take into account the larger size of your matrix, with b ranging between 0 and 30 instead of 0 and 2.

I would also change your last write statement by putting it inside a do loop, printing one row of your matrix at a time, or even a nested pair of do loops to print each element of the matrix. The newer versions of Fortran are able to spit out entire arrays with just a single write statement, but I prefer the control of using loops to print out one element at a time.
 
Hey Mark44,

thank you very much for your answer!
I already solved the problem by using an allocatable array.

The thread can be closed.

Thanks.

greets Boltzmann
 

Similar threads

Replies
2
Views
6K
Replies
3
Views
2K
Replies
1
Views
3K
Replies
3
Views
7K
Replies
3
Views
5K
Replies
7
Views
3K
Replies
2
Views
5K
Back
Top