DAMASK tutorial #

  • creating necessary inputs for damask

  • runing the damask jobs

here more option is given to the user to select from damask python package itself.

Importing libraries and creating Project#

from pyiron_continuum import Project
from damask import Rotation
%matplotlib inline
pr = Project("damask_proj")

Creating the Damask job#

job = pr.create.job.DAMASK("damask_job")

Creating the necessary inputs#

Homogenization#

homogenization = pr.create.DAMASK.homogenization(
    method='SX', 
    parameters={'N_constituents': 1, "mechanical": {"type": "pass"}}
)
homogenization = pr.continuum.damask.Homogenization(
    method='SX', 
    parameters={'N_constituents': 1, "mechanical": {"type": "pass"}}
)

Elasticity#

elasticity = pr.continuum.damask.Elasticity(
    type='Hooke',
    C_11=106.75e9,
    C_12=60.41e9,
    C_44=28.34e9
)

Plasticity#

plasticity = pr.continuum.damask.Plasticity(
    N_sl=[12],
    a_sl=2.25, 
    atol_xi=1.0,
    dot_gamma_0_sl=0.001,
    h_0_sl_sl=75e6,
    h_sl_sl=[1, 1, 1.4, 1.4, 1.4, 1.4],
    n_sl=20,
    output=['xi_sl'],
    type='phenopowerlaw',
    xi_0_sl=[31e6],
    xi_inf_sl=[63e6]
)

Phase#

phase = pr.continuum.damask.Phase(
    composition='Aluminum',
    lattice= 'cF',
    output_list=['F', 'P', 'F_e', 'F_p', 'L_p', 'O'],
    elasticity=elasticity,
    plasticity=plasticity
)

Rotation#

rotation = pr.continuum.damask.Rotation(Rotation.from_random, 10)

Material#

material = pr.continuum.damask.Material([rotation],['Aluminum'], phase, homogenization)
job.material = material

Grid#

grid = pr.continuum.damask.Grid.via_voronoi_tessellation(box_size=1., grid_dim=4, num_grains=10)
job.grid = grid

Loading#

load_step =[{'mech_bc_dict':{'dot_F':[1e-3,0,0, 0,'x',0,  0,0,'x'],
                            'P':['x','x','x', 'x',0,'x',  'x','x',0]},
            'discretization':{'t': 10.,'N': 40},
            'additional': {'f_out': 4}
           },{'mech_bc_dict':{'dot_F':[1e-3,0,0, 0,'x',0,  0,0,'x'],
                              'P':['x','x','x', 'x',0,'x',  'x','x',0]},
            'discretization':{'t': 60.,'N': 60},
            'additional': {'f_out': 4}
           }]
solver = job.list_solvers()[0]
job.loading = pr.continuum.damask.Loading(solver=solver, load_steps=load_step)

Runing the job#

job.run()
The job damask_job was saved and received the ID: 55
 ██████████████████████████████████████████████████ 100% ETA 0:00:00
 ██████████████████████████████████████████████████ 100% ETA 0:00:00
 ██████████████████████████████████████████████████ 100% ETA 0:00:00
 ██████████████████████████████████████████████████ 100% ETA 0:00:00
 ██████████████████████████████████████████████████ 100% ETA 0:00:00
 ██████████████████████████████████████████████████ 100% ETA 0:00:00
 ██████████████████████████████████████████████████ 100% ETA 0:00:00
 ██████████████████████████████████████████████████ 100% ETA 0:00:00
 ██████████████████████████████████████████████████ 100% ETA 0:00:00
 ██████████████████████████████████████████████████ 100% ETA 0:00:00
 ██████████████████████████████████████████████████ 100% ETA 0:00:00
 ██████████████████████████████████████████████████ 100% ETA 0:00:00

Post-processing#

job.plot_stress_strain(component='zz');
../../_images/088f468f7935c6caed9a3d51699e717f6095802da981afec9f924628bc76bd29.png
job.plot_stress_strain(von_mises=True);
../../_images/4a620fb0932b5513594106f6dec38903178aeebf119f91ed1921797217a7664c.png