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

```asm
<kEpsilon_epsilon_3D_Evaluate_sd>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edi,%eax
  mov    %esi,-0x20(%rsp)
  mov    %r8,%rbp
  mov    %r9,%rbx
  mov    0x38(%rsp),%r14
  mov    0x68(%rsp),%r10
  mov    0x70(%rsp),%r11
  mov    0x78(%rsp),%r8
  mov    0x80(%rsp),%r9
  test   %edi,%edi
  jle    L77
  mov    %esi,%edi
  movapd %xmm0,%xmm10
  mov    %rdx,%rsi
  mov    %rcx,%r12
  mov    0x40(%rsp),%r13
  movslq %edi,%rdx
  lea    0x0(,%rdx,8),%rdi
  mov    %rdi,-0x10(%rsp)
  mov    %eax,%eax
  mov    %rax,-0x8(%rsp)
  movl   $0x0,-0x1c(%rsp)
  mov    $0x0,%edi
  movsd  D38(%rip),%xmm12
  pxor   %xmm11,%xmm11
  movq   D6(%rip),%xmm15
  movapd %xmm12,%xmm14
  movsd  D51(%rip),%xmm13
  xorpd  %xmm15,%xmm1
  jmp    L99
L83:
  pxor   %xmm4,%xmm4
  movapd %xmm4,%xmm6
  jmp    L2
L94:
  pxor   %xmm6,%xmm6
  movapd %xmm6,%xmm7
L14:
  mulsd  %xmm1,%xmm4
  mulsd  %xmm0,%xmm4
  addsd  %xmm7,%xmm4
  mov    0x88(%rsp),%rax
  movsd  %xmm4,(%rax,%rdi,8)
  mov    0x90(%rsp),%rax
  movsd  %xmm6,(%rax,%rdi,8)
  add    $0x1,%rdi
  add    $0x8,%r13
  mov    -0x10(%rsp),%rax
  add    %rax,%r12
  add    %rax,%rbp
  add    %rax,%rbx
  mov    -0x20(%rsp),%ecx
  add    %ecx,-0x1c(%rsp)
  cmp    -0x8(%rsp),%rdi
  je     L77
L99:
  mov    %r13,%r15
  movsd  0x0(%r13),%xmm0
  movsd  (%r14,%rdi,8),%xmm6
  movapd %xmm6,%xmm4
  mulsd  %xmm3,%xmm4
  mulsd  %xmm6,%xmm4
  movapd %xmm0,%xmm7
  addsd  %xmm12,%xmm7
  movapd %xmm4,%xmm6
  divsd  %xmm7,%xmm6
  comisd %xmm6,%xmm11
  ja     L83
  xorpd  %xmm15,%xmm4
  movapd %xmm0,%xmm7
  mulsd  %xmm0,%xmm7
  addsd  %xmm14,%xmm7
  divsd  %xmm7,%xmm4
L2:
  mov    0x48(%rsp),%rax
  movsd  %xmm0,(%rax,%rdi,8)
  mov    0x50(%rsp),%rax
  movsd  %xmm13,(%rax,%rdi,8)
  mov    -0x20(%rsp),%ecx
  test   %ecx,%ecx
  jle    L41
  movslq -0x1c(%rsp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    %ecx,%ecx
  add    %rax,%rcx
  shl    $0x3,%rcx
  mov    %rdx,%rax
L88:
  movsd  (%r15),%xmm0
  mulsd  (%rsi,%rax,1),%xmm0
  movsd  %xmm0,(%r10,%rax,1)
  movsd  (%rsi,%rax,1),%xmm0
  movsd  %xmm0,(%r11,%rax,1)
  add    $0x8,%rax
  cmp    %rcx,%rax
  jne    L88
  mov    %rcx,-0x18(%rsp)
  movsd  (%r15),%xmm0
  mov    0x58(%rsp),%rax
  movsd  %xmm0,(%rax,%rdi,8)
  mov    0x60(%rsp),%rax
  mov    D51(%rip),%rcx
  mov    %rcx,(%rax,%rdi,8)
  divsd  %xmm10,%xmm6
  movapd %xmm6,%xmm0
  addsd  %xmm5,%xmm0
  divsd  %xmm10,%xmm4
  mov    -0x18(%rsp),%rcx
L65:
  movsd  %xmm0,(%r8,%rdx,1)
  movsd  %xmm4,(%r9,%rdx,1)
  add    $0x8,%rdx
  cmp    %rcx,%rdx
  jne    L65
L57:
  movsd  (%r12),%xmm0
  movsd  0x8(%rbp),%xmm9
  movsd  0x10(%rbx),%xmm8
  movsd  0x8(%r12),%xmm7
  addsd  0x0(%rbp),%xmm7
  movsd  0x10(%r12),%xmm6
  addsd  (%rbx),%xmm6
  movsd  0x10(%rbp),%xmm4
  addsd  0x8(%rbx),%xmm4
  mulsd  %xmm0,%xmm0
  mulsd  %xmm9,%xmm9
  addsd  %xmm9,%xmm0
  mulsd  %xmm8,%xmm8
  addsd  %xmm8,%xmm0
  addsd  %xmm0,%xmm0
  mulsd  %xmm7,%xmm7
  addsd  %xmm7,%xmm0
  mulsd  %xmm6,%xmm6
  addsd  %xmm6,%xmm0
  mulsd  %xmm4,%xmm4
  addsd  %xmm4,%xmm0
  movsd  (%r15),%xmm9
  movsd  (%r14,%rdi,8),%xmm4
  movapd %xmm4,%xmm8
  addsd  D38(%rip),%xmm8
  movapd %xmm9,%xmm7
  mulsd  %xmm2,%xmm7
  mulsd  %xmm9,%xmm7
  divsd  %xmm8,%xmm7
  pxor   %xmm6,%xmm6
  comisd %xmm7,%xmm6
  ja     L94
  movapd %xmm2,%xmm6
  addsd  %xmm2,%xmm6
  mulsd  %xmm9,%xmm6
  divsd  %xmm8,%xmm6
  jmp    L14
L41:
  movsd  (%r15),%xmm0
  mov    0x58(%rsp),%rax
  movsd  %xmm0,(%rax,%rdi,8)
  mov    0x60(%rsp),%rax
  mov    D51(%rip),%rcx
  mov    %rcx,(%rax,%rdi,8)
  jmp    L57
L77:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D38
datatype: byte[8]
name: disassemble_data
arguments: data_tag: D6
datatype: f32[2]
name: disassemble_data
arguments: data_tag: D51
datatype: f64

tool: {"D38": [0x8d,0xed,0xb5,0xa0,0xf7,0xc6,0xb0,0x3e]}

tool: {"D6": [0.0,-0.0]}

tool: D51: 1

assistant: ```c
void kEpsilon_epsilon_3D_Evaluate_sd(int nPoints, int nSpace, double sigma_e, double c_1, double c_2, double c_mu, double c_e, double nu, double *velocity, double *gradu, double *gradv, double *gradw, double *k, double *epsilon, double *m_e, double *dm_e, double *phi_e, double *dphi_e, double *f_e, double *df_e, double *a_e, double *da_e_de, double *r_e, double *dr_e_de) {
  int i, I;
  double nu_t, dnu_t_de, PiD4, eval, kval, disp, ddisp_de;
  const double div_eps = 1.0e-6;
  for (i = 0; i < nPoints; i++) {
    eval = epsilon[i] >= 0.0 ? epsilon[i] : 0.0;
    kval = k[i] >= 0.0 ? k[i] : 0.0;
    nu_t = c_mu * k[i] * k[i] / (epsilon[i] + div_eps);
    dnu_t_de = -c_mu * k[i] * k[i] / (epsilon[i] * epsilon[i] + div_eps);
    if (nu_t < 0.0) {
      nu_t = 0.0;
      dnu_t_de = 0.0;
    }
    m_e[i] = epsilon[i];
    dm_e[i] = 1.0;
    for (I = 0; I < nSpace; I++) {
      f_e[i * nSpace + I] = epsilon[i] * velocity[i * nSpace + I];
      df_e[i * nSpace + I] = velocity[i * nSpace + I];
    }
    phi_e[i] = epsilon[i];
    dphi_e[i] = 1.0;
    for (I = 0; I < nSpace; I++) {
      a_e[i * nSpace + I] = nu_t / sigma_e + nu;
      da_e_de[i * nSpace + I] = dnu_t_de / sigma_e;
    }
    PiD4 = 2.0 * (gradu[i * nSpace + 0] * gradu[i * nSpace + 0] + gradv[i * nSpace + 1] * gradv[i * nSpace + 1] + gradw[i * nSpace + 2] * gradw[i * nSpace + 2]) + (gradu[i * nSpace + 1] + gradv[i * nSpace + 0]) * (gradu[i * nSpace + 1] + gradv[i * nSpace + 0]) + (gradu[i * nSpace + 2] + gradw[i * nSpace + 0]) * (gradu[i * nSpace + 2] + gradw[i * nSpace + 0]) + (gradv[i * nSpace + 2] + gradw[i * nSpace + 1]) * (gradv[i * nSpace + 2] + gradw[i * nSpace + 1]);
    disp = c_2 * epsilon[i] * epsilon[i] / (k[i] + div_eps);
    ddisp_de = 2.0 * c_2 * epsilon[i] / (k[i] + div_eps);
    if (disp < 0.0) {
      disp = 0.0;
      ddisp_de = 0.0;
    }
    r_e[i] = -c_1 * k[i] * PiD4 + disp;
    dr_e_de[i] = ddisp_de;
  }
}
```