// File: /workspace/github_c_makefile_star2_O1/PoulinV[P]AxiCLASS/build/../source/harmonic.c
// Function: harmonic_init
int harmonic_init(
                  struct precision * ppr,
                  struct background * pba,
                  struct perturbations * ppt,
                  struct primordial * ppm,
                  struct fourier * pfo,
                  struct transfer * ptr,
                  struct harmonic * phr
                  ) {

  /** Summary: */

  /** - check that we really want to compute at least one spectrum */

  if (ppt->has_cls == _FALSE_) {
    phr->md_size = 0;
    if (phr->harmonic_verbose > 0)
      printf("No spectra requested. Spectra module skipped.\n");
    return _SUCCESS_;
  }
  else {
    if (phr->harmonic_verbose > 0)
      printf("Computing unlensed harmonic spectra\n");
  }

  /** - initialize indices and allocate some of the arrays in the
      harmonic structure */

  class_call(harmonic_indices(pba,ppt,ptr,ppm,phr),
             phr->error_message,
             phr->error_message);

  /** - deal with \f$ C_l\f$'s, if any */

  if (ppt->has_cls == _TRUE_) {

    class_call(harmonic_cls(ppr,pba,ppt,ptr,ppm,phr),
               phr->error_message,
               phr->error_message);

  }
  else {
    phr->ct_size=0;
  }

  /** - a pointer to the fourier structure is stored in the spectra
      structure. This odd, unusual and unelegant feature has been
      introduced in v2.8 in order to keep in use some deprecated
      functions harmonic_pk_...() that are now pointing at new
      function fourier_pk_...(). In the future, if the deprecated
      functions are removed, it will be possible to remove also this
      pointer. */

  phr->pfo = pfo;
  phr->is_allocated = _TRUE_;

  return _SUCCESS_;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x818, %rsp            # imm = 0x818
movq 0x850(%rsp), %rbx
cmpw $0x0, 0xc(%rdx)
je 0xb6511
movq %r9, %r15
movq %rcx, %r12
movq %rdx, %r13
movq %rsi, %rbp
movq %rdi, %r14
movq %r8, 0x8(%rsp)
cmpw $0x0, 0xe8(%rbx)
jle 0xb64ae
leaq 0x6f180(%rip), %rdi     # 0x125629
callq 0x8510
movq %r13, %rsi
movq %r12, %rcx
movq %rbx, %r8
callq 0xb65d9
testl %eax, %eax
je 0xb6539
addq $0xea, %rbx
leaq 0x3af22(%rip), %rsi     # 0xf13f0
leaq 0x6e44b(%rip), %rdx     # 0x124920
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x30c2c
leaq 0x3ab46(%rip), %rsi     # 0xf1034
leaq 0x6e451(%rip), %rdx     # 0x124946
movq %rbx, %rdi
movl $0x124, %ecx            # imm = 0x124
movq %r14, %r8
xorl %eax, %eax
callq 0x30c2c
movl $0x1, %ebp
jmp 0xb65c5
movl $0x0, 0x10(%rbx)
xorl %ebp, %ebp
cmpw $0x0, 0xe8(%rbx)
jle 0xb65c5
leaq 0x6f11e(%rip), %rdi     # 0x12564d
callq 0x8510
jmp 0xb65c5
cmpw $0x1, 0xc(%r13)
jne 0xb65a4
movq %r14, %rdi
movq %rbp, %rsi
movq %r13, %rdx
movq %r15, %rcx
movq %r12, %r8
movq %rbx, %r9
callq 0xb6fe7
cmpl $0x1, %eax
movq 0x8(%rsp), %rax
jne 0xb65b3
addq $0xea, %rbx
leaq 0x3ae80(%rip), %rsi     # 0xf13f0
leaq 0x6e3dd(%rip), %rdx     # 0x124954
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x30c2c
leaq 0x3aaa4(%rip), %rsi     # 0xf1034
leaq 0x6e3af(%rip), %rdx     # 0x124946
movq %rbx, %rdi
movl $0x12c, %ecx            # imm = 0x12C
jmp 0xb64fd
movl $0x0, 0x9c(%rbx)
movq 0x8(%rsp), %rax
movq %rax, 0xe0(%rbx)
movw $0x1, 0x8ea(%rbx)
xorl %ebp, %ebp
movl %ebp, %eax
addq $0x818, %rsp            # imm = 0x818
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq