// File: /workspace/github_c_makefile_star2_O0/markpeerdeman[P]mbemm/src/general/tril.c
// Function: TRILcompletion
void TRILcompletion( const element theTRIL, const point thepointlist )
{ /* This function completes the tril data after reading the input deck */
  point p1, p2, p3;

  p1 = (point)point_dll(thepointlist,SEARCH,theTRIL->p1);
  p2 = (point)point_dll(thepointlist,SEARCH,theTRIL->p2);
  p3 = (point)point_dll(thepointlist,SEARCH,theTRIL->p3);

  /* calculate the lengths of the element sides: */
  theTRIL->z1 = sqrt( (p2->x-p3->x)*(p2->x-p3->x) +
					  (p2->y-p3->y)*(p2->y-p3->y) +
					  (p2->z-p3->z)*(p2->z-p3->z) );

  theTRIL->z2 = sqrt( (p1->x-p3->x)*(p1->x-p3->x) +
					  (p1->y-p3->y)*(p1->y-p3->y) +
					  (p1->z-p3->z)*(p1->z-p3->z) );

  theTRIL->z3 = sqrt( (p2->x-p1->x)*(p2->x-p1->x) +
					  (p2->y-p1->y)*(p2->y-p1->y) +
					  (p2->z-p1->z)*(p2->z-p1->z) );

  /* calculate the corner angles: */
  theTRIL->alpha1 = acos( ( (p2->x-p1->x)*(p3->x-p1->x) +
					        (p2->y-p1->y)*(p3->y-p1->y) +
					        (p2->z-p1->z)*(p3->z-p1->z) ) /
					        theTRIL->z3 / theTRIL->z2 );

  theTRIL->alpha2 = acos( ( (p3->x-p2->x)*(p1->x-p2->x) +
					        (p3->y-p2->y)*(p1->y-p2->y) +
					        (p3->z-p2->z)*(p1->z-p2->z) ) /
					        theTRIL->z1 / theTRIL->z3 );

  theTRIL->alpha3 = acos( ( (p1->x-p3->x)*(p2->x-p3->x) +
					        (p1->y-p3->y)*(p2->y-p3->y) +
					        (p1->z-p3->z)*(p2->z-p3->z) ) /
					        theTRIL->z2 / theTRIL->z1 );

  /* copy the node coordinates into the element structure: */
  theTRIL->p1x=p1->x;
  theTRIL->p1y=p1->y;
  theTRIL->p1z=p1->z;
  theTRIL->p2x=p2->x;
  theTRIL->p2y=p2->y;
  theTRIL->p2z=p2->z;
  theTRIL->p3x=p3->x;
  theTRIL->p3y=p3->y;
  theTRIL->p3z=p3->z;

  fastTRILnormal(theTRIL);
  theTRIL->area = theTRIL->z2 * theTRIL->z3 * sin(theTRIL->alpha1) * 0.5;
/*
  printf("TEST 1: DATA FOR ELEMENT %d:\n",theTRIL->label);
  printf("        node labels: %3d %3d %3d\n",theTRIL->p1,theTRIL->p2,theTRIL->p3);
  printf("        node coordinates:\n");
  printf("             node %3d, \t%f \t%f \t%f\n",theTRIL->p1,(float)theTRIL->p1x,
   (float)theTRIL->p1y, (float)theTRIL->p1z);
  printf("             node %3d, \t%f \t%f \t%f\n",theTRIL->p2,(float)theTRIL->p2x,
   (float)theTRIL->p2y, (float)theTRIL->p2z);
  printf("             node %3d, \t%f \t%f \t%f\n",theTRIL->p3,(float)theTRIL->p3x,
   (float)theTRIL->p3y, (float)theTRIL->p3z);
  printf("        side lenghts are: z1: %f, z2: %f, z3: %f\n",(float)theTRIL->z1,
	(float)theTRIL->z2,(float)theTRIL->z3);
  printf("        element area is %f\n",(float)theTRIL->area);
  printf("        normal vector is %f %f %f\n",(float)theTRIL->nx,(float)theTRIL->ny,
	(float)theTRIL->nz);
  printf("        angles alpha1, alpha2 and alpha3 are: %f %f %f\n",
	(float)theTRIL->alpha1,(float)theTRIL->alpha2,(float)theTRIL->alpha3); */
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movq %rsi, 0x28(%rsp)
movq 0x28(%rsp), %rdi
movq 0x30(%rsp), %rax
movl 0x18(%rax), %edx
movl $0x2, %esi
callq 0x175c0
movq %rax, 0x20(%rsp)
movq 0x28(%rsp), %rdi
movq 0x30(%rsp), %rax
movl 0x1c(%rax), %edx
movl $0x2, %esi
callq 0x175c0
movq %rax, 0x18(%rsp)
movq 0x28(%rsp), %rdi
movq 0x30(%rsp), %rax
movl 0x20(%rax), %edx
movl $0x2, %esi
callq 0x175c0
movq %rax, 0x10(%rsp)
movq 0x18(%rsp), %rax
movsd 0x20(%rax), %xmm1
movq 0x10(%rsp), %rax
subsd 0x20(%rax), %xmm1
movq 0x18(%rsp), %rax
movsd 0x20(%rax), %xmm2
movq 0x10(%rsp), %rax
subsd 0x20(%rax), %xmm2
movq 0x18(%rsp), %rax
movsd 0x28(%rax), %xmm0
movq 0x10(%rsp), %rax
subsd 0x28(%rax), %xmm0
movq 0x18(%rsp), %rax
movsd 0x28(%rax), %xmm3
movq 0x10(%rsp), %rax
subsd 0x28(%rax), %xmm3
mulsd %xmm3, %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq 0x18(%rsp), %rax
movsd 0x30(%rax), %xmm0
movq 0x10(%rsp), %rax
subsd 0x30(%rax), %xmm0
movq 0x18(%rsp), %rax
movsd 0x30(%rax), %xmm2
movq 0x10(%rsp), %rax
subsd 0x30(%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
callq 0x1150
movq 0x30(%rsp), %rax
movsd %xmm0, 0x88(%rax)
movq 0x20(%rsp), %rax
movsd 0x20(%rax), %xmm1
movq 0x10(%rsp), %rax
subsd 0x20(%rax), %xmm1
movq 0x20(%rsp), %rax
movsd 0x20(%rax), %xmm2
movq 0x10(%rsp), %rax
subsd 0x20(%rax), %xmm2
movq 0x20(%rsp), %rax
movsd 0x28(%rax), %xmm0
movq 0x10(%rsp), %rax
subsd 0x28(%rax), %xmm0
movq 0x20(%rsp), %rax
movsd 0x28(%rax), %xmm3
movq 0x10(%rsp), %rax
subsd 0x28(%rax), %xmm3
mulsd %xmm3, %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq 0x20(%rsp), %rax
movsd 0x30(%rax), %xmm0
movq 0x10(%rsp), %rax
subsd 0x30(%rax), %xmm0
movq 0x20(%rsp), %rax
movsd 0x30(%rax), %xmm2
movq 0x10(%rsp), %rax
subsd 0x30(%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
callq 0x1150
movq 0x30(%rsp), %rax
movsd %xmm0, 0x90(%rax)
movq 0x18(%rsp), %rax
movsd 0x20(%rax), %xmm1
movq 0x20(%rsp), %rax
subsd 0x20(%rax), %xmm1
movq 0x18(%rsp), %rax
movsd 0x20(%rax), %xmm2
movq 0x20(%rsp), %rax
subsd 0x20(%rax), %xmm2
movq 0x18(%rsp), %rax
movsd 0x28(%rax), %xmm0
movq 0x20(%rsp), %rax
subsd 0x28(%rax), %xmm0
movq 0x18(%rsp), %rax
movsd 0x28(%rax), %xmm3
movq 0x20(%rsp), %rax
subsd 0x28(%rax), %xmm3
mulsd %xmm3, %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq 0x18(%rsp), %rax
movsd 0x30(%rax), %xmm0
movq 0x20(%rsp), %rax
subsd 0x30(%rax), %xmm0
movq 0x18(%rsp), %rax
movsd 0x30(%rax), %xmm2
movq 0x20(%rsp), %rax
subsd 0x30(%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
callq 0x1150
movq 0x30(%rsp), %rax
movsd %xmm0, 0x98(%rax)
movq 0x18(%rsp), %rax
movsd 0x20(%rax), %xmm1
movq 0x20(%rsp), %rax
subsd 0x20(%rax), %xmm1
movq 0x10(%rsp), %rax
movsd 0x20(%rax), %xmm2
movq 0x20(%rsp), %rax
subsd 0x20(%rax), %xmm2
movq 0x18(%rsp), %rax
movsd 0x28(%rax), %xmm0
movq 0x20(%rsp), %rax
subsd 0x28(%rax), %xmm0
movq 0x10(%rsp), %rax
movsd 0x28(%rax), %xmm3
movq 0x20(%rsp), %rax
subsd 0x28(%rax), %xmm3
mulsd %xmm3, %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq 0x18(%rsp), %rax
movsd 0x30(%rax), %xmm0
movq 0x20(%rsp), %rax
subsd 0x30(%rax), %xmm0
movq 0x10(%rsp), %rax
movsd 0x30(%rax), %xmm2
movq 0x20(%rsp), %rax
subsd 0x30(%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x30(%rsp), %rax
divsd 0x98(%rax), %xmm0
movq 0x30(%rsp), %rax
divsd 0x90(%rax), %xmm0
callq 0x10b0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x70(%rax)
movq 0x10(%rsp), %rax
movsd 0x20(%rax), %xmm1
movq 0x18(%rsp), %rax
subsd 0x20(%rax), %xmm1
movq 0x20(%rsp), %rax
movsd 0x20(%rax), %xmm2
movq 0x18(%rsp), %rax
subsd 0x20(%rax), %xmm2
movq 0x10(%rsp), %rax
movsd 0x28(%rax), %xmm0
movq 0x18(%rsp), %rax
subsd 0x28(%rax), %xmm0
movq 0x20(%rsp), %rax
movsd 0x28(%rax), %xmm3
movq 0x18(%rsp), %rax
subsd 0x28(%rax), %xmm3
mulsd %xmm3, %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq 0x10(%rsp), %rax
movsd 0x30(%rax), %xmm0
movq 0x18(%rsp), %rax
subsd 0x30(%rax), %xmm0
movq 0x20(%rsp), %rax
movsd 0x30(%rax), %xmm2
movq 0x18(%rsp), %rax
subsd 0x30(%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x30(%rsp), %rax
divsd 0x88(%rax), %xmm0
movq 0x30(%rsp), %rax
divsd 0x98(%rax), %xmm0
callq 0x10b0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x78(%rax)
movq 0x20(%rsp), %rax
movsd 0x20(%rax), %xmm1
movq 0x10(%rsp), %rax
subsd 0x20(%rax), %xmm1
movq 0x18(%rsp), %rax
movsd 0x20(%rax), %xmm2
movq 0x10(%rsp), %rax
subsd 0x20(%rax), %xmm2
movq 0x20(%rsp), %rax
movsd 0x28(%rax), %xmm0
movq 0x10(%rsp), %rax
subsd 0x28(%rax), %xmm0
movq 0x18(%rsp), %rax
movsd 0x28(%rax), %xmm3
movq 0x10(%rsp), %rax
subsd 0x28(%rax), %xmm3
mulsd %xmm3, %xmm0
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movq 0x20(%rsp), %rax
movsd 0x30(%rax), %xmm0
movq 0x10(%rsp), %rax
subsd 0x30(%rax), %xmm0
movq 0x18(%rsp), %rax
movsd 0x30(%rax), %xmm2
movq 0x10(%rsp), %rax
subsd 0x30(%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x30(%rsp), %rax
divsd 0x90(%rax), %xmm0
movq 0x30(%rsp), %rax
divsd 0x88(%rax), %xmm0
callq 0x10b0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x80(%rax)
movq 0x20(%rsp), %rax
movsd 0x20(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x28(%rax)
movq 0x20(%rsp), %rax
movsd 0x28(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x30(%rax)
movq 0x20(%rsp), %rax
movsd 0x30(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x38(%rax)
movq 0x18(%rsp), %rax
movsd 0x20(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x40(%rax)
movq 0x18(%rsp), %rax
movsd 0x28(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x48(%rax)
movq 0x18(%rsp), %rax
movsd 0x30(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x50(%rax)
movq 0x10(%rsp), %rax
movsd 0x20(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x58(%rax)
movq 0x10(%rsp), %rax
movsd 0x28(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x60(%rax)
movq 0x10(%rsp), %rax
movsd 0x30(%rax), %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0x68(%rax)
movq 0x30(%rsp), %rdi
callq 0x17d70
movq 0x30(%rsp), %rax
movsd 0x90(%rax), %xmm0
movq 0x30(%rsp), %rax
mulsd 0x98(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movq 0x30(%rsp), %rax
movsd 0x70(%rax), %xmm0
callq 0x1120
movaps %xmm0, %xmm1
movsd 0x8(%rsp), %xmm0
mulsd %xmm1, %xmm0
movsd 0xd00(%rip), %xmm1      # 0x19430
mulsd %xmm1, %xmm0
movq 0x30(%rsp), %rax
movsd %xmm0, 0xb8(%rax)
addq $0x38, %rsp
retq