Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unexpected Vacancy in Generating a Straight Edge Dislocation #265

Open
Weixinyi-Cindy opened this issue Sep 7, 2024 · 3 comments
Open

Comments

@Weixinyi-Cindy
Copy link

Dear developers,
I am currently using the matscipy.dislocation module to generate a BCC edge dislocation for tungsten with the following properties:

  • The Burgers vector is (1,0,0).
  • The direction of the dislocation line is (0,0,−1).
  • The direction of the excess half atomic plane is (0,−1,0).

I utilized the following code to generate the edge dislocation:

cylinder_r = 200
a0, C11, C12, C44 = get_elastic_constants("./potentials/w_eam4.fs", delta=1e-3)
dislocation = disl.BCCEdge100Dislocation(a0, C11, C12, C44)
bulk1, disloc_ini, disloc_fin = dislocation.build_glide_configurations(radius=cylinder_r)
u0 = disloc_ini.positions - bulk1.positions

The issue arises in the 2D image of disloc_ini.positions. Along the (-1,0,0) direction on the slip plane, an unexpected vacancy appears near R = 170, where R represents the distance to the dislocation core.

edge dislocation1
edge dislocation2

It seems that along the (-1,0,0) direction on the slip plane, atoms with R < 170 are moving towards the dislocation core, while atoms with R > 170 are moving away from it, which creates the appearance of a "vacancy" near R = 170.

I tried using different values of cylinder_r (greater than 170), but the same issue persists near R = 170. I would appreciate guidance on how to resolve this problem. Thank you!

@jameskermode
Copy link
Member

@thomas-rocke could you take a look at this?

@thomas-rocke
Copy link
Contributor

Hi @Weixinyi-Cindy ,

This issue arises because of the self-consistent way we treat the continuum linear elastic displacements for BCC dislocations - there's a divergent behaviour of the displacements for atoms at the same y coordinate as the dislocation core, which is what drives the sudden change in dislocation positions.

Below is a temporary work-around for building a dislocation cylinder, whilst we work on a more sustainable fix for this. I turn the self-consistency off, and then apply self-consistent displacements only for a small inner radius of atoms.

cylinder_r = 200
a0, C11, C12, C44 = get_elastic_constants("./w_eam4.fs", delta=1e-3)

dislocation = disl.BCCEdge100Dislocation(a0, C11, C12, C44)

# First, build a cylinder with SC turned off
bulk, disl = dislocation.build_cylinder(radius=cylinder_r, self_consistent=False)

sc_radius = 50

# Get a mask of all atoms within a radius of sc_radius
core_position = np.array(disl.info["core_positions"])[0, :]
sc_mask = np.linalg.norm(bulk.positions[:, :2] - core_position[:2], axis=-1) <= sc_radius

# Calculate the SC displacements for atoms in mask
sc_disps = dislocation.displacements(bulk.positions[sc_mask], core_position, self_consistent=True)

disloc_pos = disl.positions.copy()

# Apply SC positions to existing disloc positions
disloc_pos[sc_mask, :] = bulk.positions[sc_mask, :] + sc_disps

disl.set_positions(disloc_pos)

@Weixinyi-Cindy
Copy link
Author

@jameskermode Thank you very much for your help!
@thomas-rocke Thank you very much for your detailed response. With the help of the program you provided, I was able to successfully generate the correct BCC dislocation configuration.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants