00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef TNT_FORTRAN_ARRAY1D_UTILS_H
00021 #define TNT_FORTRAN_ARRAY1D_UTILS_H
00022
00023 #include <iostream>
00024
00025 namespace TNT
00026 {
00027
00028
00036 template <class T>
00037 std::ostream& operator<<(std::ostream &s, const Fortran_Array1D<T> &A)
00038 {
00039 int N=A.dim1();
00040
00041 s << N << "\n";
00042 for (int j=1; j<=N; j++)
00043 {
00044 s << A(j) << "\n";
00045 }
00046 s << "\n";
00047
00048 return s;
00049 }
00050
00065 template <class T>
00066 std::istream& operator>>(std::istream &s, Fortran_Array1D<T> &A)
00067 {
00068 int N;
00069 s >> N;
00070
00071 Fortran_Array1D<T> B(N);
00072 for (int i=1; i<=N; i++)
00073 s >> B(i);
00074 A = B;
00075 return s;
00076 }
00077
00078
00079 template <class T>
00080 Fortran_Array1D<T> operator+(const Fortran_Array1D<T> &A, const Fortran_Array1D<T> &B)
00081 {
00082 int n = A.dim1();
00083
00084 if (B.dim1() != n )
00085 return Fortran_Array1D<T>();
00086
00087 else
00088 {
00089 Fortran_Array1D<T> C(n);
00090
00091 for (int i=1; i<=n; i++)
00092 {
00093 C(i) = A(i) + B(i);
00094 }
00095 return C;
00096 }
00097 }
00098
00099
00100
00101 template <class T>
00102 Fortran_Array1D<T> operator-(const Fortran_Array1D<T> &A, const Fortran_Array1D<T> &B)
00103 {
00104 int n = A.dim1();
00105
00106 if (B.dim1() != n )
00107 return Fortran_Array1D<T>();
00108
00109 else
00110 {
00111 Fortran_Array1D<T> C(n);
00112
00113 for (int i=1; i<=n; i++)
00114 {
00115 C(i) = A(i) - B(i);
00116 }
00117 return C;
00118 }
00119 }
00120
00121
00122 template <class T>
00123 Fortran_Array1D<T> operator*(const Fortran_Array1D<T> &A, const Fortran_Array1D<T> &B)
00124 {
00125 int n = A.dim1();
00126
00127 if (B.dim1() != n )
00128 return Fortran_Array1D<T>();
00129
00130 else
00131 {
00132 Fortran_Array1D<T> C(n);
00133
00134 for (int i=1; i<=n; i++)
00135 {
00136 C(i) = A(i) * B(i);
00137 }
00138 return C;
00139 }
00140 }
00141
00142
00143 template <class T>
00144 Fortran_Array1D<T> operator/(const Fortran_Array1D<T> &A, const Fortran_Array1D<T> &B)
00145 {
00146 int n = A.dim1();
00147
00148 if (B.dim1() != n )
00149 return Fortran_Array1D<T>();
00150
00151 else
00152 {
00153 Fortran_Array1D<T> C(n);
00154
00155 for (int i=1; i<=n; i++)
00156 {
00157 C(i) = A(i) / B(i);
00158 }
00159 return C;
00160 }
00161 }
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171 template <class T>
00172 Fortran_Array1D<T>& operator+=(Fortran_Array1D<T> &A, const Fortran_Array1D<T> &B)
00173 {
00174 int n = A.dim1();
00175
00176 if (B.dim1() == n)
00177 {
00178 for (int i=1; i<=n; i++)
00179 {
00180 A(i) += B(i);
00181 }
00182 }
00183 return A;
00184 }
00185
00186
00187
00188
00189 template <class T>
00190 Fortran_Array1D<T>& operator-=(Fortran_Array1D<T> &A, const Fortran_Array1D<T> &B)
00191 {
00192 int n = A.dim1();
00193
00194 if (B.dim1() == n)
00195 {
00196 for (int i=1; i<=n; i++)
00197 {
00198 A(i) -= B(i);
00199 }
00200 }
00201 return A;
00202 }
00203
00204
00205
00206 template <class T>
00207 Fortran_Array1D<T>& operator*=(Fortran_Array1D<T> &A, const Fortran_Array1D<T> &B)
00208 {
00209 int n = A.dim1();
00210
00211 if (B.dim1() == n)
00212 {
00213 for (int i=1; i<=n; i++)
00214 {
00215 A(i) *= B(i);
00216 }
00217 }
00218 return A;
00219 }
00220
00221
00222
00223
00224 template <class T>
00225 Fortran_Array1D<T>& operator/=(Fortran_Array1D<T> &A, const Fortran_Array1D<T> &B)
00226 {
00227 int n = A.dim1();
00228
00229 if (B.dim1() == n)
00230 {
00231 for (int i=1; i<=n; i++)
00232 {
00233 A(i) /= B(i);
00234 }
00235 }
00236 return A;
00237 }
00238
00239
00240 }
00241
00242 #endif