New question #698829 on Yade:
https://answers.launchpad.net/yade/+question/698829

Dear all,

I use yadedaily:
Yade 20210909-5909~5b11526~focal1
Using python version: 3.8.10 (default, Jun 2 2021, 10:49:15)
[GCC 9.4.0]
Ubuntu 20.04

Since my ultimate goal is to achieve high-temperature rock testing, I decided 
to apply high-temperature conditions to the sample first.However,in the process 
of my attempts, there are several questions related to FlowEngine and 
ThermalEngine that confused me.
1.Since the purpose of my script is to achieve high temperature conditions, I 
don’t think I need to use FlowEngine.But when I run the script,an error message 
appears: 'the core has been dumped'(Ps:Chinese on my system).When I added 
FlowEngine, this error disappeared. Does it mean that ThermalEngine cannot be 
used alone?
2.As mentioned above, if two engines must be used together, then what is the 
difference between FlowEngine.thermalBndCondValue and 
ThermalEngine.thermalBndCondValue?
3.The script I ended up running is as follows.Unfortunately, it was not as 
successful as I expected.I found that the body.state.temp=Nan.What's the 
problem?

##########code############
from yade import pack,ymport,plot
from yade import timing
import numpy as np
import shutil
timeStr=time.strftime('%m-%d-%Y')
mn,mx=Vector3(0,0,0),Vector3(0.05,0.05,0.05)
identifier = '-keep_temp'
young=1e9

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)

O.materials.append(FrictMat(young=1e9,poisson=0.25,frictionAngle=radians(3),density=2600,label='spheres'))
O.materials.append(FrictMat(young=1e9,poisson=0.25,frictionAngle=0,density=0,label='walls'))
walls=aabbWalls([mn,mx],thickness=0,material='walls')
wallIds=O.bodies.append(walls)
sp=O.bodies.append(ymport.text('radius_0.0008.sphere',color=(0.1,0.1,0.9),material='spheres'))
print('num bodies:',len(O.bodies))

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

Thermal = ThermalEngine(dead=1,label='thermal');
newton=NewtonIntegrator(damping=0.2)
intRadius=1.5
O.engines=[
        ForceResetter(),
        
InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=intRadius,label='is2aabb'),Bo1_Box_Aabb()]),
        InteractionLoop(
                
[Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=intRadius,label='ss2sc'),Ig2_Box_Sphere_ScGeom()],
                [Ip2_FrictMat_FrictMat_FrictPhys()],
                [Law2_ScGeom_FrictPhys_CundallStrack()],label="iloop"
        ),
        FlowEngine(dead=1,label="flow",multithread=False),
        Thermal,        
        
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
]

O.step()
is2aabb.aabbEnlargeFactor=-1
ss2sc.interactionDetectionFactor=-1

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

flow.dead=0
flow.defTolerance=-1 #0.3
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=298.15
flow.pZero=0

thermal.dead=0
thermal.debug=False
thermal.ignoreFictiousConduction=True
thermal.conduction=True
thermal.bndCondIsTemperature=[1,1,1,1,1,1]
thermal.thermalBndCondValue=[473.15,473.15,473.15,473.15,473.15,473.15]
thermal.particleT0=298.15  
thermal.particleDensity=2600
thermal.particleK=2 
thermal.particleCp=710
thermal.useKernMethod=True
thermal.uniformReynolds=10
thermal.useKernMethod=True

timing.reset()

O.dt=0.1e-3
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)
TolTemp=523.15

def Stop_condition():
        if bodyOfInterest.state.temp > TolTemp :
                O.stop()
                
O.engines=O.engines+[PyRunner(iterPeriod=100,command='Stop_condition()')]
        
def history():
        plot.addData(
                t=O.time,
                i=O.iter,
                bodyOfIntTemp=O.bodies[bodyOfInterest.id].state.temp
                )
        
plot.saveDataTxt('txt'+timeStr+identifier+'/temps'+identifier+'.txt',vars=('t','i','bodyOfIntTemp'))

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

plot.plots={'i':('bodyOfIntTemp')}
plot.plot()
O.saveTmp()

print('starting thermal sim')
O.run()
#############################

Many thanks for your help!
Best regards.

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

_______________________________________________
Mailing list: https://launchpad.net/~yade-users
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to