field.cpp

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C++ 代码 · 共 2,240 行 · 第 1/5 页

CPP
2,240
字号
  return rtn;
}
// @(#)f_floor.C        1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 



field floor(const field& f){
  size_t l = f.root->length;
  field rtn(l);
  for (register i=0; i<l; i++) rtn.root->data[i] = floor(f.root->data[i]);
  return rtn;
}
// @(#)f_fmod_df.C      1.2   Release Date: 2/19/93



field fmod(double a, const field& b){
  size_t l = b.Length();
  field rtn(l);
  double *rp = rtn;
  const double *bp = b;
  for (register i=0; i<l; i++) rp[i] = fmod(a, bp[i]);
  return rtn;
}
// @(#)f_fmod_fd.C      1.2   Release Date: 2/19/93



field fmod(const field& a, double b){
  size_t l = a.Length();
  field rtn(l);
  double *rp = rtn;
  const double *ap = a;
  for (register i=0; i<l; i++) rp[i] = fmod(ap[i], b);
  return rtn;
}
// @(#)f_fmod_ff.C      1.1   Release Date: 2/19/93



field fmod(const field& a, const field& b){
  size_t l = a.root->length;
  assert(b.root->length == l);
  field rtn(l);
  for (register i=0; i<l; i++) 
    rtn.root->data[i] = fmod(a.root->data[i], b.root->data[i]);
  return rtn;
}
// @(#)f_frexp.C        1.2   Release Date: 2/19/93



field frexp(const field& a, ifield& b){
  size_t l = a.Length();
  field rtn(l);
  b = ifield(l);
  double *rp = rtn;
  const double *ap = a;
  INT *bp = b;
  for (register i=0; i<l; i++) {
      int d;
      rp[i] = frexp(ap[i], &d);
      bp[i] = d;
  }
  return rtn;
}
// @(#)f_ftoi.C 1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


field::field(const ifield& f) :
  ref_flag(0)
{
  if (!f.root){
    root = NULL;
  }else{
    root = new(f.root->length) __field_node(f.root->length);
    for (register i=0; i<root->length; i++)
      root->data[i] = (int)f.root->data[i];
  }
}
// @(#)f_gather_1.C     1.1   Release Date: 2/19/93


field field::Gather(const ifield& ia) const {
  size_t l = ia.root->length;
  field rtn(l);
  for (register i=0; i<l; i++) rtn.root->data[i] = root->data[ia[i]];
  return rtn;
}
// @(#)f_gather_2.C     1.2   Release Date: 2/19/93


field field::Gather(size_t start, size_t end, size_t stride) const {
  assert(end < root->length);
  field rtn((end-start)/stride + 1);
  double *rp = rtn;
  const double* This = *this;
  for (register i=start, j=0; i<end; i+=stride,j++) rp[j] = This[i];
  return rtn;
}
// @(#)f_ge_df.C        1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator>=(double b, const field& a){
  size_t l = a.root->length;
  ifield rtn(l);
  for (register i=0; i<l; i++) rtn.root->data[i] = (b >= a.root->data[i]);
  return rtn;
}
// @(#)f_ge_fd.C        1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator>=(const field& a, double b){
  size_t l = a.root->length;
  ifield rtn(l);
  for (register i=0; i<l; i++) rtn.root->data[i] = (a.root->data[i] >= b);
  return rtn;
}
// @(#)f_ge_ff.C        1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator>=(const field& a, const field& b){
  size_t l = a.root->length;
  assert(l == b.root->length);
  ifield rtn(l);
  for (register i=0; i<l; i++) 
    rtn.root->data[i] = (a.root->data[i] >= b.root->data[i]);
  return rtn;
}
// @(#)f_gt_df.C        1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator>(double b, const field& a){
  size_t l = a.root->length;
  ifield rtn(l);
  for (register i=0; i<l; i++) rtn.root->data[i] = (b > a.root->data[i]);
  return rtn;
}
// @(#)f_gt_fd.C        1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator>(const field& a, double b){
  size_t l = a.root->length;
  ifield rtn(l);
  for (register i=0; i<l; i++) rtn.root->data[i] = (a.root->data[i] > b);
  return rtn;
}
// @(#)f_gt_ff.C        1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator>(const field& a, const field& b){
  size_t l = a.root->length;
  assert(l == b.root->length);
  ifield rtn(l);
  for (register i=0; i<l; i++) 
    rtn.root->data[i] = (a.root->data[i] > b.root->data[i]);
  return rtn;
}
// @(#)f_io.C   1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


// I/O

size_t fread(field& f, FILE* d){
  int length;
  size_t rtn;
  f.Free();
  rtn = fread((char*)&length, sizeof(size_t), 1, d);
  f.root = new(length) __field_node(length);
  rtn += fread((char*)f.root->data, sizeof(double), length, d);
  f.ref_flag = 0;
  return (rtn == f.root->length+1? 1 : 0);
}

size_t fwrite(const field& f, FILE* d){
  size_t rtn;
  if (f.Length() != 0){
    rtn = fwrite((char*)&f.root->length, sizeof(size_t), 1, d);
    rtn += fwrite((char*)&(f.root->data[0]), sizeof(double), f.root->length, d);
    return (rtn == f.root->length+1? 1 : 0);
  }else{
    const size_t ZERO = 0;
    rtn = fwrite((char*)&ZERO, sizeof(size_t), 1, d);
    return (rtn == 1? 1 : 0);
  }
}
// @(#)f_ldexp.C        1.2   Release Date: 2/19/93



