// File: /workspace/github_cpp_makefile_star2_O1/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 0x5751(%rip), %r14      # 0xafd8
leaq 0x2a4a(%rip), %r15      # 0x82d8
movl $0x1, %edx
movq %r14, %rdi
movq %r15, %rsi
callq 0x21e0
leaq 0x2c36(%rip), %rsi      # 0x84db
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 0x2a0c(%rip), %rsi      # 0x82fc
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 0x29f2(%rip), %rsi      # 0x831d
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 0x29b9(%rip), %rsi      # 0x8330
movl $0xa, %edx
movq %r14, %rdi
callq 0x21e0
movsd 0x28f4(%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 0x2976(%rip), %rsi      # 0x833b
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 0x293b(%rip), %rsi      # 0x834b
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 0x2834(%rip), %xmm1     # 0x8288
movsd 0x2834(%rip), %xmm2     # 0x8290
movsd 0x281c(%rip), %xmm0     # 0x8280
callq 0x6ce4
movq %rbx, %rdi
callq 0x2b8a
movq 0x5560(%rip), %rdi      # 0xafd8
leaq 0x2859(%rip), %rsi      # 0x82d8
movl $0x1, %edx
callq 0x21e0
movq 0x5548(%rip), %r14      # 0xafd8
leaq 0x28c9(%rip), %rsi      # 0x8360
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 0x5516(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x128(%rsp), %rdi
leaq 0x180(%rsp), %rsi
movsd 0x27a1(%rip), %xmm0     # 0x8288
movsd 0x27c9(%rip), %xmm1     # 0x82b8
movl %ebp, %edx
callq 0x6d5c
leaq 0x68(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x294f(%rip), %rsi      # 0x8455
leaq 0x295e(%rip), %rdx      # 0x846b
leaq 0x58(%rsp), %rdi
callq 0x7120
leaq 0x158(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x2100
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0x5b38
callq 0x21b0
movq %rbx, %rdi
callq 0x2b8a
movq 0x5491(%rip), %rdi      # 0xafd8
leaq 0x278a(%rip), %rsi      # 0x82d8
movl $0x1, %edx
callq 0x21e0
movq 0x5479(%rip), %r14      # 0xafd8
leaq 0x2906(%rip), %rsi      # 0x846c
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 0x5447(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x5433(%rip), %r14      # 0xafd8
leaq 0x28d2(%rip), %rsi      # 0x847e
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 0x5401(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x53ed(%rip), %rdi      # 0xafd8
leaq 0x2827(%rip), %rsi      # 0x8419
movl $0xb, %edx
callq 0x21e0
movsd 0x140(%rsp), %xmm0
movq 0x53cc(%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 0x5396(%rip), %r14      # 0xafd8
leaq 0x2848(%rip), %rsi      # 0x8491
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 0x5364(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x5350(%rip), %rdi      # 0xafd8
leaq 0x2717(%rip), %rsi      # 0x83a6
movl $0x12, %edx
callq 0x21e0
movl 0x150(%rsp), %esi
movq 0x5331(%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 0x52fb(%rip), %r14      # 0xafd8
leaq 0x27ba(%rip), %rsi      # 0x849e
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 0x52c9(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
leaq 0x128(%rsp), %rdi
movsd 0x2594(%rip), %xmm0     # 0x82c0
movl $0x1f4, %esi            # imm = 0x1F4
callq 0x3d80
movq %rbx, %rdi
callq 0x2b8a
leaq 0x78(%rsp), %rdi
leaq 0x180(%rsp), %rsi
movsd 0x2305(%rip), %xmm1     # 0x8058
movsd 0x256d(%rip), %xmm2     # 0x82c8
movsd 0x10(%rsp), %xmm0
movl %ebp, %edx
callq 0x6e1e
leaq 0x48(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x26dd(%rip), %rsi      # 0x8455
leaq 0x26ec(%rip), %rdx      # 0x846b
leaq 0x38(%rsp), %rdi
callq 0x7120
leaq 0xa8(%rsp), %r14
leaq 0x38(%rsp), %rsi
movq %r14, %rdi
callq 0x2100
movq 0x38(%rsp), %rdi
cmpq %r15, %rdi
je 0x5dad
callq 0x21b0
movq 0x5224(%rip), %rdi      # 0xafd8
leaq 0x251d(%rip), %rsi      # 0x82d8
movl $0x1, %edx
callq 0x21e0
movq 0x520c(%rip), %rdi      # 0xafd8
leaq 0x2607(%rip), %rsi      # 0x83da
movl $0x15, %edx
callq 0x21e0
movq 0x51f4(%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 0x51b8(%rip), %rdi      # 0xafd8
leaq 0x25c9(%rip), %rsi      # 0x83f0
movl $0x10, %edx
callq 0x21e0
movq 0x51a0(%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 0x5164(%rip), %rdi      # 0xafd8
leaq 0x259e(%rip), %rsi      # 0x8419
movl $0xb, %edx
callq 0x21e0
movsd 0x90(%rsp), %xmm0
movq 0x5143(%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 0x510d(%rip), %rdi      # 0xafd8
leaq 0x25ee(%rip), %rsi      # 0x84c0
movl $0x8, %edx
callq 0x21e0
movsd 0x8(%rsp), %xmm0
divsd 0x90(%rsp), %xmm0
movq 0x50e6(%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 0x50b0(%rip), %rdi      # 0xafd8
leaq 0x2477(%rip), %rsi      # 0x83a6
movl $0x12, %edx
callq 0x21e0
movl 0xa0(%rsp), %esi
movq 0x5091(%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 0x3fae
movq %rbx, %rdi
callq 0x2b8a
movq 0x5043(%rip), %rdi      # 0xafd8
leaq 0x233c(%rip), %rsi      # 0x82d8
movl $0x1, %edx
callq 0x21e0
movq 0x502b(%rip), %r15      # 0xafd8
leaq 0x244d(%rip), %rsi      # 0x8401
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 0x4ff9(%rip), %rdi      # 0xafd8
callq 0x2040
movq %rax, %rdi
callq 0x2120
movq 0x4fe5(%rip), %rdi      # 0xafd8
leaq 0x23f6(%rip), %rsi      # 0x83f0
movl $0x10, %edx
callq 0x21e0
movsd 0x8(%rsp), %xmm0
mulsd 0x20fe(%rip), %xmm0     # 0x8110
movq 0x4fbf(%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 0x4f83(%rip), %rdi      # 0xafd8
leaq 0x23bd(%rip), %rsi      # 0x8419
movl $0xb, %edx
callq 0x21e0
movsd 0x90(%rsp), %xmm0
movq 0x4f62(%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 0x4f2c(%rip), %rdi      # 0xafd8
leaq 0x240d(%rip), %rsi      # 0x84c0
movl $0x8, %edx
callq 0x21e0
movsd 0x8(%rsp), %xmm0
divsd 0x90(%rsp), %xmm0
movq 0x4f05(%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 0x4ecf(%rip), %rdi      # 0xafd8
leaq 0x2296(%rip), %rsi      # 0x83a6
movl $0x12, %edx
callq 0x21e0
movl 0xa0(%rsp), %esi
movq 0x4eb0(%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 0x2352(%rip), %rsi      # 0x84c9
leaq 0x235c(%rip), %rdx      # 0x84da
leaq 0x18(%rsp), %rdi
callq 0x7120
leaq 0x18(%rsp), %rsi
movq %r14, %rdi
callq 0x2100
movq 0x18(%rsp), %rdi
cmpq %r15, %rdi
je 0x61a4
callq 0x21b0
leaq 0x78(%rsp), %rdi
movb $0x1, 0x50(%rdi)
movsd 0x8(%rsp), %xmm0
callq 0x3fae
movq %rbx, %rdi
callq 0x2b8a
leaq 0x4b69(%rip), %rax      # 0xad30
addq $0x10, %rax
leaq 0x100(%rsp), %rdi
movq %rax, -0x88(%rdi)
callq 0x3008
leaq 0xf0(%rsp), %rdi
callq 0x3008
leaq 0xe0(%rsp), %rbx
movq %rbx, %rdi
callq 0x3008
leaq 0x4b9d(%rip), %r14      # 0xada0
movq %r14, -0x68(%rbx)
movq -0x38(%rbx), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x621d
callq 0x21b0
leaq 0x168(%rsp), %rax
movq %r14, -0x40(%rax)
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x6237
callq 0x21b0
leaq 0x4b4a(%rip), %rax      # 0xad88
leaq 0x1c0(%rsp), %rdi
movq %rax, -0x40(%rdi)
callq 0x3008
leaq 0x1b0(%rsp), %rdi
callq 0x3008
leaq 0x1a0(%rsp), %rdi
callq 0x3008
addq $0x210, %rsp            # imm = 0x210
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq 0x18(%rsp), %rdi
jmp 0x628d
jmp 0x62bf
movq %rax, %rbx
movq 0x38(%rsp), %rdi
cmpq %r15, %rdi
je 0x62c2
callq 0x21b0
jmp 0x62c2
jmp 0x62bf
jmp 0x62ba
movq %rax, %rbx
movq 0x58(%rsp), %rdi
cmpq %r14, %rdi
je 0x62cc
callq 0x21b0
jmp 0x62cc
jmp 0x62ba
jmp 0x62b5
movq %rax, %rbx
jmp 0x62ed
movq %rax, %rbx
jmp 0x62cc
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x6f4a
leaq 0x4acd(%rip), %rax      # 0xada0
leaq 0x168(%rsp), %rcx
movq %rax, -0x40(%rcx)
movq -0x10(%rcx), %rdi
cmpq %rcx, %rdi
je 0x62ed
callq 0x21b0
leaq 0x180(%rsp), %rdi
callq 0x7042
movq %rbx, %rdi
callq 0x22b0