PDA

View Full Version : Errors with fortran code, help!


chrissi.<3
Jan17-12, 11:52 AM
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!!!

hotvette
Jan17-12, 12:40 PM
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.

AlephZero
Jan17-12, 01:06 PM
Without seeing all of the code debugging this is just guessing, but the first two lines

CPREV=CHISQ
CPREV=0

look a bit strange, considering that is the only thing you do with CHISQ.

chrissi.<3
Jan17-12, 01:49 PM
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:

256bits
Jan18-12, 06:05 PM
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,L AMDA2

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)

chrissi.<3
Jan19-12, 06:20 AM
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

Louisa
Mar15-12, 06:45 AM
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.

chrissi.<3
Mar15-12, 01:56 PM
Ive solved it now

Thanks anyway : )