Dimension of arrays (RESHAPE) in Fortran 90

Click For Summary

Discussion Overview

The discussion centers around the use of the RESHAPE function in Fortran 90, specifically in the context of a program that attempts to manipulate complex matrices. Participants explore the syntax error encountered in the code and the intended purpose of the RESHAPE function.

Discussion Character

  • Technical explanation
  • Debate/contested

Main Points Raised

  • One participant reports a syntax error at line 20 of the provided code, suggesting the need to search for examples of RESHAPE usage.
  • Another participant questions the necessity of using RESHAPE, asserting that it is primarily intended for converting Fortran arrays to C-type arrays for interoperability.
  • A participant acknowledges the error and expresses their struggle with understanding how to fix it, indicating their newness to Fortran.

Areas of Agreement / Disagreement

There is no consensus on the appropriateness of using RESHAPE, as one participant defends its use while another questions it. The discussion remains unresolved regarding the correct application and syntax of the RESHAPE function.

Contextual Notes

The discussion highlights potential limitations in understanding the syntax and purpose of RESHAPE, as well as the participant's experience level with Fortran.

MahdiI84
Messages
22
Reaction score
1
TL;DR
Hello everyone. I am new to Fortran. The following coding is for a 2x2 matrix whose original diameter is zero and its non-original diameter requires writing a loop. The code I wrote now has an error that I am unable to fix. Please help me solve it. Thanks
Fortran:
program testmatek
implicit none
integer :: Nc=1000 ,k
integer,parameter :: N=2
REAL :: kx ,a0=1.0 ,t0=0.25
DOUBLE PRECISION :: pi=4*ATAN(1.)
COMPLEX , PARAMETER :: i=(0,1)
complex :: ek1 ,ek2
complex ::  MATRIX_ek(N,N)  
   
 open(1,file='matek.txt')  
 
    MATRIX_ek(N,N)=(0,0)
 
 DO k=-Nc,+Nc
    
    kx=(pi*k)/(1000*a0) 
    ek1=t0*(1+EXP(-2*i*kx*a0))
    ek2=t0*(1+EXP(2*i*kx*a0))
   
    MATRIX_ek=RESHAPE((/0.0,eK2,ek1,0.0/ ) , (/2,2/))
    write(1,*) MATRIX_ek
   
 end do
 end program testmatek
1>C:\Users\mahdi\Documents\Visual Studio 2012\Projects\Console4\Console4\Source1.f90(21): error #5082: Syntax error, found ')' when expecting one of: ( <IDENTIFIER> <CHAR_CON_KIND_PARAM> <CHAR_NAM_KIND_PARAM> <CHARACTER_CONSTANT> <INTEGER_CONSTANT> ...
 
Technology news on Phys.org
The error appears at line 20. Have you searched online for examples of using the RESHAPE function?
 
  • Like
Likes   Reactions: MahdiI84
Why in heaven's name are you using RESHAPE?

RESHAPE is there to convert FORTRAN-type arrays to C-type arrays, so you can pass them to C functions.
 
  • Like
Likes   Reactions: MahdiI84
jedishrfu said:
The error appears at line 20. Have you searched online for examples of using the RESHAPE function?
Yes, I know where the error is. Of course, I searched the internet. But since I am new to Fortran, I did not understand how I could fix the error. Thank you for your help
 
Vanadium 50 said:
Why in heaven's name are you using RESHAPE?

RESHAPE is there to convert FORTRAN-type arrays to C-type arrays, so you can pass them to C functions.
Thank you for your help
 

Similar threads

  • · Replies 16 ·
Replies
16
Views
2K
  • · Replies 20 ·
Replies
20
Views
4K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 21 ·
Replies
21
Views
3K
  • · Replies 13 ·
Replies
13
Views
3K
  • · Replies 8 ·
Replies
8
Views
4K
  • · Replies 1 ·
Replies
1
Views
7K
  • · Replies 5 ·
Replies
5
Views
9K