00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef CH_FARRAYBOX_H
00029 #define CH_FARRAYBOX_H
00030
00031
00032
00033
00034
00035 #ifndef WRAPPER
00036 #include <iostream>
00037
00038
00039 #include "Box.H"
00040 #include "BaseFab.H"
00041 #endif
00042
00043 #include "REAL.H"
00044 #include "SPACE.H"
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 class FArrayBox
00070 : public BaseFab<Real>
00071 {
00072
00073
00074 public:
00075
00077
00079
00082 FArrayBox ();
00083
00084
00085
00086
00087
00088
00089 FArrayBox (const Box& b, int ncomp);
00090 void define(const Box& b, int ncomp) {resize(b, ncomp);}
00091
00093
00096 explicit FArrayBox (std::istream& is);
00097
00099
00102 virtual ~FArrayBox ();
00103
00105
00106
00107
00108
00109
00110
00111
00112 virtual Real norm (int p=2,
00113 int comp=0,
00114 int numcomp=1) const;
00115
00116
00117
00118
00119
00120
00121 virtual Real norm (const Box& subbox,
00122 int p=2,
00123 int comp=0,
00124 int numcomp=1) const;
00125
00131 virtual Real sumPow(const Box& subbox,
00132 int p=2,
00133 int comp=0,
00134 int numcomp=1) const;
00135
00137
00139
00142 Real min (int comp = 0) const;
00143
00145
00150 Real min (const Box& subbox,
00151 int comp = 0) const;
00152
00154
00157 Real max (int comp = 0) const;
00158
00160
00165 Real max (const Box& subbox,
00166 int comp = 0) const;
00167
00169
00172 IntVect minIndex (int comp = 0) const;
00173
00174
00175
00176
00177 IntVect minIndex (const Box& subbox,
00178 int comp = 0) const;
00180
00183 IntVect maxIndex (int comp = 0) const;
00184
00185
00186
00187
00188
00189 IntVect maxIndex (const Box& subbox,
00190 int comp = 0) const;
00191
00193
00195
00201 int maskLT (BaseFab<int>& mask,
00202 Real val,
00203 int comp = 0) const;
00204
00206
00213 int maskLE (BaseFab<int>& mask,
00214 Real val,
00215 int comp = 0) const;
00217
00223 int maskEQ (BaseFab<int>& mask,
00224 Real val,
00225 int comp = 0) const;
00227
00233 int maskGT (BaseFab<int>& mask,
00234 Real val,
00235 int comp = 0) const;
00236
00238
00245 int maskGE (BaseFab<int>& mask,
00246 Real val,
00247 int comp = 0) const;
00248
00249
00251
00253
00257 void abs ();
00258
00260
00265 void abs (int comp,
00266 int numcomp=1);
00267
00269
00274 void abs (const Box& subbox,
00275 int comp = 0,
00276 int numcomp=1);
00277
00279
00282 Real sum (int comp,
00283 int numcomp = 1) const;
00284
00285
00286
00287
00288
00289 Real sum (const Box& subbox,
00290 int comp,
00291 int numcomp = 1) const;
00292
00294
00298 FArrayBox& invert (Real v);
00300
00305 FArrayBox& invert (Real v,
00306 const Box& subbox,
00307 int comp=0,
00308 int numcomp=1);
00310
00315 FArrayBox& invert (Real v,
00316 int comp,
00317 int numcomp=1);
00318
00319
00320
00322
00327 FArrayBox& negate (const Box& subbox,
00328 int comp=0,
00329 int numcomp=1);
00331
00336 FArrayBox& negate (int comp,
00337 int numcomp=1);
00339
00344 FArrayBox& negate ();
00345
00347
00352 FArrayBox& plus (Real r,
00353 const Box& b,
00354 int comp=0,
00355 int numcomp=1);
00356
00358
00363 FArrayBox& plus (Real r,
00364 int comp,
00365 int numcomp=1);
00366
00367
00369
00373 FArrayBox& operator+= (Real r);
00374
00376
00382 FArrayBox& operator+= (const FArrayBox& f);
00383
00385
00391 FArrayBox& plus (const FArrayBox& src);
00392
00394
00398 FArrayBox& plus (Real r);
00399 FArrayBox& plus_real (Real r) {return this->plus(r);}
00401
00407 FArrayBox& plus (const FArrayBox& src, const Real& scale);
00409
00414 FArrayBox& plus (const FArrayBox& src, const Real& scale,
00415 int srccomp,
00416 int destcomp,
00417 int numcomp=1);
00418
00419
00420
00421
00422
00423
00424
00425
00426 FArrayBox& plus (const FArrayBox& src,
00427 int srccomp,
00428 int destcomp,
00429 int numcomp=1);
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439 FArrayBox& plus (const FArrayBox& src,
00440 const Box& subbox,
00441 int srccomp,
00442 int destcomp,
00443 int numcomp=1);
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457 FArrayBox& plus (const FArrayBox& src,
00458 const Box& srcbox,
00459 const Box& destbox,
00460 int srccomp,
00461 int destcomp,
00462 int numcomp=1);
00463
00465
00469 FArrayBox& operator-= (Real r);
00470
00472
00478 FArrayBox& operator-= (const FArrayBox& f);
00479
00481
00487 FArrayBox& minus (const FArrayBox& src);
00488
00489
00490
00491
00492
00493
00494
00495
00496 FArrayBox& minus (const FArrayBox& src,
00497 int srccomp,
00498 int destcomp,
00499 int numcomp=1);
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509 FArrayBox& minus (const FArrayBox& src,
00510 const Box& subbox,
00511 int srccomp,
00512 int destcomp,
00513 int numcomp=1);
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527 FArrayBox& minus (const FArrayBox& src,
00528 const Box& srcbox,
00529 const Box& destbox,
00530 int srccomp,
00531 int destcomp,
00532 int numcomp=1);
00533
00535
00538 FArrayBox& operator*= (Real r);
00539
00541
00544 FArrayBox& mult (Real r);
00545
00547
00552 FArrayBox& mult (Real r,
00553 int comp,
00554 int numcomp=1);
00555
00557
00562 FArrayBox& mult (Real r,
00563 const Box& b,
00564 int comp=0,
00565 int numcomp=1);
00566
00568
00574 FArrayBox& operator*= (const FArrayBox& f);
00575
00577
00583 FArrayBox& mult (const FArrayBox& src);
00584
00585
00586
00587
00588
00589
00590
00591
00592 FArrayBox& mult (const FArrayBox& src,
00593 int srccomp,
00594 int destcomp,
00595 int numcomp=1);
00596
00597
00598
00599
00600
00601
00602
00603
00604
00605 FArrayBox& mult (const FArrayBox& src,
00606 const Box& subbox,
00607 int srccomp,
00608 int destcomp,
00609 int numcomp=1);
00610
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622
00623 FArrayBox& mult (const FArrayBox& src,
00624 const Box& srcbox,
00625 const Box& destbox,
00626 int srccomp,
00627 int destcomp,
00628 int numcomp=1);
00629
00631
00634 FArrayBox& operator/= (Real r);
00635
00637
00640 FArrayBox& divide (Real r);
00641
00643
00647 FArrayBox& divide (Real r,
00648 int comp,
00649 int numcomp=1);
00650
00652
00657 FArrayBox& divide (Real r,
00658 const Box& b,
00659 int comp=0,
00660 int numcomp=1);
00661
00663
00669 FArrayBox& operator/= (const FArrayBox& src);
00670
00672
00678 FArrayBox& divide (const FArrayBox& src);
00679
00680
00681
00682
00683
00684
00685
00686
00687 FArrayBox& divide (const FArrayBox& src,
00688 int srccomp,
00689 int destcomp,
00690 int numcomp=1);
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700 FArrayBox& divide (const FArrayBox& src,
00701 const Box& subbox,
00702 int srccomp,
00703 int destcomp,
00704 int numcomp=1);
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718 FArrayBox& divide (const FArrayBox& src,
00719 const Box& srcbox,
00720 const Box& destbox,
00721 int srccomp,
00722 int destcomp,
00723 int numcomp=1);
00724
00725 Real get(const IntVect& iv, int comp) const { return this->operator()(iv, comp);}
00726 void set(const IntVect& iv, int comp, Real val) { this->operator()(iv, comp) = val;}
00727
00728 protected:
00729
00730 virtual void performCopy (const BaseFab<Real>& src,
00731 const Box& srcbox,
00732 int srccomp,
00733 const Box& destbox,
00734 int destcomp,
00735 int numcomp);
00736
00737 private:
00738
00739
00740
00741 FArrayBox (const FArrayBox&);
00742 FArrayBox& operator= (const FArrayBox&);
00743 };
00744
00745
00746 #endif