Skip to content

Commit

Permalink
MixedFSLimiter is operational
Browse files Browse the repository at this point in the history
  • Loading branch information
ta440 committed Nov 14, 2023
1 parent 8e14e7a commit 6062ebf
Showing 1 changed file with 37 additions and 38 deletions.
75 changes: 37 additions & 38 deletions gusto/limiters.py
Original file line number Diff line number Diff line change
Expand Up @@ -181,48 +181,47 @@ def apply(self, field):


class MixedFSLimiter(object):
"""A dictionary that holds limiters for individual components.
If no limiter is specified, then we apply a blank limiter"""

"""An object to hold a dictionary that defines limiters for transported prognostic
variables. Different limiters may be applied to different fields and not every transported variable needs a defined limiter.
"""

def __init__(self, tracers, sublimiters):
self.tracers = tracers
self.sublimiters = sublimiters

for tracer in tracers:
#print(tracer.name)
#sublimiter = sublimiters.get(tracer.name)
#print(sublimiter)
if tracer.name not in sublimiters:
sublimiters[tracer.name] = NoLimiter()
sublimiter = sublimiters.get(tracer.name)
print(sublimiter)

def __init__(self, equation, sublimiters):
"""
Args:
equation (:class: 'PrognosticEquationSet'): the prognostic equation(s)
sublimiters (dict): A dictionary holding limiters defined for individual prognostic variables
Raises:
ValueError: If a limiter is defined for a field that is not in the prognostic variable set
"""
self.sublimiters = sublimiters
print(len(self.tracers))
print(len(self.sublimiters))

# Check that each tracer has a defined sublimiter
# Else, give it a blank limiter instead.


for tracer, sublimiter in sublimiters.items():
# Check that the tracer is being solved in the equation:
if tracer not in equation.field_names:
raise ValueError(f"The limiter for {tracer} is for a field that does not exist in the equation set")
else:
self.sublimiters[tracer].idx = equation.field_names.index(tracer)

#for tracer in tracers:
# if tracer.name in sublimiters:
# sublimiter = sublimiters.get(tracer.name)
# print(sublimiter)
# self.sublimiters[tracer.name].idx = equation.field_names.index(tracer.name

def apply(self, fields):
"""
Apply individual limiter
Apply the individual limiters to specific prognostic variables
"""

#Iterate over each tracer
#Apply the sublimiter

for tracer in self.tracers:
sublimiter = self.sublimiters[tracer.name]
print(sublimiter)

# split specific tracer from x_in
# then apply the limiter to this.

sublimiter.apply(tracer.field)




#for tracer in self.tracers:
# if tracer.name in self.sublimiters:
# sublimiter = self.sublimiters[tracer.name]
# field = fields.subfunctions[sublimiter.idx]
# sublimiter.apply(field)
# print(f'Applying sublimiter on {tracer.name} field')

for _, sublimiter in self.sublimiters.items():
field = fields.subfunctions[sublimiter.idx]
sublimiter.apply(field)
#print(f'Applying sublimiter on {tracer} field')

0 comments on commit 6062ebf

Please sign in to comment.