// File: /workspace/github_c_makefile_star2_O0/mohuangrui[P]ArtraCFD/fluid_dynamics.c
// Function: LLLU
static void LLLU(const Real dt, const Real coeA, const Real coeB, const int to,
        const int tn, const int tm, const int p, Space *space, const Model *model)
{
    const Partition *const part = &(space->part);
    Node *const node = space->node;
    int idx = 0; /* linear array index math variable */
    int i = 0, j = 0, k = 0; /* index with normal order */
    const int h[DIMS][DIMS] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}; /* direction indicator */
    Real RHS[5][DIMU] = {{0.0}}; /* spatial operator */
    Real *restrict FhatR = RHS[0]; /* reconstructed numerical convective flux vector */
    Real *restrict FhatL = RHS[1]; /* reconstructed numerical convective flux vector */
    Real *restrict FvhatR = RHS[2]; /* reconstructed numerical diffusive flux vector */
    Real *restrict FvhatL = RHS[3]; /* reconstructed numerical diffusive flux vector */
    Real *restrict Phi = RHS[4]; /* right hand side vector */
    Real *temp = NULL;
    const IntVec partn = {part->n[X], part->n[Y], part->n[Z]};
    const RealVec dd = {part->dd[X], part->dd[Y], part->dd[Z]};
    const RealVec r = {dt * dd[X], dt * dd[Y], dt * dd[Z]};
    int s = 0, sN = 0; /* space sweep control for the operator p */
    switch (p) {
        case PHI: /* source term */
            s = 0; sN = s + 1;
            break;
        case DIMS: /* all spatial operators */
            s = 0; sN = DIMS;
            break;
        default: /* individual spatial operator */
            s = p; sN = s + 1;
            break;
    }
    /* space sweep with dimension priority */
    for (; s < sN; ++s) {
        for (int ks = part->np[s][Z][MIN]; ks < part->np[s][Z][MAX]; ++ks) {
            for (int js = part->np[s][Y][MIN]; js < part->np[s][Y][MAX]; ++js) {
                for (int is = part->np[s][X][MIN], state = 0; is < part->np[s][X][MAX]; ++is) {
                    switch (s) {
                        case X:
                            i = is; j = js; k = ks;
                            break;
                        case Y:
                            i = js; j = is; k = ks;
                            break;
                        case Z:
                            i = js; j = ks; k = is;
                            break;
                        default:
                            break;
                    }
                    idx = IndexNode(k, j, i, partn[Y], partn[X]);
                    if (0 != node[idx].did) {
                        state = 0; /* mark domain change and boundary occurrence */
                        continue;
                    }
                    switch (p) {
                        case PHI:
                            ComputePhi(tn, k, j, i, partn, node, model, Phi);
                            SolveOperator(OPTSPLIT, s, coeA, coeB, node[idx].U[to], node[idx].U[tn], node[idx].U[tm], dt, Phi);
                            continue;
                        default:
                            break;
                    }
                    switch (state) {
                        case 1: /* inherit numerical flux from the previous node */
                            temp = FhatL;
                            FhatL = FhatR;
                            FhatR = temp;
                            temp = FvhatL;
                            FvhatL = FvhatR;
                            FvhatR = temp;
                            break;
                        default: /* compute numerical flux at left interface */
                            ComputeFhat(tn, s, k - h[s][Z], j - h[s][Y], i - h[s][X], partn, node, model, FhatL);
                            ComputeFvhat(tn, s, k - h[s][Z], j - h[s][Y], i - h[s][X], partn, dd, node, model, FvhatL);
                            state = 1;
                            break;
                    }
                    ComputeFhat(tn, s, k, j, i, partn, node, model, FhatR);
                    ComputeFvhat(tn, s, k, j, i, partn, dd, node, model, FvhatR);
                    LU(FhatR, FhatL, FvhatR, FvhatL, Phi);
                    SolveOperator(model->multidim, s, coeA, coeB, node[idx].U[to], node[idx].U[tn], node[idx].U[tm], r[s], Phi);
                }
            }
        }
    }
    return;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
