Place randomly distributed nuclei

 Posts: 25
 Joined: Fri Feb 01, 2019 8:53 pm
 anti_bot: 333
 Location: University of British Columbia
Place randomly distributed nuclei
Hi all, this is my first post here...
I'm doing a 2D benchmarking nucleation and grain growth simulation with MICRESS and I want to place randomly distributed grains into a bulk domain (i.e. no initial grain boundaries). The bulk domain is set to have a recrystallization energy of 3 MPa and the nuclei have 0 MPa.
I want to place randomly distributed nuclei (i.e. "bulk" nuclei in the nucleation option) so I can perform the JMAK analysis on fraction recrystallized. I tuned shield distance and shield time, but so far the nuclei does not seem to be randomly placed throughout the simulation domain (see the attached image). For example, the first 6 nuclei all locate in the very bottom of the domain and some seem to lie on the same horizontal line. I wonder if there's a way to randomly place bulk nuclei within MICRESS.
The "Data for Further Nucleation" section in my MICRESS "*.in" file is included below. My domain size is 250x250 micrometers.
Thanks in advance,
Billy
# Data for further nucleation
# ===========================
# Enable further nucleation?
# Options: nucleation nucleation_symm no_nucleation [verboseno_verbose]
nucleation
# Additional output for nucleation?
# Options: out_nucleation no_out_nucleation
no_out_nucleation
#
# Number of types of seeds?
1
#
# Input for seed type 1:
# 
# Type of 'position' of the seeds?
# Options: bulk region interface triple quadruple front [restrictive]
bulk
# Phase of new grains (integer) [unresolvedadd_to_grain]?
1
# Reference phase (integer) [min. and max. fraction (real)]?
1
# Which nucleation model shall be used?
# Options: seed_undercooling seed_density
seed_undercooling
# maximum number of new nuclei 1?
# (set negative for unlimited number)
20
# Grain radius [micrometers]?
0.500000
# Choice of growth mode:
# Options: stabilisation analytical_curvature
stabilisation
# critical recrystallisation energy [J/cm**3 or MPa]?
1.0000
# Determination of nuclei orientations?
# Options: random fix fix_direction parent_relation
random
# Shield effect:
# Shield time [s] [shield phase or group number] ?
1000.00
# Shield distance [micrometers] [ nucleation distance [micrometers] ]?
30.000 30.000
# Shall categorizaton be applied to this seed type?
# Options: categorize {number} no_categorize
categorize
# Input of minimal and maximal energy of the nuclei:
# Minimum of recrystallisation energy? [J/cm**3 or MPa]
0.0000
# Maximum of recrystallisation energy? [J/cm**3 or MPa]
0.0000
# Nucleation range
# min. nucleation temperature for seed type 1 [K]
0
# max. nucleation temperature for seed type 1 [K]
2000.000
# Time between checks for nucleation? [s]
# Options: constant from_file
constant
# Time interval [s]
1.50000E02
# Shall random noise be applied?
# Options: nucleation_noise no_nucleation_noise
nucleation_noise
# Factor for random noise?
# (applied as DeltaT > (1+Factor*(RAND1/2))*DeltaT)
1.000E03
#
# Seed for randomnumber generator initialisation
# 
22
# Max. number of simultaneous nucleations?
# 
# (set to 0 for automatic)
0
#
# Shall metastable small seeds be killed?
# 
# Options: kill_metastable no_kill_metastable
no_kill_metastable
#
I'm doing a 2D benchmarking nucleation and grain growth simulation with MICRESS and I want to place randomly distributed grains into a bulk domain (i.e. no initial grain boundaries). The bulk domain is set to have a recrystallization energy of 3 MPa and the nuclei have 0 MPa.
I want to place randomly distributed nuclei (i.e. "bulk" nuclei in the nucleation option) so I can perform the JMAK analysis on fraction recrystallized. I tuned shield distance and shield time, but so far the nuclei does not seem to be randomly placed throughout the simulation domain (see the attached image). For example, the first 6 nuclei all locate in the very bottom of the domain and some seem to lie on the same horizontal line. I wonder if there's a way to randomly place bulk nuclei within MICRESS.
The "Data for Further Nucleation" section in my MICRESS "*.in" file is included below. My domain size is 250x250 micrometers.
Thanks in advance,
Billy
# Data for further nucleation
# ===========================
# Enable further nucleation?
# Options: nucleation nucleation_symm no_nucleation [verboseno_verbose]
nucleation
# Additional output for nucleation?
# Options: out_nucleation no_out_nucleation
no_out_nucleation
#
# Number of types of seeds?
1
#
# Input for seed type 1:
# 
# Type of 'position' of the seeds?
# Options: bulk region interface triple quadruple front [restrictive]
bulk
# Phase of new grains (integer) [unresolvedadd_to_grain]?
1
# Reference phase (integer) [min. and max. fraction (real)]?
1
# Which nucleation model shall be used?
# Options: seed_undercooling seed_density
seed_undercooling
# maximum number of new nuclei 1?
# (set negative for unlimited number)
20
# Grain radius [micrometers]?
0.500000
# Choice of growth mode:
# Options: stabilisation analytical_curvature
stabilisation
# critical recrystallisation energy [J/cm**3 or MPa]?
1.0000
# Determination of nuclei orientations?
# Options: random fix fix_direction parent_relation
random
# Shield effect:
# Shield time [s] [shield phase or group number] ?
1000.00
# Shield distance [micrometers] [ nucleation distance [micrometers] ]?
30.000 30.000
# Shall categorizaton be applied to this seed type?
# Options: categorize {number} no_categorize
categorize
# Input of minimal and maximal energy of the nuclei:
# Minimum of recrystallisation energy? [J/cm**3 or MPa]
0.0000
# Maximum of recrystallisation energy? [J/cm**3 or MPa]
0.0000
# Nucleation range
# min. nucleation temperature for seed type 1 [K]
0
# max. nucleation temperature for seed type 1 [K]
2000.000
# Time between checks for nucleation? [s]
# Options: constant from_file
constant
# Time interval [s]
1.50000E02
# Shall random noise be applied?
# Options: nucleation_noise no_nucleation_noise
nucleation_noise
# Factor for random noise?
# (applied as DeltaT > (1+Factor*(RAND1/2))*DeltaT)
1.000E03
#
# Seed for randomnumber generator initialisation
# 
22
# Max. number of simultaneous nucleations?
# 
# (set to 0 for automatic)
0
#
# Shall metastable small seeds be killed?
# 
# Options: kill_metastable no_kill_metastable
no_kill_metastable
#
 Attachments

 20 "randomly placed" nuclei in my simulation
 Capture.PNG (14.96 KiB) Viewed 2322 times
