// File: /workspace/github_c_makefile_star2_O3/ugobas[P]tnm/anharmonic_tnm.c
// Function: Determine_Ak
int Determine_Ak(struct interaction *Int, double V0, double KK, int n)
{
  int err=0;
  double f, fc, V2=KK/(lambda*lambda);
  Int->r1=100;
  if(POW){
    f=pow(Int->r0, -lambda);
    fc=pow(C_THR, -lambda);
    V2*=(Int->r0*Int->r0);
  }else{
    f=exp(-lambda*Int->r0);
    fc=exp(-lambda*C_THR);
  }
  double alpha=fc/f, a2=alpha*alpha, aa=1.-alpha;
  double f2=f*f, fc2=fc*fc;
  // Condition on V
  Int->A4=(V0+0.5*V2*aa*aa)/(f2*f2*(3.0-a2*a2+6*a2-8.0*alpha));
  if(Int->A4<0){
    printf("ERROR A4= %.3g <0 n= %d", Int->A4, n);
    printf(" alpha=%.2g V0= %.2g V2= %.2g\n", alpha, V0, V2); 
    err=-1;
  }
  Int->A2=-6.0*Int->A4*f2+0.5*V2/f2; // Condition on V''
  Int->A1=8.0*Int->A4*f2*f-V2/f;     // Condition on V'
  Int->A0=-Int->A4*fc2*fc2-Int->A2*fc2-Int->A1*fc; // Condition at C_THR
  { // Test
    float EPS=0.01;
    float V0_1=Compute_V(Int, Int->r0);
    float V1_1=Compute_V1(Int, Int->r0);
    float V2_1=Compute_V2(Int, Int->r0, 0);
    if(err ||(fabs(V0_1-V0)>EPS)||(fabs(V1_1)>EPS)||(fabs(V2_1-KK)>EPS)){
      printf("ERROR in Determine_Ak n= %d r0= %.2f r1= %.2f A4= %.2g\n",
	     n, Int->r0, Int->r1, Int->A4);
      printf("V(Rc)= %.4g\n",  Compute_V(Int, C_THR));
      printf("V(r0)  = %.4g (old) %.4g (new)\n", V0, V0_1);
      printf("V'(r0) = 0 (old) %.4g (new)\n", V1_1);
      printf("V''(r0)= %.4g (old) %.4g (new)\n", KK, V2_1);
      return(-1);
    }
  }
  return(err);

}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
subq $0x90, %rsp
movl %esi, %ebp
movsd %xmm0, 0x8(%rsp)
movq %rdi, %rbx
leaq 0x4b0ab(%rip), %r14     # 0x690d4
movss (%r14), %xmm2
movaps %xmm2, %xmm0
mulss %xmm2, %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm1, 0x38(%rsp)
divsd %xmm0, %xmm1
movapd %xmm1, 0x10(%rsp)
movl $0x42c80000, 0x10(%rdi) # imm = 0x42C80000
leaq 0x4a595(%rip), %rax     # 0x685ec
cmpl $0x0, (%rax)
je 0x1e0ba
movsd 0x20(%rbx), %xmm0
xorps 0x32fc8(%rip), %xmm2    # 0x51030
xorps %xmm1, %xmm1
cvtss2sd %xmm2, %xmm1
callq 0x20a0
leaq 0x4afed(%rip), %rax     # 0x69068
xorps %xmm2, %xmm2
cvtss2sd (%rax), %xmm2
movaps %xmm0, 0x20(%rsp)
movss (%r14), %xmm0
xorps 0x32f9d(%rip), %xmm0    # 0x51030
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
movaps %xmm2, %xmm0
callq 0x20a0
movaps %xmm0, %xmm5
movsd 0x20(%rbx), %xmm0
mulsd %xmm0, %xmm0
movapd 0x10(%rsp), %xmm4
mulsd %xmm0, %xmm4
jmp 0x1e101
xorps 0x32f6f(%rip), %xmm2    # 0x51030
xorps %xmm0, %xmm0
cvtss2sd %xmm2, %xmm0
mulsd 0x20(%rbx), %xmm0
callq 0x22b0
movapd %xmm0, 0x20(%rsp)
movss (%r14), %xmm0
xorps 0x32f4c(%rip), %xmm0    # 0x51030
leaq 0x4af7d(%rip), %rax     # 0x69068
mulss (%rax), %xmm0
cvtss2sd %xmm0, %xmm0
callq 0x22b0
movaps %xmm0, %xmm5
movapd 0x10(%rsp), %xmm4
movaps %xmm5, %xmm11
movapd 0x20(%rsp), %xmm8
divsd %xmm8, %xmm11
movapd %xmm11, %xmm0
mulsd %xmm11, %xmm0
movsd 0x33025(%rip), %xmm1    # 0x51148
subsd %xmm11, %xmm1
movapd %xmm8, %xmm9
mulsd %xmm8, %xmm9
movaps %xmm5, %xmm7
mulsd %xmm5, %xmm7
movsd 0x3302e(%rip), %xmm10   # 0x51170
mulsd %xmm4, %xmm10
movapd %xmm10, %xmm6
mulsd %xmm1, %xmm6
mulsd %xmm1, %xmm6
addsd 0x8(%rsp), %xmm6
movapd %xmm9, %xmm1
mulsd %xmm9, %xmm1
movapd %xmm0, %xmm2
mulsd %xmm0, %xmm2
movsd 0x391cc(%rip), %xmm3    # 0x57340
subsd %xmm2, %xmm3
mulsd 0x391d8(%rip), %xmm0    # 0x57358
addsd %xmm3, %xmm0
movsd 0x391ec(%rip), %xmm2    # 0x57378
mulsd %xmm11, %xmm2
addsd %xmm0, %xmm2
mulsd %xmm1, %xmm2
divsd %xmm2, %xmm6
movsd %xmm6, 0x48(%rbx)
xorl %r14d, %r14d
xorpd %xmm0, %xmm0
ucomisd %xmm6, %xmm0
movapd %xmm6, 0x40(%rsp)
movapd %xmm6, %xmm0
movapd %xmm8, %xmm3
jbe 0x1e255
leaq 0x39b9a(%rip), %rdi     # 0x57d63
movaps 0x40(%rsp), %xmm0
movl %ebp, %esi
movb $0x1, %al
movapd %xmm4, 0x10(%rsp)
movsd %xmm5, 0x68(%rsp)
movsd %xmm7, 0x60(%rsp)
movapd %xmm9, 0x80(%rsp)
movapd %xmm10, 0x70(%rsp)
movsd %xmm11, 0x58(%rsp)
callq 0x20f0
leaq 0x39b73(%rip), %rdi     # 0x57d7b
movsd 0x58(%rsp), %xmm0
movsd 0x8(%rsp), %xmm1
movapd 0x10(%rsp), %xmm2
movb $0x3, %al
callq 0x20f0
movapd 0x70(%rsp), %xmm10
movapd 0x80(%rsp), %xmm9
movsd 0x60(%rsp), %xmm7
movsd 0x68(%rsp), %xmm5
movapd 0x20(%rsp), %xmm3
movapd 0x10(%rsp), %xmm4
movsd 0x48(%rbx), %xmm0
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
movsd 0x39123(%rip), %xmm1    # 0x57380
mulsd %xmm0, %xmm1
movapd 0x32e27(%rip), %xmm2    # 0x51090
xorpd %xmm2, %xmm4
unpcklpd %xmm9, %xmm3            # xmm3 = xmm3[0],xmm9[0]
shufpd $0x2, 0x39085(%rip), %xmm1 # xmm1 = xmm1[0],mem[1]
unpcklpd %xmm0, %xmm9            # xmm9 = xmm9[0],xmm0[0]
mulpd %xmm9, %xmm1
unpcklpd %xmm10, %xmm4           # xmm4 = xmm4[0],xmm10[0]
divpd %xmm3, %xmm4
mulpd %xmm3, %xmm1
addpd %xmm4, %xmm1
movupd %xmm1, 0x38(%rbx)
xorpd %xmm2, %xmm0
mulsd %xmm7, %xmm0
movapd %xmm1, %xmm2
unpckhpd %xmm1, %xmm2            # xmm2 = xmm2[1],xmm1[1]
mulsd %xmm7, %xmm2
mulsd %xmm7, %xmm0
subsd %xmm2, %xmm0
mulsd %xmm5, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, 0x30(%rbx)
xorps %xmm0, %xmm0
cvtsd2ss 0x20(%rbx), %xmm0
movq %rbx, %rdi
callq 0x1c59a
movss %xmm0, 0x20(%rsp)
xorps %xmm0, %xmm0
cvtsd2ss 0x20(%rbx), %xmm0
movq %rbx, %rdi
callq 0x1ce7c
movaps %xmm0, 0x10(%rsp)
xorps %xmm0, %xmm0
cvtsd2ss 0x20(%rbx), %xmm0
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1d161
movaps %xmm0, %xmm1
xorps %xmm0, %xmm0
ucomisd 0x40(%rsp), %xmm0
xorps %xmm2, %xmm2
cvtss2sd 0x20(%rsp), %xmm2
ja 0x1e36b
movaps %xmm2, %xmm0
subsd 0x8(%rsp), %xmm0
andpd 0x38fc7(%rip), %xmm0    # 0x572f0
ucomisd 0x39057(%rip), %xmm0    # 0x57388
ja 0x1e36b
movaps 0x38fa6(%rip), %xmm0    # 0x572e0
andps 0x10(%rsp), %xmm0
ucomiss 0x38f6a(%rip), %xmm0    # 0x572b0
ja 0x1e36b
xorps %xmm0, %xmm0
cvtss2sd %xmm1, %xmm0
subsd 0x38(%rsp), %xmm0
andpd 0x38f93(%rip), %xmm0    # 0x572f0
ucomisd 0x39023(%rip), %xmm0    # 0x57388
jbe 0x1e412
movss %xmm1, 0x20(%rsp)
xorps %xmm1, %xmm1
cvtss2sd 0x10(%rbx), %xmm1
movsd 0x20(%rbx), %xmm0
movsd %xmm2, 0x40(%rsp)
movsd 0x48(%rbx), %xmm2
leaq 0x39a0a(%rip), %rdi     # 0x57d9a
movl %ebp, %esi
movb $0x3, %al
callq 0x20f0
leaq 0x4acc8(%rip), %rax     # 0x69068
movss (%rax), %xmm0
movq %rbx, %rdi
callq 0x1c59a
cvtss2sd %xmm0, %xmm0
leaq 0x39a1b(%rip), %rdi     # 0x57dd2
movb $0x1, %al
callq 0x20f0
leaq 0x39a1a(%rip), %rdi     # 0x57ddf
movsd 0x8(%rsp), %xmm0
movsd 0x40(%rsp), %xmm1
movb $0x2, %al
callq 0x20f0
xorps %xmm0, %xmm0
cvtss2sd 0x10(%rsp), %xmm0
leaq 0x39a17(%rip), %rdi     # 0x57dff
movb $0x1, %al
callq 0x20f0
xorps %xmm1, %xmm1
cvtss2sd 0x20(%rsp), %xmm1
leaq 0x39a1d(%rip), %rdi     # 0x57e1c
movsd 0x38(%rsp), %xmm0
movb $0x2, %al
callq 0x20f0
movl $0xffffffff, %r14d      # imm = 0xFFFFFFFF
movl %r14d, %eax
addq $0x90, %rsp
popq %rbx
popq %r14
popq %rbp
retq