# Handling an integral term in the differential equation

Hello, I am trying to solve a PDE where one of the terms is an integral of the solution variable. What would be the best way to calculate it?

Details:
We have multiple pdes of the form

$$\frac{\partial^2 u_i}{\partial x^2} - u_i\int \frac{s(x’)}{\sqrt{(x-x’)^2+1}}dx’ = 0$$
Where $s$ is

$$s(x) = \sum_i^n|u_i(x)|^2$$
The challenge here is that $s$ dependes on multiple $u_i$ and each solution $u_i$ depends on solving an integral of $s$ over the domain. What would be the best way to represent this in Modulus?

Some things that I have tried:
I tried using the Integral function in sympy (Integrals — SymPy 1.10.1 documentation)

#assume dom is already set
# Equation set up in modulus
x = Symbol('x')
t = Symbol('t')

# make input variables
input_variables = {'x':x, 't':t}

# make u_i list
# List of sympy functions (u0, u1, ..., un)
u_list = [Function('u%d' % i)(*input_variables) for i in range(n)]

# make s
amp_list = [u_list[i]**2  for i in range(n)]
s = sum(amp_list)

# Integral term
xp = Symbol('xp')
s_p = s.subs(x,xp)
s_integral = integrate(s_p/(sqrt((x-xp)**2 + 1)),( xp,-dom,dom))

# set equations
self.equations = {}

for i in range(n):
u = u_list[i]
self.equations['u%d' %i] = u.diff(x,2) - u * s_integral



Here, I get an error saying that Integral is not defined

...
...
File "/home/env/pinn/lib/python3.9/site-packages/modulus-22.3-py3.9.egg/modulus/sympy_utils/torch_printer.py", line 259, in forward
return {self.name: self.torch_expr(args)}
File "<lambdifygenerated-1>", line 5, in _lambdifygenerated
NameError: name 'Integral' is not defined


I checked the modulus sympy to torch converting functions and noticed that sympy.integrate is not in the list of functions that are converted to torch by modulus. This file is modulus/sympy_utils/torch_printer.py. I tried writing my own convertor to calculate an integral in pytorch from sympy but can’t figure that out.

I would be happy to explain this in more detail, and make necessary modifications in Modulus myself if you have some advice.

Hi had the same issue. When you try to write a PDE where the inputs depend on the solution, the Modulus is unable to unroll the computational graph. I fixed this in my own implementation.