Passing function values in interactive mode

Hi,
I'm trying to solve a non-linear Poisson type equation where the diffusion coefficient/conductivity depends on the field variable. Logically, I've tried basing this part of my code on the poisson_field_dependent_material.py case and, of course, it works nicely in "simple" mode but I can't figure out how to pass the value to my material variable "cond" in interactive mode (I require interactive mode for reasons stated in this post https://groups.google.com/forum/#!topic/sfepy-devel/es64x4YFEiU). I define the same get_conductivity function as per poisson_field_dependent_material.py, then declare the function as conductivity_fun = Function('conductivity_fun', get_conductivity)
get_conductivity returns a dictionary key/value pair {'val' : val} so I figured to call the function as per cond = Material('cond', conductivity_fun)
should work, but it results in this error: Traceback (most recent call last): File "examples/diffusion/myPoisson/myPoissonInteractive.py", line 185, in
<module> main() File "examples/diffusion/myPoisson/myPoissonInteractive.py", line 116, in main cond = Material('cond', conductivity_fun,) #val= 2.0) File "/usr/local/lib/python2.7/dist-packages/sfepy-2016.3_git_94dff5a051dbd2bf6bd56fce936d75878edef9e8-py2.7-linux-x86_64.egg/sfepy/discrete/materials.py" , line 148, in __init__ % self.name TypeError: not enough arguments for format string
I've also tried passing a function handle to cond ('conductivity_fun'), and all the possible combinations of function names that I can think of, but this error persists. I've looked at the function documentation http://sfepy.org/doc-devel/users_guide.html#functions but unfortunately this hasn't clarified things for me as this issue pertains specifically to the interactive problem specification.
Thank you for your help. Regards, David

Hi David,
try looking at [1], specifically at:
def get_load(ts, coors, mode=None, **kwargs): if mode == 'qp': return {'val' : _get_load(coors).reshape(coors.shape[0], 1, 1)}
load = Material('load', function=Function('get_load', get_load))
in function create_local_problem() (you can ignore the other code).
What you did was almost ok, just use the keyword argument (function=...) for the function.
The interactive use is not well documented, so it is often necessary to go through the (interactive) examples as well as look at the function/class docs (the search button on the website may come handy).
r.
[1] http://sfepy.org/doc-devel/examples/diffusion/poisson_parallel_interactive.h...
On 12/21/2016 08:48 PM, David Jessop wrote:
Hi,
I'm trying to solve a non-linear Poisson type equation where the diffusion coefficient/conductivity depends on the field variable. Logically, I've tried basing this part of my code on the poisson_field_dependent_material.py case and, of course, it works nicely in "simple" mode but I can't figure out how to pass the value to my material variable "cond" in interactive mode (I require interactive mode for reasons stated in this post https://groups.google.com/forum/#!topic/sfepy-devel/es64x4YFEiU). I define the same get_conductivity function as per poisson_field_dependent_material.py, then declare the function as conductivity_fun = Function('conductivity_fun', get_conductivity)
get_conductivity returns a dictionary key/value pair {'val' : val} so I figured to call the function as per cond = Material('cond', conductivity_fun)
should work, but it results in this error: Traceback (most recent call last): File "examples/diffusion/myPoisson/myPoissonInteractive.py", line 185, in
<module> main() File "examples/diffusion/myPoisson/myPoissonInteractive.py", line 116, in main cond = Material('cond', conductivity_fun,) #val= 2.0) File "/usr/local/lib/python2.7/dist-packages/sfepy-2016.3_git_94dff5a051dbd2bf6bd56fce936d75878edef9e8-py2.7-linux-x86_64.egg/sfepy/discrete/materials.py" , line 148, in __init__ % self.name TypeError: not enough arguments for format string
I've also tried passing a function handle to cond ('conductivity_fun'), and all the possible combinations of function names that I can think of, but this error persists. I've looked at the function documentation http://sfepy.org/doc-devel/users_guide.html#functions but unfortunately this hasn't clarified things for me as this issue pertains specifically to the interactive problem specification.
Thank you for your help. Regards, David
participants (2)
-
David Jessop
-
Robert Cimrman