00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _REDUCTIONOPS_H_
00012 #define _REDUCTIONOPS_H_
00013
00014 #include "BoxLayoutData.H"
00015 #include "FArrayBox.H"
00016 #include "FluxBox.H"
00017
00018 #include "NamespaceHeader.H"
00019
00020
00022
00028 class SumOp : public LDOperator<FArrayBox>
00029 {
00030 public:
00031 Real scale;
00032 Vector<int> m_summingDir;
00033 SumOp();
00034
00035
00036 SumOp(int a_summingDir);
00037
00038
00039 SumOp(const Vector<int>& a_summingDir);
00040
00041 virtual void linearOut(const FArrayBox& arg, void* buf, const Box& R,
00042 const Interval& comps) const;
00043
00044 virtual void linearIn(FArrayBox& arg, void* buf, const Box& R,
00045 const Interval& comps) const;
00046 void op(FArrayBox& dest,
00047 const Box& RegionFrom,
00048 const Interval& Cdest,
00049 const Box& RegionTo,
00050 const FArrayBox& src,
00051 const Interval& Csrc) const;
00052
00053 };
00054
00055
00056
00057
00058
00059
00060
00061
00062 #if 0
00063 class FaceSumOp : public LDOperator<FluxBox>
00064 {
00065 public:
00066 Real scale;
00067 int m_summingDir;
00068 FaceSumOp();
00069
00070 FaceSumOp(int a_summingDir);
00071
00072 virtual void linearOut(const FluxBox& arg, void* buf, const Box& R,
00073 const Interval& comps) const;
00074
00075 virtual void linearIn(FluxBox& arg, void* buf, const Box& R,
00076 const Interval& comps) const;
00077 void op(FluxBox& dest,
00078 const Box& RegionFrom,
00079 const Interval& Cdest,
00080 const Box& RegionTo,
00081 const FluxBox& src,
00082 const Interval& Csrc) const;
00083
00084 };
00085
00086 #endif
00087
00089
00095 class SpreadingOp : public LDOperator<FArrayBox>
00096 {
00097 public:
00098 Real scale;
00099 Vector<int> m_spreadingDir;
00100 SpreadingOp();
00101
00102
00103 SpreadingOp(int a_spreadingDir);
00104
00105 SpreadingOp(const Vector<int>& a_spreadingDir);
00106
00107 virtual void linearIn(FArrayBox& arg, void* buf, const Box& R,
00108 const Interval& comps) const;
00109 void op(FArrayBox& dest,
00110 const Box& RegionFrom,
00111 const Interval& Cdest,
00112 const Box& RegionTo,
00113 const FArrayBox& src,
00114 const Interval& Csrc) const;
00115
00116
00117 void applyOp(FArrayBox& dest,
00118 const Box& RegionFrom,
00119 const Interval& Cdest,
00120 const Box& RegionTo,
00121 const FArrayBox& src,
00122 const Interval& Csrc,
00123 Real a_scale) const;
00124
00125 };
00126
00127
00129
00135 class FaceSpreadingOp : public LDOperator<FluxBox>
00136 {
00137 public:
00138 Real scale;
00139 Vector<int> m_spreadingDir;
00140 FaceSpreadingOp();
00141
00142
00143 FaceSpreadingOp(int a_spreadingDir);
00144
00145
00146 FaceSpreadingOp(const Vector<int>& a_spreadingDir);
00147
00148 virtual void linearIn(FluxBox& arg, void* buf, const Box& R,
00149 const Interval& comps) const;
00150 void op(FluxBox& dest,
00151 const Box& RegionFrom,
00152 const Interval& Cdest,
00153 const Box& RegionTo,
00154 const FluxBox& src,
00155 const Interval& Csrc) const;
00156
00157
00158 void applyOp(FluxBox& dest,
00159 const Box& RegionFrom,
00160 const Interval& Cdest,
00161 const Box& RegionTo,
00162 const FluxBox& src,
00163 const Interval& Csrc,
00164 Real a_scale) const;
00165
00166 };
00167
00168
00169
00170
00171
00172
00173 #include "NamespaceFooter.H"
00174
00175 #endif