"""
Set stage operator
Constraints: See GPL license in the user guide
Version: 1.0 ($Revision: 7731 $)
"""
__author__="steve"
__date__ ="$09/03/2012 4:46:39 PM$"
from anuga import Domain
from anuga import Quantity
import numpy as num
import anuga.utilities.log as log
from anuga.geometry.polygon import inside_polygon
from anuga.operators.base_operator import Operator
from anuga.operators.set_stage import Set_stage
from anuga.config import indent
[docs]
class Set_stage_operator(Operator, Set_stage):
"""
Set the stage over a region, enforcing stage >= elevation.
"""
__call__ = Set_stage.__call__
get_stage = Set_stage.get_value
set_stage = Set_stage.set_value
[docs]
def __init__(self,
domain,
stage=None,
region=None,
indices=None,
polygon=None,
center=None,
radius=None,
line=None,
description=None,
label=None,
logging=False,
verbose=False):
Set_stage.__init__(self, domain,
stage=stage,
region=region,
indices=indices,
polygon=polygon,
center=center,
radius=radius,
line=line,
verbose=verbose)
Operator.__init__(self, domain, description, label, logging, verbose)
[docs]
def parallel_safe(self):
"""Operator is applied independently on each cell and
so is parallel safe.
"""
return True
def statistics(self):
message = self.label + ': Set_stage_operator'
message = message + ' on triangles '+ str(self.indices)
return message
def timestepping_statistics(self):
message = indent + self.label + ': Set_stage = ' + str(self.get_stage())
message += ' at center '+str(self.center)
return message
#===============================================================================
# Specific Stage Operators for circular region.
#===============================================================================
class Circular_set_stage_operator(Set_stage_operator):
"""
Set stage over a circular region
"""
def __init__(self, domain,
stage=0.0,
center=None,
radius=None,
verbose=False):
assert center is not None
assert radius is not None
Set_stage_operator.__init__(self,
domain,
stage=stage,
center=center,
radius=radius,
verbose=verbose)
#===============================================================================
# Specific Stage Operators for polygonal region.
#===============================================================================
class Polygonal_set_stage_operator(Set_stage_operator):
"""
Set stage over a polygonal region
"""
def __init__(self, domain,
stage=0.0,
polygon=None,
verbose=False):
Set_stage_operator.__init__(self,
domain,
stage=stage,
polygon=polygon,
verbose=verbose)