aboutsummaryrefslogtreecommitdiff
path: root/src/Output.c
blob: 226ecb5faf89299e11cb678439f054c412a6ba8f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
 /*@@
   @file      Output.c
   @date      July 6 2003
   @author    Gabrielle Allen
   @desc
              Functions to deal with making TimerReport an IO method
   @enddesc
   @version   $Id$
 @@*/

#include "cctk.h"
#include "cctk_Parameters.h"
#include "cctk_Arguments.h"

#include "cctk_Schedule.h"

static const char *rcsid = "$Header$";

CCTK_FILEVERSION(CactusUtils_TimerReport_Output_c)

/********************************************************************
 *********************     Local Data Types   ***********************
 ********************************************************************/

/********************************************************************
 ********************* Local Routine Prototypes *********************
 ********************************************************************/

int TimerReport_TimeForOutput (const cGH *GH, int vindex);

/********************************************************************
 ********************* Other Routine Prototypes *********************
 ********************************************************************/

/********************************************************************
 *********************     Local Data   *****************************
 ********************************************************************/

/********************************************************************
 ********************    External Routines   ************************
 ********************************************************************/

void TimerReport_Startup (void);


 /*@@
   @routine   TimerReport_Startup
   @date      Sun 6th July 2003
   @author    Gabrielle Allen
   @desc
              The startup registration routine for TimerReport.
	      Registers TimerReport as an IO Method and provide the
	      only necessary method TimeForOutput
   @enddesc
   @calls     CCTK_RegisterGHExtensionSetupGH
@@*/
void TimerReport_Startup (void)
{
  int handle;

  handle = CCTK_RegisterIOMethod ("TimerReport");
  CCTK_RegisterIOMethodTimeToOutput (handle, TimerReport_TimeForOutput);
}


/********************************************************************
 ********************    Internal Routines   ************************
 ********************************************************************/

int TimerReport_TimeForOutput (const cGH *GH, int vindex);

 /*@@
   @routine    TimerReport_TimeForOutput
   @date       July 6 2003
   @author     Gabrielle Allen
   @desc
               Decides if it is time to output timer information
   @enddesc
   @calls      CheckSteerableParameters

   @var        GH
   @vdesc      Pointer to CCTK GH
   @vtype      const cGH *
   @vio        in
   @endvar
   @var        vindex
   @vdesc      index of variable to check for output
   @vtype      int
   @vio        in
   @endvar

   @returntype int
   @returndesc
               true/false (1 or 0) if analysis should be called
   @endreturndesc
@@*/
int TimerReport_TimeForOutput (const cGH *GH, int vindex)
{
  DECLARE_CCTK_PARAMETERS

  int retval=0;

  if (vindex==CCTK_VarIndex("timerreport::triggervar"))
  {
    if (next || out_at == GH->cctk_iteration)
    {
      retval = 1;
    }
    else if (out_every) 
    {
      if (GH->cctk_iteration%out_every == 0)
      {
	retval = 1;
      }
    }
  }

  return retval;
}

 /*@@
   @routine    TimerReport_Output
   @date       July 6 2003
   @author     Gabrielle Allen
   @desc
   Output the timer table
   @enddesc
   @calls      
@@*/
void TimerReport_Output(CCTK_ARGUMENTS)
{
  DECLARE_CCTK_ARGUMENTS
  DECLARE_CCTK_PARAMETERS

  CCTK_SchedulePrintTimes(NULL);

  if (next) 
  {
    CCTK_ParameterSet("next", CCTK_THORNSTRING, "no");
  }

  return;
}