Skip to content

File initialconditionstype.h

File List > code_source > cosmolattice > include > CosmoInterface > initializers > initialconditionstype.h

Go to the documentation of this file

#ifndef COSMOINTERFACE_INITIALIZERS_INITIALCONDITIONSTYPE_H
#define COSMOINTERFACE_INITIALIZERS_INITIALCONDITIONSTYPE_H

/*  This file is part of CosmoLattice, available at www.cosmolattice.net .
   Copyright Daniel G. Figueroa, Adrien Florio, Francisco Torrenti and Wessel Valkenburg.
   Released under the MIT license, see LICENSE.md. */

// File info: Main contributor(s):  Adrien Florio, Year: 2025

#include "TempLat/util/exception.h"

namespace TempLat {


    MakeException(NotAnICType);

    namespace  InitialConditionsType {
        enum class S {Default, RandomWithMatter, DefectsNetwork, DefectsWhiteNoise, Homogeneous};
        enum class U1 {Default, RandomWithMatter, PlaneWaves, PlaneWavesZeroB, BunchDavisTransverseU1, DefectsNetwork, DefectsWhiteNoise};

        std::istream& operator>>(std::istream& in, InitialConditionsType::S& ICType){
            std::string tmp;
            in>>tmp;
            if(tmp=="Default"||tmp=="0") ICType=InitialConditionsType::S::Default;
            else if(tmp=="RandomWithMatter"||tmp=="1") ICType=InitialConditionsType::S::RandomWithMatter;
            else if(tmp=="DefectsNetwork"||tmp=="2") ICType=InitialConditionsType::S::DefectsNetwork;
            else if(tmp=="DefectsWhiteNoise"||tmp=="3") ICType=InitialConditionsType::S::DefectsWhiteNoise;
            else if(tmp=="Homogeneous"||tmp=="4") ICType=InitialConditionsType::S::Homogeneous;
            else if(tmp.empty()){}
            else throw(NotAnICType(tmp +" is not a valid initial condition for scalar singlet, abort."));
            return in;
        }

        std::istream& operator>>(std::istream& in, InitialConditionsType::U1& ICType){
            std::string tmp;
            in>>tmp;
            if(tmp=="Default"||tmp=="0") ICType=InitialConditionsType::U1::Default;
            else if(tmp=="RandomWithMatter"||tmp=="1") ICType=InitialConditionsType::U1::RandomWithMatter;
            else if(tmp=="PlaneWaves"||tmp=="2") ICType=InitialConditionsType::U1::PlaneWaves;
            else if(tmp=="PlaneWavesZeroB"||tmp=="3") ICType=InitialConditionsType::U1::PlaneWavesZeroB;
            else if(tmp=="BunchDavisTransverseU1"||tmp=="4") ICType=InitialConditionsType::U1::BunchDavisTransverseU1;
            else if(tmp=="DefectsNetwork"||tmp=="5") ICType=InitialConditionsType::U1::DefectsNetwork;
            else if(tmp=="DefectsWhiteNoise"||tmp=="6") ICType=InitialConditionsType::U1::DefectsWhiteNoise;
            else if(tmp.empty()){}
            else throw(NotAnICType(tmp +" is not a valid initial condition for U(1), abort."));
            return in;
        }

        std::ostream& operator<<(std::ostream& out, const InitialConditionsType::S& ICType){
            if(ICType == InitialConditionsType::S::Default) return out << "Default";
            else if(ICType == InitialConditionsType::S::RandomWithMatter) return out << "RandomWithMatter";
            else if(ICType == InitialConditionsType::S::DefectsNetwork) return out << "DefectsNetwork";
            else if(ICType == InitialConditionsType::S::DefectsWhiteNoise) return out << "DefectsWhiteNoise";
            else if(ICType == InitialConditionsType::S::Homogeneous) return out << "Homogeneous";
            return out;
        }

        std::ostream& operator<<(std::ostream& out, const InitialConditionsType::U1& ICType){
            if(ICType == InitialConditionsType::U1::Default) return out << "Default";
            else if(ICType == InitialConditionsType::U1::RandomWithMatter) return out << "RandomWithMatter";
            else if(ICType == InitialConditionsType::U1::PlaneWaves) return out << "PlaneWaves";
            else if(ICType == InitialConditionsType::U1::PlaneWavesZeroB) return out << "PlaneWavesZeroB";
            else if(ICType == InitialConditionsType::U1::BunchDavisTransverseU1) return out << "BunchDavisTransverseU1";
            else if(ICType == InitialConditionsType::U1::DefectsNetwork) return out << "DefectsNetwork";
            else if(ICType == InitialConditionsType::U1::DefectsWhiteNoise) return out << "DefectsWhiteNoise";
            return out;
        }

        std::string to_string(const InitialConditionsType::S& ICType){
            if(ICType == InitialConditionsType::S::Default) return "Default";
            else if(ICType == InitialConditionsType::S::RandomWithMatter) return "RandomWithMatter";
            else if(ICType == InitialConditionsType::S::DefectsNetwork) return "DefectsNetwork";
            else if(ICType == InitialConditionsType::S::DefectsWhiteNoise) return "DefectsWhiteNoise";
            else if(ICType == InitialConditionsType::S::Homogeneous) return "Homogeneous";
            else return "";
        }

        std::string to_string(const InitialConditionsType::U1& ICType){
            if(ICType == InitialConditionsType::U1::Default) return "Default";
            else if(ICType == InitialConditionsType::U1::RandomWithMatter) return "RandomWithMatter";
            else if(ICType == InitialConditionsType::U1::PlaneWavesZeroB) return "PlaneWavesZeroB";
            else if(ICType == InitialConditionsType::U1::PlaneWaves) return "PlaneWaves";
            else if(ICType == InitialConditionsType::U1::BunchDavisTransverseU1) return "BunchDavisTransverseU1";
            else if(ICType == InitialConditionsType::U1::DefectsNetwork) return "DefectsNetwork";
            else if(ICType == InitialConditionsType::U1::DefectsWhiteNoise) return "DefectsWhiteNoise";
            else return "";
        }
    }
} /* TempLat */

#endif