[Getdp] Thermal - Convection Formulation

Christophe Geuzaine cag32 at case.edu
Wed Mar 15 22:55:44 CET 2006


Laird Bolt wrote:
> Hello:
> 
> Would it be possible for someone on the list to please explain why the 
> following two
> formulations are not the same (or to point me to specific reference that 
> explains it)?
> 
> Formulation for Convection BC that works (last two Galerkin terms);
> 
>     Equation {
>       Galerkin { [ k[] * Dof{d T} , {d T} ];
>                  In Vol_The; Integration I1; Jacobian JVol;  }
>       Galerkin { [ -Flux[] , {T} ]; // - sign for incoming flux
>                  In FluxIn; Integration I1; Jacobian JSur;  }
>       Galerkin { [ alpha[] * Dof{T} , {T} ];
>                  In Convection; Integration I1; Jacobian JSur;  }
>       Galerkin { [ -alpha[] * 348 , {T} ];
>                  In Convection; Integration I1; Jacobian JSur;  }
>     }
>  
> 
> 
> Formulation for Convection that did not work (last Galerkin term)
> 
>     Equation {
>       Galerkin { [ k[] * Dof{d T} , {d T} ];
>                  In Vol_The; Integration I1; Jacobian JVol;  }
>       Galerkin { [ -Flux[] , {T} ]; // - sign for incoming flux
>                  In FluxIn; Integration I1; Jacobian JSur;  }
>       Galerkin { [ alpha[] * (Dof{T} - 348) , {T} ];
>                  In Convection; Integration I1; Jacobian JSur;  }
>     }


It's an old limitation in the code: a "Dof" (degree of freedom) term
must be written in such a way that the Dof value multiplies the whole
term. In the code the (unknown) value of the degree of freedom simply 
multiplies the whole expression, a posteriori.

I'm not sure if this is documented or not, but it should definitely be.


>  
> Also:
> 
> Could someone please help me out by explaining why in the Thermal 
> example on Wiki the last
> Galerkin Term (Radiated losses) does not require the use of Dof but the 
> other terms that use
> {T} do require it.
> 
>  From Thermal.pro
> 
>       Galerkin { [ k[] * Dof{d T} , {d T} ];
>                  In Vol_The; Integration I1; Jacobian JVol;  }
> 
>       Galerkin { Dt [ rhoc[] * Dof{T} , {T} ];
>                  In Vol_The; Integration I1; Jacobian JVol;  }
> 
>       Galerkin { [ -qVol[] , {T} ];
>                  In Vol_The; Integration I1; Jacobian JVol;  }
> 
>       Galerkin { [ -Flux[] , {T} ]; // - sign for incoming flux
>                  In Sur_The; Integration I1; Jacobian JSur;  }
> 
>       Galerkin { [ h[] * Dof{T} , {T} ] ;
>                  In SurConv_The ; Integration I1; Jacobian JSur;  }
> 
>       Galerkin { [ -h[] * TConv[] , {T} ] ;
>                  In SurConv_The ; Integration I1; Jacobian JSur;  }
> 
>       Galerkin { [ hr[{T}] * (({T}+273.)^4-(TConv[]+273.)^4) , {T} ] ;
>                  In SurRad_The ; Integration I1; Jacobian JSur;  }
>  
> 

In GetDP, a formulation represents a discrete linear operator (linear 
with respect to the Dofs). So you cannot write Dof{T}^4, as this would 
lead to a nonlinear equation in terms of Dof{T}.

If you have a nonlinear equation, you need to write a linearized form
in the formulation. In the example above we linearize the equation by 
using functional (or "Picard") iteration, where we get the next value of 
the unknown by plugging the value obtained at the previous iteration 
into the equation (the previous value is known, and is accessed with 
"{T}", without "Dof"). You could also use a Newton-Raphson iteration by 
adding a "JacNL" term (see the wiki for an example).

Best,

Christophe



> Thankyou
> 
> Laird Bolt
> 
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> getdp mailing list
> getdp at geuz.org
> http://www.geuz.org/mailman/listinfo/getdp


-- 
Christophe Geuzaine
Assistant Professor, Case Western Reserve University, Mathematics
http://www.case.edu/artsci/math/geuzaine