import itasca as it
from vec import vec3
it.command("""
model new
model domain extent -1 1
mpoint node spacing 1.0
mpoint generate range position -0.5 -0.5 -0.5 0.5 0.5 0.5
""")
it.mpoint.count()
mp = it.mpoint.find(1)
print(mp)
mp.pos()
print("material point", mp.id(), "at", mp.pos())
total_mass = 0.0
for mp in it.mpoint.list():
total_mass += mp.mass()
print(total_mass)
mp = it.mpoint.near((-0.475, -0.475, -0.475))
print(mp.id())
it.command("""
mpoint create position 0.9,0.9,0.9 volume 0.01
""")
mp_new = it.mpoint.find(1)
print("New material point at:", mp_new.pos())
it.command("""
model large-strain on
mpoint cmodel assign elastic
mpoint property density 2000 young 1e5 poisson 0.3
model gravity 0 0 -10
""")
mp.props()
mp.prop('young')
mp.set_prop('young', 20000)
print(mp.prop('young'))
mp.disp()
mp.velocity()
mp.stress()
mp.strain()
mp.set_disp((0, 1, 0))
print(mp.disp().mag())
it.command("""
mpoint initialize displacement multiply 2
""")
print(mp.disp().mag())
it.command("""
mpoint group 'test1' range position -0.5 -0.5 -0.5 0 0 0
mpoint group 'test2' slot 'bigger' range position -0.5 -0.5 -0.5 0 0.5 0.5
""")
for mp in it.mpoint.list():
if mp.pos_x() < 0 and mp.pos_y() < 0 and mp.pos_z() < 0:
if mp.in_group('test1'):
print("MP", mp.id(), "is in group test1")
for mp in it.mpoint.list():
if mp.pos_x() < 0:
mp.set_group('region_left')
if mp.in_group('region_left'):
print("MP", mp.id(), "added to region_left")
it.command("""
mpoint extra 1 [vector(1,1,1)]
""")
for mp in it.mpoint.list():
print("MP", mp.id(), "extra(1):", mp.extra(1))
mp.set_extra(2, "custom_data")
print("MP", mp.id(), "extra(2):", mp.extra(2))
for mp in it.mpoint.list():
if mp.pos_x() < 0:
mp.set_force_app((1, 1, 1))
print("MP", mp.id(), "applied force:", mp.force_app())
import numpy as np
ma = it.mpoint.mpmpointarray
print(type(ma.density()))
print(type(ma.pos()))
print(type(ma.velocity()))
print(type(ma.stress()))
ma.set_density(ma.density() * 1.1)
print("Updated densities:", ma.density())
it.mpoint.mech_ratio_avg()
it.mpoint.mech_ratio_max()
it.mpoint.mech_unbal_max()
it.mpoint.mech_ratio_local()
mp = it.mpoint.find(1)
print("Volume:", mp.vol())
print("Mass:", mp.mass())
print("Density:", mp.density())
for mp in it.mpoint.list():
print("MP", mp.id(), "deformation:", mp.deformation())
mp.set_pp(1.4)
print("Pore pressure:", mp.pp())
mp.set_pp_fix(True)
print("PP fix enabled:", mp.pp_fix())