Loop over cells slowing down the code
I try to create a field for my variable alphath. The value I want to set for this variable depends on space.
Finally, the algorithm should look like :
For all cells
If ( x < xmax and x > xmin) alphath = f(x)
In order to go step by step in the coding process (I'm not really a senior coder in openFoam ...), for the moment, I just try to impose, for all cells,
alphath(x,y,z) = x
I coded this stuff like that :
alphath[celli] = mesh.C().component(vector::X)()[celli];
Adding these lines in the code REALLY slows it down ...
As a simple test, I replaced "mesh.C().component(vector::X)()[celli]" by "1.0" and the code is quick again.
Do you know why the added lines slow the code down ?
Would you have an alternative coding ?
Thanks in advance for your help.
I have a small guess, since you are first extracting the x-coordinate from the cell centres and then you get the i'th index (checked the code and a new volScalarField is constructed). This actually means that you make a copy of all of the x-values every time you only need one; so in the end of the day you have a process, which scales with N^2 rather than N.
This should be faster:
thanks a lot for having taken some of your time for my problem !
Your answer was quick, detailed and (after a test just performed) very efficient !
|All times are GMT -4. The time now is 02:55.|