-
Notifications
You must be signed in to change notification settings - Fork 147
/
fixedFlux.py
101 lines (84 loc) · 3.47 KB
/
fixedFlux.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#!/usr/bin/env python
## -*-Pyth-*-
# ###################################################################
# FiPy - Python-based finite volume PDE solver
#
# FILE: "fixedFlux.py"
# created: 11/15/03 {9:47:59 PM}
# last update: 5/15/06 {3:22:01 PM}
# Author: Jonathan Guyer <guyer@nist.gov>
# Author: Daniel Wheeler <daniel.wheeler@nist.gov>
# Author: James Warren <jwarren@nist.gov>
# Author: James Warren <jwarren@nist.gov>
# mail: NIST
# www: http://www.ctcms.nist.gov/fipy/
#
# ========================================================================
# 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.
# ========================================================================
#
# Description:
#
# History
#
# modified by rev reason
# ---------- --- --- -----------
# 2003-11-15 JEG 1.0 original
# ###################################################################
##
__docformat__ = 'restructuredtext'
import Numeric
from fipy.boundaryConditions.boundaryCondition import BoundaryCondition
from fipy.boundaryConditions.fixedValue import FixedValue
from fipy.tools import vector
class FixedFlux(BoundaryCondition):
r"""
The `FixedFlux` boundary condition adds a contribution, equivalent to a
fixed flux (Neumann condition), to the equation's RHS vector. The
contribution, given by `value`, is only added to entries corresponding to
the specified `faces`, and is weighted by the face areas.
"""
def __init__(self,faces,value):
"""
Creates a `FixedFlux` object.
:Parameters:
- `faces`: A `list` or `tuple` of `Face` objects to which this condition applies.
- `value`: The value to impose.
"""
BoundaryCondition.__init__(self,faces,value)
## N = len(self.faces)
##self.contribution = Numeric.zeros((N,),'d')
# get units right
##self.contribution = self.contribution * self.value * self.faces[0].getArea()
##for i in range(N):
## self.contribution[i] = self.value * self.faces[i].getArea()
self.contribution = self.value * self.faces.getAreas()
def _buildMatrix(self, Ncells, MaxFaces, coeff):
"""Leave **L** unchanged and add gradient to **b**
:Parameters:
- `Ncells`: Size of **b**-vector
- `MaxFaces`: *unused*
- `coeff`: *unused*
"""
bb = Numeric.zeros((Ncells,),'d')
## vector.putAdd(bb, self.adjacentCellIDs, -Numeric.array(self.contribution))
vector.putAdd(bb, self.adjacentCellIDs, -self.contribution)
return (0, bb)
def _getDerivative(self, order):
if order == 1:
return FixedValue(self.faces, self.value)
else:
return BoundaryCondition._getDerivative(self, order)