[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/AetherModel/Aether/develop/include/logfile.h [Back]  [Original]

// Copyright 2020, the Aether Development Team (see doc/dev_team.md for members)
// Full license can be found in License.md

#ifndef INCLUDE_LOGFILE_H_
#define INCLUDE_LOGFILE_H_

/**************************************************************
 *
 * logfile.h:
 *
 *    Write the logfile
 *
 **************************************************************/

#include "aether.h"
#include 
#include 

/**
 * The class Satellite is used to track the satellites
 * Given any time, the user can obtain the geographic location of the satellite
 *
 * ASSUMPTION : The satellite csv layout is the same as the following
 * year   mon   day   hr    min   sec   lon      lat      alt   x   y    z    vx     vy     vz
 * (int)  (int) (int) (int) (int) (int) (degree) (degree) (km) (km) (km) (km) (km/s) (km/s) (km/s)
 */

class Satellite {

 public:

  /**
   * \brief Initialize the satellite class
   *        The name of the satellite is not allowed to have any characters which can
   *        terminate the read of a string including white space' ', endline'\n', and '\t'
   *        Different satellites must have different names (not only input file names)
   * \param csv_in The path to the satellite csv file
   * \param log_name_in The path to write the satellite log file
   * \param sat_header The first line of the log file
   * \param dt_in The time gate
   */
  Satellite(const std::string &csv_in,
            const std::string &log_name_in,
            const std::string &sat_header,
            const precision_t dt_in);

  /**
   * \brief Get the position of the satellite at given time
   * \param lons_out Vector to stroe the longitude of the location
   * \param lats_out Vector to store the latitude of the location
   * \param alts_out Vector to store the altitude of the location
   * \param time_in Time to determine location
   */
  void get_position(std::vector &lons_out,
                    std::vector &lats_out,
                    std::vector &alts_out,
                    const double time_in) const;

  // Get the name of the satellite
  std::string get_name() const;

  // Get the time gate of the satellite
  precision_t get_dt() const;

  // Write the content to the satellite log
  void write_log(const std::vector &iCurrent,
                 const std::vector &variables);

  // DEBUG
  void print();

 private:

  // The name of the satellite
  std::string name;
  // The time gate
  precision_t dt;
  // The file name to write log
  std::string log_name;
  // The time should always be ascending
  // The type for time is double rather than precision_t
  std::vector timereals;
  // The position of the satellite at those times
  std::vector lons;
  std::vector lats;
  std::vector alts;
  // The rest columns are not used (i.e. from x to vz)
};

/**
 * The class to maintain the logfile
 */

class Logfile {

 public:

  /**
   * \brief Initialize the Logfile.
   *    The logfile will output all indicies and specified neutrals and ions
   *    every dt time.
   */
  Logfile(Indices &indices, int64_t iLog);

  /**
   * \brief Close the file stream if not append
   */
  ~Logfile();

  /**
   * \brief Check the time gate, and write the values into log file
   *    if needed
   */
  bool write_logfile(Indices &indices,
                     Neutrals &neutrals,
                     Ions &ions,
                     Grid &gGrid,
                     Times &time);

 private:

  // The name of logfile
  std::string logfileName;
  // The file stream to write
  std::ofstream logfilestream;
  // The specified variables
  std::vector species;
  // The satellites as a vector
  std::vector satellites;
  // The time gate
  precision_t dt;
  // Whether append or rewrite
  bool doAppend;

  // A randomly chosen point for test
  std::vector lla {2, 2, 2};
};

#endif  // INCLUDE_LOGFILE_H_

Web Proxy Viewer  |  New URL  |  Original Page