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

ENH: Compute Taylor factor of each feature and average value for ensemble #1050

Open
2 tasks done
StopkaKris opened this issue Aug 19, 2024 · 3 comments
Open
2 tasks done
Labels
enhancement New feature or request Feature Request

Comments

@StopkaKris
Copy link

Is there an existing plan for this?

  • I have searched the existing discussions, release notes, and documentation.

Description of the Feature, Filter, or Functionality?

Hello,

Could we add a filter to compute the Taylor factor for each feature/grain? It is commonly reported in literature to quantify the texture of a polycrystal. Our group currently relies on custom codes or integration with MTEX, but it would be great if DREAM.3D could compute this directly. It would be structured similar to the "Compute Schmid Factors" filter. I am happy to help with this implementation in any way I can.

References:
Bishop and Hill. A theoretical derivation of the plastic properties of a polycrystalline face-centred metal. https://doi.org/10.1080/14786444108561385

Miller and Dawson. Influence of slip system hardening assumptions on modeling stress dependence of work hardening. https://doi.org/10.1016/S0022-5096(97)00029-X

Version

7.0.x (DREAM3DNX beta)

What section did you foresee your suggestion falling in? [Further details may be required during triage process]

No response

High Level Steps To Implement

No response

Anything else?

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct
@StopkaKris StopkaKris added the enhancement New feature or request label Aug 19, 2024
@imikejackson
Copy link
Contributor

@StopkaKris If you have actual code implementations that would be a start. Not sure of the band width I have for this at the moment but if you can tie the need to an actual DoD or DoE contract that would help.

@StopkaKris
Copy link
Author

@imikejackson The MatLab code leverages MTEX and is posted below. The calculation is most straightforward for FCC because the 12 slip systems have identical resistance to slip, and I think my peers more versed in this topic may say that this calculation can be more complex for HCP crystals, because I think it depends on relative slip system strengths... Nonetheless, the simplified calculation for HCP is still very useful.

The current work that relies on these calculations is sponsored by NASA (ESI19 Grant number 80NSSC20K0296) and NIST (grant number 70NANB21H005). The latest publications that leveraged this code are available here, here, and here, and we have others in preparation. I don't think our group has any current DoD or DoE projects that rely on this but we did in the past and may have others in the future.

addpath('C:\Users\stopk\Desktop\MTEX\mtex-6.0.beta3');
startup_mtex
clear variables; close all;

% startup_mtex

disp('Start...')

%% Input and calculation for HCP crystal

% Add your orientation/Euler angles here. It can be a single orientation or nx3 vector containing multiple orientations
% NOTE: angles must be in radians for MTEX.

ang_data_HCP = [
1.4416009	0.41336653	3.8852353
2.0489373	1.5178732	3.779793
0.85339028	1.0982764	6.1133742
4.1814857	1.4110879	3.241231
5.5727954	1.7680696	0.51296496
3.2973526	1.4986781	1.8723277
1.9572715	1.6110781	1.7915303
6.0501504	1.7549795	0.25639468
2.0195224	2.1245868	5.739234
4.8148546	1.105855	5.3476686
3.6220899	2.6163311	5.0088763];

% Specify a loading direction, here it is the X direction
eps = strainTensor(diag([1 -0.5 -0.5])); %Uniaxial tension

% Specify HCP crystal symmetry
cs_HCP = crystalSymmetry('hexagonal')
    
% Specify HCP slip systems
sBasal = slipSystem.basal(cs_HCP);
ssPrism = slipSystem.prismaticA(cs_HCP);
ssPyrA = slipSystem.pyramidalA(cs_HCP);
ssPyrCA = slipSystem.pyramidalCA(cs_HCP);

ss = [sBasal; ssPrism; ssPyrA; ssPyrCA];

ori = orientation.byEuler(ang_data_HCP(:,1),ang_data_HCP(:,2),ang_data_HCP(:,3),cs_HCP)

% NOTE: if orientations are supplies as degrees, the line below will
% convert to radians
% ori = orientation.byEuler(angdat(:,1)*degree,angdat(:,2)*degree,angdat(:,3)*degree,cs)

% Compute Taylor factor
[M,b,W] = calcTaylor(inv(ori)*eps,ss.symmetrise);

M_grains = M; %Taylor factor for each orientation in angdat
Tay = mean(M) %The mean Taylor factor for the aggregate 


%% Input and calculation for FCC crystal

% Add your orientation/Euler angles here. It can be a single orientation or nx3 vector containing multiple orientations
% NOTE: angles must be in radians for MTEX.

ang_data_FCC = [
2.2763655	1.3206245	5.6447248
5.1452227	1.5281901	4.0765667
0.74482793	0.76546848	1.5905015
2.9133639	1.3761976	0.51417983
4.806447	2.7984304	5.0935655
0.10467447	1.9473389	4.0803266
5.7894387	1.7973889	0.85527849
2.8706079	0.49759239	2.1377926
5.6877685	2.2614186	0.22883539];

% Specify a loading direction, here it is the X direction
eps = strainTensor(diag([1 -0.5 -0.5])); %Uniaxial tension

% Specify FCC crystal symmetry
cs_FCC = crystalSymmetry('m-3m')

% Consider FCC slip systems
sS = symmetrise(slipSystem.fcc(cs_FCC));

ori = orientation.byEuler(ang_data_FCC(:,1),ang_data_FCC(:,2),ang_data_FCC(:,3),cs_FCC)

% Compute Taylor factor
[M,b,W] = calcTaylor(inv(ori)*eps,sS);

M_grains = M; %Taylor factor for each orientation in angdat
Tay = mean(M) %The mean Taylor factor for the aggregate ```

@StopkaKris
Copy link
Author

@imikejackson I have internal codes that compute the Taylor factor for FCC crystals without the need for MTEX, but I have to spend some time to properly label these and include the proper references, so this might take a while. Let's table these efforts for the time being.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request Feature Request
Projects
None yet
Development

No branches or pull requests

2 participants