// File: /workspace/github_c_makefile_star2_O0/YunyiQian[P]multitel3/./Reflection_Coefficient.c
// Function: Reflection_Coefficient
double Reflection_Coefficient(
	double c1_p,	//Vp of media 1(incident side)
	double c1_s,	//Vs of media 1
	double c2_p,	//Vp of media 2
	double c2_s,	//Vs of media 2
	double rho1,	//density of media 1
	double rho2,	//density of media 2
	double i1,	//incidence of plane wave
	int type	//indication of reflection mode
	){

	double p;
        double Coefficient;
	double D;
	double P1,P2,P3,P4;
	double q,X,Y,Z;

	if (type > 5 || type < 1){
		fprintf(stderr,"Error type is given\n");
		exit(-1);
	}

	if (type == 1 || type == 2){
		p = sin(i1)/c1_p;
	}else{
		p = sin(i1)/c1_s;
	}

	P1 = sqrt(1 - c1_p*c1_p*p*p);
	P2 = sqrt(1 - c1_s*c1_s*p*p);

	P3 = sqrt(1 - c2_p*c2_p*p*p);
	P4 = sqrt(1 - c2_s*c2_s*p*p);

	q = 2.*(rho2*c2_s*c2_s - rho1*c1_s*c1_s);

	X = rho2 - q*p*p;
	Y = rho1 + q*p*p;
	Z = rho2 - rho1 - q*p*p;

	D =  q*q*p*p*P1*P2*P3*P4 
	   + rho1*rho2*(c1_s*c2_p*P1*P4 + c1_p*c2_s*P2*P3)
	   + c1_p*c1_s*P3*P4*Y*Y
	   + c2_p*c2_s*P1*P2*X*X
	   + c1_p*c2_p*c1_s*c2_s*p*p*Z*Z;

	switch (type){
	case 1:
		Coefficient =  (q*q*p*p*P1*P2*P3*P4 
			     + rho1*rho2*(c1_s*c2_p*P1*P4 - c1_p*c2_s*P2*P3)
			     - c1_p*c1_s*P3*P4*Y*Y
			     + c2_p*c2_s*P1*P2*X*X
			     - c1_p*c2_p*c1_s*c2_s*p*p*Z*Z)/D;
		break;
	case 2:
		Coefficient = 2.*c1_p*p*P1*(q*P3*P4*Y + c2_p*c2_s*X*Z)/D;
		break;
	case 3:
		Coefficient = -2.*c1_s*p*P2*(q*P3*P4*Y + c2_p*c2_s*X*Z)/D;
		break;
	case 4:
		Coefficient =  (q*q*p*p*P1*P2*P3*P4
			     + rho1*rho2*(c1_p*c2_s*P2*P3 - c1_s*c2_p*P1*P4)
			     - c1_p*c1_s*P3*P4*Y*Y
			     + c2_p*c2_s*P1*P2*X*X
			     - c1_p*c2_p*c1_s*c2_s*p*p*Z*Z)/D;
		break;
	case 5:
		Coefficient = (rho1*c1_s*P2 - rho2*c2_s*P4)/(rho1*c1_s*P2 + rho2*c2_s*P4);
		break;
	}

	return Coefficient;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb0, %rsp
movsd %xmm0, -0x8(%rbp)
movsd %xmm1, -0x10(%rbp)
movsd %xmm2, -0x18(%rbp)
movsd %xmm3, -0x20(%rbp)
movsd %xmm4, -0x28(%rbp)
movsd %xmm5, -0x30(%rbp)
movsd %xmm6, -0x38(%rbp)
movl %edi, -0x3c(%rbp)
cmpl $0x5, -0x3c(%rbp)
jg 0x331d
cmpl $0x1, -0x3c(%rbp)
jge 0x333f
movq 0x3cd4(%rip), %rax      # 0x6ff8
movq (%rax), %rdi
leaq 0x1f06(%rip), %rsi      # 0x5234
movb $0x0, %al
callq 0x10b0
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x1120
cmpl $0x1, -0x3c(%rbp)
je 0x334b
cmpl $0x2, -0x3c(%rbp)
jne 0x3361
movsd -0x38(%rbp), %xmm0
callq 0x10e0
divsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
jmp 0x3375
movsd -0x38(%rbp), %xmm0
callq 0x10e0
divsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movsd -0x8(%rbp), %xmm1
mulsd %xmm1, %xmm1
movsd -0x48(%rbp), %xmm0
mulsd %xmm0, %xmm1
mulsd %xmm0, %xmm1
movsd 0x1c7d(%rip), %xmm0     # 0x5010
movsd %xmm0, -0xa8(%rbp)
subsd %xmm1, %xmm0
callq 0x1130
movaps %xmm0, %xmm1
movsd -0xa8(%rbp), %xmm0
movsd %xmm1, -0x60(%rbp)
movsd -0x10(%rbp), %xmm1
mulsd %xmm1, %xmm1
movsd -0x48(%rbp), %xmm2
mulsd %xmm2, %xmm1
mulsd %xmm2, %xmm1
subsd %xmm1, %xmm0
callq 0x1130
movaps %xmm0, %xmm1
movsd -0xa8(%rbp), %xmm0
movsd %xmm1, -0x68(%rbp)
movsd -0x18(%rbp), %xmm1
mulsd %xmm1, %xmm1
movsd -0x48(%rbp), %xmm2
mulsd %xmm2, %xmm1
mulsd %xmm2, %xmm1
subsd %xmm1, %xmm0
callq 0x1130
movaps %xmm0, %xmm1
movsd -0xa8(%rbp), %xmm0
movsd %xmm1, -0x70(%rbp)
movsd -0x20(%rbp), %xmm1
mulsd %xmm1, %xmm1
movsd -0x48(%rbp), %xmm2
mulsd %xmm2, %xmm1
mulsd %xmm2, %xmm1
subsd %xmm1, %xmm0
callq 0x1130
movsd %xmm0, -0x78(%rbp)
movsd -0x30(%rbp), %xmm0
movsd -0x20(%rbp), %xmm2
mulsd %xmm2, %xmm0
movsd -0x28(%rbp), %xmm1
movsd -0x10(%rbp), %xmm3
mulsd %xmm3, %xmm1
mulsd %xmm3, %xmm1
mulsd %xmm2, %xmm0
subsd %xmm1, %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x30(%rbp), %xmm0
movsd -0x80(%rbp), %xmm1
movsd -0x48(%rbp), %xmm2
mulsd %xmm2, %xmm1
mulsd %xmm2, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0x28(%rbp), %xmm1
movsd -0x80(%rbp), %xmm0
movsd -0x48(%rbp), %xmm2
mulsd %xmm2, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x90(%rbp)
movsd -0x30(%rbp), %xmm0
movsd -0x28(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd -0x80(%rbp), %xmm1
movsd -0x48(%rbp), %xmm2
mulsd %xmm2, %xmm1
mulsd %xmm2, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x98(%rbp)
movsd -0x80(%rbp), %xmm1
mulsd %xmm1, %xmm1
movsd -0x48(%rbp), %xmm2
mulsd %xmm2, %xmm1
mulsd %xmm2, %xmm1
movsd -0x60(%rbp), %xmm8
mulsd %xmm8, %xmm1
movsd -0x68(%rbp), %xmm7
mulsd %xmm7, %xmm1
movsd -0x70(%rbp), %xmm10
mulsd %xmm10, %xmm1
movsd -0x78(%rbp), %xmm9
movsd -0x28(%rbp), %xmm6
movsd -0x30(%rbp), %xmm0
mulsd %xmm0, %xmm6
movsd -0x10(%rbp), %xmm4
movsd -0x18(%rbp), %xmm5
movaps %xmm4, %xmm11
mulsd %xmm5, %xmm11
mulsd %xmm8, %xmm11
movsd -0x8(%rbp), %xmm0
movsd -0x20(%rbp), %xmm3
movaps %xmm0, %xmm12
mulsd %xmm3, %xmm12
mulsd %xmm7, %xmm12
mulsd %xmm10, %xmm12
mulsd %xmm9, %xmm11
addsd %xmm12, %xmm11
mulsd %xmm11, %xmm6
mulsd %xmm9, %xmm1
addsd %xmm6, %xmm1
movaps %xmm0, %xmm6
mulsd %xmm4, %xmm6
mulsd %xmm10, %xmm6
mulsd %xmm9, %xmm6
movsd -0x90(%rbp), %xmm9
mulsd %xmm9, %xmm6
mulsd %xmm9, %xmm6
addsd %xmm1, %xmm6
movaps %xmm5, %xmm1
mulsd %xmm3, %xmm1
mulsd %xmm8, %xmm1
mulsd %xmm7, %xmm1
movsd -0x88(%rbp), %xmm7
mulsd %xmm7, %xmm1
mulsd %xmm7, %xmm1
addsd %xmm6, %xmm1
mulsd %xmm5, %xmm0
mulsd %xmm4, %xmm0
mulsd %xmm3, %xmm0
mulsd %xmm2, %xmm0
mulsd %xmm2, %xmm0
movsd -0x98(%rbp), %xmm2
mulsd %xmm2, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x58(%rbp)
movl -0x3c(%rbp), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0xa0(%rbp)
subl $0x4, %eax
ja 0x39e5
movq -0xa0(%rbp), %rax
leaq 0x1af3(%rip), %rcx      # 0x5100
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movsd -0x80(%rbp), %xmm1
mulsd -0x80(%rbp), %xmm1
mulsd -0x48(%rbp), %xmm1
mulsd -0x48(%rbp), %xmm1
mulsd -0x60(%rbp), %xmm1
mulsd -0x68(%rbp), %xmm1
mulsd -0x70(%rbp), %xmm1
movsd -0x78(%rbp), %xmm2
movsd -0x28(%rbp), %xmm0
mulsd -0x30(%rbp), %xmm0
movsd -0x10(%rbp), %xmm3
mulsd -0x18(%rbp), %xmm3
mulsd -0x60(%rbp), %xmm3
movsd -0x78(%rbp), %xmm5
movsd -0x8(%rbp), %xmm4
mulsd -0x20(%rbp), %xmm4
mulsd -0x68(%rbp), %xmm4
mulsd -0x70(%rbp), %xmm4
movq %xmm4, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm4
mulsd %xmm5, %xmm3
addsd %xmm4, %xmm3
mulsd %xmm3, %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x8(%rbp), %xmm0
mulsd -0x10(%rbp), %xmm0
mulsd -0x70(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
mulsd -0x90(%rbp), %xmm0
movsd -0x90(%rbp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd -0x18(%rbp), %xmm1
mulsd -0x20(%rbp), %xmm1
mulsd -0x60(%rbp), %xmm1
mulsd -0x68(%rbp), %xmm1
mulsd -0x88(%rbp), %xmm1
movsd -0x88(%rbp), %xmm2
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x8(%rbp), %xmm0
mulsd -0x18(%rbp), %xmm0
mulsd -0x10(%rbp), %xmm0
mulsd -0x20(%rbp), %xmm0
mulsd -0x48(%rbp), %xmm0
mulsd -0x48(%rbp), %xmm0
mulsd -0x98(%rbp), %xmm0
movsd -0x98(%rbp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
divsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
jmp 0x39e5
movsd 0x18fa(%rip), %xmm0     # 0x5068
mulsd -0x8(%rbp), %xmm0
mulsd -0x48(%rbp), %xmm0
mulsd -0x60(%rbp), %xmm0
movsd -0x80(%rbp), %xmm1
mulsd -0x70(%rbp), %xmm1
mulsd -0x78(%rbp), %xmm1
movsd -0x90(%rbp), %xmm3
movsd -0x18(%rbp), %xmm2
mulsd -0x20(%rbp), %xmm2
mulsd -0x88(%rbp), %xmm2
mulsd -0x98(%rbp), %xmm2
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
divsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
jmp 0x39e5
movsd 0x188f(%rip), %xmm0     # 0x5060
mulsd -0x10(%rbp), %xmm0
mulsd -0x48(%rbp), %xmm0
mulsd -0x68(%rbp), %xmm0
movsd -0x80(%rbp), %xmm1
mulsd -0x70(%rbp), %xmm1
mulsd -0x78(%rbp), %xmm1
movsd -0x90(%rbp), %xmm3
movsd -0x18(%rbp), %xmm2
mulsd -0x20(%rbp), %xmm2
mulsd -0x88(%rbp), %xmm2
mulsd -0x98(%rbp), %xmm2
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
divsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
jmp 0x39e5
movsd -0x80(%rbp), %xmm1
mulsd -0x80(%rbp), %xmm1
mulsd -0x48(%rbp), %xmm1
mulsd -0x48(%rbp), %xmm1
mulsd -0x60(%rbp), %xmm1
mulsd -0x68(%rbp), %xmm1
mulsd -0x70(%rbp), %xmm1
movsd -0x78(%rbp), %xmm2
movsd -0x28(%rbp), %xmm0
mulsd -0x30(%rbp), %xmm0
movsd -0x8(%rbp), %xmm3
mulsd -0x20(%rbp), %xmm3
mulsd -0x68(%rbp), %xmm3
movsd -0x70(%rbp), %xmm5
movsd -0x10(%rbp), %xmm4
mulsd -0x18(%rbp), %xmm4
mulsd -0x60(%rbp), %xmm4
mulsd -0x78(%rbp), %xmm4
movq %xmm4, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm4
mulsd %xmm5, %xmm3
addsd %xmm4, %xmm3
mulsd %xmm3, %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x8(%rbp), %xmm0
mulsd -0x10(%rbp), %xmm0
mulsd -0x70(%rbp), %xmm0
mulsd -0x78(%rbp), %xmm0
mulsd -0x90(%rbp), %xmm0
movsd -0x90(%rbp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd -0x18(%rbp), %xmm1
mulsd -0x20(%rbp), %xmm1
mulsd -0x60(%rbp), %xmm1
mulsd -0x68(%rbp), %xmm1
mulsd -0x88(%rbp), %xmm1
movsd -0x88(%rbp), %xmm2
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x8(%rbp), %xmm0
mulsd -0x18(%rbp), %xmm0
mulsd -0x10(%rbp), %xmm0
mulsd -0x20(%rbp), %xmm0
mulsd -0x48(%rbp), %xmm0
mulsd -0x48(%rbp), %xmm0
mulsd -0x98(%rbp), %xmm0
movsd -0x98(%rbp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
divsd -0x58(%rbp), %xmm0
movsd %xmm0, -0x50(%rbp)
jmp 0x39e5
movsd -0x28(%rbp), %xmm0
mulsd -0x10(%rbp), %xmm0
movsd -0x68(%rbp), %xmm2
movsd -0x30(%rbp), %xmm1
mulsd -0x20(%rbp), %xmm1
mulsd -0x78(%rbp), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd -0x28(%rbp), %xmm1
mulsd -0x10(%rbp), %xmm1
movsd -0x68(%rbp), %xmm3
movsd -0x30(%rbp), %xmm2
mulsd -0x20(%rbp), %xmm2
mulsd -0x78(%rbp), %xmm2
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x50(%rbp), %xmm0
addq $0xb0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)