yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #26446
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.