Added the framework and some basic tests for a validation suite which automatically tests against pynucastro results
103 lines
4.4 KiB
Python
103 lines
4.4 KiB
Python
from gridfire.policy import MainSequencePolicy, NetworkPolicy
|
|
from gridfire.engine import DynamicEngine, GraphEngine
|
|
from gridfire.type import NetIn
|
|
|
|
from fourdst.composition import Composition
|
|
|
|
from testsuite import TestSuite
|
|
from utils import init_netIn, init_composition, years_to_seconds
|
|
|
|
from enum import Enum
|
|
|
|
class SolarLikeStar_QSE_Suite(TestSuite):
|
|
def __init__(self):
|
|
initialComposition : Composition = init_composition()
|
|
super().__init__(
|
|
name="SolarLikeStar_QSE",
|
|
description="GridFire simulation of a roughly solar like star over 10Gyr with QSE enabled.",
|
|
temp=1.5e7,
|
|
density=1.5e2,
|
|
tMax=years_to_seconds(1e10),
|
|
composition=initialComposition,
|
|
notes="Thermodynamically Static, MultiscalePartitioning Engine View"
|
|
)
|
|
|
|
def __call__(self):
|
|
policy : MainSequencePolicy = MainSequencePolicy(self.composition)
|
|
engine : DynamicEngine = policy.construct()
|
|
netIn : NetIn = init_netIn(self.temperature, self.density, self.tMax, self.composition)
|
|
self.evolve(engine, netIn)
|
|
|
|
class MetalEnhancedSolarLikeStar_QSE_Suite(TestSuite):
|
|
def __init__(self):
|
|
initialComposition : Composition = init_composition(ZZs=1)
|
|
super().__init__(
|
|
name="MetalEnhancedSolarLikeStar_QSE",
|
|
description="GridFire simulation of a star with solar core temp and density but enhanced by 1 dex in Z.",
|
|
temp=0.8 * 1.5e7,
|
|
density=1.5e2,
|
|
tMax=years_to_seconds(1e10),
|
|
composition=initialComposition,
|
|
notes="Thermodynamically Static, MultiscalePartitioning Engine View, Z enhanced by 1 dex, temperature reduced to 80% of solar core"
|
|
)
|
|
|
|
def __call__(self):
|
|
policy : MainSequencePolicy = MainSequencePolicy(self.composition)
|
|
engine : GraphEngine = policy.construct()
|
|
netIn : NetIn = init_netIn(self.temperature, self.density, self.tMax, self.composition)
|
|
self.evolve(engine, netIn)
|
|
class MetalDepletedSolarLikeStar_QSE_Suite(TestSuite):
|
|
def __init__(self):
|
|
initialComposition : Composition = init_composition(ZZs=-1)
|
|
super().__init__(
|
|
name="MetalDepletedSolarLikeStar_QSE",
|
|
description="GridFire simulation of a star with solar core temp and density but depleted by 1 dex in Z.",
|
|
temp=1.2 * 1.5e7,
|
|
density=1.5e2,
|
|
tMax=years_to_seconds(1e10),
|
|
composition=initialComposition,
|
|
notes="Thermodynamically Static, MultiscalePartitioning Engine View, Z depleted by 1 dex, temperature increased to 120% of solar core"
|
|
)
|
|
|
|
def __call__(self):
|
|
policy : MainSequencePolicy = MainSequencePolicy(self.composition)
|
|
engine : GraphEngine = policy.construct()
|
|
netIn : NetIn = init_netIn(self.temperature, self.density, self.tMax, self.composition)
|
|
self.evolve(engine, netIn)
|
|
|
|
class SolarLikeStar_No_QSE_Suite(TestSuite):
|
|
def __init__(self):
|
|
initialComposition : Composition = init_composition()
|
|
super().__init__(
|
|
name="SolarLikeStar_No_QSE",
|
|
description="GridFire simulation of a roughly solar like star over 10Gyr with QSE disabled.",
|
|
temp=1.5e7,
|
|
density=1.5e2,
|
|
tMax=years_to_seconds(1e10),
|
|
composition=initialComposition,
|
|
notes="Thermodynamically Static, No MultiscalePartitioning Engine View"
|
|
)
|
|
|
|
def __call__(self):
|
|
engine : GraphEngine = GraphEngine(self.composition, 3)
|
|
netIn : NetIn = init_netIn(self.temperature, self.density, self.tMax, self.composition)
|
|
self.evolve(engine, netIn)
|
|
|
|
|
|
class ValidationSuites(Enum):
|
|
SolarLikeStar_QSE = SolarLikeStar_QSE_Suite
|
|
SolarLikeStar_No_QSE = SolarLikeStar_No_QSE_Suite
|
|
MetalDepletedSolarLikeStar_QSE = MetalDepletedSolarLikeStar_QSE_Suite
|
|
MetalEnhancedSolarLikeStar_QSE = MetalEnhancedSolarLikeStar_QSE_Suite
|
|
|
|
if __name__ == "__main__":
|
|
import argparse
|
|
parser = argparse.ArgumentParser(description="Run some subset of the GridFire validation suite.")
|
|
parser.add_argument('--suite', type=str, choices=[suite.name for suite in ValidationSuites], nargs="+", help="The validation suite to run.")
|
|
args = parser.parse_args()
|
|
|
|
for suite_name in args.suite:
|
|
suite = ValidationSuites[suite_name]
|
|
instance : TestSuite = suite.value()
|
|
instance()
|