Output format of a matrix in Fortran 90

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:
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 ·
Replies
2
Views
7K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 8 ·
Replies
8
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 5 ·
Replies
5
Views
6K
  • · Replies 3 ·
Replies
3
Views
8K
  • · Replies 3 ·
Replies
3
Views
5K
  • · Replies 7 ·
Replies
7
Views
3K
  • · Replies 2 ·
Replies
2
Views
5K