clwainwright / CosmoTransitions

A package for analyzing finite or zero-temperature cosmological phase transitions driven by single or multiple scalar fields.
MIT License
25 stars 19 forks source link

Output of findAllTransitions() #9

Closed sam1995ya closed 6 years ago

sam1995ya commented 6 years ago

Hi,

I have a model with a barrier at tree level. The minimums at tree level are (218 , 221 , 0) and (0 , -266 , 0). As you see the output of m.calcTcTrans() shows a degeneracy with its critical temperature but the output of m.findAllTransitions() is none!!! I have tried lots of inputs but the results are the same!

Will you help me to understand what is going wrong?

image

Another question: I am so sorry for this amateur question! I am not an expert in Python. How can I call functions like nuclCriterion() and tunnelFromPhase() for a potential which is defined in generic_potential class? When I run the following commands, I get the following error: In [1]: import myModel3 In [2]: m = myModel3.model3() In [3]: m.nuclCriterion()

AttributeError Traceback (most recent call last)

in () ----> 1 m.nuclCriterion() AttributeError: model3 instance has no attribute 'nuclCriterion'
clwainwright commented 6 years ago

Usually if there's a critical temperature at which the two phases are degenerate, then there will also be a transition temperature at which bubble nucleation will occur. However, this isn't always the case. If the barrier separating the two phases is always large then it could be that the tunneling probability is always very small, and even at zero temperature you're stuck in the false vacuum. That's probably what's going on in your case, but there's always the possibility of a bug. You'll likely find it helpful to plot both the energy of the phases as a function of temperature and contour plots of the phases at specific temperatures: m.plotPhasesV() and m.plot2d((xmin, xmax, ymin, max), T=0).

nuclCriterion is a parameter that you should pass to tunnelFromPhase(). See the documentation for details. You can also set this parameter when calling e.g. m.findAllTransitions(tunnelFromPhase_args={'nuclCriterion': lambda S,T: S/T - 140}).

sam1995ya commented 5 years ago

Hi,

Thank you for your kind reply. For the second question, I have seen some papers that researchers said using cosmoTransition package they got S3/T as a function of temperature. I know this can be done but, unfortunately, I don't know when I define V0 in generic_potential class how I can pass my potential to transitionFinder class and get S3/T as a function of temperature.

If I have had this function (S3/T), I think I can trace temperature to find nucleation temperature!

Cheers, Sam

sam1995ya commented 5 years ago

Hi again,

I have used high-temperature expansion for my model and plotted the effective potential ( 3D ) in Maple software. I have found some input points which give a small barrier at zero temperature and ofcourse smaller one at critical temperature but cosmoTransition still gives nothing for nucleation temperature! I want to define the final effective potential (high-temperature expansion) in cosmoTransition instead of tree-level potential. I hope this helps me to get nucleation temperature!

In my model, the minimums always exist up to a high temperature but the cosmoTransitions can't trace them in other temperatures! It just calculate them at zero temperature! Please see the following screenshots.

image

T=0 case: image

T=40 case: image

T=80 case: image

T=81.5 critical temperature:

image

Cheers, Sam

sam1995ya commented 5 years ago

This is a 3D figure of V_eff (different inputs from above) which shows a small barrier! The CosmoTransitions calculates critical temperature but shows nothing for nucleation temperature!

image

clwainwright commented 5 years ago

Again, just because there's a critical temperature doesn't mean that there's guaranteed to be a nucleation temperature. The nucleation rate depends on the temperature and the Euclidean action of the tunneling solution. The bubbles are Boltzmann suppressed, basically. For electroweak scale cosmology, that criterion roughly corresponds to S/T < 140 in order for there to be at least one bubble per Hubble volume. If the temperature drops to zero then there won't ever be thermal tunneling. Quantum tunneling can still take place, but CosmoTransitions doesn't automatically calculate the rate for you. Probably the easiest way to calculate S/T as a function of temperature is to just use the pathDeformation.fullTunneling() routine directly on your potential at different temperatures.

In my experience, most of the time that there's a zero-temperature barrier there won't be thermal tunneling. If the barrier is larger than the potential difference between the two phases (as it appears here), then the tunneling rate probably won't be fast enough.

sam1995ya commented 5 years ago

Thank you so much for your comments and hints. I don't know why I didn't attend to barrier height! My problem is just solved! Finally, I got a nucleation temperature.

Thanks a lot for your great work, CosmoTransitions! Cheers, Sam

sam1995ya commented 5 years ago

Hi,

I want to have more restriction on phases at zero temperature for multiple fields case. Actually, I want to restrict VeVs for any field to {-5...246}. Should I use .all() instead of .any() in forbidPhaseCrit function?

Regards, Sam

clwainwright commented 5 years ago

As per the docs, forbidPhaseCrit() should be a function that accepts a single field point (a one-dimensional array of values for your different fields) and returns True if the phase should be ignored. How you write that function is totally up to you. If you only care about the first element of the array, you could do something like return -5 < X[0] < 246. The test model function return (np.array([X])[...,0] < -5.0).any() was defined so that it could handle an array of points (a two-dimensional array), but I don't think this was necessary.

sam1995ya commented 5 years ago

Thank you for your answer. Reading the application of any() function in Python forums, my problem has been solved.

any( [condition1 , condition2 ,......, conditionN] )

sam1995ya commented 5 years ago

Hi,

I want to calculate d(S3/T)/dT at T_nucleation, is the following correct? Should I worry about the accuracy of numerical derivative? For example the order of variation of T!

pathDeformation.fullTunneling([ findMinimum( [(Low VeV), T=Tn+1e-03), findMinimum( (High VeV), T=Tn+1e-03)], Vtot(X,T=Tn+1e-03), gradV(X,T=Tn+1e-03))

Having S3 and T at Tn and Tn+1e-03 by above command and using the definition of usual numerical derivation, we can calculate d(S3/T)/dT. I think there should be some issues since you didn't implement it. May I know the issues?

sam1995ya commented 5 years ago

any comment?

clwainwright commented 5 years ago

That should be pretty much correct. The only potential problem is that the nucleation temperature might occur very close to where the potential barrier disappears, in which case dropping the temperature by 1e-3 might not yield any tunneling solution at all. It's slightly safer to make the finite difference off-center using dS/dT ~ (S(Tn+1e-3) - S(Tn)) / 1e-3. But yes, in general doing finite differences is the best way to find the derivative. If you're worried about numerical accuracy you can calculate the tunneling solution at a series of temperatures around Tn (instead of just two) and find the best fit line.

DarkKnight6777 commented 4 years ago

Where I have to made the change to get S3 at a series of Temperatures around Tn

shilpajangid123 commented 3 years ago

how to calculate d/dT(S3/T) using Cosmotransitions package it is not implemented yet. Please tell the basic procedure.