Amrex.jl 3.76 KB
Newer Older
William F Godoy's avatar
William F Godoy committed
1
2
3
4
5
6

abstract type AbstractAmrex <: AbstractExtractor end

mutable struct Amrex <: AbstractAmrex
    app::String
    outputPrefix::String
William F Godoy's avatar
William F Godoy committed
7
8
9
10
11
12
13
14
15
    inputs::Array{String}
    outputs::Array{String}

    Amrex(outputPrefix::String) = new(
        "Amrex",
        outputPrefix,
        ["max_step", "amr.check_int", "amr.plot_int", "amr.n_cell", "amr.max_level"],
        ["plots_size", "checkpoints_size"],
    )
William F Godoy's avatar
William F Godoy committed
16
17
18
19
20
21
22
23
24
end


"""
    Parses an input file with entries key = value, returns all entries in a Dict
    # Arguments
    - `extractor::AbstractAmrex` : input type extending AbstractAmrex
    - `inputFile::String` : input file to be parsed, absolute path is preferred
"""
William F Godoy's avatar
William F Godoy committed
25
function _input_parser(extractor::AbstractAmrex, inputFile::String)::Dict{String,String}
William F Godoy's avatar
William F Godoy committed
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

    parameters = Dict{String,String}()
    # get file contents in a single iterable type, \n newline is removed 
    fileContents = readlines(inputFile)

    # go through each line
    for line in fileContents
        if isempty(line)
            continue
        end

        # remove comments marked with #
        result = findfirst("#", line)

        if isnothing(result) == false
            line = SubString(line, 1, result[1] - 1)
            if isempty(line)
                continue
            end
        end

        parameter = split(line, "=")
        parameters[strip(parameter[1])] = strip(parameter[2])

    end

    return parameters
end
54
55
56
57
58
59
60

"""
    Get actual independent variables for I/O characterization: 
    number of cells or ncells, output frequency or nplots, ncheckpoints, etc.    
    from input parameters 
    # Arguments
    - `extractor::AbstractAmrex` : input type extending AbstractAmrex
William F Godoy's avatar
William F Godoy committed
61
    - `parameters::Dict{Any,Any}` : input file to be parsed, absolute path is preferred
62
"""
William F Godoy's avatar
William F Godoy committed
63
function _get_independent_variables(extractor::AbstractAmrex, parameters)::Dict{String,Any}
64

William F Godoy's avatar
William F Godoy committed
65
    independentVariables = Dict{String,Any}()
66
67
68
69
70
71

    # Number of output events, 
    # get is the safe way. 3rd argument is a default fallback if key not found
    maxStepStr = get(parameters, "max_step", "")

    if maxStepStr != ""
William F Godoy's avatar
William F Godoy committed
72
73

        # safe string conversion to a type
74
75
76
77
78
        maxStep = parse(Int64, maxStepStr)

        plotIntStr = get(parameters, "amr.plot_int", "")
        if plotIntStr != ""
            plotFrequency = parse(Int64, plotIntStr)
William F Godoy's avatar
William F Godoy committed
79
            independentVariables["amr.plot_int"] = plotFrequency
80
81
82
83
84
85
86
87
            independentVariables["amr.nplot_files"] = floor(Int32, maxStep / plotFrequency)
        else
            throw(NoSuchFieldException("jexio Amrex: Can't find amr.plot_int"))
        end

        checkIntStr = get(parameters, "amr.check_int", "")
        if checkIntStr != ""
            checkpointFrequency = parse(Int64, checkIntStr)
William F Godoy's avatar
William F Godoy committed
88
89
90
            independentVariables["amr.check_int"] = checkpointFrequency
            independentVariables["amr.ncheck_files"] =
                floor(Int32, maxStep / checkpointFrequency)
91
92
93
94
        else
            throw(NoSuchFieldException("jexio Amrex: Can't find amr.check_int"))
        end

95
    end
96
97
98
99
100
101
102
103
104
105
106
107
108

    # Using the dot "." operator to apply it on an element-by-element basis (like a dot product)
    # input is a dictionary with key="amr.ncell" and value = {"nx" "ny" "nz"},  
    # output is nx*ny*nz
    # Example:  
    # input Dict[ "amr.n_cell" => ["16" "16"] ], if key not found return 0
    # >ncells
    #   256
    ncells = prod(parse.(Int64, split(get(parameters, "amr.n_cell", ["0"]))))
    independentVariables["amr.ncells"] = ncells

    maxLevel = get(parameters, "amr.max_level", "")
    independentVariables["amr.max_level"] = maxLevel == "" ? 1 : parse(Int32, maxLevel)
William F Godoy's avatar
William F Godoy committed
109

110
111
    regrid = get(parameters, "amr.regrid_int", "")
    independentVariables["amr.regrid_int"] = regrid == "" ? 1 : parse(Int32, regrid)
William F Godoy's avatar
William F Godoy committed
112

113
114
    return independentVariables

115
end
William F Godoy's avatar
William F Godoy committed
116
117
118
119
120


function _get_inputs_X(extractor::AbstractAmrex)

end