Why Does My Fortran Subroutine Return the Same Value?

  • Context: Fortran 
  • Thread starter Thread starter chrissi.<3
  • Start date Start date
  • Tags Tags
    Code Errors Fortran
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
7 replies · 4K views
chrissi.<3
Messages
4
Reaction score
0
Hii,

Having trouble with some code I am writing, where a subroutine returns the same value regardless of different variable inputs.

...
C Calculate Yth and Chi values. Compute sum of Chi-squared.
Subroutine Chisquared(CPREV,CHISQ)
Real TIME(17),COUNTS(17),ERROR(17),YTH(17),CHI(17)
Real A,B,LAMDA1,LAMDA2,CHISQ,CPREV
Common TIME,ERROR,COUNTS,YTH,A,B,LAMDA1,LAMDA2

CPREV=CHISQ
CPREV=0

Do K=1,17
YTH(K)=A*EXP(-LAMDA1*TIME(K))+B*EXP(-LAMDA2*TIME(K))
End Do

Do L=1,17
CHI(L)=(COUNTS(L)-YTH(L))/((ERROR(L)**2))
End Do

Do M=1,17
CPREV=CPREV+CHI(M)
End Do

Return
End
...

The user inputs A, B, LAMDA1 and LAMDA2 but it always returns the same value of CPREV.
Help please!
 
Physics news on Phys.org
Looks like you need some basic debug. Suggest you first add a write statement in your subroutine to print out the values of A, B, LAMDA1 and LAMDA2 to confirm the values are what you expect.
 
Thanks...

I've tried adding a write statement and it seems to have no problems with using the same variables (as input by the user in the main program).

I've also got rid of that line of code CPREV=CHISQ.

Still gives me the same value :confused:
 
C Calculate Yth and Chi values. Compute sum of Chi-squared.
Subroutine Chisquared(CPREV,CHISQ)
Real TIME(17),COUNTS(17),ERROR(17),YTH(17),CHI(17)
Real A,B,LAMDA1,LAMDA2,CHISQ,CPREV
Common TIME,ERROR,COUNTS,YTH,A,B,LAMDA1,LAMDA2

I haven't done fortran coding in a while but should not the COMMON staement be:
Common TIME(17),ERROR(17),COUNTS(17),YTH(17),A,B,LAMDA1,LAMDA2

and similar to one you have in your main part of the program?

Just guessing that maybe TIME is a different variable then TIME(17)
 
After throughly writing each step of the calculation (for YTH, CHI and CPREV), I found that the program was unable to handle the exponential function for certain values.

So it works ok now... as long as LAMDA1 and LAMDA2 have values less than 0.01
 
chrissi.<3 said:
Hii,

Having trouble with some code I am writing, where a subroutine returns the same value regardless of different variable inputs.

...
C Calculate Yth and Chi values. Compute sum of Chi-squared.
Subroutine Chisquared(CPREV,CHISQ)
Real TIME(17),COUNTS(17),ERROR(17),YTH(17),CHI(17)
Real A,B,LAMDA1,LAMDA2,CHISQ,CPREV
Common TIME,ERROR,COUNTS,YTH,A,B,LAMDA1,LAMDA2

CPREV=CHISQ
CPREV=0

Do K=1,17
YTH(K)=A*EXP(-LAMDA1*TIME(K))+B*EXP(-LAMDA2*TIME(K))
End Do

Do L=1,17
CHI(L)=(COUNTS(L)-YTH(L))/((ERROR(L)**2))
End Do

Do M=1,17
CPREV=CPREV+CHI(M)
End Do

Return
End
...

The user inputs A, B, LAMDA1 and LAMDA2 but it always returns the same value of CPREV.
Help please!

You need to post the entire program. This little piece needs values
passed in COMMON.
 
Ive solved it now

Thanks anyway : )