MOOCHO (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RTOp_ROp_max.c
Go to the documentation of this file.
1 /*
2 // @HEADER
3 // ***********************************************************************
4 //
5 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
6 // Copyright (2003) Sandia Corporation
7 //
8 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
9 // license for use of this work by or on behalf of the U.S. Government.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov)
39 //
40 // ***********************************************************************
41 // @HEADER
42 */
43 
44 /* ///////////////////////////////////////////// */
45 /* RTOp_ROp_max.c */
46 
47 /* */
48 /* Note: This file was created automatically by 'new_rtop.pl' */
49 /* on 7/15/2002 at 17:33 */
50 /* */
51 
52 #define max(a,b) ( (a) > (b) ? (a) : (b) )
53 #define min(a,b) ( (a) < (b) ? (a) : (b) )
54 
55 #include "RTOp_ROp_max.h"
56 #include "RTOp_obj_null_vtbl.h" /* vtbl for operator object instance data */
57 #include "RTOp_reduct_max_value.h"
58 
59 
60 /* Implementation functions for RTOp_RTOp */
61 
63  const struct RTOp_RTOp_vtbl_t* vtbl, const void* obj_data
64  , const int num_vecs, const struct RTOp_SubVector vecs[]
65  , const int num_targ_vecs, const struct RTOp_MutableSubVector targ_vecs[]
66  , RTOp_ReductTarget reduct_obj )
67 {
68  /* */
69  /* Declare local variables */
70  /* */
71 
72  /* Access to the reduction object data */
73  RTOp_value_type *max_ele = (RTOp_value_type*)reduct_obj;
74  /* Vector data */
75  RTOp_index_type sub_dim;
76  /* v0 */
77  const RTOp_value_type *v0_val;
78  ptrdiff_t v0_val_s;
79 
80  /* Automatic temporary variables */
81  register RTOp_index_type k;
82  /* Temporary element-wise reduction object */
83  RTOp_value_type max_ele_ith;
84 
85  /* */
86  /* Validate the input */
87  /* */
88  if( num_vecs != 1 || ( num_vecs && vecs == NULL ) )
90  if( num_targ_vecs != 0 || ( num_targ_vecs && targ_vecs == NULL ) )
92  assert(reduct_obj);
93 
94 
95  /* */
96  /* Get pointers to data */
97  /* */
98  sub_dim = vecs[0].sub_dim;
99  /* v0 */
100  v0_val = vecs[0].values;
101  v0_val_s = vecs[0].values_stride;
102 
103 
104  /* */
105  /* Apply the operator: */
106  /* */
107  for( k = 0; k < sub_dim; ++k, v0_val += v0_val_s )
108  {
109  /* Element-wise reduction */
110  max_ele_ith = (*v0_val);
111  /* Reduction of intermediates */
112  (*max_ele) = max( (*max_ele), max_ele_ith );
113  }
114 
115  return 0; /* success? */
116 }
117 
119  const struct RTOp_RTOp_vtbl_t* vtbl, const void* obj_data
120  ,RTOp_ReductTarget reduct_obj
121  )
122 {
123  RTOp_value_type *max_ele = (RTOp_value_type*)reduct_obj;
124  *max_ele = -1e+50;
125  return 0;
126 }
127 
128 /* Virtual function table */
130 {
133  ,"ROp_max"
138 };
139 
140 /* Class specific functions */
141 
143 {
144 #ifdef RTOp_DEBUG
145  assert(op);
146 #endif
147  op->obj_data = NULL;
148  op->vtbl = &RTOp_ROp_max_vtbl;
149  op->vtbl->obj_data_vtbl->obj_create(NULL,NULL,&op->obj_data);
150  return 0;
151 }
152 
154 {
155  op->vtbl->obj_data_vtbl->obj_free(NULL,NULL,&op->obj_data);
156  op->obj_data = NULL;
157  op->vtbl = NULL;
158  return 0;
159 }
160 
161 
163 {
164  return *((RTOp_value_type*)reduct_obj);
165 }
166 
ptrdiff_t values_stride
Definition: RTOp.h:305
double RTOp_value_type
Definition: RTOp.h:69
static int RTOp_ROp_max_apply_op(const struct RTOp_RTOp_vtbl_t *vtbl, const void *obj_data, const int num_vecs, const struct RTOp_SubVector vecs[], const int num_targ_vecs, const struct RTOp_MutableSubVector targ_vecs[], RTOp_ReductTarget reduct_obj)
Definition: RTOp_ROp_max.c:62
const struct RTOp_RTOp_vtbl_t RTOp_ROp_max_vtbl
Definition: RTOp_ROp_max.c:129
void * RTOp_ReductTarget
Definition: RTOp.h:191
static int RTOp_ROp_max_reduct_obj_reinit(const struct RTOp_RTOp_vtbl_t *vtbl, const void *obj_data, RTOp_ReductTarget reduct_obj)
Definition: RTOp_ROp_max.c:118
int(* obj_create)(const struct RTOp_obj_type_vtbl_t *vtbl, const void *instance_data, void **obj)
Definition: RTOp.h:941
const struct RTOp_obj_type_vtbl_t * obj_data_vtbl
Definition: RTOp.h:819
#define max(a, b)
Definition: RTOp_ROp_max.c:52
const RTOp_value_type * values
Definition: RTOp.h:303
int RTOp_get_reduct_max_value_op(const struct RTOp_RTOp_vtbl_t *vtbl, const void *obj_data, RTOp_reduct_op_func_ptr_t *reduct_op_func_ptr)
#define RTOp_ERR_INVALID_NUM_VECS
Definition: RTOp.h:266
int(* obj_free)(const struct RTOp_obj_type_vtbl_t *vtbl, const void *instance_data, void **obj)
Definition: RTOp.h:1019
const struct RTOp_obj_type_vtbl_t RTOp_obj_null_vtbl
int RTOp_ROp_max_destroy(struct RTOp_RTOp *op)
Definition: RTOp_ROp_max.c:153
RTOp_value_type RTOp_ROp_max_val(RTOp_ReductTarget reduct_obj)
Definition: RTOp_ROp_max.c:162
void * obj_data
Definition: RTOp.h:800
const struct RTOp_RTOp_vtbl_t * vtbl
Definition: RTOp.h:802
int RTOp_reduct_max_value(const struct RTOp_RTOp_vtbl_t *vtbl, const void *obj_data, RTOp_ReductTarget in_targ_obj, RTOp_ReductTarget inout_targ_obj)
int RTOp_ROp_max_construct(struct RTOp_RTOp *op)
Definition: RTOp_ROp_max.c:142
RTOp_index_type sub_dim
Definition: RTOp.h:301
#define RTOp_ERR_INVALID_NUM_TARG_VECS
Definition: RTOp.h:268
const struct RTOp_obj_type_vtbl_t RTOp_obj_value_vtbl
Teuchos_Ordinal RTOp_index_type
Definition: RTOp.h:68