Program Listing for File System.h

Return to documentation for file (include/classes/System.h)

//       _______.  ______  __       ___      .__   __. .___________. __  ___   ___  //
//      /       | /      ||  |     /   \     |  \ |  | |           ||  | \  \ /  /  //
//     |   (----`|  ,----'|  |    /  ^  \    |   \|  | `---|  |----`|  |  \  V  /   //
//      \   \    |  |     |  |   /  /_\  \   |  . `  |     |  |     |  |   >   <    //
//  .----)   |   |  `----.|  |  /  _____  \  |  |\   |     |  |     |  |  /  .  \   //
//  |_______/     \______||__| /__/     \__\ |__| \__|     |__|     |__| /__/ \__\  //
//                                                                                  //
//  Originally developed by D. Pizzocri & T. Barani                                 //
//                                                                                  //
//  Version: 2.2.1                                                                    //
//  Year: 2025                                                                      //
//  Authors: D. Pizzocri, G. Zullo.                                                 //
//                                                                                  //

#ifndef SYSTEM_H
#define SYSTEM_H

#include "Constants.h"
#include "ErrorMessages.h"
#include "Gas.h"
#include "InputVariable.h"
#include "Matrix.h"
#include "SciantixArray.h"
#include "SciantixVariable.h"
#include <cmath>
#include <vector>

class System : virtual public Material
{
  protected:
    std::string reference;
    std::string name;

    double              yield;
    double              radius_in_lattice;
    double              volume_in_lattice;
    double              diffusivity;
    double              bubble_diffusivity;
    double              henry_constant;
    double              resolution_rate;
    double              trapping_rate;
    double              nucleation_rate;
    double              pore_nucleation_rate;
    std::vector<double> modes;
    double              production_rate;
    bool                restructured_matrix;

    Gas    gas;
    Matrix matrix;

  public:
    void setRestructuredMatrix(bool y);

    bool getRestructuredMatrix();

    void setYield(double y);

    double getYield();

    void setRadiusInLattice(double r);
    double getRadiusInLattice();

    void setGas(Gas g);

    Gas getGas();

    std::string getGasName();
    void setMatrix(Matrix m);

    Matrix getMatrix();

    std::string getMatrixName();

    double getVolumeInLattice();
    void setVolumeInLattice(double v);

    void setBubbleDiffusivity(int input_value, SciantixArray<SciantixVariable>& sciantix_variable,
                              SciantixArray<SciantixVariable>& history_variable,
                              SciantixArray<Matrix>&           matrices);

    double getBubbleDiffusivity();

    void setHeliumDiffusivity(int input_value, SciantixArray<SciantixVariable>& history_variable);

    double getHeliumDiffusivity();

    void setFissionGasDiffusivity(int                              input_value,
                                  SciantixArray<SciantixVariable>& sciantix_variable,
                                  SciantixArray<SciantixVariable>& history_variable,
                                  SciantixArray<InputVariable>&    scaling_factors);

    double getFissionGasDiffusivity();

    void setHenryConstant(double h);

    double getHenryConstant();

    void setResolutionRate(int input_value, SciantixArray<SciantixVariable>& sciantix_variable,
                           SciantixArray<SciantixVariable>& history_variable,
                           SciantixArray<InputVariable>&    scaling_factors,
                           SciantixArray<Matrix>&           matrices);

    double getResolutionRate();

    void setTrappingRate(int input_value, SciantixArray<SciantixVariable>& sciantix_variable,
                         SciantixArray<InputVariable>& scaling_factors);

    double getTrappingRate();

    void setNucleationRate(int input_value, SciantixArray<SciantixVariable>& history_variable,
                           SciantixArray<InputVariable>& scaling_factors);

    double getNucleationRate();

    void setPoreNucleationRate(double t);

    double getPoreNucleationRate();

    void setProductionRate(int input_value, SciantixArray<SciantixVariable>& history_variable,
                           SciantixArray<InputVariable>&    input_variable,
                           SciantixArray<SciantixVariable>& sciantix_variable,
                           SciantixArray<InputVariable>&    scaling_factors);

    double getProductionRate();
    System() {}
    ~System() {}
};

#endif  // SYSTEM_H