python_mpac.py


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())