user: What is the c source code of the assembly code below?

```asm
<R_Hartree>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,%r15
  mov    %rdi,0x18(%rsp)
  movq   %xmm0,%rbx
  mov    %rsi,%rbp
  mov    $0x0,%eax
  call   <N_LogGrid@plt>
  mov    %eax,%r14d
  mov    $0x0,%eax
  call   <log_amesh_LogGrid@plt>
  pxor   %xmm6,%xmm6
  cvtsi2sd %eax,%xmm6
  movsd  %xmm6,0x8(%rsp)
  mov    $0x0,%eax
  call   <r_LogGrid@plt>
  mov    %eax,%r12d
  mov    %eax,0x10(%rsp)
  mov    $0x0,%eax
  call   <alloc_LogGrid@plt>
  mov    %eax,0x14(%rsp)
  movslq %eax,%r13
  test   %r14d,%r14d
  jle    L59
  movslq %r12d,%rdi
  lea    -0x1(%r14),%eax
  lea    0x8(%rdi,%rax,8),%rsi
  mov    %rdi,%rax
  mov    %r13,%rdx
  sub    %rdi,%rdx
  mov    %r15,%rcx
  sub    %rdi,%rcx
L23:
  movsd  (%rax),%xmm1
  movapd %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  0x8(%rsp),%xmm0
  mulsd  (%rcx,%rax,1),%xmm0
  movsd  %xmm0,(%rdx,%rax,1)
  add    $0x8,%rax
  cmp    %rsi,%rax
  jne    L23
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <Zero_LogGrid@plt>
  movslq %r14d,%rax
  shl    $0x3,%rax
  mov    %rbx,-0x8(%rbp,%rax,1)
  mov    %rbx,-0x10(%rbp,%rax,1)
  mov    %rbx,-0x18(%rbp,%rax,1)
  lea    -0x3(%r14),%ebx
  test   %ebx,%ebx
  jle    L46
L125:
  movslq %ebx,%r12
L83:
  mov    0x0(%rbp,%r12,8),%r15
  mov    %r13,%rsi
  mov    %r12d,%edi
  mov    $0x0,%eax
  call   <Corrector_In_F@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movq   %r15,%xmm3
  addsd  %xmm3,%xmm0
  movsd  %xmm0,-0x8(%rbp,%r12,8)
  sub    $0x1,%r12
  test   %r12d,%r12d
  jg     L83
  test   %r14d,%r14d
  jle    L60
L46:
  movslq 0x10(%rsp),%rdi
  mov    %rdi,%rax
  mov    $0x0,%edx
  movslq 0x14(%rsp),%rcx
  sub    %rdi,%rcx
  mov    0x18(%rsp),%rsi
  sub    %rdi,%rsi
L33:
  movsd  (%rax),%xmm0
  mulsd  %xmm0,%xmm0
  mulsd  0x8(%rsp),%xmm0
  mulsd  (%rsi,%rax,1),%xmm0
  movsd  %xmm0,(%rcx,%rax,1)
  add    $0x1,%edx
  add    $0x8,%rax
  cmp    %edx,%r14d
  jg     L33
  test   %ebx,%ebx
  jle    L1
L60:
  movslq %ebx,%rbx
  movslq 0x10(%rsp),%rax
  lea    -0x8(%rax,%rbx,8),%r12
  pxor   %xmm7,%xmm7
  movsd  %xmm7,0x8(%rsp)
L85:
  mov    %r13,%rsi
  mov    %ebx,%edi
  mov    $0x0,%eax
  call   <Corrector_In_F@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  addsd  0x8(%rsp),%xmm0
  movapd %xmm0,%xmm1
  movsd  %xmm0,0x8(%rsp)
  mulsd  (%r12),%xmm1
  movsd  -0x8(%rbp,%rbx,8),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp,%rbx,8)
  sub    $0x1,%rbx
  sub    $0x8,%r12
  test   %ebx,%ebx
  jg     L85
L1:
  test   %r14d,%r14d
  jle    L14
  lea    -0x1(%r14),%edi
  shl    $0x3,%rdi
  lea    0x8(%rbp,%rdi,1),%rcx
  mov    %rbp,%rax
  movslq 0x10(%rsp),%rdx
  sub    %rbp,%rdx
L115:
  movsd  (%rax),%xmm0
  divsd  (%rdx,%rax,1),%xmm0
  movsd  %xmm0,(%rax)
  add    $0x8,%rax
  cmp    %rcx,%rax
  jne    L115
  movslq 0x14(%rsp),%rsi
  lea    0x8(%rsi,%rdi,1),%rcx
  mov    %rsi,%rax
  mov    0x18(%rsp),%rdx
  sub    %rsi,%rdx
  sub    %rsi,%rbp
L129:
  movsd  (%rdx,%rax,1),%xmm0
  mulsd  0x0(%rbp,%rax,1),%xmm0
  movsd  %xmm0,(%rax)
  add    $0x8,%rax
  cmp    %rax,%rcx
  jne    L129
L14:
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <Integrate_LogGrid@plt>
  mov    %eax,%ebx
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <dealloc_LogGrid@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebx,%xmm0
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L59:
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <Zero_LogGrid@plt>
  movslq %r14d,%rax
  shl    $0x3,%rax
  mov    %rbx,-0x8(%rbp,%rax,1)
  mov    %rbx,-0x10(%rbp,%rax,1)
  mov    %rbx,-0x18(%rbp,%rax,1)
  lea    -0x3(%r14),%ebx
  test   %ebx,%ebx
  jg     L125
  test   %r14d,%r14d
  jle    L1
  jmp    L46
```

assistant: ```c
double R_Hartree(n, charge, Vh)
double n[], charge, Vh[];
{
  int i, Ngrid;
  double log_amesh;
  double *rgrid, *tmp;
  double r, r2, r3, tt;
  double E;
  Ngrid = N_LogGrid();
  log_amesh = log_amesh_LogGrid();
  rgrid = r_LogGrid();
  tmp = alloc_LogGrid();
  for (i = 0; i < Ngrid; ++i) {
    r = rgrid[i];
    r3 = r * r * r;
    tmp[i] = (log_amesh * r3) * n[i];
  }
  Zero_LogGrid(Vh);
  Vh[Ngrid - 1] = charge;
  Vh[Ngrid - 2] = charge;
  Vh[Ngrid - 3] = charge;
  for (i = (Ngrid - 3); i > 0; --i) {
    Vh[i - 1] = Vh[i] + Corrector_In_F(i, tmp);
  }
  for (i = 0; i < Ngrid; ++i) {
    r = rgrid[i];
    r2 = r * r;
    tmp[i] = (log_amesh * r2) * n[i];
  }
  tt = 0.0;
  for (i = (Ngrid - 3); i > 0; --i) {
    tt = tt + Corrector_In_F(i, tmp);
    Vh[i - 1] = Vh[i - 1] - rgrid[i - 1] * tt;
  }
  for (i = 0; i < Ngrid; ++i)
    Vh[i] = Vh[i] / rgrid[i];
  for (i = 0; i < Ngrid; ++i) {
    tmp[i] = n[i] * Vh[i];
  }
  E = Integrate_LogGrid(tmp);
  dealloc_LogGrid(tmp);
  return E;
}
```