Commit 28ea93f7 authored by Giovanni La Mura's avatar Giovanni La Mura
Browse files

Propagate configuration index control in clu_subs and sph_subs

parent fa46f1a3
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -734,8 +734,8 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf
      }
      if (nsh % 2 == 0) cid->c2->dc0[ici] = exdc;
      dme(
	  cid->c4->li, last_configuration, npnt, npntts, vkarg, exdc, exri,
	  cid->c1, cid->c2, jer, lcalc, cid->arg
	  cid->c4->li, i132, npnt, npntts, vkarg, exdc, exri,
	  cid->c1, cid->c2, jer, lcalc, cid->arg, last_configuration
	  );
      if (jer != 0) {
	sprintf(virtual_line, "  STOP IN DME\n");
@@ -816,16 +816,18 @@ int cluster_jxi488_cycle(int jxi488, ScattererConfiguration *sconf, GeometryConf
    sprintf(virtual_line, "     SPHERES; LMX=LI\n");
    output->append_line(virtual_line);
  }
  last_configuration = 0;
  for (int i170 = 1; i170 <= nsph; i170++) {
    if (cid->c1->iog[i170 - 1] >= i170) {
      int i = i170 - 1;
      last_configuration++;
      double albeds = cid->c1->sscs[i] / cid->c1->sexs[i];
      cid->c1->sqscs[i] *= cid->sqsfi;
      cid->c1->sqabs[i] *= cid->sqsfi;
      cid->c1->sqexs[i] *= cid->sqsfi;
      sprintf(virtual_line, "     SPHERE %2d\n", i170);
      output->append_line(virtual_line);
      if (cid->c1->nshl[i] != 1) {
      if (cid->c1->nshl[last_configuration - 1] != 1) {
	sprintf(virtual_line, "  SIZE=%15.7lE\n", cid->c2->vsz[i]);
	output->append_line(virtual_line);
      } else { // label 162
+2 −1
Original line number Diff line number Diff line
@@ -112,10 +112,11 @@ void diel(int npntmo, int ns, int i, int ic, double vk, C1 *c1, C2 *c2);
 * \param jer: `int &` Reference to integer error code variable.
 * \param lcalc: `int &` Reference to integer variable recording the maximum expansion order accounted for.
 * \param arg: `complex double &`
 * \param last_conf: `int` Last sphere configuration (used by CLUSTER)
 */
void dme(
	 int li, int i, int npnt, int npntts, double vk, double exdc, double exri,
	 C1 *c1, C2 *c2, int &jer, int &lcalc, dcomplex &arg
	 C1 *c1, C2 *c2, int &jer, int &lcalc, dcomplex &arg, int last_conf=0
);

/*! \brief Bessel function calculation control parameters.
+6 −3
Original line number Diff line number Diff line
@@ -2439,16 +2439,19 @@ void scr2(
void str(ScattererConfiguration *sconf, C1 *c1, C1_AddOns *c1ao, C3 *c3, C4 *c4, C6 *c6) {
  dcomplex *ylm;
  const double pi = acos(-1.0);
  int last_configuration;
  c3->gcs = 0.0;
  double gcss = 0.0;
  last_configuration = 0;
  for (int i18 = 1; i18 <= c4->nsph; i18++) {
    int iogi = c1->iog[i18 - 1];
    if (iogi >= i18) {
      gcss = pi * c1->ros[i18 - 1] * c1->ros[i18 - 1];
      last_configuration++;
      gcss = pi * c1->ros[last_configuration - 1] * c1->ros[last_configuration - 1];
      c1->gcsv[i18 - 1] = gcss;
      int nsh = c1->nshl[i18 - 1];
      int nsh = c1->nshl[last_configuration - 1];
      for (int j16 = 1; j16 <= nsh; j16++) {
	c1->rc[i18 - 1][j16 - 1] = sconf->get_rcf(i18 - 1, j16 - 1) * c1->ros[i18 - 1];
	c1->rc[last_configuration - 1][j16 - 1] = sconf->get_rcf(last_configuration - 1, j16 - 1) * c1->ros[last_configuration - 1];
      } // j16 loop
    }
    c3->gcs += gcss;
+5 −18
Original line number Diff line number Diff line
@@ -197,20 +197,6 @@ double cg1(int lmpml, int mu, int l, int m) {
  return result;
}

/*
#ifdef USE_TARGET_OFFLOAD
#pragma omp begin declare target device_type(any)
#endif
dcomplex dconjg(dcomplex z) {
  double zreal = real(z);
  double zimag = imag(z);
  return (zreal - zimag * I);
}
#ifdef USE_TARGET_OFFLOAD
#pragma omp end declare target
#endif
*/

void diel(int npntmo, int ns, int i, int ic, double vk, C1 *c1, C2 *c2) {
  const double dif = c1->rc[i - 1][ns] - c1->rc[i - 1][ns - 1];
  const double half_step = 0.5 * dif / npntmo;
@@ -232,7 +218,7 @@ void diel(int npntmo, int ns, int i, int ic, double vk, C1 *c1, C2 *c2) {

void dme(
	 int li, int i, int npnt, int npntts, double vk, double exdc, double exri,
	 C1 *c1, C2 *c2, int &jer, int &lcalc, dcomplex &arg
	 C1 *c1, C2 *c2, int &jer, int &lcalc, dcomplex &arg, int last_conf
) {
  const int lipo = li + 1;
  const int lipt = li + 2;
@@ -243,13 +229,14 @@ void dme(
  dcomplex dfbi, dfb, dfn, ccna, ccnb, ccnc, ccnd;
  dcomplex y1, dy1, y2, dy2, arin, cri;
  const dcomplex uim = 1.0 * I;
  int sph_index = (last_conf == 0) ? i : last_conf;
  jer = 0;
  int nstp = npnt - 1;
  int nstpts = npntts - 1;
  double sz = vk * c1->ros[i - 1];
  double sz = vk * c1->ros[sph_index - 1];
  c2->vsz[i - 1] = sz;
  double vkr1 = vk * c1->rc[i - 1][0];
  int nsh = c1->nshl[i - 1];
  double vkr1 = vk * c1->rc[sph_index - 1][0];
  int nsh = c1->nshl[sph_index - 1];
  c2->vkt[i - 1] = csqrt(c2->dc0[0]);
  arg = vkr1 * c2->vkt[i - 1];
  arin = arg;