Re: Place randomly distributed nuclei
Dear billyzhangubc,
Welcome to the MICRESS Forum!
Indeed, the normal "bulk" nucleation type does not provide a random distribution of the potential nucleation sites ("checked points") in the domain. The algorithm uses the "nucleation distance" and goes rather over a regular grid. If, like in your case, the nucleation condition is fulfilled all over the domain, you will get a perfectly regular grid of seeds (you further restricted the maximum number of seeds to 20, so you get also part of that grid). With setting noise on the driving force for nucleation, you only can randomly remove part of this grid if the driving force for nucleation is close to the critical driving force  but still the seed distribution is not random.
Thus, from my point of view you have two choices how to create a more or less random seed distribution:
a) If you use this mechanism of bulk nucleation with random noise in such a way that only very few seeds are set per checking time step (not by cutting with a "maximum number of nuclei" but by removing most of them by using the random noise, then you will get something quite random. You will need to decrease the checking interval in order to overcome the low percentage of "successful" nucleation events.
b) You can use the "seed_density" model which provides a random distribution of seeds in the bulk region. The "problem" for your type of application is that the seed density model is a dedicated model for heterogeneous nucleation. Therefore, you need to indirectly use the (imaginary) seed particle radius as a measure to determine the critical driving force for nucleation. In case you need only a single value of the critical driving force (like in your case), you would need to define only one single seed class with a specified radius (to be more exact, you would need two extra classes with zero density to be able to narrow down the assumed radius range).
Thus, to sum up, method a) is a bit like a "brutal force" method, while b) gets awkward if you need to have full control over the critical reX energy value(s).
Bernd
Welcome to the MICRESS Forum!
Indeed, the normal "bulk" nucleation type does not provide a random distribution of the potential nucleation sites ("checked points") in the domain. The algorithm uses the "nucleation distance" and goes rather over a regular grid. If, like in your case, the nucleation condition is fulfilled all over the domain, you will get a perfectly regular grid of seeds (you further restricted the maximum number of seeds to 20, so you get also part of that grid). With setting noise on the driving force for nucleation, you only can randomly remove part of this grid if the driving force for nucleation is close to the critical driving force  but still the seed distribution is not random.
Thus, from my point of view you have two choices how to create a more or less random seed distribution:
a) If you use this mechanism of bulk nucleation with random noise in such a way that only very few seeds are set per checking time step (not by cutting with a "maximum number of nuclei" but by removing most of them by using the random noise, then you will get something quite random. You will need to decrease the checking interval in order to overcome the low percentage of "successful" nucleation events.
b) You can use the "seed_density" model which provides a random distribution of seeds in the bulk region. The "problem" for your type of application is that the seed density model is a dedicated model for heterogeneous nucleation. Therefore, you need to indirectly use the (imaginary) seed particle radius as a measure to determine the critical driving force for nucleation. In case you need only a single value of the critical driving force (like in your case), you would need to define only one single seed class with a specified radius (to be more exact, you would need two extra classes with zero density to be able to narrow down the assumed radius range).
Thus, to sum up, method a) is a bit like a "brutal force" method, while b) gets awkward if you need to have full control over the critical reX energy value(s).
Bernd

 Posts: 25
 Joined: Fri Feb 01, 2019 8:53 pm
 anti_bot: 333
 Location: University of British Columbia
