# Thermal conductivity as function of temperature

 Register Blogs Members List Search Today's Posts Mark Forums Read

 October 10, 2012, 06:32 Thermal conductivity as function of temperature #1 New Member   magazoni Join Date: Jul 2012 Posts: 11 Rep Power: 13 Hi everyone, I'm trying to make a test with the solver laplacianFoam making the thermal conductivity as function of temperature. I'm doing something like that: fvScalarMatrix Teqn ( fvm::ddt(rho, T) - fvm::laplacian(k_T(T)/Cp, T) ); Teqn.solve(); } My idea is create a function to calculate the thermal conductivity: dimensionedScalar k_T(volScalarField T) { dimensionedScalar k1 ( "k1", dimensionSet(1,1,-3,-2,0,0,0), -0.0691734413 ); dimensionedScalar k2 ( "k2", dimensionSet(1,1,-3,-1,0,0,0), 421.0792245378 ); volScalarField k; k=k1*T+k2; return k; } But it's not working. How can I do it using a function? Thanks, Best regards, Felipe Magazoni Kummi likes this.

October 10, 2012, 07:42
#2
Senior Member

Join Date: Jan 2010
Location: Stuttgart
Posts: 150
Rep Power: 16
Hi Felipe,

the following code should give you an idea how to do it:

Quote:
 { for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) { fvScalarMatrix tEqn ( -fvm::laplacian(K, T) ); tEqn.relax(); eqnResidual = tEqn.solve().initialResidual(); maxResidual = max(eqnResidual, maxResidual); } Info<< "Min/max T:" << min(T).value() << ' ' << max(T).value() << endl; ////////////////////////////////////// forAll(solidRegions[i].cellZones(), zoneI) { const cellZone& cz = solidRegions[i].cellZones()[zoneI]; const labelList& cells = cz; if (cz.name() == "s-oc") { forAll(cells, iCells) { const label cellId = cells[iCells]; const scalar& cellT = T[cellId]; cp[cellId] = 380.68 + cellT * (0.35536 - 0.00012713 * cellT); K[cellId] = 9.6995954 + cellT * (0.017429246 - 2.0551036e-06 * cellT); rho[cellId] = 7920; } } } ///////////////////////////////////// }
It is an example for a steady solver, but it should not be that difficult to modify it for your time depending equation.

Don't forget to define your variables in the "createFields" file.

Kind regards

Chrisi

 December 31, 2012, 09:19 #3 New Member   Romain Join Date: Jun 2010 Location: Lyon Posts: 28 Rep Power: 15 hello Chrisi, I am looking to implement something a bit similar, I would like to have a value 'a' for my thermal conductivity if the temperature is under a certain value, and a value 'b' for my thermal conductivity if the temperature is above the value. Something like, Code: ```if (cz.name() == "s-oc") { forAll(cells, iCells) { const label cellId = cells[iCells]; const scalar& cellT = T[cellId]; cp[cellId] = 380.68 + cellT * (0.35536 - 0.00012713 * cellT); if (cellT<273.15) { K[cellId] = 10; } else { K[cellId] = 100; } rho[cellId] = 7920; } }``` is that possible ? I never used those kind of thermal dependent constant in my code before. Thanks,

 January 5, 2013, 10:54 #4 Senior Member   Join Date: Jan 2010 Location: Stuttgart Posts: 150 Rep Power: 16 Hallo Nakor, at the minute for me it seems that your code should work. Kind regards, Chrisi

 January 6, 2013, 11:52 #5 Senior Member     Matvey Kraposhin Join Date: Mar 2009 Location: Moscow, Russian Federation Posts: 355 Rep Power: 21 I can hint a bit more elegant solution: { dimensionedScalar k1 (dict.lookup("k1")); dimensionedScalar k2 (dict.lookup("k2")); volScalarField k = k1*T + k2; volScalarField DT = k / Cp1; fvScalarMatrix Teqn ( fvm::ddt(rho, T) - fvm::laplacian(DT, T) ); Teqn.solve(); } cfdsolver1, amolrajan and mikulo like this.

 May 19, 2016, 18:25 #6 Member   Join Date: Oct 2015 Posts: 63 Rep Power: 10 Hey, I have modified the icoFoam solver to solve the energy equation by following the steps detailed in https://openfoamwiki.net/index.php/H...ure_to_icoFoam Now, I want to make the thermal diffusivity (DT) temperature dependent. Can someone tell me how to go about doing this? Where should I make the changes? Thanks!! Ram

 Tags function, laplacianfoam, property, temperature