Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

'surface' integration #685

Open
tiannh7 opened this issue Jan 16, 2024 · 2 comments
Open

'surface' integration #685

tiannh7 opened this issue Jan 16, 2024 · 2 comments

Comments

@tiannh7
Copy link

tiannh7 commented Jan 16, 2024

Hi,

I'm trying to perform surface integration on a non-boundary "sub-surface" in a parallel environment using Underworld2. Specifically, I want to integrate over any arbitrary row in a Mesh[yRes+1, xRes+1], similar to pressure calibration. However, I encountered the following error:

underworld version: 2.14.0b
python version    : 3.11.3
tempAve = uw.utils.Integral(temperatureField, mesh, integrationType='surface', surfaceIndexSet=rowIndexSet)
ValueError: Your surfaceIndexSet appears to contain node(s) which do not belong to the mesh boundary. Surface integration across internal nodes is not currently supported.

One workaround I can think of is to evaluate on this horizontal line and then use scipy for integration. But in a parallel environment, would I need to consolidate resources so that I can operate on each row of the original data? Also, would the precision of this approach be comparable to the results obtained from utils.Integral?

Any guidance would be greatly appreciated. Thanks!

N.

@julesghub
Copy link
Member

julesghub commented Feb 9, 2024

Hi @NTIaN7 ,
Sorry for the late response.
The utils.Integral() doesn't handle internal surface indices. Your idea for scipy could work, you can consolidate the resultant per proc integral together with something like mpi4py's allreduce(), an example is

def _nps_2norm( v, comm=MPI.COMM_WORLD ):

What is the integral you're trying to evaluate? Just temperature over the surface?

Another idea that comes to mind is to distribute a swarm of particles over the 'internal" surface you'd like to integrate on.

@tiannh7
Copy link
Author

tiannh7 commented Feb 20, 2024

Thank you for your reply @julesghub,

I want to evaluate the pressure, temperature, and physical strength of a specific interface. For example, obtaining the average (integral to area ratio) temperature and pressure on a horizontal grid line.

Particle swarm is a great way, but do I not need to set the adject attribute on it so as not to change its position?

N.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants