← Back to team overview

yade-users team mailing list archive

[Question #706786]: Can I add properties and color into export text file?

 

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

Hi,
I am trying to save the position, properties, and color(haven't made yet not sure how to). Can I export it into one text file for future importing uses for example I will import the text when I implement gravity deposition?

import random
import math
from yade import geom, pack, utils, plot, ymport, export
import numpy as np

# Materials Properties
gravel = CohFrictMat(young = 1e7, poisson = 0.25, density = 2700, label = 'gravel')
asphalt_binder = CohFrictMat(young = 1e7, poisson = 0.25, density = 1060, normalCohesion = 2e5, shearCohesion = 2e5, label = 'asphalt_binder')

# add properties
O.materials.append(gravel)
O.materials.append(asphalt_binder)

# Define cylinder with funnel parameters
center = (0, 0, 0)
diameter = 0.102
height = 0.18

# create cylindrical body with radius 0.102 m and height 0.064 m
cylinder = geom.facetCylinder(center=center, radius=diameter/2, height=height, segmentsNumber=80, wallMask=6)

# add cylinder to simulation
O.bodies.append(cylinder)

# Define cylinder with funnel parameters
center1 = (0,0,height/2)
dBunker = 0.4
dOutput = 0.102
hBunker = 0
hOutput = 0.15
hPipe = 0

# create funnel as a bunker with diameter 0.102 m, height 0.064 m
funnel = geom.facetBunker(center=center1, dBunker=dBunker, dOutput=dOutput, hBunker=hBunker,hOutput=hOutput, hPipe=hPipe, segmentsNumber=80, wallMask=4)

# add funnel to simulation
O.bodies.append(funnel)

def makeRandomBlocks(diameter, gridsize, minz, numblocks):
    bunkerLimit = diameter/2
    #
    # Make grid blocks inside a bunker
    #
    grid = np.arange(-bunkerLimit, bunkerLimit, gridsize)
    inGrid = []
    for yi in grid:
        for xi in grid:
            c = [[xi, yi], [xi+gridsize, yi], [xi+gridsize, yi+gridsize], [xi, yi+gridsize]]
            #
            # Check if the block corners are outside of the bunker or not
            #
            out = False
            for p in c:
                r = (p[0]**2 + p[1]**2)**0.5
                if r > bunkerLimit:
                    out = True
            #
            # If the block is inside the bunker, keep it
            #
            if not out:
                inGrid.append(c)
    layer = math.ceil(numblocks / len(inGrid))
    blocks = []
    for l in range(layer):
        for g in inGrid:
            zi = minz + l*gridsize
            p1 = g[0].copy()
            p1.append(zi)
            p2 = g[2].copy()
            p2.append(zi+gridsize)
            blocks.append([p1, p2])
    random.shuffle(blocks)
    return blocks

minZ = 2.35
dbunker = 0.4
gridSize = dbunker/8
numblocks = 51
blockList = makeRandomBlocks(dbunker, gridSize, minZ, numblocks)

for i in range(numblocks):
    print("Making cloud block", i+1, "/", numblocks)
    corner = blockList.pop()
    sp = pack.SpherePack()

    # 15.75 mm 13 particles
    if (i < 13): 
        n1 = sp.makeCloud(minCorner=corner[0], maxCorner=corner[1], rMean=0.01575/2, num=1)
 
    # 11 mm 51 particles 
    n2 = sp.makeCloud(minCorner=corner[0], maxCorner=corner[1], rMean=0.011/2, num=1)
 
    # 7.125 mm 51x11 = 561 particles
    n3 = sp.makeCloud(minCorner=corner[0], maxCorner=corner[1], rMean=0.007125/2, num=11)

    # 3.555 mm 51x100 = 5,100 particles 
    n4 = sp.makeCloud(minCorner=corner[0], maxCorner=corner[1], rMean=0.003555/2, num=100)

    # 1.77 mm 51x360 = 18,360 particles 
    n5 = sp.makeCloud(minCorner=corner[0], maxCorner=corner[1], rMean=0.00177/2, num=360)

    # 0.6 mm 51x19000 = 969,000 particles 
    n6 = sp.makeCloud(minCorner=corner[0], maxCorner=corner[1], rMean=0.0006/2, num=19000)
    
    # 0.3 mm 51x78510 = 4,004,010 particles 
    n7 = sp.makeCloud(minCorner=corner[0], maxCorner=corner[1], rMean=0.0003/2, num=78510)
    
    sp.toSimulation()

# give properties to sphere
for i in range(n1,n6):
    O.bodies[i].mat = gravel
for i in range(n6, n7):
    O.bodies[i].mat = asphalt_binder

# Save body IDs and materials to a text file
with open("body_properties.txt", "w") as file:
    for b in O.bodies:
        file.write(f"{b.id} {b.mat}\n")

export.text("testCloud.txt")

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