CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   Main CFD Forum (https://www.cfd-online.com/Forums/main/)
-   -   from a vecor field to get a gradient of scalar (https://www.cfd-online.com/Forums/main/13227-vecor-field-get-gradient-scalar.html)

dusky.he March 30, 2007 02:37

from a vecor field to get a gradient of scalar
 
I got a problem. How can I get a scalar field so that the gradient of scalar equals a vector field, locally.

thanks

Praveen. C March 30, 2007 03:26

Re: from a vecor field to get a gradient of scalar
 
First of all, this is possible if and only if the vector field is irrotational. Assuming this is so in your case, I can suggest two ways, but there may be many details you will have to work out.

If

v = grad(s)

then
  1. Use a line integral of the vector field.

    s<sub>2</sub> - s<sub>1</sub> = line integral of v from 1 to 2
  2. Solve a Poisson equation for s with appropriate boundary conditions

    laplace(s) = div(v)

dusky.he March 30, 2007 03:42

Re: from a vecor field to get a gradient of scalar
 
Thank you for your prompt reply. Actually, I used the second method say solving Poissonn equation. However, althogh Laplace(s)= div(v). locally, gradient(s) not equal V in some region. so they are not balanced

I do not know whether it is because of the order of scheme I used to discretize.


rt March 30, 2007 09:06

Re: from a vecor field to get a gradient of scalar
 
Hi dusky.he,

>>this is possible if and only if the vector field is irrotational

i am not agree

the second approach proposed by Praveen is good idea but is incomplete.

Based on Hodge decomposition theory any vector field, V, can be decomposed into a divergence-free component, Vd, and a curl-free component, Vc,so Vc is equal to gradient of some scalar, S.

V = Vd + Vc and Vc = grad(S), div(Vd)=0, Curl(Vc)=0.

so the proposed solution is work only if your vector field is divergence free. BC consistency is also essential.

If your vector field is not divergence-free, i don't think that your problem has any solution or unique solution. But in certain condition you can find the best solution by solving the following least square problem:

find S so, minimize 1/2 || grad(S) - V ||

with the aid of suitable regularization you can get sequence of minimizing solution.

Jonas Holdeman March 30, 2007 09:08

Re: from a vecor field to get a gradient of scalar
 
Actually, there are more ways. The first might be to project out the rotational part. This is the analog of projecting out the irrotational part to get a (weakly) divergence-free field.

Another way is to do a least-squares fit of a field that is really the gradient of a scalar to your given field. This is a finite element approach.

Set up a rectangular grid over your problem domain. The we use Hermite scalar functions in which the gradient components are actual degrees of freedom. For example, you might use the Melosh element (see O. C. Zienkiewicz, "The Finite Element Method in Engineering Science," (1971), p179 - also in later editions but I only have the old one). This element has the scalar potential and components of the gradient as degrees-of-freedom. Or, you can use the classical bicubic element, which has an additional second cross-derivative DOF. You then construct a vector element by taking the gradient of the scalar functions/elements. Now do a least-squares fit to get the components/DOFs at the mesh points. Then use your irrotational vector elements to interpolate these. This will be pointwise irrotational.

If you have data on a rectangular grid that must be fit exactly, you could fix the gradient components and do least-squares with the potential component only. However, if you force a fit this way, the resulting field may not be as smooth as you would like or expect.

In three dimensions, there is a 3D analog of the Melosh element and, of course, the tri-cubic element/function.



All times are GMT -4. The time now is 16:23.