21#ifndef TNT_FORTRAN_ARRAY3D_UTILS_H
22#define TNT_FORTRAN_ARRAY3D_UTILS_H
32std::ostream& operator<<(std::ostream &s,
const Fortran_Array3D<T> &A)
38 s << M <<
" " << N <<
" " << K <<
"\n";
40 for (
int i=1; i<=M; i++)
42 for (
int j=1; j<=N; j++)
44 for (
int k=1; k<=K; k++)
56std::istream& operator>>(std::istream &s, Fortran_Array3D<T> &A)
63 Fortran_Array3D<T> B(M,N,K);
65 for (
int i=1; i<=M; i++)
66 for (
int j=1; j<=N; j++)
67 for (
int k=1; k<=K; k++)
76Fortran_Array3D<T> operator+(
const Fortran_Array3D<T> &A,
const Fortran_Array3D<T> &B)
82 if (B.dim1() != m || B.dim2() != n || B.dim3() != p )
83 return Fortran_Array3D<T>();
87 Fortran_Array3D<T> C(m,n,p);
89 for (
int i=1; i<=m; i++)
90 for (
int j=1; j<=n; j++)
91 for (
int k=1; k<=p; k++)
92 C(i,j,k) = A(i,j,k)+ B(i,j,k);
100Fortran_Array3D<T> operator-(
const Fortran_Array3D<T> &A,
const Fortran_Array3D<T> &B)
106 if (B.dim1() != m || B.dim2() != n || B.dim3() != p )
107 return Fortran_Array3D<T>();
111 Fortran_Array3D<T> C(m,n,p);
113 for (
int i=1; i<=m; i++)
114 for (
int j=1; j<=n; j++)
115 for (
int k=1; k<=p; k++)
116 C(i,j,k) = A(i,j,k)- B(i,j,k);
124Fortran_Array3D<T> operator*(
const Fortran_Array3D<T> &A,
const Fortran_Array3D<T> &B)
130 if (B.dim1() != m || B.dim2() != n || B.dim3() != p )
131 return Fortran_Array3D<T>();
135 Fortran_Array3D<T> C(m,n,p);
137 for (
int i=1; i<=m; i++)
138 for (
int j=1; j<=n; j++)
139 for (
int k=1; k<=p; k++)
140 C(i,j,k) = A(i,j,k)* B(i,j,k);
148Fortran_Array3D<T> operator/(
const Fortran_Array3D<T> &A,
const Fortran_Array3D<T> &B)
154 if (B.dim1() != m || B.dim2() != n || B.dim3() != p )
155 return Fortran_Array3D<T>();
159 Fortran_Array3D<T> C(m,n,p);
161 for (
int i=1; i<=m; i++)
162 for (
int j=1; j<=n; j++)
163 for (
int k=1; k<=p; k++)
164 C(i,j,k) = A(i,j,k)/ B(i,j,k);
172Fortran_Array3D<T>& operator+=(Fortran_Array3D<T> &A,
const Fortran_Array3D<T> &B)
178 if (B.dim1() == m && B.dim2() == n && B.dim3() == p )
180 for (
int i=1; i<=m; i++)
181 for (
int j=1; j<=n; j++)
182 for (
int k=1; k<=p; k++)
183 A(i,j,k) += B(i,j,k);
191Fortran_Array3D<T>& operator-=(Fortran_Array3D<T> &A,
const Fortran_Array3D<T> &B)
197 if (B.dim1() == m && B.dim2() == n && B.dim3() == p )
199 for (
int i=1; i<=m; i++)
200 for (
int j=1; j<=n; j++)
201 for (
int k=1; k<=p; k++)
202 A(i,j,k) -= B(i,j,k);
210Fortran_Array3D<T>& operator*=(Fortran_Array3D<T> &A,
const Fortran_Array3D<T> &B)
216 if (B.dim1() == m && B.dim2() == n && B.dim3() == p )
218 for (
int i=1; i<=m; i++)
219 for (
int j=1; j<=n; j++)
220 for (
int k=1; k<=p; k++)
221 A(i,j,k) *= B(i,j,k);
229Fortran_Array3D<T>& operator/=(Fortran_Array3D<T> &A,
const Fortran_Array3D<T> &B)
235 if (B.dim1() == m && B.dim2() == n && B.dim3() == p )
237 for (
int i=1; i<=m; i++)
238 for (
int j=1; j<=n; j++)
239 for (
int k=1; k<=p; k++)
240 A(i,j,k) /= B(i,j,k);
Definition tnt_array1d.h:36