// File: /workspace/github_c_makefile_star2_O0/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:
subq $0x1038, %rsp           # imm = 0x1038
movq 0x1040(%rsp), %rax
movq %rdi, 0x1028(%rsp)
movq %rsi, 0x1020(%rsp)
movq %rdx, 0x1018(%rsp)
movq %rcx, 0x1010(%rsp)
movq %r8, 0x1008(%rsp)
movq %r9, 0x1000(%rsp)
movq 0x1018(%rsp), %rax
movswl 0xc(%rax), %eax
cmpl $0x0, %eax
jne 0x14d351
movq 0x1040(%rsp), %rax
movl $0x0, 0x10(%rax)
movq 0x1040(%rsp), %rax
movswl 0xe8(%rax), %eax
cmpl $0x0, %eax
jle 0x14d341
leaq 0xb8b9b(%rip), %rdi     # 0x205ed5
movb $0x0, %al
callq 0x8030
movl $0x0, 0x1034(%rsp)
jmp 0x14d50a
movq 0x1040(%rsp), %rax
movswl 0xe8(%rax), %eax
cmpl $0x0, %eax
jle 0x14d373
leaq 0xb8b98(%rip), %rdi     # 0x205f04
movb $0x0, %al
callq 0x8030
jmp 0x14d375
movq 0x1020(%rsp), %rdi
movq 0x1018(%rsp), %rsi
movq 0x1000(%rsp), %rdx
movq 0x1010(%rsp), %rcx
movq 0x1040(%rsp), %r8
callq 0x14d520
cmpl $0x1, %eax
jne 0x14d414
leaq 0x800(%rsp), %rdi
movq 0x1040(%rsp), %rcx
addq $0xea, %rcx
leaq 0x85013(%rip), %rsi     # 0x1d23d8
leaq 0xb8b5d(%rip), %rdx     # 0x205f29
movb $0x0, %al
callq 0x5b9c0
movq 0x1040(%rsp), %rdi
addq $0xea, %rdi
leaq 0x800(%rsp), %r8
leaq 0x84c43(%rip), %rsi     # 0x1d2034
leaq 0xb8b57(%rip), %rdx     # 0x205f4f
movl $0x124, %ecx            # imm = 0x124
movb $0x0, %al
callq 0x5b9c0
movl $0x1, 0x1034(%rsp)
jmp 0x14d50a
movq 0x1018(%rsp), %rax
movswl 0xc(%rax), %eax
cmpl $0x1, %eax
jne 0x14d4c5
movq 0x1028(%rsp), %rdi
movq 0x1020(%rsp), %rsi
movq 0x1018(%rsp), %rdx
movq 0x1000(%rsp), %rcx
movq 0x1010(%rsp), %r8
movq 0x1040(%rsp), %r9
callq 0x14ecc0
cmpl $0x1, %eax
jne 0x14d4c3
movq %rsp, %rdi
movq 0x1040(%rsp), %rcx
addq $0xea, %rcx
leaq 0x84f5c(%rip), %rsi     # 0x1d23d8
leaq 0xb8ada(%rip), %rdx     # 0x205f5d
movb $0x0, %al
callq 0x5b9c0
movq 0x1040(%rsp), %rdi
addq $0xea, %rdi
movq %rsp, %r8
leaq 0x84b91(%rip), %rsi     # 0x1d2034
leaq 0xb8aa5(%rip), %rdx     # 0x205f4f
movl $0x12c, %ecx            # imm = 0x12C
movb $0x0, %al
callq 0x5b9c0
movl $0x1, 0x1034(%rsp)
jmp 0x14d50a
jmp 0x14d4d7
movq 0x1040(%rsp), %rax
movl $0x0, 0x9c(%rax)
movq 0x1008(%rsp), %rcx
movq 0x1040(%rsp), %rax
movq %rcx, 0xe0(%rax)
movq 0x1040(%rsp), %rax
movw $0x1, 0x8ea(%rax)
movl $0x0, 0x1034(%rsp)
movl 0x1034(%rsp), %eax
addq $0x1038, %rsp           # imm = 0x1038
retq
nopl (%rax)