// File: joraso[P]Glassius/Integration.cpp
// Function: Brownian::Propigate()
void Brownian::Propigate(){
    /* Advances the velocity huen calculation one step.*/
    
    int i,k;
    int n = System->Number();
    double dtinv = 1/dt;
    for(i=0;i<n;i++){
        for(k=0;k<3;k++){
            eta[i][k] = prefactor*chaos::gaussian(0.0, 1.0);
            f0[i][k] = System->f[i][k];
            x0[i][k] = System->r[i][k];
            System->r[i][k] = x0[i][k] + dt*System->f[i][k] + eta[i][k];
        }
    }
    System->UpdateForces();
    for(i=0;i<n;i++){
        for(k=0;k<3;k++){
            System->r[i][k] = x0[i][k] + 0.5*dt*(System->f[i][k] + f0[i][k])
                                + eta[i][k];
            System->v[i][k] = dtinv*(System->r[i][k] - x0[i][k]);
        }
    }
    System->UpdateForces();
    System->UpdateKinetic();
    time += dt;
    return;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movq 0x30(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x8(%rax), %rdi
callq 0x5da0
movq 0x10(%rsp), %rax
cvttsd2si %xmm0, %ecx
movl %ecx, 0x24(%rsp)
movsd 0x3667(%rip), %xmm0     # 0x9058
divsd 0x18(%rax), %xmm0
movsd %xmm0, 0x18(%rsp)
movl $0x0, 0x2c(%rsp)
movl 0x2c(%rsp), %eax
cmpl 0x24(%rsp), %eax
jge 0x5b74
movl $0x0, 0x28(%rsp)
cmpl $0x3, 0x28(%rsp)
jge 0x5b62
movq 0x10(%rsp), %rax
movsd 0x60(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
xorps %xmm0, %xmm0
movsd 0x3618(%rip), %xmm1     # 0x9058
callq 0x2ea0
movq 0x10(%rsp), %rax
movaps %xmm0, %xmm1
movsd 0x8(%rsp), %xmm0
mulsd %xmm1, %xmm0
movq 0x98(%rax), %rcx
movslq 0x2c(%rsp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq 0x28(%rsp), %rdx
movsd %xmm0, (%rcx,%rdx,8)
movq 0x8(%rax), %rcx
movq 0x18(%rcx), %rcx
movslq 0x2c(%rsp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq 0x28(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm0
movq 0xa0(%rax), %rcx
movslq 0x2c(%rsp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq 0x28(%rsp), %rdx
movsd %xmm0, (%rcx,%rdx,8)
movq 0x8(%rax), %rcx
movq 0x8(%rcx), %rcx
movslq 0x2c(%rsp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq 0x28(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm0
movq 0xa8(%rax), %rcx
movslq 0x2c(%rsp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq 0x28(%rsp), %rdx
movsd %xmm0, (%rcx,%rdx,8)
movq 0xa8(%rax), %rcx
movslq 0x2c(%rsp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq 0x28(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm1
movsd 0x18(%rax), %xmm0
movq 0x8(%rax), %rcx
movq 0x18(%rcx), %rcx
movslq 0x2c(%rsp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq 0x28(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x98(%rax), %rcx
movslq 0x2c(%rsp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq 0x28(%rsp), %rdx
addsd (%rcx,%rdx,8), %xmm0
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movslq 0x2c(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movslq 0x28(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl 0x28(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x28(%rsp)
jmp 0x5a1a
jmp 0x5b64
movl 0x2c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2c(%rsp)
jmp 0x5a04
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *(%rax)
movl $0x0, 0x2c(%rsp)
movl 0x2c(%rsp), %eax
cmpl 0x24(%rsp), %eax
jge 0x5cc5
movl $0x0, 0x28(%rsp)
cmpl $0x3, 0x28(%rsp)
jge 0x5cb3
movq 0x10(%rsp), %rax
movq 0xa8(%rax), %rcx
movslq 0x2c(%rsp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq 0x28(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm1
movsd 0x3536(%rip), %xmm0     # 0x9108
mulsd 0x18(%rax), %xmm0
movq 0x8(%rax), %rcx
movq 0x18(%rcx), %rcx
movslq 0x2c(%rsp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq 0x28(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm2
movq 0xa0(%rax), %rcx
movslq 0x2c(%rsp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq 0x28(%rsp), %rdx
addsd (%rcx,%rdx,8), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x98(%rax), %rcx
movslq 0x2c(%rsp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq 0x28(%rsp), %rdx
addsd (%rcx,%rdx,8), %xmm0
movq 0x8(%rax), %rcx
movq 0x8(%rcx), %rcx
movslq 0x2c(%rsp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq 0x28(%rsp), %rdx
movsd %xmm0, (%rcx,%rdx,8)
movsd 0x18(%rsp), %xmm0
movq 0x8(%rax), %rcx
movq 0x8(%rcx), %rcx
movslq 0x2c(%rsp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq 0x28(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm1
movq 0xa8(%rax), %rcx
movslq 0x2c(%rsp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq 0x28(%rsp), %rdx
subsd (%rcx,%rdx,8), %xmm1
mulsd %xmm1, %xmm0
movq 0x8(%rax), %rax
movq 0x10(%rax), %rax
movslq 0x2c(%rsp), %rcx
movq (%rax,%rcx,8), %rax
movslq 0x28(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl 0x28(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x28(%rsp)
jmp 0x5ba0
jmp 0x5cb5
movl 0x2c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2c(%rsp)
jmp 0x5b8a
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *(%rax)
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x3fa0
movq 0x10(%rsp), %rax
movsd 0x18(%rax), %xmm0
addsd 0x20(%rax), %xmm0
movsd %xmm0, 0x20(%rax)
addq $0x38, %rsp
retq
nopw (%rax,%rax)