Tagged files with gromacs 3.0 header and added some license info
[alexxy/gromacs.git] / include / complex.h
1 /*
2  * $Id$
3  * 
4  *                This source code is part of
5  * 
6  *                 G   R   O   M   A   C   S
7  * 
8  *          GROningen MAchine for Chemical Simulations
9  * 
10  *                        VERSION 3.0
11  * 
12  * Copyright (c) 1991-2001
13  * BIOSON Research Institute, Dept. of Biophysical Chemistry
14  * University of Groningen, The Netherlands
15  * 
16  * This program is free software; you can redistribute it and/or
17  * modify it under the terms of the GNU General Public License
18  * as published by the Free Software Foundation; either version 2
19  * of the License, or (at your option) any later version.
20  * 
21  * If you want to redistribute modifications, please consider that
22  * scientific software is very special. Version control is crucial -
23  * bugs must be traceable. We will be happy to consider code for
24  * inclusion in the official distribution, but derived work must not
25  * be called official GROMACS. Details are found in the README & COPYING
26  * files - if they are missing, get the official version at www.gromacs.org.
27  * 
28  * To help us fund GROMACS development, we humbly ask that you cite
29  * the papers on the package - you can find them in the top README file.
30  * 
31  * Do check out http://www.gromacs.org , or mail us at gromacs@gromacs.org .
32  * 
33  * And Hey:
34  * Giving Russians Opium May Alter Current Situation
35  */
36
37 #ifndef _complex_h
38 #define _complex_h
39
40 static char *SRCID_complex_h = "$Id$";
41 #ifdef HAVE_CONFIG_H
42 #include <config.h>
43 #endif
44
45 #include <math.h>
46 #include "typedefs.h"
47
48 typedef struct {
49   real re,im;
50 } t_complex;
51
52 typedef t_complex cvec[DIM];
53
54 static t_complex cnul = { 0.0, 0.0 };
55
56 static t_complex rcmul(real r,t_complex c)
57 {
58   t_complex d;
59   
60   d.re = r*c.re;
61   d.im = r*c.im;
62   
63   return d;
64 }
65
66 static t_complex rcexp(real r)
67 {
68   t_complex c;
69   
70   c.re = cos(r);
71   c.im = sin(r);
72   
73   return c;
74 }
75
76
77 static t_complex cadd(t_complex a,t_complex b)
78 {
79   t_complex c;
80   
81   c.re = a.re+b.re;
82   c.im = a.im+b.im;
83   
84   return c;
85 }
86
87 static t_complex csub(t_complex a,t_complex b)
88 {
89   t_complex c;
90   
91   c.re = a.re-b.re;
92   c.im = a.im-b.im;
93   
94   return c;
95 }
96
97 static t_complex cmul(t_complex a,t_complex b)
98 {
99   t_complex c;
100   
101   c.re = a.re*b.re - a.im*b.im;
102   c.im = a.re*b.im + a.im*b.re;
103   
104   return c;
105 }
106
107 static t_complex conjugate(t_complex c)
108 {
109   t_complex d;
110   
111   d.re =  c.re;
112   d.im = -c.im;
113   
114   return d;
115 }
116
117 static t_complex cdiv(t_complex teller,t_complex noemer)
118 {
119   t_complex res,anoemer;
120   
121   anoemer = cmul(conjugate(noemer),noemer);
122   res = cmul(teller,conjugate(noemer));
123   
124   return rcmul(1.0/anoemer.re,res);
125 }
126 #endif