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
00141 Real dotProduct(const FArrayBox& fab2) const;
00142
00144
00146
00149 Real min (int comp = 0) const;
00150
00152
00157 Real min (const Box& subbox,
00158 int comp = 0) const;
00159
00161
00164 Real max (int comp = 0) const;
00165
00167
00172 Real max (const Box& subbox,
00173 int comp = 0) const;
00174
00176
00179 IntVect minIndex (int comp = 0) const;
00180
00181
00182
00183
00184 IntVect minIndex (const Box& subbox,
00185 int comp = 0) const;
00187
00190 IntVect maxIndex (int comp = 0) const;
00191
00192
00193
00194
00195
00196 IntVect maxIndex (const Box& subbox,
00197 int comp = 0) const;
00198
00200
00202
00208 int maskLT (BaseFab<int>& mask,
00209 Real val,
00210 int comp = 0) const;
00211
00213
00220 int maskLE (BaseFab<int>& mask,
00221 Real val,
00222 int comp = 0) const;
00224
00230 int maskEQ (BaseFab<int>& mask,
00231 Real val,
00232 int comp = 0) const;
00234
00240 int maskGT (BaseFab<int>& mask,
00241 Real val,
00242 int comp = 0) const;
00243
00245
00252 int maskGE (BaseFab<int>& mask,
00253 Real val,
00254 int comp = 0) const;
00255
00256
00258
00260
00264 void abs ();
00265
00267
00272 void abs (int comp,
00273 int numcomp=1);
00274
00276
00281 void abs (const Box& subbox,
00282 int comp = 0,
00283 int numcomp=1);
00284
00286
00289 Real sum (int comp,
00290 int numcomp = 1) const;
00291
00292
00293
00294
00295
00296 Real sum (const Box& subbox,
00297 int comp,
00298 int numcomp = 1) const;
00299
00301
00305 FArrayBox& invert (Real v);
00307
00312 FArrayBox& invert (Real v,
00313 const Box& subbox,
00314 int comp=0,
00315 int numcomp=1);
00317
00322 FArrayBox& invert (Real v,
00323 int comp,
00324 int numcomp=1);
00325
00326
00327
00329
00334 FArrayBox& negate (const Box& subbox,
00335 int comp=0,
00336 int numcomp=1);
00338
00343 FArrayBox& negate (int comp,
00344 int numcomp=1);
00346
00351 FArrayBox& negate ();
00352
00354
00359 FArrayBox& plus (Real r,
00360 const Box& b,
00361 int comp=0,
00362 int numcomp=1);
00363
00365
00370 FArrayBox& plus (Real r,
00371 int comp,
00372 int numcomp=1);
00373
00374
00376
00380 FArrayBox& operator+= (Real r);
00381
00383
00389 FArrayBox& operator+= (const FArrayBox& f);
00390
00392
00398 FArrayBox& plus (const FArrayBox& src);
00399
00401
00405 FArrayBox& plus (Real r);
00406 FArrayBox& plus_real (Real r) {return this->plus(r);}
00408
00414 FArrayBox& plus (const FArrayBox& src, const Real& scale);
00416
00421 FArrayBox& plus (const FArrayBox& src, const Real& scale,
00422 int srccomp,
00423 int destcomp,
00424 int numcomp=1);
00425
00426
00427
00428
00429
00430
00431
00432
00433 FArrayBox& plus (const FArrayBox& src,
00434 int srccomp,
00435 int destcomp,
00436 int numcomp=1);
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446 FArrayBox& plus (const FArrayBox& src,
00447 const Box& subbox,
00448 int srccomp,
00449 int destcomp,
00450 int numcomp=1);
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464 FArrayBox& plus (const FArrayBox& src,
00465 const Box& srcbox,
00466 const Box& destbox,
00467 int srccomp,
00468 int destcomp,
00469 int numcomp=1);
00470
00472
00476 FArrayBox& operator-= (Real r);
00477
00479
00485 FArrayBox& operator-= (const FArrayBox& f);
00486
00488
00494 FArrayBox& minus (const FArrayBox& src);
00495
00496
00497
00498
00499
00500
00501
00502
00503 FArrayBox& minus (const FArrayBox& src,
00504 int srccomp,
00505 int destcomp,
00506 int numcomp=1);
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516 FArrayBox& minus (const FArrayBox& src,
00517 const Box& subbox,
00518 int srccomp,
00519 int destcomp,
00520 int numcomp=1);
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534 FArrayBox& minus (const FArrayBox& src,
00535 const Box& srcbox,
00536 const Box& destbox,
00537 int srccomp,
00538 int destcomp,
00539 int numcomp=1);
00540
00542
00545 FArrayBox& operator*= (Real r);
00546
00548
00551 FArrayBox& mult (Real r);
00552
00554
00559 FArrayBox& mult (Real r,
00560 int comp,
00561 int numcomp=1);
00562
00564
00569 FArrayBox& mult (Real r,
00570 const Box& b,
00571 int comp=0,
00572 int numcomp=1);
00573
00575
00581 FArrayBox& operator*= (const FArrayBox& f);
00582
00584
00590 FArrayBox& mult (const FArrayBox& src);
00591
00592
00593
00594
00595
00596
00597
00598
00599 FArrayBox& mult (const FArrayBox& src,
00600 int srccomp,
00601 int destcomp,
00602 int numcomp=1);
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612 FArrayBox& mult (const FArrayBox& src,
00613 const Box& subbox,
00614 int srccomp,
00615 int destcomp,
00616 int numcomp=1);
00617
00618
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630 FArrayBox& mult (const FArrayBox& src,
00631 const Box& srcbox,
00632 const Box& destbox,
00633 int srccomp,
00634 int destcomp,
00635 int numcomp=1);
00636
00638
00641 FArrayBox& operator/= (Real r);
00642
00644
00647 FArrayBox& divide (Real r);
00648
00650
00654 FArrayBox& divide (Real r,
00655 int comp,
00656 int numcomp=1);
00657
00659
00664 FArrayBox& divide (Real r,
00665 const Box& b,
00666 int comp=0,
00667 int numcomp=1);
00668
00670
00676 FArrayBox& operator/= (const FArrayBox& src);
00677
00679
00685 FArrayBox& divide (const FArrayBox& src);
00686
00687
00688
00689
00690
00691
00692
00693
00694 FArrayBox& divide (const FArrayBox& src,
00695 int srccomp,
00696 int destcomp,
00697 int numcomp=1);
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707 FArrayBox& divide (const FArrayBox& src,
00708 const Box& subbox,
00709 int srccomp,
00710 int destcomp,
00711 int numcomp=1);
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725 FArrayBox& divide (const FArrayBox& src,
00726 const Box& srcbox,
00727 const Box& destbox,
00728 int srccomp,
00729 int destcomp,
00730 int numcomp=1);
00731
00732 Real get(const IntVect& iv, int comp) const { return this->operator()(iv, comp);}
00733 void set(const IntVect& iv, int comp, Real val) { this->operator()(iv, comp) = val;}
00734
00735 protected:
00736
00737 virtual void performCopy (const BaseFab<Real>& src,
00738 const Box& srcbox,
00739 int srccomp,
00740 const Box& destbox,
00741 int destcomp,
00742 int numcomp);
00743
00744 private:
00745
00746
00747
00748 FArrayBox (const FArrayBox&);
00749 FArrayBox& operator= (const FArrayBox&);
00750 };
00751
00752
00753 #endif