1 //
2 // CDDL HEADER START
3 //
4 // The contents of this file are subject to the terms of the Common Development
5 // and Distribution License Version 1.0 (the "License").
6 //
7 // You can obtain a copy of the license at
8 // http://www.opensource.org/licenses/CDDL-1.0.  See the License for the
9 // specific language governing permissions and limitations under the License.
10 //
11 // When distributing Covered Code, include this CDDL HEADER in each file and
12 // include the License file in a prominent location with the name LICENSE.CDDL.
13 // If applicable, add the following below this CDDL HEADER, with the fields
14 // enclosed by brackets "[]" replaced with your own identifying information:
15 //
16 // Portions Copyright (c) [yyyy] [name of copyright owner]. All rights reserved.
17 //
18 // CDDL HEADER END
19 //
20 
21 //
22 // Copyright (c) 2016--2020, Regents of the University of Minnesota.
23 // All rights reserved.
24 //
25 // Contributors:
26 //    Ryan S. Elliott
27 //
28 
29 //
30 // Release: This file is part of the kim-api-2.2.1 package.
31 //
32 
33 
34 #include <string>
35 
36 #ifndef KIM_LOG_VERBOSITY_HPP_
37 #include "KIM_LogVerbosity.hpp"
38 #endif
39 extern "C" {
40 #ifndef KIM_LOG_VERBOSITY_H_
41 #include "KIM_LogVerbosity.h"
42 #endif
43 }  // extern "C"
44 
45 #ifndef KIM_COMPUTE_ARGUMENT_NAME_HPP_
46 #include "KIM_ComputeArgumentName.hpp"
47 #endif
48 extern "C" {
49 #ifndef KIM_COMPUTE_ARGUMENT_NAME_H_
50 #include "KIM_ComputeArgumentName.h"
51 #endif
52 }  // extern "C"
53 
54 #ifndef KIM_COMPUTE_CALLBACK_NAME_HPP_
55 #include "KIM_ComputeCallbackName.hpp"
56 #endif
57 extern "C" {
58 #ifndef KIM_COMPUTE_CALLBACK_NAME_H_
59 #include "KIM_ComputeCallbackName.h"
60 #endif
61 }  // extern "C"
62 
63 #ifndef KIM_MODEL_COMPUTE_ARGUMENTS_HPP_
64 #include "KIM_ModelComputeArguments.hpp"
65 #endif
66 extern "C" {
67 #ifndef KIM_MODEL_COMPUTE_ARGUMENTS_H_
68 #include "KIM_ModelComputeArguments.h"
69 #endif
70 }  // extern "C"
71 
72 
73 struct KIM_ModelComputeArguments
74 {
75   void * p;
76 };
77 
78 #define CONVERT_POINTER                                 \
79   KIM::ModelComputeArguments * pModelComputeArguments   \
80       = reinterpret_cast<KIM::ModelComputeArguments *>( \
81           modelComputeArguments->p)
82 
83 namespace
84 {
makeLogVerbosityCpp(KIM_LogVerbosity const logVerbosity)85 KIM::LogVerbosity makeLogVerbosityCpp(KIM_LogVerbosity const logVerbosity)
86 {
87   return KIM::LogVerbosity(logVerbosity.logVerbosityID);
88 }
89 
90 KIM::ComputeArgumentName
makeComputeArgumentNameCpp(KIM_ComputeArgumentName const computeArgumentName)91 makeComputeArgumentNameCpp(KIM_ComputeArgumentName const computeArgumentName)
92 {
93   return KIM::ComputeArgumentName(computeArgumentName.computeArgumentNameID);
94 }
95 
96 KIM::ComputeCallbackName
makeComputeCallbackNameCpp(KIM_ComputeCallbackName const computeCallbackName)97 makeComputeCallbackNameCpp(KIM_ComputeCallbackName const computeCallbackName)
98 {
99   return KIM::ComputeCallbackName(computeCallbackName.computeCallbackNameID);
100 }
101 }  // namespace
102 
103 
104 extern "C" {
KIM_ModelComputeArguments_GetNeighborList(KIM_ModelComputeArguments const * const modelComputeArguments,int const neighborListIndex,int const particleNumber,int * const numberOfNeighbors,int const ** const neighborsOfParticle)105 int KIM_ModelComputeArguments_GetNeighborList(
106     KIM_ModelComputeArguments const * const modelComputeArguments,
107     int const neighborListIndex,
108     int const particleNumber,
109     int * const numberOfNeighbors,
110     int const ** const neighborsOfParticle)
111 {
112   CONVERT_POINTER;
113 
114   return pModelComputeArguments->GetNeighborList(neighborListIndex,
115                                                  particleNumber,
116                                                  numberOfNeighbors,
117                                                  neighborsOfParticle);
118 }
119 
KIM_ModelComputeArguments_ProcessDEDrTerm(KIM_ModelComputeArguments const * const modelComputeArguments,double const de,double const r,double const * const dx,int const i,int const j)120 int KIM_ModelComputeArguments_ProcessDEDrTerm(
121     KIM_ModelComputeArguments const * const modelComputeArguments,
122     double const de,
123     double const r,
124     double const * const dx,
125     int const i,
126     int const j)
127 {
128   CONVERT_POINTER;
129 
130   return pModelComputeArguments->ProcessDEDrTerm(de, r, dx, i, j);
131 }
132 
KIM_ModelComputeArguments_ProcessD2EDr2Term(KIM_ModelComputeArguments const * const modelComputeArguments,double const de,double const * const r,double const * const dx,int const * const i,int const * const j)133 int KIM_ModelComputeArguments_ProcessD2EDr2Term(
134     KIM_ModelComputeArguments const * const modelComputeArguments,
135     double const de,
136     double const * const r,
137     double const * const dx,
138     int const * const i,
139     int const * const j)
140 {
141   CONVERT_POINTER;
142 
143   return pModelComputeArguments->ProcessD2EDr2Term(de, r, dx, i, j);
144 }
145 
KIM_ModelComputeArguments_GetArgumentPointerInteger(KIM_ModelComputeArguments const * const modelComputeArguments,KIM_ComputeArgumentName const computeArgumentName,int ** const ptr)146 int KIM_ModelComputeArguments_GetArgumentPointerInteger(
147     KIM_ModelComputeArguments const * const modelComputeArguments,
148     KIM_ComputeArgumentName const computeArgumentName,
149     int ** const ptr)
150 {
151   CONVERT_POINTER;
152 
153   return pModelComputeArguments->GetArgumentPointer(
154       makeComputeArgumentNameCpp(computeArgumentName), ptr);
155 }
156 
KIM_ModelComputeArguments_GetArgumentPointerDouble(KIM_ModelComputeArguments const * const modelComputeArguments,KIM_ComputeArgumentName const computeArgumentName,double ** const ptr)157 int KIM_ModelComputeArguments_GetArgumentPointerDouble(
158     KIM_ModelComputeArguments const * const modelComputeArguments,
159     KIM_ComputeArgumentName const computeArgumentName,
160     double ** const ptr)
161 {
162   CONVERT_POINTER;
163 
164   return pModelComputeArguments->GetArgumentPointer(
165       makeComputeArgumentNameCpp(computeArgumentName), ptr);
166 }
167 
KIM_ModelComputeArguments_IsCallbackPresent(KIM_ModelComputeArguments const * const modelComputeArguments,KIM_ComputeCallbackName const computeCallbackName,int * const present)168 int KIM_ModelComputeArguments_IsCallbackPresent(
169     KIM_ModelComputeArguments const * const modelComputeArguments,
170     KIM_ComputeCallbackName const computeCallbackName,
171     int * const present)
172 {
173   CONVERT_POINTER;
174 
175   KIM::ComputeCallbackName computeCallbackNameC
176       = makeComputeCallbackNameCpp(computeCallbackName);
177   return pModelComputeArguments->IsCallbackPresent(computeCallbackNameC,
178                                                    present);
179 }
180 
KIM_ModelComputeArguments_SetModelBufferPointer(KIM_ModelComputeArguments * const modelComputeArguments,void * const ptr)181 void KIM_ModelComputeArguments_SetModelBufferPointer(
182     KIM_ModelComputeArguments * const modelComputeArguments, void * const ptr)
183 {
184   CONVERT_POINTER;
185 
186   pModelComputeArguments->SetModelBufferPointer(ptr);
187 }
188 
KIM_ModelComputeArguments_GetModelBufferPointer(KIM_ModelComputeArguments const * const modelComputeArguments,void ** const ptr)189 void KIM_ModelComputeArguments_GetModelBufferPointer(
190     KIM_ModelComputeArguments const * const modelComputeArguments,
191     void ** const ptr)
192 {
193   CONVERT_POINTER;
194 
195   pModelComputeArguments->GetModelBufferPointer(ptr);
196 }
197 
KIM_ModelComputeArguments_LogEntry(KIM_ModelComputeArguments const * const modelComputeArguments,KIM_LogVerbosity const logVerbosity,char const * const message,int const lineNumber,char const * const fileName)198 void KIM_ModelComputeArguments_LogEntry(
199     KIM_ModelComputeArguments const * const modelComputeArguments,
200     KIM_LogVerbosity const logVerbosity,
201     char const * const message,
202     int const lineNumber,
203     char const * const fileName)
204 {
205   CONVERT_POINTER;
206 
207   pModelComputeArguments->LogEntry(
208       makeLogVerbosityCpp(logVerbosity), message, lineNumber, fileName);
209 }
210 
KIM_ModelComputeArguments_ToString(KIM_ModelComputeArguments const * const modelComputeArguments)211 char const * KIM_ModelComputeArguments_ToString(
212     KIM_ModelComputeArguments const * const modelComputeArguments)
213 {
214   CONVERT_POINTER;
215 
216   return pModelComputeArguments->ToString().c_str();
217 }
218 
219 }  // extern "C"
220