<HTML> <BODY BGCOLOR=#ccccdd LINK=#0000aa VLINK=#0000ff ALINK=#ff0000 ><BASE TARGET="bottom_target"><PRE>
<A NAME='DA_TRACE_INIT'><A href='../../html_code/tracing/da_trace_init.inc.html#DA_TRACE_INIT' TARGET='top_target'><IMG SRC="../../gif/bar_red.gif" border=0></A>

subroutine da_trace_init 1,2

   implicit none

   !--------------------------------------------------------------------
   ! Purpose: Initialise tracing
   !--------------------------------------------------------------------

   integer :: IOStatus             ! I/O return code
   integer :: Loop1
   character (len=200) :: TraceFile
   character(len=200) :: csvname
   character (len=10)  :: temp

   IOStatus = 0

   if (trace_all_pes .OR. myproc == trace_pe) then
     trace_write = .true.  
   end if

   !-----------------------------------------------------------------
   ! Open trace output file. 
   !-----------------------------------------------------------------

   if (trace_write .AND. trace_unit /= 0) then
      if (use_html) then
         write(unit=temp,fmt='(I10)') myproc
         TraceFile="trace/"//trim(adjustl(temp))//".html"
         open (&amp;
            unit=trace_unit, &amp;   ! i:
            file=trim(tracefile), &amp;   ! i:
            status="replace", &amp; ! i:
            action="write", &amp;   ! i:
            iostat=iostatus)    ! o:
      else   
         write(unit=temp,fmt='(i10)') myproc
         tracefile="trace/"//trim(adjustl(temp))//".txt"
         open (&amp;
            unit=trace_unit, &amp;   ! i:
            file=trim(tracefile), &amp;   ! i:
            status="replace", &amp; ! i:
            action="write", &amp;   ! i:
            iostat=IOStatus)    ! O:
      end if

      if (IOStatus /= 0) then
         call da_error(__FILE__,__LINE__, &amp;
            (/"Cannot open trace file "//TraceFile/))
      end if
   end if

   if (trace_csv .and. rootproc) then
         write(unit=csvname,fmt='(I10,A)') myproc,'.csv'
      open(unit=trace_csv_unit,file="trace/"//trim(adjustl(csvname)), &amp;
         status="replace",iostat=IOStatus)
      if (IOStatus /= 0) then
         call da_error(__FILE__,__LINE__,(/"Cannot open "//csvname/))
      end if
   end if

   !-----------------------------------------------------------------
   ! Find out whether to trace memory usage. The Cray routine to check
   ! memory usage is very slow, so it is best to only switch on memory
   ! checking if actively required.
   !-----------------------------------------------------------------

   !-----------------------------------------------------------------
   ! Set up timing and memory usage
   !-----------------------------------------------------------------

   do Loop1=1,MaxNoRoutines
      CPUTimeStart(Loop1)     = 0.0
      ElapsedTimeStart(Loop1) = 0.0
      ElapsedTime(Loop1)      = 0.0
      ElapsedTimeLocal(Loop1) = 0.0
      CPUTime(Loop1)          = 0.0
      CPUTimeLocal(Loop1)     = 0.0
      NoCalls(Loop1)          = 0
      NoCallsBody(Loop1)      = 0
      CalledBy(Loop1)         = 0
      MaxHeap(Loop1)          = 0
      TimerNames(Loop1)       = ""
   end do

   Pointer     = 0
   NoRoutines  = 0

   call system_clock(&amp;
      COUNT=BaseElapsedTime)

   call cpu_time(BaseCPUTime)

   ! start trace output here so memory calculations are not distorted
   ! by IO buffer being grabbed later

   TraceDepth = 0

   if (trace_write) then
      if (use_html) then
         write (unit=trace_unit,fmt='(A)') "&lt;html&gt;&lt;head&gt;&lt;title&gt;Tracing&lt;/title&gt;&lt;/head&gt;"
         write (unit=trace_unit,fmt='(A)') "&lt;body&gt;&lt;h1&gt;Trace Output&lt;/h1&gt;"
         write (unit=trace_unit,fmt='(A)') "&lt;ul&gt;"
         write (unit=trace_unit,fmt='(A)') "&lt;li&gt;&lt;a href=#tree&gt;Calling Tree&lt;/a&gt;"
         write (unit=trace_unit,fmt='(A)') "&lt;li&gt;&lt;a href=#local&gt;Local routine timings&lt;/a&gt;"
         write (unit=trace_unit,fmt='(A)') "&lt;li&gt;&lt;a href=#overall&gt;Overall routine timings&lt;/a&gt;"
         write (unit=trace_unit,fmt='(A)') "&lt;li&gt;&lt;a href=#memory&gt;Memory usage&lt;/a&gt;"
         write (unit=trace_unit,fmt='(A)') "&lt;/ul&gt;"
         write (unit=trace_unit,fmt='(A)') "&lt;a name=tree&gt;&lt;h2&gt;Calling Tree&lt;/h2&gt;&lt;/a&gt;&lt;pre&gt;"
      else
         write (unit=trace_unit,fmt='(A)') "Trace Output"
         write (unit=trace_unit,fmt='(A)') ""
      end if
   end if

end subroutine da_trace_init