// File: /workspace/github_c_makefile_star2_O3/PoulinV[P]AxiCLASS/build/../external/HMcode/hmcode.c
// Function: hmcode_norad
int hmcode_norad(
                 struct hmcode_growth *phg,
                 double a
                 ){

  double AHnr_nu, H2nr_nu;
  double w_v = -1.;
  double w_de = phg->w0+(1.-a)*phg->wa;
  double X_de = pow(a, -3.*(1.+phg->w0+phg->wa))*exp(-3.*phg->wa*(1.-a));
  double Om_norad;
  double AH_norad, H2_norad;
  double a3;

  a3 = a*a*a;

  if( a > phg->a_nu ){
    AHnr_nu = phg->Omega_nu/a3;
    H2nr_nu = phg->Omega_nu/a3;
  }
  else{
    H2nr_nu = 0.;
    AHnr_nu = 0.;
  }

  AH_norad = -(phg->Omega_cdm/a3+phg->Omega_b/a3+AHnr_nu+phg->Omega_v*(1.+3.*w_v) + phg->Omega_w*(1.+3.*w_de)*X_de)/2.;
  H2_norad = (phg->Omega_cdm/a3 + phg->Omega_b/a3 + H2nr_nu + phg->Omega_v + phg->Omega_w*X_de + (1.-phg->Omega_m-phg->Omega_v-phg->Omega_w)/a/a);

  H2_norad+=phg->Omega_nu*(pow(1.+pow(0.3173*a/phg->a_nu,1.83),1./1.83)-1.)/a3/a;//Correction from inconsistent modeling between X_nu and H2_norad in HMcode

  if( a > phg->a_nu ){
    Om_norad = phg->Omega_m/a3/H2_norad;
  }
  else{
    Om_norad = (phg->Omega_cdm + phg->Omega_b)/a3/H2_norad;
  }
  phg->pvecnorad[phg->index_norad_H2] = H2_norad;
  phg->pvecnorad[phg->index_norad_AH] = AH_norad;
  phg->pvecnorad[phg->index_norad_Om] = Om_norad;

  return _SUCCESS_;
}

// Assembly:
pushq %rbx
subq $0x70, %rsp
movsd %xmm0, (%rsp)
movq %rdi, %rbx
movsd 0x70(%rdi), %xmm1
movsd 0x78(%rdi), %xmm2
movsd 0x8c43(%rip), %xmm3     # 0xee260
movapd %xmm3, %xmm4
subsd %xmm0, %xmm4
movsd %xmm4, 0x8(%rsp)
movsd %xmm1, 0x58(%rsp)
addsd %xmm3, %xmm1
movsd %xmm2, 0x50(%rsp)
addsd %xmm2, %xmm1
mulsd 0xbe39(%rip), %xmm1     # 0xf1480
callq 0x8620
movsd %xmm0, 0x48(%rsp)
movsd 0xbe26(%rip), %xmm0     # 0xf1480
mulsd 0x78(%rbx), %xmm0
mulsd 0x8(%rsp), %xmm0
callq 0x8670
movsd %xmm0, 0x10(%rsp)
movsd 0x90(%rbx), %xmm1
movsd 0x88(%rbx), %xmm0
movsd %xmm0, 0x28(%rsp)
movsd 0x50(%rbx), %xmm0
movsd %xmm0, 0x18(%rsp)
movsd 0x58(%rbx), %xmm0
movsd %xmm0, 0x40(%rsp)
movsd 0x60(%rbx), %xmm0
movsd %xmm0, 0x38(%rsp)
movsd 0x68(%rbx), %xmm0
movsd %xmm0, 0x30(%rsp)
movsd 0x80(%rbx), %xmm0
movsd %xmm0, 0x20(%rsp)
movsd 0x468a8(%rip), %xmm0    # 0x12bf70
mulsd (%rsp), %xmm0
movapd %xmm1, 0x60(%rsp)
divsd %xmm1, %xmm0
movsd 0x46899(%rip), %xmm1    # 0x12bf78
callq 0x8620
addsd 0x8b74(%rip), %xmm0     # 0xee260
movsd 0x4688c(%rip), %xmm1    # 0x12bf80
callq 0x8620
movsd (%rsp), %xmm7
ucomisd 0x90(%rbx), %xmm7
jbe 0xe5712
movsd 0x80(%rbx), %xmm1
jmp 0xe571c
movsd 0x50(%rbx), %xmm1
addsd 0x58(%rbx), %xmm1
movapd %xmm7, %xmm2
mulsd %xmm7, %xmm2
mulsd %xmm7, %xmm2
movsd 0x28(%rsp), %xmm11
movapd %xmm11, %xmm3
divsd %xmm2, %xmm3
movapd 0x60(%rsp), %xmm4
cmpltsd %xmm7, %xmm4
andpd %xmm3, %xmm4
movsd 0x48(%rsp), %xmm6
mulsd 0x10(%rsp), %xmm6
movsd 0x18(%rsp), %xmm3
divsd %xmm2, %xmm3
movsd 0x40(%rsp), %xmm8
divsd %xmm2, %xmm8
addsd %xmm3, %xmm8
addsd %xmm4, %xmm8
movsd 0x38(%rsp), %xmm9
movapd %xmm9, %xmm3
addsd %xmm8, %xmm3
movsd 0x30(%rsp), %xmm10
movapd %xmm10, %xmm4
mulsd %xmm6, %xmm4
addsd %xmm3, %xmm4
movsd 0x8ac0(%rip), %xmm5     # 0xee260
movapd %xmm5, %xmm3
subsd 0x20(%rsp), %xmm3
subsd %xmm9, %xmm3
subsd %xmm10, %xmm3
divsd %xmm7, %xmm3
divsd %xmm7, %xmm3
addsd %xmm4, %xmm3
addsd 0x9020(%rip), %xmm0     # 0xee7e8
mulsd %xmm11, %xmm0
divsd %xmm2, %xmm0
divsd %xmm7, %xmm0
addsd %xmm3, %xmm0
divsd %xmm2, %xmm1
movsd 0x8(%rsp), %xmm2
mulsd 0x50(%rsp), %xmm2
addsd 0x58(%rsp), %xmm2
mulsd 0x9e89(%rip), %xmm2     # 0xef680
addsd %xmm5, %xmm2
mulsd %xmm10, %xmm2
addsd %xmm9, %xmm9
subsd %xmm9, %xmm8
mulsd %xmm6, %xmm2
addsd %xmm8, %xmm2
divsd %xmm0, %xmm1
movq 0xe8(%rbx), %rax
movslq 0xd4(%rbx), %rcx
movsd %xmm0, (%rax,%rcx,8)
mulsd 0xbc46(%rip), %xmm2     # 0xf1478
movslq 0xd8(%rbx), %rcx
movsd %xmm2, (%rax,%rcx,8)
movslq 0xdc(%rbx), %rcx
movsd %xmm1, (%rax,%rcx,8)
xorl %eax, %eax
addq $0x70, %rsp
popq %rbx
retq