diff options
author | goodale <goodale@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 1999-12-14 11:39:37 +0000 |
---|---|---|
committer | goodale <goodale@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 1999-12-14 11:39:37 +0000 |
commit | 59f29ba9354f2b59ad9d6904fab54733f305ae62 (patch) | |
tree | b29ac542aaf2a0bcbcc8f43128349d37472bb7f3 /src/main | |
parent | 2f00a0478ae6154c734856935eb9091dc072c5e6 (diff) |
Added Gab's complex number stuff.
Tom
git-svn-id: http://svn.cactuscode.org/flesh/trunk@1190 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/Complex.c | 235 | ||||
-rw-r--r-- | src/main/make.code.defn | 1 |
2 files changed, 236 insertions, 0 deletions
diff --git a/src/main/Complex.c b/src/main/Complex.c new file mode 100644 index 00000000..af774d80 --- /dev/null +++ b/src/main/Complex.c @@ -0,0 +1,235 @@ + /*@@ + @file Complex.c + @date Tue Dec 14 12:09:43 1999 + @author Tom Goodale + @desc + Complex variable stuff + @enddesc + @@*/ + +static char *rcsid = "$Header$"; + +#include "cctk.h" +#include "cctk_complex.h" + + /*@@ + @routine CCTK_Cmplx + @date Tue Dec 14 12:16:01 1999 + @author Tom Goodale + @desc + Turns two reals into a complex number + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ +CCTK_COMPLEX CCTK_Cmplx(CCTK_REAL Re, CCTK_REAL Im) +{ + CCTK_COMPLEX complex_number; + + complex_number.Re = Re; + complex_number.Im = Im; + + return complex_number; +} + + /*@@ + @routine CCTK_CmplxReal + @date Tue Dec 14 12:22:41 1999 + @author Tom Goodale + @desc + Returns the real part of a complex number. + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ +CCTK_REAL CCTK_CmplxReal(CCTK_COMPLEX complex_number) +{ + return complex_number.Im; +} + + /*@@ + @routine CCTK_CmplxImag + @date Tue Dec 14 12:22:41 1999 + @author Tom Goodale + @desc + Returns the imaginary part of a complex number. + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ +CCTK_REAL CCTK_CmplxImag(CCTK_COMPLEX complex_number) +{ + return complex_number.Im; +} + + /*@@ + @routine CCTK_CmplxConjg + @date Tue Dec 14 12:22:41 1999 + @author Tom Goodale + @desc + Returns the complex conjugate of a complex number. + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ +CCTK_COMPLEX CCTK_CmplxConjg(CCTK_COMPLEX in) +{ + CCTK_COMPLEX conjg; + + conjg.Re = in.Re; + conjg.Im = -in.Im; + + return conjg; +} + + /*@@ + @routine CCTK_CmplxAbs + @date Tue Dec 14 12:26:33 1999 + @author Tom Goodale + @desc + Return the absolute value of a complex number. + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ +CCTK_REAL CCTK_CmplxAbs(CCTK_COMPLEX in) +{ + CCTK_REAL cabs; + + cabs = sqrt(in.Re*in.Re + in.Im*in.Im); + + return cabs; +} + + /*@@ + @routine CCTK_CmplxAdd + @date Sat Dec 4 12:11:04 1999 + @author Gabrielle Allen + @desc + Adds two complex numbers + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ +CCTK_COMPLEX CCTK_CmplxAdd(CCTK_COMPLEX a,CCTK_COMPLEX b) +{ + CCTK_COMPLEX add_ab; + add_ab.Re = a.Re + b.Re; + add_ab.Im = a.Im + b.Im; + return add_ab; +} + + /*@@ + @routine CCTK_CmplxSub + @date Sat Dec 4 12:11:04 1999 + @author Gabrielle Allen + @desc + Subtracts two complex numbers + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ +CCTK_COMPLEX CCTK_CmplxSub(CCTK_COMPLEX a,CCTK_COMPLEX b) +{ + CCTK_COMPLEX sub_ab; + sub_ab.Re = a.Re - b.Re; + sub_ab.Im = a.Im - b.Im; + return sub_ab; +} + + /*@@ + @routine CCTK_CmplxMul + @date Sat Dec 4 12:11:04 1999 + @author Gabrielle Allen + @desc + Multiplies two complex numbers + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ +CCTK_COMPLEX CCTK_CmplxMul(CCTK_COMPLEX a,CCTK_COMPLEX b) +{ + CCTK_COMPLEX mult_ab; + mult_ab.Re = a.Re*b.Re-a.Im*b.Im; + mult_ab.Im = a.Im*b.Re+a.Re*b.Im; + return mult_ab; +} + + /*@@ + @routine CCTK_CmplxDiv + @date Sat Dec 4 12:11:04 1999 + @author Gabrielle Allen + @desc + Divides two complex numbers + @enddesc + @calls + @calledby + @history + + @endhistory + +@@*/ +CCTK_COMPLEX CCTK_CmplxDiv(CCTK_COMPLEX a,CCTK_COMPLEX b) +{ + CCTK_COMPLEX div_ab; + CCTK_REAL fac; + + fac = b.Re*b.Re+b.Im*b.Im; + + if (fac != 0) + { + div_ab.Re = (a.Re*b.Re+a.Im*b.Im)/fac; + div_ab.Im = (a.Im*b.Re-a.Re*b.Im)/fac; + } + else + { + CCTK_WARN(0,"Divide by zero in CCTK_CmplxDiv"); + div_ab.Re = 0; + div_ab.Im = 0; + } + return div_ab; +} + + +/* Routines to be added */ + +/* +CCTK_CmplxSqrt +CCTK_CmplxSin +CCTK_CmplxCos +CCTK_CmplxLog +CCTK_CmplxExp + +*/ diff --git a/src/main/make.code.defn b/src/main/make.code.defn index b527fa41..666d54e5 100644 --- a/src/main/make.code.defn +++ b/src/main/make.code.defn @@ -10,6 +10,7 @@ CactusDefaultEvolve.c\ CactusDefaultShutdown.c\ CallStartupFunctions.c\ CommandLine.c\ +Complex.c\ ConfigData.c\ Coord.c\ DefaultTimers.c\ |