I'm been aware of SfePy for a very long time, but only recently have actually been trying it. I've been surprised at how *simple* it is to get things going, it's a great package. Thanks a lot for making it.
What I'm trying to do is solve a scattering problem from electromagnetism. I'm working with a 3D vector electric field (of complex numbers). So far as I can tell, I've been able to get the weak form of the problem, and it's boundary conditions, implemented correctly.
There are two things I'd like that are not working at the moment. I'd could really use some guidance, so would appreciate any help. These are:
I'd like to evaluate a surface integral of the electric field intensity I = |E|^2 = E dot conj(E), where E is a vector, dot is the dot product, and conj is the complex conjugate. I'm implementing my own term for this, which I think should be nearly the same as the existing IntegrateSurfaceTerm. However, it appears that the complex numbers are complicating things. The function method of my new term is apparently called twice in 'eval' mode, once for the real part and once for the imag part. Looking at the source code of Term, this seems to be the implemented behavior. Is it possible to get the function method called with the complex numbers themselves? If not, what is the recommended technique for doing operations in which the real parts and the imag parts do not separate cleanly (like for the magnitude of a complex vector)? If it helps, I only need things like these in eval mode, not as part of the solved equations.
I'd like to evaluate the magnetic field H from the electric field E. This is simply H = -1j * c * curl(E), where c is a constant (material parameter) and curl is the vector curl operation. The vector field E is solved for as part of my problem. What is the best way to add the equation for H into the problem? I don't see a curl operation anywhere. Do I need a custom term or can I do this with existing terms? It is fully determined by E, as above.
Thanks for your help,