/* -*- c++ -*- ----------------------------------------------------------
   LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
   https://www.lammps.org/, Sandia National Laboratories
   LAMMPS development team: developers@lammps.org

   Copyright (2003) Sandia Corporation.  Under the terms of Contract
   DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
   certain rights in this software.  This software is distributed under
   the GNU General Public License.

   See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */

#ifndef MANIFOLD_THYLAKOID_SHARED_H
#define MANIFOLD_THYLAKOID_SHARED_H

#include "lmptype.h"
#include <vector>

namespace LAMMPS_NS {

namespace user_manifold {

  // The thylakoid is composed of many parts
  struct thyla_part {
    enum thyla_types {
      THYLA_TYPE_PLANE,
      THYLA_TYPE_SPHERE,
      THYLA_TYPE_CYL,
      THYLA_TYPE_CYL_TO_PLANE
    };

    thyla_part(int type, double *args, double xlo, double ylo, double zlo, double xhi, double yhi,
               double zhi);
    thyla_part() : type(-1), x0(-1337), y0(-1337), z0(-1337) {}
    ~thyla_part() = default;

    double g(const double *x);
    void n(const double *x, double *n);

    int type;
    double params[7];
    double tol;
    int maxit;

    int err_flag;
    tagint a_id;

    double xlo, xhi, ylo, yhi, zlo, zhi;
    double x0, y0, z0;

  };    // struct thyla_part

  struct thyla_part_geom {
    thyla_part_geom() : pt(3), lo(3), hi(3) {}
    std::vector<double> pt, lo, hi;

    // Function for mirroring thyla_geoms:
    enum DIRS { DIR_X, DIR_Y, DIR_Z };
    static void mirror(unsigned int axis, thyla_part_geom *m, const thyla_part_geom *o);

  };    // struct thyla_part_geom

}    // namespace user_manifold

}    // namespace LAMMPS_NS

#endif    // MANIFOLD_THYLAKOID_SHARED_H
