Source code for opentidalfarm.functionals.cost_functionals

#"""
#.. module:: Cost Functionals
#   :synopsis: This module contains the functional classes which compute the
#       cost of an array.
#"""

from dolfin import assemble 
from .prototype_functional import PrototypeFunctional


[docs]class CostFunctional(PrototypeFunctional): r""" Implements a cost functional of the form: .. math:: J(u, m) = \int c_t~ dx, where :math:`c_t` is the friction due to the turbines. :param problem: The problem for which the functional is being computed. :type problem: Instance of the problem class. """ def __init__(self, problem): self.farm = problem.parameters.tidal_farm self.farm.update()
[docs] def Jt(self, state, turbine_field): """ Computes the cost of the farm. :param state: Current solution state :type state: dolfin.Function :param turbine_field: Turbine friction field :type turbine_field: dolfin.Function """ return self._cost(turbine_field)*self.farm.site_dx
def _cost(self, turbine_field): """ Computes the cost of the turbine farm. :param turbine_field: Turbine friction field :type turbine_field: dolfin.Function """ return turbine_field
[docs] def Jt_individual(self, state, i): """ Computes the cost of the i'th turbine. :param state: Current solution state :type state: dolfin.Function :param i: turbine index :type i: Integer """ turbine_field_individual = \ self.farm.turbine_cache['turbine_field_individual'][i] return assemble(self._cost(turbine_field_individual)*self.farm.site_dx)