Thermal conduction in clumps

Asked by Zoheir Khademian on 2020-08-01

Hello

I am trying to use the thermal conduction scheme in clump particles. I have a column of 6 spheres. The top sphere is stand alone with 400 K fixed temperature boundary condition but the remaining 5 spheres make up two clumps with initial temperature of 100 K. When running the model, heat is transferred from the top sphere to its neighboring sphere belonging to a clump. However, there is no conduction within the clump itself so the rest of spheres in the model remain at 100 K temperature.

My question is how to get the thermal engine to conduct heat within clumps themselves? Here is the code:

from yade import pack
from numpy import arange
import itertools
import random
import numpy as np
import shutil
from yade import plot
thermalCond = 2. #W/(mK)
heatCap = 710. #J(kg K)
t0 = 100. #K
rad=0.003
intRadius=1

mn,mx=Vector3(0,0,0),Vector3(0.01,0.01,0.06) # corners of the initial packing

O.materials.append(FrictMat(young=6e6,poisson=.4,frictionAngle=0,density=2600,label='frictionless'))

walls=aabbWalls([mn,mx],material='frictionless')
wallIds=O.bodies.append(walls)

SPack=pack.regularOrtho(pack.inAlignedBox(mn,mx),radius=rad,gap=-1.e-5,material='frictionless')
O.bodies.appendClumped([SPack[0],SPack[1]])
O.bodies.appendClumped([SPack[2],SPack[3],SPack[4]])
O.bodies.append([SPack[5]])

ThermalEngine = ThermalEngine(dead=1,label='thermal');

newton=NewtonIntegrator(damping=0.2)
O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=intRadius),Bo1_Box_Aabb()]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=intRadius),Ig2_Box_Sphere_ScGeom()],
  [Ip2_FrictMat_FrictMat_FrictPhys()],
  [Law2_ScGeom_FrictPhys_CundallStrack()],label="iloop"
 ),
 FlowEngine(dead=1,label="flow",multithread=False),
 ThermalEngine, GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.1),
 newton
]
for o in O.bodies:
 o.dynamic=False

flow.dead=0
flow.defTolerance=0.3#-1 #
flow.meshUpdateInterval=200#-1
flow.useSolver=4
flow.permeabilityFactor=-0.7e-7 #1
flow.viscosity=10
flow.bndCondIsPressure=[0,0,0,0,0,0]
flow.bndCondValue=[0,0,0,0,0,0]
flow.boundaryUseMaxMin=[0,0,0,0,0,0]
flow.thermalEngine=True
flow.debug=False
flow.fluidRho = 1000
flow.fluidCp = 4184
flow.fluidK = 0.650
flow.bndCondIsTemperature=[0,0,0,0,0,1]
flow.thermalEngine=True
flow.thermalBndCondValue=[0,0,0,0,0,400]

flow.tZero=t0
flow.pZero=0
thermal.dead=0
thermal.conduction=True
thermal.thermoMech=False
thermal.advection=False
thermal.fluidThermoMech = False
thermal.solidThermoMech = False
thermal.fluidConduction= False

thermal.bndCondIsTemperature=[0,0,0,0,0,1]
thermal.thermalBndCondValue=[0,0,0,0,0,400]
thermal.tsSafetyFactor=0
thermal.particleDensity=2600
thermal.particleT0=t0
thermal.particleCp=heatCap
thermal.particleK=thermalCond
thermal.particleAlpha =11.6e-3
thermal.useKernMethod=False

flow.updateTriangulation=True

O.run(1,1)
flow.dead=1

def ColorScaler():
 for s in O.bodies:
  s.shape.color=scalarOnColorScale(s.state.temp,100,400)

O.engines=O.engines+[PyRunner(command='ColorScaler()',iterPeriod=100)]
def history():
 plot.addData(
  t=O.time,
  i = O.iter,
  Particle1 = SPack[0].state.temp,
  Particle2 = SPack[1].state.temp,
  Particle3 = SPack[2].state.temp,
  Particle4 = SPack[3].state.temp,
  Particle5 = SPack[4].state.temp,
  Particle6 = SPack[5].state.temp,
)

O.engines=O.engines+[PyRunner(iterPeriod=500,command='history()',label='recorder')]
plot.plots={'t':(('Particle1','b-'),('Particle2','b--'),('Particle3','k-'),('Particle4','r-'),('Particle5','g-'),('Particle6','k--'))} #
#VTKrec.dead=0

plot.plot()

O.run(100000,1)

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Robert Caulk
Solved:
2020-08-04
Last query:
2020-08-04
Last reply:
2020-08-04
Robert Caulk (rcaulk) said : #1

Hello,

First, it is important to understand what a clump is in Yade [1]. You will notice that it explains how there are no interactions between clump members of the same clump. Conduction depends on interactions and thus I am not surprised that there is no conduction occuring within the clump.

So my question is, what are you trying to model in particular, and why does the clump need to behave thermally heterogeneous but mechanically homogeneous? The answer to this question will help us understand if may there is a better approach than to use clumps.

Thanks,

Robert

[1]https://yade-dem.org/doc/user.html#clumping-particles-together

Zoheir Khademian (zkhademian) said : #2

Hi Robert and thanks for the reference and explanation.

 I would like to model a soil grain as an assembly of spheres and study thermal-mechanical characteristics of the modeled soil. Using a cluster of spheres bonded together as an agglomerate works well but is computationally expensive. So, generating a clump representing a grain can be a good alternative. Please let me know of any better alternatives you can think of.

So based on your response, clumps cannot transfer heat between their members but can be homogeneously heated.
In the code I posted, only the clump member that is in contact with the 400K stand-alone sphere shows temperature change and the rest stay at 100K.

So I guess my question is if clumps are meant to behave homogeneously in both mechanical and thermal modes, why only one member is heated and the rest stay at 100K? Am I missing something in the thermal engine?

Thanks

Zoheir

Best Robert Caulk (rcaulk) said : #3

>So based on your response, clumps cannot transfer heat between their members but can be homogeneously heated.

At the moment, the thermal behavior of clumps is undefined. However, cohesive materials or cohesive agglomerates do work in ThermalEngine. If you need clumps with ThermalEngine, you need to modify the source code.

Cheers,

Robert

Zoheir Khademian (zkhademian) said : #4

Thanks, Robert