You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ABACUS_XXX_VOA.h 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /**********************************************************
  2. This software is part of J.-S. Caux's ABACUS library.
  3. Copyright (c) J.-S. Caux.
  4. -----------------------------------------------------------
  5. File: ABACUS_XXX_VOA.h
  6. Purpose: Declares classes for XXX in zero field: Vertex Operator Approach
  7. ***********************************************************/
  8. #ifndef ABACUS_XXX_VOA_H
  9. #define ABACUS_XXX_VOA_H
  10. #include "ABACUS.h"
  11. const DP default_req_prec = 1.0e-14;
  12. const int default_max_rec = 10;
  13. namespace ABACUS {
  14. inline DP Integrand_11 (Vect_DP args)
  15. {
  16. // args[0] corresponds to t, args[1] to rho
  17. return((exp(args[0]) * sinh(args[0]) * cos(4.0 * args[0] * args[1])
  18. /(2.0 * pow(cosh(args[0]), 2.0)) + 2.0 * pow(sin(2.0 * args[0] * args[1]), 2.0))/args[0]);
  19. }
  20. inline DP Integrand_12 (Vect_DP args)
  21. {
  22. DP expm2t = exp(-2.0*args[0]);
  23. return(cos(4.0 * args[0] * args[1]) * expm2t * (3.0 + expm2t)/ (args[0] * (1.0 + expm2t) * (1.0 + expm2t)));
  24. }
  25. inline DP Integrand_2 (Vect_DP args)
  26. {
  27. DP answer = 0.0;
  28. if (args[0] < 1.0) answer = exp(args[0]) * pow(sin(2.0 * args[0] * args[1]), 2.0)
  29. /(args[0] * sinh(args[0]) * pow(cosh(args[0]), 2.0));
  30. else if (args[0] >= 1.0) {
  31. DP expm2t = exp(-2.0 * args[0]);
  32. answer = 8.0 * expm2t * pow(sin(2.0 * args[0] * args[1]), 2.0)
  33. /(args[0] * (1.0 - expm2t) * (1.0 + expm2t) * (1.0 + expm2t));
  34. }
  35. return(answer);
  36. }
  37. inline DP Integrand_A (Vect_DP args)
  38. {
  39. // This kernel is for -ln | A_-(i\pi/2) | function
  40. return(exp(args[0]) * pow(sinh(args[0]/2.0), 2.0)/(args[0] * sinh(2.0*args[0]) * cosh(args[0])));
  41. }
  42. DP I_integral (DP rho, DP req_prec);
  43. /********************* TWO SPINONS ********************/
  44. DP SF_2p (DP k, DP omega, I_table Itable);
  45. DP SF_2p (Vect_DP args, I_table Itable);
  46. DP SF_2p_alt (Vect_DP args, I_table Itable);
  47. DP SF_2p_w (Vect_DP args, I_table Itable);
  48. DP SF_2p_w_alt (Vect_DP args, I_table Itable);
  49. DP SF_2p_intw (Vect_DP args, I_table Itable);
  50. DP SF_2p_intw_alt (Vect_DP args, I_table Itable);
  51. DP SF_2p_check_sumrule (DP req_prec, int max_rec, I_table Itable);
  52. DP SF_2p_check_sumrule_alt (DP req_prec, int max_rec, I_table Itable);
  53. DP Fixed_k_sumrule_w (DP k);
  54. DP Fixed_k_sumrule_omega (DP k);
  55. DP SF_2p_check_fixed_k_sumrule (DP k, DP req_prec, int max_rec, I_table Itable);
  56. DP SF_2p_check_fixed_k_sumrule_alt (DP k, DP req_prec, int max_rec, I_table Itable);
  57. DP SF_2p_check_fixed_k_sumrule_opt (DP k, DP req_prec, int Npts, I_table Itable);
  58. /********************** FOUR SPINONS **********************/
  59. DP Sum_norm_gl (Vect_DP rho, DP req_prec);
  60. DP Compute_C4 (DP req_prec);
  61. DP SF_contrib (Vect_DP p, DP req_prec, I_table Itable);
  62. DP J_fn (Vect_DP p, DP req_prec, I_table Itable);
  63. inline DP Jacobian_p3p4_KW (DP k, DP w, DP K, DP W)
  64. {
  65. return(1.0/sqrt(pow(twoPI * sin(0.5 * (k - K)), 2.0) - (w-W)*(w-W)));
  66. }
  67. bool Set_p_given_kwKW (DP k, DP w, DP K, DP W, Vect_DP& p);
  68. inline DP wmin_4p (DP k)
  69. {
  70. return(PI * fabs(sin(k)));
  71. }
  72. inline DP wmax_4p (DP k)
  73. {
  74. return(2.0 * PI * sqrt(2.0 * (1.0 + fabs(cos(0.5*k)))));
  75. }
  76. inline DP Wmin (DP k, DP w, DP K)
  77. {
  78. return(ABACUS::max(1.0e-15, ABACUS::max(fabs(PI * sin(K)), w - twoPI * sin(0.5 * (fabs(k-K))))));
  79. }
  80. inline DP Wmax (DP k, DP w, DP K)
  81. {
  82. return(ABACUS::min(twoPI * sin(0.5 * K), w - fabs(PI * sin(k - K))));
  83. }
  84. DP G_fn (Vect_DP args_to_G, I_table Itable);
  85. DP G1_fn (Vect_DP args_to_G, I_table Itable);
  86. DP G2_fn (Vect_DP args_to_G, I_table Itable);
  87. DP G1_fn_mid (Vect_DP args_to_G, I_table Itable);
  88. DP G2_fn_mid (Vect_DP args_to_G, I_table Itable);
  89. DP G_fn_alt (Vect_DP args_to_G, I_table Itable);
  90. DP H_fn (Vect_DP args_to_H, I_table Itable);
  91. DP H2_fn (Vect_DP args_to_H, I_table Itable);
  92. DP H_fn_mid (Vect_DP args_to_H, I_table Itable);
  93. DP H_fn_alt (Vect_DP args_to_H, I_table Itable);
  94. DP SF_4p_kwKW (Vect_DP args, I_table Itable);
  95. DP SF_4p_kwKW_alpha (Vect_DP args, I_table Itable);
  96. DP SF_4p_kwKW_alpha_opt (Vect_DP args, I_table Itable);
  97. // Interface to used version:
  98. DP SF_4p_rec (DP k, DP omega, DP req_prec, int max_rec, I_table Itable);
  99. DP SF_4p (DP k, DP omega, I_table Itable);
  100. DP SF_4p_opt (DP k, DP omega, DP req_prec, int Npts_K, int Npts_W, I_table Itable);
  101. void Translate_raw_4p_data (DP k, int max_rec_w, const char* SFraw_Cstr, const char* SF_Cstr, const char* SFsrc_Cstr, I_table Itable);
  102. DP SF_4p_rec (DP k, DP req_prec, int max_rec_w, int max_rec, I_table Itable);
  103. Integral_result SF_4p_opt (DP k, DP req_prec, int Npts, I_table Itable);
  104. Integral_result SF_4p_opt (DP k, DP req_prec, int Npts_w, int Npts_KW, I_table Itable);
  105. Integral_result SF_4p_opt (DP k, DP req_prec, int Npts_w, int Npts_K, int Npts_W, I_table Itable);
  106. //******************************** Functions to produce files similar to ABACUS **********************************
  107. void Produce_SF_2p_file (int N, int Nomega, DP omegamax, I_table Itable);
  108. void Produce_SF_4p_file (int N, int Nomega, DP omegamax, DP req_prec, int max_rec, I_table Itable);
  109. void Produce_SF_4p_file (int N, int Nomega, DP omegamax, DP req_prec, int Npts_K, int Npts_W, I_table Itable);
  110. //******************************** New version, full k and omega integral in one go ******************************
  111. DP Direct_J_integral (int Npts_p, DP req_prec, I_table Itable);
  112. DP Direct_J_integral_bin (int Npts_p, int Npts_o, DP req_prec, I_table Itable);
  113. void Smoothen_raw_SF_4p (int Npts_p, int Npts_o, DP req_prec, DP width);
  114. } // namespace ABACUS
  115. #endif