Re: Place randomly distributed nuclei
Hi Bernd,
Thanks for your suggestions. I stick to the seed_undercooling model because I will introduce heterogeneous distribution of recrystallization energy later. I tried to vary the amplitude of random noise but nuclei distributions seem the same (see attached screenshot of the .korn files; left: amplitude 0.1, right: amplitude 0.001).
I think the problem is that I don't fully understand how I can set very few nuclei (i.e. remove most of the nuclei on the initial grid) per checking time step using the random noise . Should I use a very high amplitude of random noise? I also wonder if tuning shield distance and/or using a higher number of nuclei can solve the problem.
Thanks,
Billy
Thanks for your suggestions. I stick to the seed_undercooling model because I will introduce heterogeneous distribution of recrystallization energy later. I tried to vary the amplitude of random noise but nuclei distributions seem the same (see attached screenshot of the .korn files; left: amplitude 0.1, right: amplitude 0.001).
I think the problem is that I don't fully understand how I can set very few nuclei (i.e. remove most of the nuclei on the initial grid) per checking time step using the random noise . Should I use a very high amplitude of random noise? I also wonder if tuning shield distance and/or using a higher number of nuclei can solve the problem.
Thanks,
Billy
 Attachments

 Capture.PNG (63.32 KiB) Viewed 2315 times
Re: Place randomly distributed nuclei
Dear Billy,
Random noise adds just adds a random contribution with given amplitude to the local undercooling (or reXenergy). In your case, the critical value is 1 MPa, the locally found value is 3MPa, i.e. all nuclei will form.
When you apply noise like
# Factor for random noise?
# (applied as DeltaT > (1+Factor*(RAND1/2))*DeltaT)
1.000E03
you modify the local reXenergy of 3 MPa to a range of 2.9985  3.0015 (see above formula), which means you get the same as without noise (all nuclei will form). Please note that the random numbers ("RAND") has values between 0 and 1.
Specifically, you need to apply a noise amplitude of at least 4/3 in order to get any effect in your case. And even if you would make the amplitude infinite, you still would get around half of the nuclei.
Thus, in order to achieve only very few nuclei by using random noise, the reXvalues of the initial grains must be lower than the critical value, and the noise amplitude needs to be just above half the difference between the two values.
Using the shield distance instead of the nucleation distance would lead to the same regular pattern.
Bernd
Random noise adds just adds a random contribution with given amplitude to the local undercooling (or reXenergy). In your case, the critical value is 1 MPa, the locally found value is 3MPa, i.e. all nuclei will form.
When you apply noise like
# Factor for random noise?
# (applied as DeltaT > (1+Factor*(RAND1/2))*DeltaT)
1.000E03
you modify the local reXenergy of 3 MPa to a range of 2.9985  3.0015 (see above formula), which means you get the same as without noise (all nuclei will form). Please note that the random numbers ("RAND") has values between 0 and 1.
Specifically, you need to apply a noise amplitude of at least 4/3 in order to get any effect in your case. And even if you would make the amplitude infinite, you still would get around half of the nuclei.
Thus, in order to achieve only very few nuclei by using random noise, the reXvalues of the initial grains must be lower than the critical value, and the noise amplitude needs to be just above half the difference between the two values.
Using the shield distance instead of the nucleation distance would lead to the same regular pattern.
Bernd

 Posts: 25
 Joined: Fri Feb 01, 2019 8:53 pm
 anti_bot: 333
 Location: University of British Columbia