subq $0x238, %rsp            # imm = 0x238
movsd %xmm0, -0x10(%rbp)
movsd %xmm1, -0x18(%rbp)
movsd %xmm2, -0x20(%rbp)
movl %edi, -0x24(%rbp)
movl %esi, -0x28(%rbp)
movl %edx, -0x2c(%rbp)
movl %ecx, -0x30(%rbp)
movq %r8, -0x38(%rbp)
movq %r9, -0x40(%rbp)
movq -0x38(%rbp), %rax
addq $0x28, %rax
movq %rax, -0x48(%rbp)
movq -0x38(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x50(%rbp)
movl $0x0, -0x54(%rbp)
movl $0x0, -0x58(%rbp)
movl $0x0, -0x5c(%rbp)
movl $0x0, -0x60(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x210(%rbp)
movaps %xmm0, -0x80(%rbp)
movaps %xmm0, -0x90(%rbp)
movl $0x0, -0x70(%rbp)
movl $0x1, -0x90(%rbp)
movl $0x1, -0x80(%rbp)
movl $0x1, -0x70(%rbp)
movaps %xmm0, -0xb0(%rbp)
movaps %xmm0, -0xc0(%rbp)
movaps %xmm0, -0xd0(%rbp)
movaps %xmm0, -0xe0(%rbp)
movaps %xmm0, -0xf0(%rbp)
movaps %xmm0, -0x100(%rbp)
movaps %xmm0, -0x110(%rbp)
movaps %xmm0, -0x120(%rbp)
movaps %xmm0, -0x130(%rbp)
movaps %xmm0, -0x140(%rbp)
movaps %xmm0, -0x150(%rbp)
movaps %xmm0, -0x160(%rbp)
movq $0x0, -0xa0(%rbp)
leaq -0xc0(%rbp), %rax
leaq -0x110(%rbp), %rcx
leaq -0x160(%rbp), %rdx
movq %rdx, -0x168(%rbp)
leaq -0x138(%rbp), %rdx
movq %rdx, -0x170(%rbp)
movq %rcx, -0x178(%rbp)
leaq -0xe8(%rbp), %rcx
movq %rcx, -0x180(%rbp)
movq %rax, -0x188(%rbp)
movq $0x0, -0x190(%rbp)
movq -0x48(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x19c(%rbp)
movq -0x48(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0x198(%rbp)
movq -0x48(%rbp), %rax
movl 0x14(%rax), %eax
movl %eax, -0x194(%rbp)
movq -0x48(%rbp), %rax
movsd 0x48(%rax), %xmm0
movsd %xmm0, -0x1c0(%rbp)
movq -0x48(%rbp), %rax
movsd 0x50(%rax), %xmm0
movsd %xmm0, -0x1b8(%rbp)
movq -0x48(%rbp), %rax
movsd 0x58(%rax), %xmm0
movsd %xmm0, -0x1b0(%rbp)
movsd -0x10(%rbp), %xmm0
movsd -0x1c0(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1e0(%rbp)
movsd -0x10(%rbp), %xmm0
movsd -0x1b8(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1d8(%rbp)
movsd -0x10(%rbp), %xmm0
movsd -0x1b0(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1d0(%rbp)
movl $0x0, -0x1e4(%rbp)
movl $0x0, -0x1e8(%rbp)
movl -0x30(%rbp), %eax
movl %eax, -0x1fc(%rbp)
subl $0x3, %eax
je 0x184b7
jmp 0x1848f
movl -0x1fc(%rbp), %eax
subl $0x4, %eax
jne 0x184cd
jmp 0x1849c
movl $0x0, -0x1e4(%rbp)
movl -0x1e4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1e8(%rbp)
jmp 0x184e5
movl $0x0, -0x1e4(%rbp)
movl $0x3, -0x1e8(%rbp)
jmp 0x184e5
movl -0x30(%rbp), %eax
movl %eax, -0x1e4(%rbp)
movl -0x1e4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1e8(%rbp)
jmp 0x184e7
movl -0x1e4(%rbp), %eax
cmpl -0x1e8(%rbp), %eax
jge 0x18a8e
movq -0x48(%rbp), %rax
addq $0x1d0, %rax            # imm = 0x1D0
movslq -0x1e4(%rbp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movl %eax, -0x1ec(%rbp)
movl -0x1ec(%rbp), %eax
movq -0x48(%rbp), %rcx
addq $0x1d0, %rcx            # imm = 0x1D0
movslq -0x1e4(%rbp), %rdx
imulq $0x18, %rdx, %rdx
addq %rdx, %rcx
cmpl 0x14(%rcx), %eax
jge 0x18a78
movq -0x48(%rbp), %rax
addq $0x1d0, %rax            # imm = 0x1D0
movslq -0x1e4(%rbp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
movl %eax, -0x1f0(%rbp)
movl -0x1f0(%rbp), %eax
movq -0x48(%rbp), %rcx
addq $0x1d0, %rcx            # imm = 0x1D0
movslq -0x1e4(%rbp), %rdx
imulq $0x18, %rdx, %rdx
addq %rdx, %rcx
cmpl 0xc(%rcx), %eax
jge 0x18a62
movq -0x48(%rbp), %rax
addq $0x1d0, %rax            # imm = 0x1D0
movslq -0x1e4(%rbp), %rcx
imulq $0x18, %rcx, %rcx
addq %rcx, %rax
movl (%rax), %eax
movl %eax, -0x1f4(%rbp)
movl $0x0, -0x1f8(%rbp)
movl -0x1f4(%rbp), %eax
movq -0x48(%rbp), %rcx
addq $0x1d0, %rcx            # imm = 0x1D0
movslq -0x1e4(%rbp), %rdx
imulq $0x18, %rdx, %rdx
addq %rdx, %rcx
cmpl 0x4(%rcx), %eax
jge 0x18a4c
movl -0x1e4(%rbp), %eax
movl %eax, -0x214(%rbp)
testl %eax, %eax
je 0x18609
jmp 0x185ef
movl -0x214(%rbp), %eax
subl $0x1, %eax
je 0x18626
jmp 0x185fc
movl -0x214(%rbp), %eax
subl $0x2, %eax
je 0x18643
jmp 0x18660
movl -0x1f4(%rbp), %eax
movl %eax, -0x58(%rbp)
movl -0x1f0(%rbp), %eax
movl %eax, -0x5c(%rbp)
movl -0x1ec(%rbp), %eax
movl %eax, -0x60(%rbp)
jmp 0x18662
movl -0x1f0(%rbp), %eax
movl %eax, -0x58(%rbp)
movl -0x1f4(%rbp), %eax
movl %eax, -0x5c(%rbp)
movl -0x1ec(%rbp), %eax
movl %eax, -0x60(%rbp)
jmp 0x18662
movl -0x1f0(%rbp), %eax
movl %eax, -0x58(%rbp)
movl -0x1ec(%rbp), %eax
movl %eax, -0x5c(%rbp)
movl -0x1f4(%rbp), %eax
movl %eax, -0x60(%rbp)
jmp 0x18662
jmp 0x18662
movl -0x60(%rbp), %edi
movl -0x5c(%rbp), %esi
movl -0x58(%rbp), %edx
movl -0x198(%rbp), %ecx
movl -0x19c(%rbp), %r8d
callq 0x9500
movl %eax, -0x54(%rbp)
movq -0x50(%rbp), %rcx
movslq -0x54(%rbp), %rax
imulq $0x88, %rax, %rax
addq %rax, %rcx
xorl %eax, %eax
cmpl (%rcx), %eax
je 0x186a7
movl $0x0, -0x1f8(%rbp)
jmp 0x18a38
movl -0x30(%rbp), %eax
subl $0x4, %eax
jne 0x18770
jmp 0x186b5
movl -0x28(%rbp), %edi
movl -0x60(%rbp), %esi
movl -0x5c(%rbp), %edx
movl -0x58(%rbp), %ecx
leaq -0x19c(%rbp), %r8
movq -0x50(%rbp), %r9
movq -0x40(%rbp), %r10
movq -0x188(%rbp), %rax
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x22b00
movl -0x1e4(%rbp), %esi
movsd -0x18(%rbp), %xmm0
movsd -0x20(%rbp), %xmm1
movq -0x50(%rbp), %rdx
movslq -0x54(%rbp), %rax
imulq $0x88, %rax, %rax
addq %rax, %rdx
addq $0x10, %rdx
movslq -0x24(%rbp), %rax
imulq $0x28, %rax, %rax
addq %rax, %rdx
movq -0x50(%rbp), %rcx
movslq -0x54(%rbp), %rax
imulq $0x88, %rax, %rax
addq %rax, %rcx
addq $0x10, %rcx
movslq -0x28(%rbp), %rax
imulq $0x28, %rax, %rax
addq %rax, %rcx
movq -0x50(%rbp), %r8
movslq -0x54(%rbp), %rax
imulq $0x88, %rax, %rax
addq %rax, %r8
addq $0x10, %r8
movslq -0x2c(%rbp), %rax
imulq $0x28, %rax, %rax
addq %rax, %r8
movsd -0x10(%rbp), %xmm2
movq -0x188(%rbp), %r9
xorl %edi, %edi
callq 0x18aa0
jmp 0x18a38
jmp 0x18772
movl -0x1f8(%rbp), %eax
subl $0x1, %eax
jne 0x187d8
jmp 0x1877f
movq -0x170(%rbp), %rax
movq %rax, -0x190(%rbp)
movq -0x168(%rbp), %rax
movq %rax, -0x170(%rbp)
movq -0x190(%rbp), %rax
movq %rax, -0x168(%rbp)
movq -0x180(%rbp), %rax
movq %rax, -0x190(%rbp)
movq -0x178(%rbp), %rax
movq %rax, -0x180(%rbp)
movq -0x190(%rbp), %rax
movq %rax, -0x178(%rbp)
jmp 0x188f6
movl -0x28(%rbp), %edi
movl -0x1e4(%rbp), %esi
movl -0x60(%rbp), %edx
movslq -0x1e4(%rbp), %rcx
leaq -0x90(%rbp), %rax
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
subl 0x8(%rax), %edx
movl -0x5c(%rbp), %ecx
movslq -0x1e4(%rbp), %r8
leaq -0x90(%rbp), %rax
imulq $0xc, %r8, %r8
addq %r8, %rax
subl 0x4(%rax), %ecx
movl -0x58(%rbp), %r8d
movslq -0x1e4(%rbp), %r9
leaq -0x90(%rbp), %rax
imulq $0xc, %r9, %r9
addq %r9, %rax
subl (%rax), %r8d
leaq -0x19c(%rbp), %r9
movq -0x50(%rbp), %r11
movq -0x40(%rbp), %r10
movq -0x170(%rbp), %rax
movq %r11, (%rsp)
movq %r10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0x106a0
movl -0x28(%rbp), %edi
movl -0x1e4(%rbp), %esi
movl -0x60(%rbp), %edx
movslq -0x1e4(%rbp), %rcx
leaq -0x90(%rbp), %rax
imulq $0xc, %rcx, %rcx
addq %rcx, %rax
subl 0x8(%rax), %edx
movl -0x5c(%rbp), %ecx
movslq -0x1e4(%rbp), %r8
leaq -0x90(%rbp), %rax
imulq $0xc, %r8, %r8
addq %r8, %rax
subl 0x4(%rax), %ecx
movl -0x58(%rbp), %r8d
movslq -0x1e4(%rbp), %r9
leaq -0x90(%rbp), %rax
imulq $0xc, %r9, %r9
addq %r9, %rax
subl (%rax), %r8d
leaq -0x19c(%rbp), %r9
leaq -0x1c0(%rbp), %rbx
movq -0x50(%rbp), %r11
movq -0x40(%rbp), %r10
movq -0x180(%rbp), %rax
movq %rbx, (%rsp)
movq %r11, 0x8(%rsp)
movq %r10, 0x10(%rsp)
movq %rax, 0x18(%rsp)
callq 0x12a60
movl $0x1, -0x1f8(%rbp)
movl -0x28(%rbp), %edi
movl -0x1e4(%rbp), %esi
movl -0x60(%rbp), %edx
movl -0x5c(%rbp), %ecx
movl -0x58(%rbp), %r8d
leaq -0x19c(%rbp), %r9
movq -0x50(%rbp), %r11
movq -0x40(%rbp), %r10
movq -0x168(%rbp), %rax
movq %r11, (%rsp)
movq %r10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0x106a0
movl -0x28(%rbp), %edi
movl -0x1e4(%rbp), %esi
movl -0x60(%rbp), %edx
movl -0x5c(%rbp), %ecx
movl -0x58(%rbp), %r8d
leaq -0x19c(%rbp), %r9
leaq -0x1c0(%rbp), %rbx
movq -0x50(%rbp), %r11
movq -0x40(%rbp), %r10
movq -0x178(%rbp), %rax
movq %rbx, (%rsp)
movq %r11, 0x8(%rsp)
movq %r10, 0x10(%rsp)
movq %rax, 0x18(%rsp)
callq 0x12a60
movq -0x168(%rbp), %rdi
movq -0x170(%rbp), %rsi
movq -0x178(%rbp), %rdx
movq -0x180(%rbp), %rcx
movq -0x188(%rbp), %r8
callq 0x18ba0
movq -0x40(%rbp), %rax
movl 0x10(%rax), %edi
movl -0x1e4(%rbp), %esi
movsd -0x18(%rbp), %xmm0
movsd -0x20(%rbp), %xmm1
movq -0x50(%rbp), %rdx
movslq -0x54(%rbp), %rax
imulq $0x88, %rax, %rax
addq %rax, %rdx
addq $0x10, %rdx
movslq -0x24(%rbp), %rax
imulq $0x28, %rax, %rax
addq %rax, %rdx
movq -0x50(%rbp), %rcx
movslq -0x54(%rbp), %rax
imulq $0x88, %rax, %rax
addq %rax, %rcx
addq $0x10, %rcx
movslq -0x28(%rbp), %rax
imulq $0x28, %rax, %rax
addq %rax, %rcx
movq -0x50(%rbp), %r8
movslq -0x54(%rbp), %rax
imulq $0x88, %rax, %rax
addq %rax, %r8
addq $0x10, %r8
movslq -0x2c(%rbp), %rax
imulq $0x28, %rax, %rax
addq %rax, %r8
movslq -0x1e4(%rbp), %rax
movsd -0x1e0(%rbp,%rax,8), %xmm2
movq -0x188(%rbp), %r9
callq 0x18aa0
movl -0x1f4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1f4(%rbp)
jmp 0x185b5
jmp 0x18a4e
movl -0x1f0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1f0(%rbp)
jmp 0x18563
jmp 0x18a64
movl -0x1ec(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1ec(%rbp)
jmp 0x1851a
jmp 0x18a7a
movl -0x1e4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1e4(%rbp)
jmp 0x184e7
addq $0x238, %rsp            # imm = 0x238
popq %rbx
popq %rbp
retq
nopl (%rax,%rax)