42 template<
class T,
unsigned Dim,
class Mesh,
class Centering >
49 MyField(f), SliceDim(0),ScaleX(scaleX), ScaleY(scaleY),
50 MinSizeX(minSizeX), MinSizeY(minSizeY), Parent(parent)
55 dummy = GDL_OpenDisplay(X11FB);
56 GDL_SetColormap(RAINBOW_BLUE,NULL);
58 "This FieldView constructor only works for a 2D Field!!");
61 sliceDomain[0] =
MyField.getDomain()[0];
62 sliceDomain[1] =
MyField.getDomain()[1];
73 template<
class T,
unsigned Dim,
class Mesh,
class Centering >
81 MyField(f), SliceDim(sliceDim),ScaleX(scaleX), ScaleY(scaleY),
82 MinSizeX(minSizeX), MinSizeY(minSizeY), Parent(parent)
87 dummy = GDL_OpenDisplay(X11FB);
88 GDL_SetColormap(RAINBOW_BLUE,NULL);
90 "Invalid slice dimension specified in FieldView constructor!!");
92 "This FieldView constructor only works for a 3D Field!!");
97 sliceDomain[0] =
MyField.getDomain()[ix];
98 sliceDomain[1] =
MyField.getDomain()[iy];
108 template<
class T,
unsigned Dim,
class Mesh,
class Centering >
122 template<
class T,
unsigned Dim,
class Mesh,
class Centering >
138 template<
class T,
unsigned Dim,
class Mesh,
class Centering >
145 update_3D_data(slice);
155 template<
class T,
unsigned Dim,
class Mesh,
class Centering >
163 int domainY = MyField.getLayout().getDomain()[1].length();
164 for(
int j = 0 ; j < SizeY ; j++) {
165 for(
int i = 0 ; i < SizeX ; i++) {
166 Data[icount++] = liter.offset(MapX[i],domainY-MapY[j]-1);
171 r = GDL_Display_double(Data, SizeX, SizeY);
178 template<
class T,
unsigned Dim,
class Mesh,
class Centering >
190 for (local = MyField.
begin_if(); local != MyField.
end_if(); ++local) {
201 LFI msgval(lp,lo,la);
212 int numVnodes = MyField.getLayout().size_iv() +
213 MyField.getLayout().size_rdv();
214 for (
int remaining = numVnodes; remaining>0; --remaining) {
222 T rhs_compressed_data;
223 LFI rhs(rhs_compressed_data);
225 rhs.getMessage(*mess);
228 LFI lhs(MyLField->getP(), localBlock, MyLField->getAllocated());
240 template<
class T,
unsigned Dim,
class Mesh,
class Centering >
246 Inform testmsg(
"FieldView");
248 "FieldView::update_3D_data is only valid for a 3D Field!!");
252 const Index& sl = MyField.getDomain()[SliceDim];
254 ERRORMSG(
"FieldView: bad slice choice of "<< slice <<
" in dim ");
260 sliceDomain[SliceDim] =
Index(slice,slice);
266 for (local = MyField.
begin_if(); local != MyField.
end_if(); ++local) {
287 LFI msgval(lp,intersection,la);
312 int numVnodes = MyField.getLayout().size_iv() +
313 MyField.getLayout().size_rdv();
314 for (
int remaining = numVnodes; remaining>0; --remaining) {
322 T rhs_compressed_data;
323 LFI rhs(rhs_compressed_data);
325 rhs.getMessage(*mess);
327 unsigned ix = SliceDim < 1 ? 1 : 0;
328 unsigned iy = SliceDim < 2 ? 2 : 1;
332 if(rhs.size(SliceDim) > 0) {
333 int f0 = localBlock[ix].first();
334 int f1 = localBlock[iy].first();
335 int n0 = localBlock[ix].length();
336 int n1 = localBlock[iy].length();
342 for (
int i1=0; i1<n1; ++i1)
343 for (
int i0=0; i0<n0; ++i0) {
345 liter.
offset(f0+i0,f1+i1) = *rhs;
358 template<
class T,
unsigned Dim,
class Mesh,
class Centering >
367 int domainX, domainY;
371 domainX = MyField.getLayout().getDomain()[0].length();
372 domainY = MyField.getLayout().getDomain()[1].length();
375 ix = SliceDim < 1 ? 1 : 0;
376 iy = SliceDim < 2 ? 2 : 1;
377 domainX = MyField.getLayout().getDomain()[ix].length();
378 domainY = MyField.getLayout().getDomain()[iy].length();
381 ERRORMSG(
"FieldView: bad dimension " <<
Dim <<
" for FieldView mapping");
387 while(SizeX < MinSizeX) {
389 SizeX = ScaleX * domainX;
392 while(SizeY < MinSizeY) {
394 SizeY = ScaleY * domainY;
397 MapX =
new int[SizeX];
398 MapY =
new int[SizeY];
399 Data =
new T[SizeX*SizeY];
402 for( i = 0 ; i < domainX ; i++) {
403 for( j = 0 ; j < ScaleX ; j++) {
408 for( i = 0 ; i < domainY ; i++) {
409 for( j = 0 ; j < ScaleY ; j++) {
void void_apply_map(int &r)
ac_id_larray::iterator iterator_if
void update_3D_data(unsigned slice)
const NDIndex< Dim > & getOwned() const
Message & getMessage(Message &m)
FieldView(Field< T, Dim, Mesh, Centering > &f, unsigned scaleX=4, unsigned scaleY=4, unsigned minSizeX=200, unsigned minSizeY=200, unsigned parent=0)
void Uncompress(bool fill_domain=true)
int next_tag(int t, int s=1000)
const iterator & begin() const
unsigned int length() const
const NDIndex< Dim > & getAllocated() const
LField< T, 2U > * MyLField
NDIndex< Dim > intersect(const NDIndex< Dim > &) const
void putMessage(Message &m, const T &t)
Message * receive_block(int &node, int &tag)
static Communicate * Comm
bool send(Message *, int node, int tag, bool delmsg=true)
Inform & endl(Inform &inf)
Field< T, Dim, Mesh, Centering > & MyField