field ldexp(const field& a, const ifield& b){
  size_t l = a.Length();
  assert(l == b.Length());
  field rtn(l);
  double *rp = rtn;
  const double *ap = a;
  const INT *bp = b;
  for (register i=0; i<l; i++) rp[i] = ldexp(ap[i], bp[i]);
  return rtn;
}
// @(#)f_le_df.C        1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator<=(double b, const field& a){
  size_t l = a.root->length;
  ifield rtn(l);
  for (register i=0; i<l; i++) rtn.root->data[i] = (b <= a.root->data[i]);
  return rtn;
}
// @(#)f_le_fd.C        1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator<=(const field& a, double b){
  size_t l = a.root->length;
  ifield rtn(l);
  for (register i=0; i<l; i++) rtn.root->data[i] = (a.root->data[i] <= b);
  return rtn;
}
// @(#)f_le_ff.C        1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator<=(const field& a, const field& b){
  size_t l = a.root->length;
  assert(l == b.root->length);
  ifield rtn(l);
  for (register i=0; i<l; i++) 
    rtn.root->data[i] = (a.root->data[i] <= b.root->data[i]);
  return rtn;
}
// @(#)f_leq_df.C       1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator==(double b, const field& a){
  size_t l = a.root->length;
  ifield rtn(l);
  for (register i=0; i<l; i++) rtn.root->data[i] = (b == a.root->data[i]);
  return rtn;
}
// @(#)f_leq_fd.C       1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator==(const field& a, double b){
  size_t l = a.root->length;
  ifield rtn(l);
  for (register i=0; i<l; i++) rtn.root->data[i] = (a.root->data[i] == b);
  return rtn;
}
// @(#)f_leq_ff.C       1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator==(const field& a, const field& b){
  size_t l = a.root->length;
  assert(l == b.root->length);
  ifield rtn(l);
  for (register i=0; i<l; i++) 
    rtn.root->data[i] = (a.root->data[i] == b.root->data[i]);
  return rtn;
}
// @(#)f_lne_df.C       1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator!=(double b, const field& a){
  size_t l = a.root->length;
  ifield rtn(l);
  for (register i=0; i<l; i++) rtn.root->data[i] = (b != a.root->data[i]);
  return rtn;
}
// @(#)f_lne_fd.C       1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator!=(const field& a, double b){
  size_t l = a.root->length;
  ifield rtn(l);
  for (register i=0; i<l; i++) rtn.root->data[i] = (a.root->data[i] != b);
  return rtn;
}
// @(#)f_lne_ff.C       1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator!=(const field& a, const field& b){
  size_t l = a.root->length;
  assert(l == b.root->length);
  ifield rtn(l);
  for (register i=0; i<l; i++) 
    rtn.root->data[i] = (a.root->data[i] != b.root->data[i]);
  return rtn;
}
// @(#)f_log.C  1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 



field log(const field& f){
  size_t l = f.root->length;
  field rtn(l);
  for (register i=0; i<l; i++) rtn.root->data[i] = log(f.root->data[i]);
  return rtn;
}
// @(#)f_log10.C        1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 



field log10(const field& f){
  size_t l = f.root->length;
  field rtn(l);
  for (register i=0; i<l; i++) rtn.root->data[i] = log10(f.root->data[i]);
  return rtn;
}
// @(#)f_lt_df.C        1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator<(double b, const field& a){
  size_t l = a.root->length;
  ifield rtn(l);
  for (register i=0; i<l; i++) rtn.root->data[i] = (b < a.root->data[i]);
  return rtn;
}
// @(#)f_lt_fd.C        1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator<(const field& a, double b){
  size_t l = a.root->length;
  ifield rtn(l);
  for (register i=0; i<l; i++) rtn.root->data[i] = (a.root->data[i] < b);
  return rtn;
}
// @(#)f_lt_ff.C        1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


ifield operator<(const field& a, const field& b){
  size_t l = a.root->length;
  assert(l == b.root->length);
  ifield rtn(l);
  for (register i=0; i<l; i++) 
    rtn.root->data[i] = (a.root->data[i] < b.root->data[i]);
  return rtn;
}
// @(#)f_max_df.C       1.1   Release Date: 2/19/93



field max(double b, const field& a){
  size_t l = a.Length();
  field rtn(l);
  for (register i=0; i<l; i++)
    rtn.root->data[i] = (a.root->data[i] > b? a.root->data[i] : b);
  return rtn;
}
// @(#)f_max_f.C        1.1   Release Date: 2/19/93
//       Author:  Kent G. Budge, 
//                Computational Physics Research and Development (1431)
//                Sandia National Laboratories 


double max(const field& f){
  size_t l = f.root->length;
  double retval = f.root->data[l-1];
  for (register i=0; i<l-1; i++) 
    retval = (retval > f.root->data[i]? retval : f.root->data[i]);
  return retval;
} 
// @(#)f_max_fd.C       1.1   Release Date: 2/19/93



field max(const field& a, double b){
  size_t l = a.Length();
  field rtn(l);
  for (register i=0; i<l; i++)
    rtn.root->data[i] = (a.root->data[i] > b? a.root->data[i] : b);
  return rtn;
}
// @(#)f_max_ff.C       1.1   Release Date: 2/19/93



field max(const field& a, const field& b){
  size_t l = a.Length();
  assert(l == b.root->length);
  field rtn(l);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?