← Back to team overview

yade-users team mailing list archive

Re: [Question #699072]: About the examples/ThermalEngine

 

Question #699072 on Yade changed:
https://answers.launchpad.net/yade/+question/699072

    Status: Needs information => Open

Ziyu Wang gave more information on the question:
Hello,Robert

1.I have followed your suggestion, installed ubuntu18.04 and installed Source-code.Unfortunately,the problem still exists..:
################
CHOLMOD warning: matrix not positive definite. file: ../Supernodal/t_cholmod_super_numeric.c line: 911
/usr/lib/python3/dist-packages/matplotlib/__init__.py:831: MatplotlibDeprecationWarning: axes.color_cycle is deprecated and replaced with axes.prop_cycle; please use the latter.
  mplDeprecation)
/usr/lib/python3/dist-packages/matplotlib/__init__.py:801: MatplotlibDeprecationWarning: axes.color_cycle is deprecated and replaced with axes.prop_cycle; please use the latter.
  mplDeprecation)
################

printAllVersions():
Yade version   :  2021-10-08.git-a6d7547
Yade features  :  LOGGER USEFUL_ERRORS VTK OPENMP GTS QT5 CGAL PFVFLOW PFVFLOW LINSOLV MPI TWOPHASEFLOW FEMLIKE GL2PS LBMFLOW THERMAL PARTIALSAT POTENTIAL_PARTICLES POTENTIAL_BLOCKS
Yade config dir:  ~/.yade-2021-10-08.git-a6d7547
Yade precision :  53 bits, 15 decimal places, without mpmath, PrecisionDouble
```

Libraries used :

| library       | cmake                | C++                 |
| ------------- | -------------------- | ------------------- |
| boost         | 106501               | 1.65.1              |
| cgal          |                      | 4.11                |
| clp           | 1.16.11              | 1.16.11             |
| cmake         | 3.10.2               |                     |
| coinutils     | 2.10.14              | 2.10.14             |
| compiler      | /usr/bin/c++ 7.5.0   | gcc 7.5.0           |
| eigen         | 3.3.4                | 3.3.4               |
| freeglut      | 2.8.1                |                     |
| gl            |                      | 20190911            |
| ipython       | 5.5.0                |                     |
| metis         |                      | 5.1.0               |
| mpi           | 3.1                  | ompi:2.1.1          |
| mpi4py        | 2.0.0                |                     |
| mpmath        | 1.0.0                |                     |
| openblas      |                      |  OpenBLAS 0.2.20    |
| python        | 3.6.9                | 3.6.9               |
| qglviewer     |                      | 2.6.3               |
| qt            |                      | 5.9.5               |
| sphinx        | 1.6.7-final-0        |                     |
| sqlite        |                      | 3.22.0              |
| suitesparse   | 5.1.2                | 5.1.2               |
| vtk           | 6.3.0                | 6.3.0               |

```
Linux version  :  Ubuntu 18.04.6 LTS
Architecture   :  amd64
Little endian  :  True

(ps:other example scripts such as flowscenario and THMcoupling can run
normally,only this script is unsuccessful, maybe it is my personal
installation problem?)

2.>>Have you actually looked at your packing? It seems you are
simulating a gaseous state of spheres (although there is no way to know
without an MWE). ThermalEngine was not designed to handle this kind of
packing.

Sorry for my stupidity,does the gaseous state of the sphere mean that
the sphere is too scattered (not dense enough?).I refer to
thermoHydroMechanical_coupling.py before using makecloud. Is there
anything wrong?

MWE as follows:
#################################
from yade import pack, ymport
from yade import timing
import numpy as np
import shutil
timeStr = time.strftime('%m-%d-%Y')
num_spheres=1000# number of spheres
young=1e9
rad=0.003

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

thermalCond = 2. #W/(mK)
heatCap = 710. #J(kg K) 
t0 = 333.15 #K

r = rad
k = 2.0   # 2*k*r 
Cp = 710.
rho = 2600.
D = 2.*r
m = 4./3.*np.pi*r**2/rho

identifier = '-noFlowScenario'

if not os.path.exists('VTK'+timeStr+identifier):
	os.mkdir('VTK'+timeStr+identifier)
else:
	shutil.rmtree('VTK'+timeStr+identifier)
	os.mkdir('VTK'+timeStr+identifier)

if not os.path.exists('txt'+timeStr+identifier):
	os.mkdir('txt'+timeStr+identifier)
else:
	shutil.rmtree('txt'+timeStr+identifier)
	os.mkdir('txt'+timeStr+identifier)

mn,mx=Vector3(0,0,0),Vector3(0.05,0.05,0.05)

O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=radians(3),density=2600,label='spheres'))
O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls'))

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

sp=SpherePack()
sp.makeCloud(mn,mx,num=100,rRelFuzz=0.333)
sp.toSimulation(material='spheres')

