// File: JRLamontagne[P]cdice_sa/CDICE.cpp
// Function: calcCarb(DICE*, int)
void calcCarb(DICE *dice, int t)
{

  Econ *econ = &dice->econ;
  Carb *carb = &dice->carb;
  Lims *lims = &dice->lims;
  
  // Carbon pools (carbon cycle box model)
  carb->mat[t] = (econ->e[t-1]*(5.0/3.666))+carb->b11*carb->mat[t-1]+carb->b21*carb->mu[t-1];
  if(carb->mat[t] < lims->mat_lo) {
    carb->mat[t] = lims->mat_lo;
  }

  carb->mu[t] = carb->b12*carb->mat[t-1]+carb->b22*carb->mu[t-1]+carb->b32*carb->ml[t-1];
  if(carb->mu[t] < lims->mu_lo) {
    carb->mu[t] = lims->mu_lo;
  }
  carb->ml[t] = carb->b33*carb->ml[t-1]+carb->b23*carb->mu[t-1];
  if(carb->ml[t] < lims->ml_lo) {
    carb->ml[t] = lims->ml_lo;
  }
  
  // Radiatice forcing
  carb->forc[t] = carb->fco22x*(log(carb->mat[t]/588.000)/log(2.0))+carb->forcoth[t];
  
  return;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movl %esi, 0x2c(%rsp)
movq 0x30(%rsp), %rax
addq $0x190, %rax            # imm = 0x190
movq %rax, 0x20(%rsp)
movq 0x30(%rsp), %rax
addq $0x3e0, %rax            # imm = 0x3E0
movq %rax, 0x18(%rsp)
movq 0x30(%rsp), %rax
addq $0x4a8, %rax            # imm = 0x4A8
movq %rax, 0x10(%rsp)
movq 0x20(%rsp), %rax
movq 0x228(%rax), %rax
movl 0x2c(%rsp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm1
movq 0x18(%rsp), %rax
movsd 0x40(%rax), %xmm0
movq 0x18(%rsp), %rax
movq 0x98(%rax), %rax
movl 0x2c(%rsp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
mulsd (%rax,%rcx,8), %xmm0
movsd 0x595b(%rip), %xmm2     # 0x1c1c0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq 0x18(%rsp), %rax
movsd 0x48(%rax), %xmm0
movq 0x18(%rsp), %rax
movq 0xa0(%rax), %rax
movl 0x2c(%rsp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x18(%rsp), %rax
movq 0x98(%rax), %rax
movslq 0x2c(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq 0x18(%rsp), %rax
movq 0x98(%rax), %rax
movslq 0x2c(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm1
movq 0x10(%rsp), %rax
movsd 0x10(%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x168f6
movq 0x10(%rsp), %rax
movsd 0x10(%rax), %xmm0
movq 0x18(%rsp), %rax
movq 0x98(%rax), %rax
movslq 0x2c(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq 0x18(%rsp), %rax
movsd 0x30(%rax), %xmm1
movq 0x18(%rsp), %rax
movq 0x98(%rax), %rax
movl 0x2c(%rsp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm2
movq 0x18(%rsp), %rax
movsd 0x50(%rax), %xmm0
movq 0x18(%rsp), %rax
movq 0xa0(%rax), %rax
movl 0x2c(%rsp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
mulsd (%rax,%rcx,8), %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq 0x18(%rsp), %rax
movsd 0x58(%rax), %xmm0
movq 0x18(%rsp), %rax
movq 0xa8(%rax), %rax
movl 0x2c(%rsp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x18(%rsp), %rax
movq 0xa0(%rax), %rax
movslq 0x2c(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq 0x18(%rsp), %rax
movq 0xa0(%rax), %rax
movslq 0x2c(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm1
movq 0x10(%rsp), %rax
movsd 0x18(%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x169d1
movq 0x10(%rsp), %rax
movsd 0x18(%rax), %xmm0
movq 0x18(%rsp), %rax
movq 0xa0(%rax), %rax
movslq 0x2c(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq 0x18(%rsp), %rax
movsd 0x60(%rax), %xmm0
movq 0x18(%rsp), %rax
movq 0xa8(%rax), %rax
movl 0x2c(%rsp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm2
movq 0x18(%rsp), %rax
movsd 0x38(%rax), %xmm1
movq 0x18(%rsp), %rax
movq 0xa0(%rax), %rax
movl 0x2c(%rsp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
mulsd (%rax,%rcx,8), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x18(%rsp), %rax
movq 0xa8(%rax), %rax
movslq 0x2c(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq 0x18(%rsp), %rax
movq 0xa8(%rax), %rax
movslq 0x2c(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm1
movq 0x10(%rsp), %rax
movsd 0x20(%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x16a7f
movq 0x10(%rsp), %rax
movsd 0x20(%rax), %xmm0
movq 0x18(%rsp), %rax
movq 0xa8(%rax), %rax
movslq 0x2c(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq 0x18(%rsp), %rax
movsd 0x68(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movq 0x18(%rsp), %rax
movq 0x98(%rax), %rax
movslq 0x2c(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd 0x5723(%rip), %xmm1     # 0x1c1d0
divsd %xmm1, %xmm0
callq 0x9510
movsd %xmm0, (%rsp)
movsd 0x56c5(%rip), %xmm0     # 0x1c188
callq 0x9510
movsd (%rsp), %xmm2
movaps %xmm0, %xmm1
movsd 0x8(%rsp), %xmm0
divsd %xmm1, %xmm2
movq 0x18(%rsp), %rax
movq 0x88(%rax), %rax
movslq 0x2c(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x18(%rsp), %rax
movq 0x90(%rax), %rax
movslq 0x2c(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)