// File: /workspace/github_cpp_makefile_star2_O3/joraso[P]Glassius/Protocol.cpp
// Function: Protocol::SzamelTest(double, double, int, Stopwatch*)
void Protocol::SzamelTest(double Temp, double relax, int record,
                               Stopwatch* timer){

    std::cout <<"\n"<< "Testing Szamel Brownian 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();

    Brownian brownian(&System, Temp, 1.0, 0.00005, record);
    brownian.SetEnergyFile("Data/Equilibration.csv");

    std::cout << "\n" << "Equilibrating at T = " << Temp << std::endl;
    std::cout << "Running for t = " << relax << std::endl;
    std::cout << "Timestep = " << brownian.Getdt() << std::endl;
    std::cout << "Steps = " << relax/brownian.Getdt() << std::endl;
    std::cout << "Recording every = " << brownian.GetRecord() << std::endl;
    brownian.Run(relax);
    timer->StampComplete();
 
    std::cout << "\n" << "Begining Production Run" << std::endl;
    std::cout << "Running for t = " << 1.5*relax << std::endl;
    std::cout << "Timestep = " << brownian.Getdt() << std::endl;
    std::cout << "Steps = " << (1.5*relax)/brownian.Getdt() << std::endl;
    std::cout << "Recording every = " << brownian.GetRecord() << std::endl;
    brownian.SetTime(0);
    brownian.SetEnergyFile("Data/Energies.csv");
    brownian.RecordTrajectory(true);
    brownian.Run(1.5*relax);
    timer->StampComplete();
    
    return;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x210, %rsp            # imm = 0x210
movq %rsi, %rbx
movl %edi, %ebp
movsd %xmm1, 0x8(%rsp)
movsd %xmm0, 0x10(%rsp)
movq 0x5733(%rip), %r14      # 0xafd8
leaq 0x2a34(%rip), %r15      # 0x82e0
movl $0x1, %edx
movq %r14, %rdi
movq %r15, %rsi
callq 0x21e0
leaq 0x2c20(%rip), %rsi      # 0x84e3
movl $0x1d, %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 0x29f6(%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 0x29dc(%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 0x29a3(%rip), %rsi      # 0x8338
movl $0xa, %edx
movq %r14, %rdi
callq 0x21e0
movsd 0x28d6(%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 0x2960(%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 0x2925(%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 0x180(%rsp), %rdi
movsd 0x2816(%rip), %xmm1     # 0x8288
movsd 0x2816(%rip), %xmm2     # 0x8290
movsd 0x27fe(%rip), %xmm0     # 0x8280
callq 0x6d02
movq %rbx, %rdi
callq 0x2b8a
movq 0x5542(%rip), %rdi      # 0xafd8
leaq 0x2843(%rip), %rsi      # 0x82e0
movl $0x1, %edx
callq 0x21e0
movq 0x552a(%rip), %r14      # 0xafd8
leaq 0x28b3(%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 0x54f8(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x128(%rsp), %rdi
leaq 0x180(%rsp), %rsi
movsd 0x2783(%rip), %xmm0     # 0x8288
movsd 0x27b3(%rip), %xmm1     # 0x82c0
movl %ebp, %edx
callq 0x6d7a
leaq 0x68(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x2939(%rip), %rsi      # 0x845d
leaq 0x2948(%rip), %rdx      # 0x8473
leaq 0x58(%rsp), %rdi
callq 0x713e
leaq 0x158(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x2100
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0x5b56
callq 0x21b0
movq %rbx, %rdi
callq 0x2b8a
movq 0x5473(%rip), %rdi      # 0xafd8
leaq 0x2774(%rip), %rsi      # 0x82e0
movl $0x1, %edx
callq 0x21e0
movq 0x545b(%rip), %r14      # 0xafd8
leaq 0x28f0(%rip), %rsi      # 0x8474
movl $0x11, %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 0x5429(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x5415(%rip), %r14      # 0xafd8
leaq 0x28bc(%rip), %rsi      # 0x8486
movl $0x12, %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 0x53e3(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x53cf(%rip), %rdi      # 0xafd8
leaq 0x2811(%rip), %rsi      # 0x8421
movl $0xb, %edx
callq 0x21e0
movsd 0x140(%rsp), %xmm0
movq 0x53ae(%rip), %rdi      # 0xafd8
callq 0x2260
movq %rax, %r14
movq (%rax), %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
movq 0x5378(%rip), %r14      # 0xafd8
leaq 0x2832(%rip), %rsi      # 0x8499
movl $0xc, %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 0x5346(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x5332(%rip), %rdi      # 0xafd8
leaq 0x2701(%rip), %rsi      # 0x83ae
movl $0x12, %edx
callq 0x21e0
movl 0x150(%rsp), %esi
movq 0x5313(%rip), %rdi      # 0xafd8
callq 0x2290
movq %rax, %r14
movq (%rax), %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
movq 0x52dd(%rip), %r14      # 0xafd8
leaq 0x27a4(%rip), %rsi      # 0x84a6
movl $0x21, %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 0x52ab(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x128(%rsp), %rdi
movsd 0x257e(%rip), %xmm0     # 0x82c8
movl $0x1f4, %esi            # imm = 0x1F4
callq 0x3d98
movq %rbx, %rdi
callq 0x2b8a
leaq 0x78(%rsp), %rdi
leaq 0x180(%rsp), %rsi
movsd 0x22e7(%rip), %xmm1     # 0x8058
movsd 0x2557(%rip), %xmm2     # 0x82d0
movsd 0x10(%rsp), %xmm0
movl %ebp, %edx
callq 0x6e3c
leaq 0x48(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x26c7(%rip), %rsi      # 0x845d
leaq 0x26d6(%rip), %rdx      # 0x8473
leaq 0x38(%rsp), %rdi
callq 0x713e
leaq 0xa8(%rsp), %r14
leaq 0x38(%rsp), %rsi
movq %r14, %rdi
callq 0x2100
movq 0x38(%rsp), %rdi
cmpq %r15, %rdi
je 0x5dcb
callq 0x21b0
movq 0x5206(%rip), %rdi      # 0xafd8
leaq 0x2507(%rip), %rsi      # 0x82e0
movl $0x1, %edx
callq 0x21e0
movq 0x51ee(%rip), %rdi      # 0xafd8
leaq 0x25f1(%rip), %rsi      # 0x83e2
movl $0x15, %edx
callq 0x21e0
movq 0x51d6(%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 0x519a(%rip), %rdi      # 0xafd8
leaq 0x25b3(%rip), %rsi      # 0x83f8
movl $0x10, %edx
callq 0x21e0
movq 0x5182(%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 0x5146(%rip), %rdi      # 0xafd8
leaq 0x2588(%rip), %rsi      # 0x8421
movl $0xb, %edx
callq 0x21e0
movsd 0x90(%rsp), %xmm0
movq 0x5125(%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 0x50ef(%rip), %rdi      # 0xafd8
leaq 0x25d8(%rip), %rsi      # 0x84c8
movl $0x8, %edx
callq 0x21e0
movsd 0x8(%rsp), %xmm0
divsd 0x90(%rsp), %xmm0
movq 0x50c8(%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 0x5092(%rip), %rdi      # 0xafd8
leaq 0x2461(%rip), %rsi      # 0x83ae
movl $0x12, %edx
callq 0x21e0
movl 0xa0(%rsp), %esi
movq 0x5073(%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
leaq 0x78(%rsp), %rdi
movsd 0x8(%rsp), %xmm0
callq 0x3fc6
movq %rbx, %rdi
callq 0x2b8a
movq 0x5025(%rip), %rdi      # 0xafd8
leaq 0x2326(%rip), %rsi      # 0x82e0
movl $0x1, %edx
callq 0x21e0
movq 0x500d(%rip), %r15      # 0xafd8
leaq 0x2437(%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 0x4fdb(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x4fc7(%rip), %rdi      # 0xafd8
leaq 0x23e0(%rip), %rsi      # 0x83f8
movl $0x10, %edx
callq 0x21e0
movsd 0x8(%rsp), %xmm0
mulsd 0x20e0(%rip), %xmm0     # 0x8110
movq 0x4fa1(%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 0x4f65(%rip), %rdi      # 0xafd8
leaq 0x23a7(%rip), %rsi      # 0x8421
movl $0xb, %edx
callq 0x21e0
movsd 0x90(%rsp), %xmm0
movq 0x4f44(%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 0x4f0e(%rip), %rdi      # 0xafd8
leaq 0x23f7(%rip), %rsi      # 0x84c8
movl $0x8, %edx
callq 0x21e0
movsd 0x8(%rsp), %xmm0
divsd 0x90(%rsp), %xmm0
movq 0x4ee7(%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 0x4eb1(%rip), %rdi      # 0xafd8
leaq 0x2280(%rip), %rsi      # 0x83ae
movl $0x12, %edx
callq 0x21e0
movl 0xa0(%rsp), %esi
movq 0x4e92(%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 0x80(%rsp), %rax
movq $0x0, 0x70(%rax)
leaq 0x28(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x233c(%rip), %rsi      # 0x84d1
leaq 0x2346(%rip), %rdx      # 0x84e2
leaq 0x18(%rsp), %rdi
callq 0x713e
leaq 0x18(%rsp), %rsi
movq %r14, %rdi
callq 0x2100
movq 0x18(%rsp), %rdi
cmpq %r15, %rdi
je 0x61c2
callq 0x21b0
leaq 0x78(%rsp), %rdi
movb $0x1, 0x50(%rdi)
movsd 0x8(%rsp), %xmm0
callq 0x3fc6
movq %rbx, %rdi
callq 0x2b8a
leaq 0x4b4b(%rip), %rax      # 0xad30
addq $0x10, %rax
leaq 0x100(%rsp), %rdi
movq %rax, -0x88(%rdi)
callq 0x300a
leaq 0xf0(%rsp), %rdi
callq 0x300a
leaq 0xe0(%rsp), %rbx
movq %rbx, %rdi
callq 0x300a
leaq 0x4b7f(%rip), %r14      # 0xada0
movq %r14, -0x68(%rbx)
movq -0x38(%rbx), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x623b
callq 0x21b0
leaq 0x168(%rsp), %rax
movq %r14, -0x40(%rax)
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x6255
callq 0x21b0
leaq 0x4b2c(%rip), %rax      # 0xad88
leaq 0x1c0(%rsp), %rdi
movq %rax, -0x40(%rdi)
callq 0x300a
leaq 0x1b0(%rsp), %rdi
callq 0x300a
leaq 0x1a0(%rsp), %rdi
callq 0x300a
addq $0x210, %rsp            # imm = 0x210
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq 0x18(%rsp), %rdi
jmp 0x62ab
jmp 0x62dd
movq %rax, %rbx
movq 0x38(%rsp), %rdi
cmpq %r15, %rdi
je 0x62e0
callq 0x21b0
jmp 0x62e0
jmp 0x62dd
jmp 0x62d8
movq %rax, %rbx
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0x62ea
callq 0x21b0
jmp 0x62ea
jmp 0x62d8
jmp 0x62d3
movq %rax, %rbx
jmp 0x630b
movq %rax, %rbx
jmp 0x62ea
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x6f68
leaq 0x4aaf(%rip), %rax      # 0xada0
leaq 0x168(%rsp), %rcx
movq %rax, -0x40(%rcx)
movq -0x10(%rcx), %rdi
cmpq %rcx, %rdi
je 0x630b
callq 0x21b0
leaq 0x180(%rsp), %rdi
callq 0x7060
movq %rbx, %rdi
callq 0x22b0