key_names.f90 Source File


Source Code

!-----------------------------------------------------------------------------------------------------------------------------------
! This file is part of ReMKiT1D.
!
! ReMKiT1D is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as 
! published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
!
! ReMKiT1D is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
!
! You should have received a copy of the GNU General Public License along with ReMKiT1D. If not, see <https://www.gnu.org/licenses/>. 
!
! Copyright 2023 United Kingdom Atomic Energy Authority (stefan.mijin@ukaea.uk)
!-----------------------------------------------------------------------------------------------------------------------------------
module key_names
    !! author: Stefan Mijin 
    !!
    !! Provides centralized housing for JSON and other key names

    ! Grid key names
    character(len=*) ,parameter :: keyXGrid = "xGrid" 
    character(len=*) ,parameter :: keyVGrid = "vGrid" 
    character(len=*) ,parameter :: keyCellWidths = "cellWidths" 
    character(len=*) ,parameter :: keyCellCoords = "cellCentreCoords" 
    character(len=*) ,parameter :: keyPeriodic = "isPeriodic" 
    character(len=*) ,parameter :: keyBuildFromWidths = "constructFromWidths" 
    character(len=*) ,parameter :: keyMaxL = "maxL"
    character(len=*) ,parameter :: keyMaxM = "maxM"
    character(len=*) ,parameter :: keyFaceJacobians = "faceJacobians" 
    character(len=*) ,parameter :: keyLengthInMeters = "isLengthInMeters" 

    ! Variable keys
    character(len=*) ,parameter :: keyVariables = "variables" 
    character(len=*) ,parameter :: keyDerivedVars = "derivedVariables" 
    character(len=*) ,parameter :: keyImplicitVars = "implicitVariables" 
    character(len=*) ,parameter :: keyIsDist = "isDistribution"
    character(len=*) ,parameter :: keyIsScalar = "isScalar"
    character(len=*) ,parameter :: keyIsSingleHarmonic = "isSingleHarmonic"
    character(len=*) ,parameter :: keyIsOnDualGrid = "isOnDualGrid"
    character(len=*) ,parameter :: keyIsStationary = "isStationary"
    character(len=*) ,parameter :: keyInitVals = "initVals"
    character(len=*) ,parameter :: keyPriority = "priority"

    ! Library flags 

    character(len=*) ,parameter :: keyMPI = "MPI" 
    character(len=*) ,parameter :: keyCommData = "commData"
    character(len=*) ,parameter :: keyVarsToBroadcast = "varsToBroadcast"
    character(len=*) ,parameter :: keyHaloVars = "haloExchangeVars"
    character(len=*) ,parameter :: keyScalarsToBroadcast = "scalarVarsToBroadcast"
    character(len=*) ,parameter :: keyScalarsRoots = "scalarBroadcastRoots"
    character(len=*) ,parameter :: keyNumPX = "numProcsX" 
    character(len=*) ,parameter :: keyNumPH = "numProcsH" 
    character(len=*) ,parameter :: keyXHaloWidth = "xHaloWidth" 
    character(len=*) ,parameter :: keyPETSc = "PETSc" 
    character(len=*) ,parameter :: keySolOptions = "solverOptions" 
    character(len=*) ,parameter :: keyMaxSolIters = "maxSolverIters" 
    character(len=*) ,parameter :: keySolRelTol = "solverToleranceRel" 
    character(len=*) ,parameter :: keySolAbsTol = "solverToleranceAbs" 
    character(len=*) ,parameter :: keySolDivTol = "solverToleranceDiv" 
    character(len=*) ,parameter :: keySolKSP = "kspSolverType" 
    character(len=*) ,parameter :: keyHyprePC = "hyprePCType" 
    character(len=*) ,parameter :: keyPETScOpts = "PETScCommandLineOpts" 
    character(len=*) ,parameter :: keyHDF5 = "HDF5"
    character(len=*) ,parameter :: keyOutputVars = "outputVars"
    character(len=*) ,parameter :: keyInputVars = "inputVars" 


    ! Generic keys
    character(len=*) ,parameter :: keyNames = "names" 
    character(len=*) ,parameter :: keyNameSingle = "name" 
    character(len=*) ,parameter :: keyNone = "none"
    character(len=*) ,parameter :: keyFilepath = "filepath"
    character(len=*) ,parameter :: keyActive = "active"
    character(len=*) ,parameter :: keyID = "ID"
    character(len=*) ,parameter :: keyTags = "tags"
    character(len=*) ,parameter :: keyReqVarNames = "requiredVarNames"
    character(len=*) ,parameter :: keyReqVarPowers = "requiredVarPowers"
    character(len=*) ,parameter :: keyMultConst = "multConst"
    character(len=*) ,parameter :: keyType = "type"
    character(len=*) ,parameter :: keyGroupIndices = "groupIndices"
    character(len=*) ,parameter :: keyEvolvedVar = "evolvedVar"
    character(len=*) ,parameter :: keyImplicitVar = "implicitVar"
    character(len=*) ,parameter :: keyMode = "mode"
    character(len=*) ,parameter :: keyFrequency = "frequency"
    character(len=*) ,parameter :: keySave = "save"
    character(len=*) ,parameter :: keyLoad = "load"
    character(len=*) ,parameter :: keyAllTermImpGroups = "allTermsImplicitGroups"
    character(len=*) ,parameter :: keyAllTermGenGroups = "allTermsGeneralGroups"
    character(len=*) ,parameter :: keyImplicitTermGroups = "implicitGroups"
    character(len=*) ,parameter :: keyGeneralTermGroups = "generalGroups"
    character(len=*) ,parameter :: keySpeciesName = "speciesName"
    character(len=*) ,parameter :: keySpeciesNamesPlural = "speciesNames"
    character(len=*) ,parameter :: keyAdditionalColumnVars = "additionalColumnVariables"
    character(len=*) ,parameter :: keyColumnVarPowers = "columnVarPowers"
    character(len=*) ,parameter :: keyMultVar = "multiplierVariable"
    character(len=*) ,parameter :: keyIndex = "index"
    character(len=*) ,parameter :: keyPower = "power"
    character(len=*) ,parameter :: keyFixedMatrix = "fixedMatrix"
    character(len=*) ,parameter :: keyFunctionName = "functionName"
    character(len=*) ,parameter :: keyObjGroups = "objGroups"
    character(len=*) ,parameter :: keyData = "data"
    character(len=*) ,parameter :: keyDims = "dims"
    character(len=*) ,parameter :: keyValues = "values"
    
    ! Rule keys
    character(len=*) ,parameter :: keyDerivRule = "derivationRule" 
    character(len=*) ,parameter :: keyRuleName = "ruleName"

    ! Integrator keys
    character(len=*) ,parameter :: keyIntegrator = "integrator"
    character(len=*) ,parameter :: keyNumImplicitGroups = "numImplicitGroups"
    character(len=*) ,parameter :: keyNumGenGroups = "numGeneralGroups"
    character(len=*) ,parameter :: keyTimestepController = "timestepController"
    character(len=*) ,parameter :: keyRescaleTimestep = "rescaleTimestep"
    character(len=*) ,parameter :: keyUseMaxVal = "useMaxVal"
    character(len=*) ,parameter :: keyBDE = "backwardsEuler"
    character(len=*) ,parameter :: keyRK = "RK"
    character(len=*) ,parameter :: keyOrder = "order"
    character(len=*) ,parameter :: keyNonlinTol = "nonlinTol"
    character(len=*) ,parameter :: keyAbsTol = "absTol"
    character(len=*) ,parameter :: keyConvergenceVars = "convergenceVars"
    character(len=*) ,parameter :: keyMaxNonlinIters = "maxNonlinIters"
    character(len=*) ,parameter :: keyAssociatedPETScGroup = "associatedPETScGroup"
    character(len=*) ,parameter :: keyUse2Norm = "use2Norm"
    character(len=*) ,parameter :: keyInternalStepControl = "internalStepControl"
    character(len=*) ,parameter :: keyStartingNumSteps = "startingNumSteps"
    character(len=*) ,parameter :: keyStepMultiplier = "stepMultiplier"
    character(len=*) ,parameter :: keyMinNumNonlinInters = "minNumNonlinIters"
    character(len=*) ,parameter :: keyStepDecrament = "stepDecrament"
    character(len=*) ,parameter :: keyStepTags = "stepTags"
    character(len=*) ,parameter :: keyIntegratorTags = "integratorTags"
    character(len=*) ,parameter :: keyIntegratorTagSingle = "integratorTag"
    character(len=*) ,parameter :: keyEvolvedModels = "evolvedModels"
    character(len=*) ,parameter :: keyInternalUpdateGroups = "internallyUpdatedGroups"
    character(len=*) ,parameter :: keyInternalUpdateModelData = "internallyUpdateModelData"
    character(len=*) ,parameter :: keyGlobalStepFraction = "globalStepFraction"
    character(len=*) ,parameter :: keyUseInitialInput = "useInitialInput"
    character(len=*) ,parameter :: keyAllowTimeEvolution = "allowTimeEvolution"
    character(len=*) ,parameter :: keyInitialTimestep = "initialTimestep"

    ! Manipulator keys 

    character(len=*) ,parameter :: keyManipulators = "manipulators"
    character(len=*) ,parameter :: keyGroupEvaluator = "groupEvaluator"
    character(len=*) ,parameter :: keyEvaluatedGroup = "evaluatedTermGroup"
    character(len=*) ,parameter :: keyResultVarName = "resultVarName"
    character(len=*) ,parameter :: keyTermEvaluator = "termEvaluator"
    character(len=*) ,parameter :: keyEvaluatedModelNames = "evaluatedModelNames"
    character(len=*) ,parameter :: keyEvaluatedTermNames = "evaluatedTermNames"
    character(len=*) ,parameter :: keyExtractor = "modelboundDataExtractor"
    character(len=*) ,parameter :: keyModelTag = "modelTag"
    character(len=*) ,parameter :: keyModelboundDataName = "modelboundDataName"

    ! General model keys 

    character(len=*) ,parameter :: keyModels = "models"

    ! Custom model keys 

    character(len=*) ,parameter :: keyCustomModel = "customModel"
    character(len=*) ,parameter :: keyTermTags = "termTags"
    character(len=*) ,parameter :: keyVarData = "varData"
    character(len=*) ,parameter :: keyReqRowVarNames = "requiredRowVarNames"
    character(len=*) ,parameter :: keyReqRowVarPowers = "requiredRowVarPowers"
    character(len=*) ,parameter :: keyReqColVarNames = "requiredColVarNames"
    character(len=*) ,parameter :: keyReqColVarPowers = "requiredColVarPowers"
    character(len=*) ,parameter :: keyReqMBRowVarNames = "requiredMBRowVarNames"
    character(len=*) ,parameter :: keyReqMBRowVarPowers = "requiredMBRowVarPowers"
    character(len=*) ,parameter :: keyReqMBColVarNames = "requiredMBColVarNames"
    character(len=*) ,parameter :: keyReqMBColVarPowers = "requiredMBColVarPowers"
    character(len=*) ,parameter :: keyTermType = "termType"
    character(len=*) ,parameter :: keyCustomNormConst = "customNormConst"
    character(len=*) ,parameter :: keyNormNames = "normNames"
    character(len=*) ,parameter :: keyNormPowers = "normPowers"
    character(len=*) ,parameter :: keyTimeSignalData = "timeSignalData"
    character(len=*) ,parameter :: keyStencilData = "stencilData"
    character(len=*) ,parameter :: keyStencilType = "stencilType"
    character(len=*) ,parameter :: keyModelboundData = "modelboundData"
    character(len=*) ,parameter :: keyModelboundDataType = "modelboundDataType"
    character(len=*) ,parameter :: keyTermGenerators = "termGenerators"
    character(len=*) ,parameter :: keySpatialProfile = "spatialProfile"
    character(len=*) ,parameter :: keyHarmonicProfile = "harmonicProfile"
    character(len=*) ,parameter :: keyVelocityProfile = "velocityProfile"
    character(len=*) ,parameter :: keyTimeSignalPeriod = "timeSignalPeriod"
    character(len=*) ,parameter :: keyTimeSignalParams = "timeSignalParams"
    character(len=*) ,parameter :: keyRealTimePeriod = "realTimePeriod"
    character(len=*) ,parameter :: keySkipPattern = "skipPattern"
    character(len=*) ,parameter :: keyMultCopyTermName = "multCopyTermName"

    ! Term generator keys 

    character(len=*) ,parameter :: keyGeneratorTag = "generatorTag"
    
    character(len=*) ,parameter :: keyCRMDensTermGen = "CRMDensityEvolution"
    character(len=*) ,parameter :: keyEvolvedSpeciesIDs = "evolvedSpeciesIDs"
    character(len=*) ,parameter :: keyIncludedTransitionInds = "includedTransitionIndices"

    character(len=*) ,parameter :: keyCRMElEnergyTermGen = "CRMElectronEnergyEvolution"
    character(len=*) ,parameter :: keyElectronEnergyVar = "electronEnergyDensity"

    character(len=*) ,parameter :: keyCRMBoltzTermGen = "CRMFixedBoltzmannCollInt"
    character(len=*) ,parameter :: keyEvolvedHarmonicSingle = "evolvedHarmonic"
    character(len=*) ,parameter :: keyAssociatedVarIndex = "associatedVarIndex"
    character(len=*) ,parameter :: keyFixedEnergyIndices = "fixedEnergyIndices"

    character(len=*) ,parameter :: keyCRMSecElTermGen = "CRMSecondaryElectronTerms"

    character(len=*) ,parameter :: keyCRMVarBoltzTermGen = "CRMVariableBoltzmannCollInt"

    ! Custom modelbound data keys

    !Varlike data
    character(len=*) ,parameter :: keyVarLikeMB = "varlikeData"
    character(len=*) ,parameter :: keyDataNames = "dataNames"
    character(len=*) ,parameter :: keyIsDerivedFromOtherData = "isDerivedFromOtherData"
    character(len=*) ,parameter :: keyDerivationPriority = "derivationPriority"

    !CRM data
    character(len=*) ,parameter :: keyCRMData = "modelboundCRMData"
    character(len=*) ,parameter :: keyElState = "electronStateID"
    character(len=*) ,parameter :: keyInelGrid = "inelasticGridData"
    character(len=*) ,parameter :: keyFixedTransitionEnergies = "fixedTransitionEnergies"
    character(len=*) ,parameter :: keyTransitionTags = "transitionTags"
    character(len=*) ,parameter :: keyTransitions = "transitions"
    character(len=*) ,parameter :: keyIngoingState = "ingoingState"
    character(len=*) ,parameter :: keyIngoingStatePlural = "ingoingStates"
    character(len=*) ,parameter :: keyOutgoingState = "outgoingState"
    character(len=*) ,parameter :: keyOutgoingStatePlural = "outgoingStates"
    character(len=*) ,parameter :: keyRate = "rate"
    character(len=*) ,parameter :: keyFixedEnergyIndex = "fixedEnergyIndex"
    character(len=*) ,parameter :: keyDirectTransitionEnergyIndex = "directTransitionFixedEnergyIndex"
    character(len=*) ,parameter :: keyFixedEnergy = "fixedEnergy"
    character(len=*) ,parameter :: keyTakeMomentumMoment = "takeMomentumMoment"
    character(len=*) ,parameter :: keyDistributionVarName = "distributionVarName"
    character(len=*) ,parameter :: keyTransitionIndex = "transitionIndex"
    character(len=*) ,parameter :: keyDirectTransitionIndex = "directTransitionIndex"
    character(len=*) ,parameter :: keyElectronTemperatureVar = "electronTemperatureVar"
    character(len=*) ,parameter :: keyCrossSectionData = "crossSectionData"
    character(len=*) ,parameter :: keyPresentHarmonics = "presentHarmonics"
    character(len=*) ,parameter :: keyMaxCrossSectionL = "maxCrossSectionL"
    character(len=*) ,parameter :: keyLPrefix = "l="
    character(len=*) ,parameter :: keyDegeneracyRule = "degeneracyRuleName"
    character(len=*) ,parameter :: keyDegeneracyRuleReqVars = "degeneracyRuleReqVars"
    character(len=*) ,parameter :: keyFixedDegenRatio = "fixedDegeneracyRatio"
    character(len=*) ,parameter :: keyCSUpdatePriority = "crossSectionUpdatePriority"
    character(len=*) ,parameter :: keySimpleTransition = "simpleTransition"
    character(len=*) ,parameter :: keyFixedECSTransition = "fixedECSTransition"
    character(len=*) ,parameter :: keyDBTransition = "detailedBalanceTransition"
    character(len=*) ,parameter :: keyDerivedTransition = "derivedTransition"
    character(len=*) ,parameter :: keyMomentumRule = "momentumRateDerivationRule"
    character(len=*) ,parameter :: keyMomentumReqVarNames = "momentumRateDerivationReqVarNames"
    character(len=*) ,parameter :: keyEnergyRule = "energyRateDerivationRule"
    character(len=*) ,parameter :: keyEnergyReqVarNames = "energyRateDerivationReqVarNames"
    character(len=*) ,parameter :: keyJanevRadRecomb = "JanevRadRecomb"
    character(len=*) ,parameter :: keyJanevCollExIon = "JanevCollExIon"
    character(len=*) ,parameter :: keyJanevCollDeexRecomb = "JanevCollDeexRecomb"
    character(len=*) ,parameter :: keyStartHState = "startHState"
    character(len=*) ,parameter :: keyEndHState = "endHState"
    character(len=*) ,parameter :: keyVariableECSTransition = "variableECSTransition"
    character(len=*) ,parameter :: keyCrossSectionDerivations = "crossSectionDerivations"
    character(len=*) ,parameter :: keyCSDerivationHarmonics = "crossSectionDerivationHarmonics"
    character(len=*) ,parameter :: keyEnergyDerivationName = "energyDerivationName"
    character(len=*) ,parameter :: keyEnergyDerivationReqVars = "energyDerivationReqVars"

    ! LBC data

    character(len=*) ,parameter :: keyLBCData = "modelboundLBCData"
    character(len=*) ,parameter :: keyIonCurrentVar = "ionCurrentVarName"
    character(len=*) ,parameter :: keyTotalCurrentVar = "totalCurrentVarName"
    character(len=*) ,parameter :: keyBisTol = "bisectionTolerance"

    ! Stencil template keys 

    character(len=*) ,parameter :: keyInterpolatedVar = "interpolatedVarName"
    character(len=*) ,parameter :: keyDiagonal = "diagonalStencil"
    character(len=*) ,parameter :: keyEvolvedXCells = "evolvedXCells"
    character(len=*) ,parameter :: keyStaggeredDiff = "staggeredDifferenceStencil"
    character(len=*) ,parameter :: keyCentralDiffInterp = "centralDifferenceInterpolated"
    character(len=*) ,parameter :: keyUpwindedDiff = "upwindedDifference"
    character(len=*) ,parameter :: keyIgnoreJacobian = "ignoreJacobian"
    character(len=*) ,parameter :: keyLeftBoundary = "leftBoundary"
    character(len=*) ,parameter :: keyDontExtrapolate = "dontExtrapolate"
    character(len=*) ,parameter :: keyLowerBoundVar = "lowerBoundVar"
    character(len=*) ,parameter :: keyFluxJacVar = "fluxJacVar"
    character(len=*) ,parameter :: keyFixedLowerBound = "fixedLowerBound"
    character(len=*) ,parameter :: keyNoLowerBound = "noLowerBound"
    character(len=*) ,parameter :: keyBoundaryStencil = "boundaryStencil"
    character(len=*) ,parameter :: keyDiffusionStencil = "diffusionStencil"
    character(len=*) ,parameter :: keyDoNotInterpolateD = "doNotInterpolateDiffCoeff"
    character(len=*) ,parameter :: keyEvolvedHarmonics = "evolvedHarmonics"
    character(len=*) ,parameter :: keyEvolvedVCells = "evolvedVCells"
    character(len=*) ,parameter :: keyMomentStencil = "momentStencil"
    character(len=*) ,parameter :: keyMomentHarmonic = "momentHarmonic"
    character(len=*) ,parameter :: keyMomentOrder = "momentOrder"
    character(len=*) ,parameter :: keyKinSpatialDiffStencil = "kineticSpatialDiffStencil"
    character(len=*) ,parameter :: keyRowHarmonic = "rowHarmonic"
    character(len=*) ,parameter :: keyColHarmonic = "colHarmonic"
    character(len=*) ,parameter :: keyDDVStencil = "ddvStencil"
    character(len=*) ,parameter :: keyFixedC = "fixedC"
    character(len=*) ,parameter :: keyFixedInterp = "fixedInterp"
    character(len=*) ,parameter :: keyModelboundC = "modelboundC"
    character(len=*) ,parameter :: keyModelboundInterp = "modelboundInterp"
    character(len=*) ,parameter :: keyCFAtZero = "cfAtZero"
    character(len=*) ,parameter :: keyVDiffStencil = "vDiffusionStencil"
    character(len=*) ,parameter :: keyFixedA = "fixedA"
    character(len=*) ,parameter :: keyModelboundA = "modelboundA"
    character(len=*) ,parameter :: keyADFAtZero = "adfAtZero"
    character(len=*) ,parameter :: keyShkarofskyIJ = "shkarofskyIJStencil"
    character(len=*) ,parameter :: keyJInt = "JIntegral"
    character(len=*) ,parameter :: keyIntegralIndex = "integralIndex"
    character(len=*) ,parameter :: keyFixedBoltzmann = "boltzmannStencil"
    character(len=*) ,parameter :: keyAbsorptionTerm = "absorptionTerm"
    character(len=*) ,parameter :: keyDBTerm = "detailedBalanceTerm"
    character(len=*) ,parameter :: keyScalingLBC = "scalingLogicalBoundaryStencil"
    character(len=*) ,parameter :: keyDecompHarmonics = "includedDecompHarmonics"
    character(len=*) ,parameter :: keyTermMomentStencil = "termMomentStencil"
    character(len=*) ,parameter :: keyTermName = "termName"
    character(len=*) ,parameter :: keyVariableBoltzmann = "variableBoltzmannStencil"
    character(len=*) ,parameter :: keySuperelasticTerm = "superelasticTerm"
    character(len=*) ,parameter :: keyCustomFluid1DStencil = "customFluid1DStencil"
    character(len=*) ,parameter :: keyXStencil = "xStencil"
    character(len=*) ,parameter :: keyColumnVec = "columnVector"
    character(len=*) ,parameter :: keyColumnVarContVars = "columnVarContVars"
    character(len=*) ,parameter :: keyColumnMBDataVars = "columnMBDataVars"

    ! Signal keys 

    character(len=*) ,parameter :: keySignal = "timeSignalType"
    character(len=*) ,parameter :: keyConstSignal = "constant"
    character(len=*) ,parameter :: keyHatSignal = "hat"
    character(len=*) ,parameter :: keyCutSineSignal = "cutSine"

    ! Normalization keys

    character(len=*) ,parameter :: keyNormalization = "normalization"
    character(len=*) ,parameter :: keyTimeNorm = "time"
    character(len=*) ,parameter :: keyTempEVNorm = "eVTemperature"
    character(len=*) ,parameter :: keyDensNorm = "density"
    character(len=*) ,parameter :: keyVelGridNorm = "velGrid"
    character(len=*) ,parameter :: keyLengthNorm = "length"
    character(len=*) ,parameter :: keySpeedNorm = "speed"
    character(len=*) ,parameter :: keyEFieldNorm = "EField"
    character(len=*) ,parameter :: keyHeatFluxNorm = "heatFlux"
    character(len=*) ,parameter :: keyCrossSectionNorm = "crossSection"
    character(len=*) ,parameter :: keyIonZNorm = "referenceIonZ"

    ! Species keys 

    character(len=*) ,parameter :: keySpecies = "species"
    character(len=*) ,parameter :: keyMassA = "atomicMass"
    character(len=*) ,parameter :: keyCharge = "charge"
    character(len=*) ,parameter :: keyAssociatedVars = "associatedVars"

    ! Standard textbook 

    character(len=*) ,parameter :: keyStandardTextbook = "standardTextbook"
    character(len=*) ,parameter :: keyTempDerivIDs = "temperatureDerivSpeciesIDs"
    character(len=*) ,parameter :: keyElectronPolytropicC = "electronPolytropicCoeff"
    character(len=*) ,parameter :: keyIonPolytropicC = "ionPolytropicCoeff"
    character(len=*) ,parameter :: keySheathGammaIonSpeciesID = "electronSheathGammaIonSpeciesID"

    ! Custom derivation keys 

    character(len=*) ,parameter :: keyCustomDerivations = "customDerivations"
    character(len=*) ,parameter :: keyVarPowers = "varPowers"
    character(len=*) ,parameter :: keySimpleDeriv = "simpleDerivation"
    character(len=*) ,parameter :: keyAdditiveDeriv = "additiveDerivation"
    character(len=*) ,parameter :: keyMultDeriv = "multiplicativeDerivation"
    character(len=*) ,parameter :: keyDerivTags = "derivationTags"
    character(len=*) ,parameter :: keyResultPower = "resultPower"
    character(len=*) ,parameter :: keyLinearCoefficients = "linearCoefficients"
    character(len=*) ,parameter :: keyDerivIndices = "derivationIndices"
    character(len=*) ,parameter :: keyInnerDerivation = "innerDerivation"
    character(len=*) ,parameter :: keyOuterDerivation = "outerDerivation"
    character(len=*) ,parameter :: keyInnerDerivPower = "innerDerivPower"
    character(len=*) ,parameter :: keyOuterDerivPower = "outerDerivPower"
    character(len=*) ,parameter :: keyInnerDerivIndices = "innerDerivIndices"
    character(len=*) ,parameter :: keyOuterDerivIndices = "outerDerivIndices"
    character(len=*) ,parameter :: keyInnerDerivFuncName = "innerDerivFuncName"
    character(len=*) ,parameter :: keyPolyFunDeriv = "polynomialFunctionDerivation"
    character(len=*) ,parameter :: keyPolyPowers = "polynomialPowers"
    character(len=*) ,parameter :: keyPolyCoeffs = "polynomialCoefficients"
    character(len=*) ,parameter :: keyConstCoeff = "constantPolynomialCoefficient"
    character(len=*) ,parameter :: keyBoundedExtDeriv = "boundedExtrapolationDerivation"
    character(len=*) ,parameter :: keyFixedUpperBound = "fixedUpperBound"
    character(len=*) ,parameter :: keyIgnoreUpperBound = "ignoreUpperBound"
    character(len=*) ,parameter :: keyIgnoreLowerBound = "ignoreLowerBound"
    character(len=*) ,parameter :: keyExpectLowerBoundVar = "expectLowerBoundVar"
    character(len=*) ,parameter :: keyExpectUpperBoundVar = "expectUpperBoundVar"
    character(len=*) ,parameter :: keyStaggeredVars = "staggeredVars"
    character(len=*) ,parameter :: keyCIIJDeriv = "coldIonIJIntegralDerivation"
    character(len=*) ,parameter :: keyIsJIntegral = "isJIntegral"
    character(len=*) ,parameter :: keyIJDeriv = "IJIntegralDerivation"
    character(len=*) ,parameter :: keyHarmonicExtractor= "harmonicExtractorDerivation"
    character(len=*) ,parameter :: keyFScalingExtrapolation = "distScalingExtrapDerivation"
    character(len=*) ,parameter :: keyExtrapolateToBoundary = "extrapolateToBoundary"
    character(len=*) ,parameter :: keyDDVDeriv = "ddvDerivation"
    character(len=*) ,parameter :: keyOuterV = "outerV"
    character(len=*) ,parameter :: keyInnerV = "innerV"
    character(len=*) ,parameter :: keyVIFAtZero = "vifAtZero"
    character(len=*) ,parameter :: keyTargetH = "targetH"
    character(len=*) ,parameter :: keyHIs = "h="
    character(len=*) ,parameter :: keyD2DV2Deriv = "d2dv2Derivation"
    character(len=*) ,parameter :: keyVIDFDVAtZero = "vidfdvAtZero"
    character(len=*) ,parameter :: keyMomentDerivation = "momentDerivation"
    character(len=*) ,parameter :: keyGVector = "gVector"
    character(len=*) ,parameter :: keyLocValExtractor= "locValExtractorDerivation"
    character(len=*) ,parameter :: keyTargetX= "targetX"
    character(len=*) ,parameter :: keyVelContracDeriv= "velocityContractionDerivation"
    character(len=*) ,parameter :: keyExpectedNumHarmonics= "expectedNumberOfHarmonics"
    character(len=*) ,parameter :: keyVelTProdDeriv= "velocityTensorProdDerivation"
    character(len=*) ,parameter :: keyGenIntPolyFunDeriv = "generalizedIntPowerPolyDerivation"
    character(len=*) ,parameter :: keyRangeFilterDerivation = "rangeFilterDerivation"
    character(len=*) ,parameter :: keyControlIndices = "controlIndices"
    character(len=*) ,parameter :: keyControlRanges = "controlRanges"
    character(len=*) ,parameter :: keyCalculationTreeDerivation = "calculationTreeDerivation"
    character(len=*) ,parameter :: keyNodes = "nodes"
    character(len=*) ,parameter :: keyNumNodes = "numNodes"
    character(len=*) ,parameter :: keyChildren = "children"
    character(len=*) ,parameter :: keyParent = "parent"
    character(len=*) ,parameter :: keyAdditiveMode = "isAdditiveNode"
    character(len=*) ,parameter :: keyConstant = "constant"
    character(len=*) ,parameter :: keyLeafVar = "leafVariable"
    character(len=*) ,parameter :: keyUnaryTransform = "unaryTransform"
    character(len=*) ,parameter :: keyUnaryRealParams = "unaryRealParams"
    character(len=*) ,parameter :: keyUnaryIntParams = "unaryIntegerParams"
    character(len=*) ,parameter :: keyUnaryLogicalParams = "unaryLogicalParams"
    character(len=*) ,parameter :: keynDLinInterpDerivation = "nDLinInterpDerivation"
    character(len=*) ,parameter :: keyGrids = "grids"


    !Extrapolation keys 

    character(len=*) ,parameter :: keyExtrapolation = "extrapolationStrategy"
    character(len=*) ,parameter :: keyLinExtrapolation = "linExtrapolation"
    character(len=*) ,parameter :: keyLogExtrapolation = "logExtrapolation"
    character(len=*) ,parameter :: keyLinlogExtrapolation = "linlogExtrapolation"
    character(len=*) ,parameter :: keyExpectedHaloWidth = "expectedHaloWidth"

    ! Timeloop keys

    character(len=*) ,parameter :: keyTimeloop = "timeloop"
    character(len=*) ,parameter :: keyFixedSteps = "fixedNumSteps"
    character(len=*) ,parameter :: keyNumTimestep = "numTimesteps"
    character(len=*) ,parameter :: keySaveInterval = "fixedSaveInterval"
    character(len=*) ,parameter :: keyNormTimeTarget = "normalizedTimeTarget"
    character(len=*) ,parameter :: keyRealTimeTarget = "realTimeTarget"
    character(len=*) ,parameter :: keyTimeTarget = "timeValueTarget"
    character(len=*) ,parameter :: keyMinSaveInterval = "minimumSaveInterval"
    character(len=*) ,parameter :: keyOutputMode = "outputMode"
    character(len=*) ,parameter :: keyRestart = "restart"
    character(len=*) ,parameter :: keyResetTime = "resetTime"
    character(len=*) ,parameter :: keyHDF5LoadInit = "loadInitValsFromHDF5"
    character(len=*) ,parameter :: keyInitPath = "initValFilename"
 
!----------------------------------------------------------------------------------------------------------------------------------
end module key_names
!----------------------------------------------------------------------------------------------------------------------------------