print('num bodies ', len(O.bodies))

triax=TriaxialStressController(
	maxMultiplier=1.+2e4/young, 
	finalMaxMultiplier=1.+2e3/young, 
	thickness = 0,
	stressMask = 7,
	internalCompaction=True,
)

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

newton=NewtonIntegrator(damping=0.2)
intRadius = 1
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),#introduced as a dead engine for the moment, see 2nd section
	ThermalEngine,	GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
	triax,
	#VTKRecorder(iterPeriod=500,fileName='VTK'+timeStr+identifier+'/spheres-',recorders=['spheres','thermal','intr'],dead=1,label='VTKrec'),
	newton
]

for b in O.bodies:
	if isinstance(b.shape, Sphere): 
		b.dynamic=False # mechanically static


flow.dead=0
flow.defTolerance=-1 
flow.meshUpdateInterval=-1
flow.useSolver=4
flow.permeabilityFactor= 1
flow.viscosity= 0.001 
flow.bndCondIsPressure=[0,0,0,0,0,0]
flow.bndCondValue=[0,0,0,0,0,0]
flow.thermalEngine=True
flow.debug=False
flow.fluidRho = 997
flow.fluidCp = 4181.7 
flow.bndCondIsTemperature=[0,0,0,0,0,0]
flow.thermalEngine=True
flow.thermalBndCondValue=[0,0,0,0,0,0]
flow.tZero=343.15
flow.pZero=0

thermal.dead=0
thermal.debug=False
thermal.fluidConduction=True
thermal.ignoreFictiousConduction=True
thermal.conduction=True
thermal.thermoMech=False
thermal.solidThermoMech = False
thermal.fluidThermoMech = False
thermal.advection=True
thermal.bndCondIsTemperature=[0,0,0,0,0,0]
thermal.thermalBndCondValue=[0,0,0,0,0,0]
thermal.fluidK = 0.6069 
thermal.fluidConductionAreaFactor=1.
thermal.uniformReynolds=10 # using an extremely low reynolds number to maintain a heat transfer coefficient
thermal.particleT0 = 333.15
thermal.particleDensity=2600.
thermal.particleK = 2. #thermalCond
thermal.particleCp = 710.
thermal.tsSafetyFactor=0
thermal.useKernMethod=True
thermal.useHertzMethod=False
timing.reset()

O.dt=0.1e-4
O.dynDt=False


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

def bodyByPos(x,y,z):
	cBody = O.bodies[1]
	cDist = Vector3(100,100,100)
	for b in O.bodies:
		if isinstance(b.shape, Sphere):
			dist = b.state.pos - Vector3(x,y,z)
			if np.linalg.norm(dist) < np.linalg.norm(cDist):
				cDist = dist
				cBody = b
#	print 'found closest body ', cBody.id, ' at ', cBody.state.pos
	return cBody

bodyOfInterest = bodyByPos(0.025,0.025,0.025)

#print "found body of interest at", bodyOfInterest.state.pos
  

axis = np.linspace(mn[0], mx[0], num=5)
axisBodies = [None] * len(axis)
axisTrue = np.zeros(len(axis))
for i,x in enumerate(axis):
	axisBodies[i] = bodyByPos(x, mx[1]/2, mx[2]/2)
	axisTrue[i] = axisBodies[i].state.pos[0]

from yade import plot

def history():
	plot.addData(
		ftemp1=flow.getPoreTemperature((0.025,0.025,0.025)),
		#ftemp2=flow.getPoreTemperature((0.5,0.1,0.5)),
		#ftemp3=flow.getPoreTemperature((0.5,0.9,0.5)),
		p=flow.getPorePressure((0.025,0.025,0.025)),
		t=O.time,
		i = O.iter,
		temp1 = axisBodies[0].state.temp,
		temp2 = axisBodies[1].state.temp,
		temp3 = axisBodies[2].state.temp,
		temp4 = axisBodies[3].state.temp,
		temp5 = axisBodies[4].state.temp,
		bodyOfIntTemp = O.bodies[bodyOfInterest.id].state.temp

)
	plot.saveDataTxt('txt'+timeStr+identifier+'/temps'+identifier+'.txt',vars=('t','i','p','ftemp1', 'temp1','temp2','temp3','bodyOfIntTemp'))

O.engines=O.engines+[PyRunner(iterPeriod=500,command='history()',label='recorder')]


def endFlux():
	if O.time >= 30:
		O.pause()
O.engines=O.engines+[PyRunner(iterPeriod=10,command='endFlux()')]
from yade import plot

plot.plots={'t':(('ftemp1','k-'),('bodyOfIntTemp','r-'))} #
plot.plot()
O.saveTmp()

#print "starting thermal sim"
O.run()
###########################
Thanks Robert again!

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.