// File: /workspace/github_cpp_makefile_star2_O3/joraso[P]Glassius/Protocol.cpp
// Function: Protocol::KobAndersonTest(double, double, int, Stopwatch*)
void Protocol::KobAndersonTest(double Temp, double relax, int record,
                               Stopwatch* timer){
    /* Set to mimick the tests run in LAMMPS */

    std::cout <<"\n"<< "Testing Kob-Anderson Glass" <<"\n"<< std::endl;
    std::cout << "Using Parameters:" << std::endl;
    //std::cout << "Temperature = " << Temp << std::endl;
    std::cout << "RelaxationTime =  " << relax << std::endl;
    
    double rho = 1000 / (9.4*9.4*9.4);
    
    std::cout << "Density = " << rho << std::endl;
    std::cout << "Boxlength = 9.4" << std::endl;
    
    std::cout << "\n" << "Setting up System..." << std::endl;
    Glass System(rho, 5.0, 10);
    timer->StampComplete();
    
    std::cout << "\n" << "Setting up Simulation..." << std::endl;
    Verlet verlet(&System, 5.0, 0.005, record);
    verlet.SetEnergyFile("Data/Equilibration.csv");
    timer->StampComplete();
    
    std::cout << "\n" << "Mixing at T = 5.0" << std::endl;
    std::cout << "Running for t = 20" << std::endl;
    std::cout << "Timestep = " << verlet.Getdt() << std::endl;
    std::cout << "Steps = 4000" << std::endl;
    std::cout << "Recording every = " << verlet.GetRecord() << std::endl;
    std::cout << "Thermostating every 500 timesteps" << std::endl;
    verlet.Equilibrate(20, 500);
    timer->StampComplete();
 
    std::cout << "\n" << "Equilibrating at T = " << Temp << std::endl;
    std::cout << "Running for t = " << relax << std::endl;
    std::cout << "Timestep = " << verlet.Getdt() << std::endl;
    std::cout << "Steps = " << relax/verlet.Getdt() << std::endl;
    std::cout << "Recording every = " << verlet.GetRecord() << std::endl;
    std::cout << "Thermostating every 500 timesteps" << std::endl;
    verlet.SetTemp(0.5);
    System.Thermalize(0.5);
    verlet.Equilibrate(relax, 500);
    timer->StampComplete();
 
    std::cout << "\n" << "Begining Production Run" << std::endl;
    std::cout << "Running for t = " << 1.5*relax << std::endl;
    std::cout << "Timestep = " << verlet.Getdt() << std::endl;
    std::cout << "Steps = " << (1.5*relax)/verlet.Getdt() << std::endl;
    std::cout << "Recording every = " << verlet.GetRecord() << std::endl;
    verlet.SetTime(0);
    verlet.SetEnergyFile("Data/Energies.csv");
    verlet.RecordTrajectory(true);
    verlet.Run(1.5*relax);
    timer->StampComplete();
    
    return;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x140, %rsp            # imm = 0x140
movq %rsi, %rbx
movl %edi, %ebp
movsd %xmm1, 0x8(%rsp)
movsd %xmm0, 0x10(%rsp)
movq 0x6143(%rip), %r14      # 0xafd8
leaq 0x3444(%rip), %r15      # 0x82e0
movl $0x1, %edx
movq %r14, %rdi
movq %r15, %rsi
callq 0x21e0
leaq 0x358f(%rip), %rsi      # 0x8442
movl $0x1a, %edx
movq %r14, %rdi
callq 0x21e0
movl $0x1, %edx
movq %r14, %rdi
movq %r15, %rsi
callq 0x21e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x3406(%rip), %rsi      # 0x8304
movl $0x11, %edx
movq %r14, %rdi
callq 0x21e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x33ec(%rip), %rsi      # 0x8325
movl $0x12, %edx
movq %r14, %rdi
callq 0x21e0
movq %r14, %rdi
movsd 0x8(%rsp), %xmm0
callq 0x2260
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r12, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x33b3(%rip), %rsi      # 0x8338
movl $0xa, %edx
movq %r14, %rdi
callq 0x21e0
movsd 0x32e6(%rip), %xmm0     # 0x8280
movq %r14, %rdi
callq 0x2260
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r12, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x3370(%rip), %rsi      # 0x8343
movl $0xf, %edx
movq %r14, %rdi
callq 0x21e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movl $0x1, %edx
movq %r14, %rdi
movq %r15, %rsi
callq 0x21e0
leaq 0x3335(%rip), %rsi      # 0x8353
movl $0x14, %edx
movq %r14, %rdi
callq 0x21e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r14, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0xb0(%rsp), %rdi
movsd 0x3226(%rip), %xmm1     # 0x8288
movsd 0x3226(%rip), %xmm2     # 0x8290
movsd 0x320e(%rip), %xmm0     # 0x8280
callq 0x6d02
movq %rbx, %rdi
callq 0x2b8a
movq 0x5f52(%rip), %rdi      # 0xafd8
leaq 0x3253(%rip), %rsi      # 0x82e0
movl $0x1, %edx
callq 0x21e0
movq 0x5f3a(%rip), %r14      # 0xafd8
leaq 0x32c3(%rip), %rsi      # 0x8368
movl $0x18, %edx
movq %r14, %rdi
callq 0x21e0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq 0x5f08(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x18(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
movsd 0x3196(%rip), %xmm0     # 0x8288
movsd 0x31c6(%rip), %xmm1     # 0x82c0
movl %ebp, %edx
callq 0x6d7a
leaq 0xa0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x3349(%rip), %rsi      # 0x845d
leaq 0x3358(%rip), %rdx      # 0x8473
leaq 0x90(%rsp), %rdi
callq 0x713e
leaq 0x48(%rsp), %r14
leaq 0x90(%rsp), %rsi
movq %r14, %rdi
callq 0x2100
movq 0x90(%rsp), %rdi
cmpq %r15, %rdi
je 0x514f
callq 0x21b0
movq %rbx, %rdi
callq 0x2b8a
movq 0x5e7a(%rip), %rdi      # 0xafd8
leaq 0x317b(%rip), %rsi      # 0x82e0
movl $0x1, %edx
callq 0x21e0
movq 0x5e62(%rip), %r15      # 0xafd8
leaq 0x32f7(%rip), %rsi      # 0x8474
movl $0x11, %edx
movq %r15, %rdi
callq 0x21e0
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq 0x5e30(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x5e1c(%rip), %r15      # 0xafd8
leaq 0x32c3(%rip), %rsi      # 0x8486
movl $0x12, %edx
movq %r15, %rdi
callq 0x21e0
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq 0x5dea(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x5dd6(%rip), %rdi      # 0xafd8
leaq 0x3218(%rip), %rsi      # 0x8421
movl $0xb, %edx
callq 0x21e0
movsd 0x30(%rsp), %xmm0
movq 0x5db8(%rip), %rdi      # 0xafd8
callq 0x2260
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r15, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x5d82(%rip), %r15      # 0xafd8
leaq 0x323c(%rip), %rsi      # 0x8499
movl $0xc, %edx
movq %r15, %rdi
callq 0x21e0
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq 0x5d50(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x5d3c(%rip), %rdi      # 0xafd8
leaq 0x310b(%rip), %rsi      # 0x83ae
movl $0x12, %edx
callq 0x21e0
movl 0x40(%rsp), %esi
movq 0x5d20(%rip), %rdi      # 0xafd8
callq 0x2290
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r15, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x5cea(%rip), %r15      # 0xafd8
leaq 0x31b1(%rip), %rsi      # 0x84a6
movl $0x21, %edx
movq %r15, %rdi
callq 0x21e0
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq 0x5cb8(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x18(%rsp), %rdi
movsd 0x2f8e(%rip), %xmm0     # 0x82c8
movl $0x1f4, %esi            # imm = 0x1F4
callq 0x3d98
movq %rbx, %rdi
callq 0x2b8a
movq 0x5c85(%rip), %rdi      # 0xafd8
leaq 0x2f86(%rip), %rsi      # 0x82e0
movl $0x1, %edx
callq 0x21e0
movq 0x5c6d(%rip), %rdi      # 0xafd8
leaq 0x3070(%rip), %rsi      # 0x83e2
movl $0x15, %edx
callq 0x21e0
movq 0x5c55(%rip), %rdi      # 0xafd8
movsd 0x10(%rsp), %xmm0
callq 0x2260
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r15, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x5c19(%rip), %rdi      # 0xafd8
leaq 0x3032(%rip), %rsi      # 0x83f8
movl $0x10, %edx
callq 0x21e0
movq 0x5c01(%rip), %rdi      # 0xafd8
movsd 0x8(%rsp), %xmm0
callq 0x2260
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r15, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x5bc5(%rip), %rdi      # 0xafd8
leaq 0x3007(%rip), %rsi      # 0x8421
movl $0xb, %edx
callq 0x21e0
movsd 0x30(%rsp), %xmm0
movq 0x5ba7(%rip), %rdi      # 0xafd8
callq 0x2260
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r15, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x5b71(%rip), %rdi      # 0xafd8
leaq 0x305a(%rip), %rsi      # 0x84c8
movl $0x8, %edx
callq 0x21e0
movsd 0x8(%rsp), %xmm0
divsd 0x30(%rsp), %xmm0
movq 0x5b4d(%rip), %rdi      # 0xafd8
callq 0x2260
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r15, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x5b17(%rip), %rdi      # 0xafd8
leaq 0x2ee6(%rip), %rsi      # 0x83ae
movl $0x12, %edx
callq 0x21e0
movl 0x40(%rsp), %esi
movq 0x5afb(%rip), %rdi      # 0xafd8
callq 0x2290
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r15, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x5ac5(%rip), %r15      # 0xafd8
leaq 0x2f8c(%rip), %rsi      # 0x84a6
movl $0x21, %edx
movq %r15, %rdi
callq 0x21e0
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq 0x5a93(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movabsq $0x3fe0000000000000, %rax # imm = 0x3FE0000000000000
movq %rax, 0x28(%rsp)
leaq 0xb0(%rsp), %rdi
movsd 0x2b8f(%rip), %xmm0     # 0x8100
callq 0x3636
leaq 0x18(%rsp), %rdi
movsd 0x8(%rsp), %xmm0
movl $0x1f4, %esi            # imm = 0x1F4
callq 0x3d98
movq %rbx, %rdi
callq 0x2b8a
movq 0x5a3e(%rip), %rdi      # 0xafd8
leaq 0x2d3f(%rip), %rsi      # 0x82e0
movl $0x1, %edx
callq 0x21e0
movq 0x5a26(%rip), %r15      # 0xafd8
leaq 0x2e50(%rip), %rsi      # 0x8409
movl $0x17, %edx
movq %r15, %rdi
callq 0x21e0
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq 0x59f4(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x59e0(%rip), %rdi      # 0xafd8
leaq 0x2df9(%rip), %rsi      # 0x83f8
movl $0x10, %edx
callq 0x21e0
movsd 0x8(%rsp), %xmm0
mulsd 0x2af9(%rip), %xmm0     # 0x8110
movq 0x59ba(%rip), %rdi      # 0xafd8
movsd %xmm0, 0x8(%rsp)
callq 0x2260
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r15, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x597e(%rip), %rdi      # 0xafd8
leaq 0x2dc0(%rip), %rsi      # 0x8421
movl $0xb, %edx
callq 0x21e0
movsd 0x30(%rsp), %xmm0
movq 0x5960(%rip), %rdi      # 0xafd8
callq 0x2260
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r15, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x592a(%rip), %rdi      # 0xafd8
leaq 0x2e13(%rip), %rsi      # 0x84c8
movl $0x8, %edx
callq 0x21e0
movsd 0x8(%rsp), %xmm0
divsd 0x30(%rsp), %xmm0
movq 0x5906(%rip), %rdi      # 0xafd8
callq 0x2260
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r15, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x58d0(%rip), %rdi      # 0xafd8
leaq 0x2c9f(%rip), %rsi      # 0x83ae
movl $0x12, %edx
callq 0x21e0
movl 0x40(%rsp), %esi
movq 0x58b4(%rip), %rdi      # 0xafd8
callq 0x2290
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x21d0
movsbl %al, %esi
movq %r15, %rdi
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x20(%rsp), %rax
movq $0x0, 0x70(%rax)
leaq 0x80(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x2d5e(%rip), %rsi      # 0x84d1
leaq 0x2d68(%rip), %rdx      # 0x84e2
leaq 0x70(%rsp), %rdi
callq 0x713e
leaq 0x70(%rsp), %rsi
movq %r14, %rdi
callq 0x2100
movq 0x70(%rsp), %rdi
cmpq %r15, %rdi
je 0x57a0
callq 0x21b0
leaq 0x18(%rsp), %rdi
movb $0x1, 0x50(%rdi)
movsd 0x8(%rsp), %xmm0
callq 0x3fc6
movq %rbx, %rdi
callq 0x2b8a
leaq 0x55dd(%rip), %rax      # 0xada0
leaq 0x58(%rsp), %rcx
movq %rax, -0x40(%rcx)
movq -0x10(%rcx), %rdi
cmpq %rcx, %rdi
je 0x57da
callq 0x21b0
leaq 0x55a7(%rip), %rax      # 0xad88
leaq 0xf0(%rsp), %rdi
movq %rax, -0x40(%rdi)
callq 0x300a
leaq 0xe0(%rsp), %rdi
callq 0x300a
leaq 0xd0(%rsp), %rdi
callq 0x300a
addq $0x140, %rsp            # imm = 0x140
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq 0x70(%rsp), %rdi
jmp 0x5833
jmp 0x5848
movq %rax, %rbx
movq 0x90(%rsp), %rdi
cmpq %r15, %rdi
je 0x584b
callq 0x21b0
jmp 0x584b
jmp 0x5848
jmp 0x5843
movq %rax, %rbx
jmp 0x5869
movq %rax, %rbx
leaq 0x554e(%rip), %rax      # 0xada0
leaq 0x58(%rsp), %rcx
movq %rax, -0x40(%rcx)
movq -0x10(%rcx), %rdi
cmpq %rcx, %rdi
je 0x5869
callq 0x21b0
leaq 0xb0(%rsp), %rdi
callq 0x7060
movq %rbx, %rdi
callq 0x22b0