PUGHReduce

Gabrielle Allen, Thomas Radke

Date

Abstract

Reductions operations which are performed using the PUGH driver

1 Purpose

This thorn registers a number of reduction operators with the flesh. The reductions are performed using internals of the PUGH driver, so that this thorn can only be used when CactusPUGH/PUGH is active.

The reduction operations this thorn registers are




Reduction Operator Calculates By



average, meanthe average/mean of a grid variable GV N
count the number of grid points in a grid variableN
maximum the maximum of a grid variable maxGV
minimum the minimum of a grid variable minGV
norm1, L1Norm the L1 norm of a grid variable Σ|GV |N
norm2, L2Norm the L2 norm of a grid variable (Σ|GV |2)N2
norm3, L3Norm the L3 norm of a grid variable (Σ|GV |3)N3
norm4, L4Norm the L4 norm of a grid variable (Σ|GV |4)N4
norm_inf, LinfNorm the Infinitity norm of a grid variable max|GV |
sum the sum of the elements of a grid variable GV




Reduction operators with multiple names are just synonyms for the same kind of reduction operation. In the formulas GV is the grid variable to be reduced, and N denotes the number of its elements. Reduction operators marked with cannot be applied to grid variables of complex datatype.

2 Examples

The following C example illustrates how the get the maximum value of a grid function.

  int vindex;             /* grid variable index */  
  CCTK_REAL result;       /* resulting reduction value */  
  int target_proc;        /* processor to hold the result */  
  int reduction_handle;   /* handle for reduction operator */  
  char *reduction_name;   /* reduction operator to use */  
 
 
  /* want to get the maximum for the wavetoy grid function */  
  reduction_name = "maximum";  
  vindex = CCTK_VarIndex ("wavetoy::phi");  
 
  /* the reduction result will be obtained by processor 0 only */  
  target_proc = 0;  
 
  /* get the handle for the given reduction operator */  
  reduction_handle = CCTK_ReductionHandle (reduction_name);  
  if (reduction_handle >= 0)  
  {  
    /* now do the reduction using the flesh’s generic reduction API  
      (passing in one input, expecting one output value of REAL type) */  
    if (CCTK_Reduce (cctkGH, target_proc, reduction_handle,  
                     1, CCTK_VARIABLE_REAL, &result, 1, vindex) == 0)  
    {  
      if (CCTK_MyProc (cctkGH) == target_proc)  
      {  
        printf ("%s reduction value is %f\n", reduction_name, result);  
      }  
    }  
    else  
    {  
      CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,  
                  "%s reduction failed", reduction_name);  
    }  
  }  
  else  
  {  
    CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,  
                "Invalid reduction operator ’%s’", reduction_name);  
  }

3 Parameters

4 Interfaces

General

Implements:

reduce

5 Schedule

This section lists all the variables which are assigned storage by thorn CactusPUGH/PUGHReduce. Storage can either last for the duration of the run (Always means that if this thorn is activated storage will be assigned, Conditional means that if this thorn is activated storage will be assigned for the duration of the run if some condition is met), or can be turned on for the duration of a schedule function.

Storage

NONE

Scheduled Functions

CCTK_STARTUP

  pughreduce_startup

  startup routine

 

 Language:c
 Type: function