Commit a7e298a5 authored by Giovanni La Mura's avatar Giovanni La Mura
Browse files

Implement ClusterIterationData::get_size() function

parent 11765c49
Loading
Loading
Loading
Loading
+63 −0
Original line number Diff line number Diff line
@@ -2101,6 +2101,69 @@ ClusterIterationData::~ClusterIterationData() {
  delete[] cmul;
}

long ClusterIterationData::get_size(GeometryConfiguration *gconf, ScattererConfiguration *sconf) {
  /*
  ParticleDescriptor *c1; double *gaps; double **tqse; dcomplex **tqspe; double **tqss; dcomplex **tqsps;
  double ****zpv; double **gapm; dcomplex **gappm; double *argi; double *args; double **gap; dcomplex **gapp;
  double **tqce; dcomplex **tqcpe; double **tqcs; dcomplex **tqcps; double *duk; double **cextlr; double **cext;
  double **cmullr; double **cmul; double *gapv; double *tqev; double *tqsv; double *u; double *us; double *un;
  double *uns; double *up; double *ups; double *unmp; double *unsmp; double *upmp; double *upsmp;
  dcomplex *am_vector; dcomplex **am;
  37 root pointers

  double scan; double cfmp; double sfmp; double cfsp; double sfsp; double sqsfi; double vk; double wn; double xip;
  double accuracygoal;
  10 double values
  
  dcomplex arg;
  1 dcomplex value

  int number_of_scales; int xiblock; int firstxi; int lastxi; int proc_device; int refinemode; int maxrefiters;
  7 int values
  
  bool is_first_scale;
  1 boolean value

  tqse = new double*[2]; tqss = new double*[2]; tqce = new double*[2]; tqcs = new double*[2];
  tqspe = new dcomplex*[2]; tqsps = new dcomplex*[2]; tqcpe = new dcomplex*[2]; tqcps = new dcomplex*[2];
  gapp = new dcomplex*[3]; gappm = new dcomplex*[3]; gap = new double*[3]; gapm = new double*[3];
  cextlr = new double*[4]; cext = new double*[4]; cmullr = new double*[4]; cmul = new double*[4];
  zpv[] = new double*[6 * LM]; am = new dcomplex*[ndit];
  (44 + 6 * LM + NDIT) long values

  tqse[] = new double[2 * c1->nsph](); tqss[] = new double[2 * c1->nsph](); tqce[] = new double[6]();
  tqcs[] = new double[6](); gaps = new double[c1->nsph](); tqev = new double[3](); tqsv = new double[3]();
  gap[] = new double[6](); gapm[] = new double[6](); gapv = new double[3](); u = new double[3]();
  us = new double[3](); un = new double[3](); uns = new double[3](); up = new double[3]();
  ups = new double[3](); unmp = new double[3](); unsmp = new double[3](); upmp = new double[3]();
  upsmp = new double[3](); argi = new double[1](); args = new double[1](); duk = new double[3]();
  cextlr[] = new double[16](); cext[] = new double[16](); cmullr[] = new double[16]();
  cmul[] = new double[16](); zpv[][] = new double[12 * lm];
  (99 + 5 * NSPH + 12 * LM) double values

  tqspe[] = new dcomplex[2 * c1->nsph](); tqsps[] = new dcomplex[2 * c1->nsph]();
  tqcpe[] = new dcomplex[6](); tqcps[] = new dcomplex[6](); gapp[] = new dcomplex[6]();
  gappm[] = new dcomplex[6](); am_vector = new dcomplex[ndit * ndit]();
  (24 + 4 * NSPH + NDIT * NDIT) dcomplex values

  */
  const int nsph = gconf->number_of_spheres;
  const int nlim = gconf->li * (gconf->li + 2);
  const int ndi = nsph * nlim;
  const np_int ndit = 2 * ndi;
  const int lm = (gconf->li > gconf->le) ? gconf->li : gconf->le;
  long result = sizeof(long) * 37;
  result += sizeof(double) * 10;
  result += sizeof(dcomplex);
  result += sizeof(int) * 7;
  result += sizeof(bool);
  result += sizeof(long) * (44 + 6 * lm + ndit);
  result += sizeof(double) * (99 + 5 * nsph + 12 * lm);
  result += sizeof(dcomplex) * (24 + 4 * nsph + ndit * ndit);
  result += ParticleDescriptor::get_size(gconf, sconf);
  return result;
}

int ClusterIterationData::update_orders(double **rcf, int inner_order, int outer_order) {
  int result = 0;
  int old_lm = c1->lm;
+8 −0
Original line number Diff line number Diff line
@@ -409,6 +409,14 @@ public:
   * \return descriptor_type: `string` The descriptor type name.
   */
  virtual std::string get_descriptor_type() { return "base descriptor"; }

  /*! \brief Compute the memory requirements of an instance.
   *
   * \param gconf: `GeometryConfiguration *` Pointer to a `GeometryConfiguration` object.
   * \param sconf: `ScattererConfiguration *` Pointer to a `ScattererConfiguration` object.
   * \return result: `long` Estimated size in bytes.
   */
  static long get_size(GeometryConfiguration *gconf, ScattererConfiguration *sconf) { return 0; }
};

/*! \brief The data structure describing a particle model made by a cluster of spheres.
+8 −0
Original line number Diff line number Diff line
@@ -181,6 +181,14 @@ public:
   */
  ~ClusterIterationData();

  /*! \brief Compute the memory requirements of an instance.
   *
   * \param gconf: `GeometryConfiguration *` Pointer to a `GeometryConfiguration` object.
   * \param sconf: `ScattererConfiguration *` Pointer to a `ScattererConfiguration` object.
   * \return result: `long` Estimated size in bytes.
   */
  static long get_size(GeometryConfiguration *gconf, ScattererConfiguration *sconf);

  /*! \brief Update field expansion orders.
   *
   * \param rcf: `double **` Matrix of sphere fractional radii.