-
Notifications
You must be signed in to change notification settings - Fork 148
/
cellVolumeAverageVariable.py
executable file
·72 lines (61 loc) · 2.57 KB
/
cellVolumeAverageVariable.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/env python
## -*-Pyth-*-
# ###################################################################
# FiPy - Python-based finite volume PDE solver
#
# FILE: "cellVolumeAverageVariable.py"
#
# Author: Jonathan Guyer <guyer@nist.gov>
# Author: Daniel Wheeler <daniel.wheeler@nist.gov>
# mail: NIST
# www: http://ctcms.nist.gov
#
# ========================================================================
# This software was developed at the National Institute of Standards
# and Technology by employees of the Federal Government in the course
# of their official duties. Pursuant to title 17 Section 105 of the
# United States Code this software is not subject to copyright
# protection and is in the public domain. FiPy is an experimental
# system. NIST assumes no responsibility whatsoever for its use by
# other parties, and makes no guarantees, expressed or implied, about
# its quality, reliability, or any other characteristic. We would
# appreciate acknowledgement if the software is used.
#
# This software can be redistributed and/or modified freely
# provided that any derivative works bear some notice that they are
# derived from it, and any modified versions bear some notice that
# they have been modified.
# ========================================================================
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#
# ###################################################################
##
__docformat__ = 'restructuredtext'
__all__ = []
from fipy.tools import numerix
from fipy.variables.variable import Variable
from fipy.variables.cellVariable import CellVariable
class _CellVolumeAverageVariable(Variable):
"""
Takes a `CellVariable` and evaluates its volume average over all the
cells.
>>> from fipy.meshes import Grid2D
>>> mesh = Grid2D(nx = 2, ny = 2, dx = 2., dy = 5.)
>>> from fipy.variables.cellVariable import CellVariable
>>> var = CellVariable(value = (1, 2, 3 ,4), mesh = mesh)
>>> print _CellVolumeAverageVariable(var)
2.5
"""
def __init__(self, var):
Variable.__init__(self, unit = var.unit)
self.var = self._requires(var)
def _calcValue(self):
mesh = self.var.mesh
volumes = CellVariable(mesh=mesh, value=mesh.cellVolumes)
return (self.var * volumes).sum() / volumes.sum()
def _test():
import fipy.tests.doctestPlus
return fipy.tests.doctestPlus.testmod()
if __name__ == "__main__":
_test()