Re: Place randomly distributed nuclei
Hi Bernd, thanks for your suggestion! I increased the critical rex energy for the nuclei (to above the stored rex energy of the bulk grain) and the distribution is getting much more random. It is very helpful.
Danke schoen!
Billy
Danke schoen!
Billy

 Posts: 25
 Joined: Fri Feb 01, 2019 8:53 pm
 anti_bot: 333
 Location: University of British Columbia
Re: Place randomly distributed nuclei
Hi Bernd,
Sorry for a late followup. Hope you are doing well.
I am now simulating intercritical austenite formation from ferrite that involves nucleation. A major problem I have at the moment is that austenite nuclei are not quite randomly distributed (esp. comparing to a micrograph; see images attached). I used nucleation rate derived from experimental data for my phasefield input. The random noise option seems less intuitive for this situation, since I don't quite know my driving forces directly and tuning the noise amplitude becomes inefficient trialanderror.
Is there any way to mitigate from this?
Thanks in advance,
Billy
Sorry for a late followup. Hope you are doing well.
I am now simulating intercritical austenite formation from ferrite that involves nucleation. A major problem I have at the moment is that austenite nuclei are not quite randomly distributed (esp. comparing to a micrograph; see images attached). I used nucleation rate derived from experimental data for my phasefield input. The random noise option seems less intuitive for this situation, since I don't quite know my driving forces directly and tuning the noise amplitude becomes inefficient trialanderror.
Is there any way to mitigate from this?
Thanks in advance,
Billy
 Attachments

 Experimental.png (11.08 KiB) Viewed 1564 times

 SampleInput.in
 (18.7 KiB) Downloaded 56 times

 Simulated structure by MICRESS
 PFM_3Nb_500_785.png (61 KiB) Viewed 1564 times
Re: Place randomly distributed nuclei
Hi Billy,
You should not restrict the number of nuclei, neither per seed type ("maximum number of new nuclei") nor per time step ("Max. number of simultaneous nucleations?"). This often leads to erratic grain distributions (if you do not use it for the exact purpose), because it just stops nucleating without redistibuting the already chosen positions. In your case this leads to stringlike structures.
Apart from that, I cannot see why random noise should not be applicable.
It could further be interesting for you to decouple the shields of the two seed types by choosing a different shield group number (optional parameter in same line with shield time).
Bernd
You should not restrict the number of nuclei, neither per seed type ("maximum number of new nuclei") nor per time step ("Max. number of simultaneous nucleations?"). This often leads to erratic grain distributions (if you do not use it for the exact purpose), because it just stops nucleating without redistibuting the already chosen positions. In your case this leads to stringlike structures.
Apart from that, I cannot see why random noise should not be applicable.
It could further be interesting for you to decouple the shields of the two seed types by choosing a different shield group number (optional parameter in same line with shield time).
Bernd

 Posts: 25
 Joined: Fri Feb 01, 2019 8:53 pm
 anti_bot: 333
 Location: University of British Columbia
Re: Place randomly distributed nuclei
Hi Bernd,Bernd wrote: ↑Wed Apr 01, 2020 11:08 amHi Billy,
You should not restrict the number of nuclei, neither per seed type ("maximum number of new nuclei") nor per time step ("Max. number of simultaneous nucleations?"). This often leads to erratic grain distributions (if you do not use it for the exact purpose), because it just stops nucleating without redistibuting the already chosen positions. In your case this leads to stringlike structures.
Apart from that, I cannot see why random noise should not be applicable.
It could further be interesting for you to decouple the shields of the two seed types by choosing a different shield group number (optional parameter in same line with shield time).
Bernd
Thanks for your reply. I used a maximum number of simultaneous nucleation and a constat checking time interval to match my experimental results (mainly nucleation rate), so I am a bit worried that setting it to "automatic" may make the nucleation rate unrealistic. Do you think that will be a concern?
I can try decoupling the shields of the two seed types first as you said.
Thanks,
Billy
Re: Place randomly distributed nuclei
Hi Billy,
If you want to reduce the nucleation rate in order to match experimental results you should increase the nucleation distance instead, so that less nucleation sites are checked per nucleation time step.
Bernd
If you want to reduce the nucleation rate in order to match experimental results you should increase the nucleation distance instead, so that less nucleation sites are checked per nucleation time step.
Bernd