87 static void calc_phi(
double const * epsilon,
91 double const cutoff,
double const r,
double* phi);
97 double const cutoff,
double const r,
98 double* phi,
double* dphi);
120 double const cutoff,
double const r,
double* phi)
126 ep = exp(-(*
C)*(r-*Rzero));
136 *phi = (*epsilon)*( -ep2 + 2.0*ep ) + *shift;
147 double const cutoff,
double const r,
148 double* phi,
double* dphi)
154 ep = exp(-(*
C)*(r-*Rzero));
165 *phi = (*epsilon)*( -ep2 + 2.0*ep ) + *shift;
166 *dphi = 2.0*(*epsilon)*(*C)*( -ep + ep2 );
190 int const * neighListOfCurrentPart;
194 int comp_particleEnergy;
208 double* particleEnergy;
224 modelComputeArguments,
229 modelComputeArguments,
234 modelComputeArguments,
239 modelComputeArguments,
244 modelComputeArguments,
249 modelComputeArguments,
254 modelComputeArguments,
263 comp_energy = (energy != NULL);
264 comp_force = (force != NULL);
265 comp_particleEnergy = (particleEnergy != NULL);
270 for (i = 0; i < *nParts; ++i)
274 LOG_ERROR(
"Unexpected species code detected");
281 if (comp_particleEnergy)
283 for (i = 0; i < *nParts; ++i)
285 particleEnergy[i] = 0.0;
295 for (i = 0; i < *nParts; ++i)
297 for (k = 0; k <
DIM; ++k)
299 force[i*
DIM + k] = 0.0;
307 for (i = 0; i < *nParts; ++i)
312 modelComputeArguments,
313 0, i, &numOfPartNeigh, &neighListOfCurrentPart);
323 for (jj = 0; jj < numOfPartNeigh; ++ jj)
325 j = neighListOfCurrentPart[jj];
329 for (k = 0; k <
DIM; ++k)
331 Rij[k] = coords[j*
DIM + k] - coords[i*
DIM + k];
333 Rsqij += Rij[k]*Rij[k];
364 if (comp_particleEnergy)
366 particleEnergy[i] += 0.5*phi;
376 for (k = 0; k <
DIM; ++k)
378 force[i*
DIM + k] += dEidr*Rij[k]/R;
379 force[j*
DIM + k] -= dEidr*Rij[k]/R;
404 int numberOfParameterFiles;
405 char const * paramfile1name;
409 char speciesNameString[100];
459 modelDriverCreate, &numberOfParameterFiles);
461 if (numberOfParameterFiles != 1)
464 LOG_ERROR(
"Incorrect number of parameter files.");
473 LOG_ERROR(
"Unable to get parameter file name.");
478 fid = fopen(paramfile1name,
"r");
482 LOG_ERROR(
"Unable to open parameter file for Morse parameters");
486 ier = fscanf(fid,
"%s \n%lf \n%lf \n%lf \n%lf",
499 LOG_ERROR(
"Unable to read all parameters");
511 LOG_ERROR(
"Unable to set species code for Ar.");
613 modelComputeArgumentsCreate,
618 modelComputeArgumentsCreate,
623 modelComputeArgumentsCreate,
628 LOG_ERROR(
"Unable to set argument supportStatus.");
void KIM_ModelDriverCreate_GetNumberOfParameterFiles(KIM_ModelDriverCreate *const modelDriverCreate, int *const numberOfParameterFiles)
KIM_SupportStatus const KIM_SUPPORT_STATUS_optional
KIM_ComputeArgumentName const KIM_COMPUTE_ARGUMENT_NAME_coordinates
int KIM_ModelDriverCreate_SetUnits(KIM_ModelDriverCreate *const modelDriverCreate, KIM_LengthUnit const lengthUnit, KIM_EnergyUnit const energyUnit, KIM_ChargeUnit const chargeUnit, KIM_TemperatureUnit const temperatureUnit, KIM_TimeUnit const timeUnit)
KIM_ComputeArgumentName const KIM_COMPUTE_ARGUMENT_NAME_partialParticleEnergy
void KIM_ModelDestroy_GetModelBufferPointer(KIM_ModelDestroy const *const modelDestroy, void **const ptr)
static int compute_arguments_destroy(KIM_ModelCompute const *const modelCompute, KIM_ModelComputeArgumentsDestroy *const modelComputeArgumentsDestroy)
KIM_LanguageName const KIM_LANGUAGE_NAME_c
KIM_ComputeArgumentName const KIM_COMPUTE_ARGUMENT_NAME_partialForces
struct KIM_ModelRefresh KIM_ModelRefresh
int KIM_ModelComputeArguments_GetArgumentPointerDouble(KIM_ModelComputeArguments const *const modelComputeArguments, KIM_ComputeArgumentName const computeArgumentName, double **const ptr)
KIM_SpeciesName KIM_SpeciesName_FromString(char const *const str)
void KIM_ModelDriverCreate_SetInfluenceDistancePointer(KIM_ModelDriverCreate *const modelDriverCreate, double *const influenceDistance)
void KIM_ModelRefresh_GetModelBufferPointer(KIM_ModelRefresh const *const modelRefresh, void **const ptr)
KIM_ComputeArgumentName const KIM_COMPUTE_ARGUMENT_NAME_particleSpeciesCodes
static void calc_phi_dphi(double const *epsilon, double const *C, double const *Rzero, double const *shift, double const cutoff, double const r, double *phi, double *dphi)
KIM_TemperatureUnit const KIM_TEMPERATURE_UNIT_unused
int KIM_ModelDriverCreate_SetComputeArgumentsCreatePointer(KIM_ModelDriverCreate *const modelDriverCreate, KIM_LanguageName const languageName, func *const fptr)
KIM_TimeUnit const KIM_TIME_UNIT_unused
struct KIM_ModelDestroy KIM_ModelDestroy
void KIM_ModelDriverCreate_SetNeighborListPointers(KIM_ModelDriverCreate *const modelDriverCreate, int const numberOfNeighborLists, double const *const cutoffs, int const *const paddingNeighborHints, int const *const halfListHints)
ComputeArgumentName const particleContributing
int KIM_ModelComputeArgumentsCreate_SetArgumentSupportStatus(KIM_ModelComputeArgumentsCreate *const modelComputeArgumentsCreate, KIM_ComputeArgumentName const computeArgumentName, KIM_SupportStatus const supportStatus)
struct KIM_ModelDriverCreate KIM_ModelDriverCreate
void KIM_ModelCompute_GetModelBufferPointer(KIM_ModelCompute const *const modelCompute, void **const ptr)
static int compute(KIM_ModelCompute const *const modelCompute, KIM_ModelComputeArguments const *const modelComputeArguments)
#define LOG_ERROR(message)
int model_driver_create(KIM_ModelDriverCreate *const modelDriverCreate, KIM_LengthUnit const requestedLengthUnit, KIM_EnergyUnit const requestedEnergyUnit, KIM_ChargeUnit const requestedChargeUnit, KIM_TemperatureUnit const requestedTemperatureUnit, KIM_TimeUnit const requestedTimeUnit)
KIM_ComputeArgumentName const KIM_COMPUTE_ARGUMENT_NAME_numberOfParticles
struct KIM_ModelComputeArguments KIM_ModelComputeArguments
struct KIM_ModelComputeArgumentsCreate KIM_ModelComputeArgumentsCreate
int KIM_ModelDriverCreate_GetParameterFileName(KIM_ModelDriverCreate *const modelDriverCreate, int const index, char const **const parameterFileName)
int KIM_ModelDriverCreate_SetSpeciesCode(KIM_ModelDriverCreate *const modelDriverCreate, KIM_SpeciesName const speciesName, int const code)
static int compute_arguments_create(KIM_ModelCompute const *const modelCompute, KIM_ModelComputeArgumentsCreate *const modelComputeArgumentsCreate)
int KIM_ModelDriverCreate_SetComputePointer(KIM_ModelDriverCreate *const modelDriverCreate, KIM_LanguageName const languageName, func *const fptr)
int KIM_ModelDriverCreate_SetComputeArgumentsDestroyPointer(KIM_ModelDriverCreate *const modelDriverCreate, KIM_LanguageName const languageName, func *const fptr)
int KIM_ModelDriverCreate_SetDestroyPointer(KIM_ModelDriverCreate *const modelDriverCreate, KIM_LanguageName const languageName, func *const fptr)
static void calc_phi(double const *epsilon, double const *C, double const *Rzero, double const *shift, double const cutoff, double const r, double *phi)
int KIM_ModelComputeArguments_GetNeighborList(KIM_ModelComputeArguments const *const modelComputeArguments, int const neighborListIndex, int const particleNumber, int *const numberOfNeighbors, int const **const neighborsOfParticle)
struct KIM_ModelComputeArgumentsDestroy KIM_ModelComputeArgumentsDestroy
KIM_EnergyUnit const KIM_ENERGY_UNIT_eV
static int refresh(KIM_ModelRefresh *const modelRefresh)
void KIM_ModelRefresh_SetInfluenceDistancePointer(KIM_ModelRefresh *const modelRefresh, double *const influenceDistance)
KIM_ChargeUnit const KIM_CHARGE_UNIT_unused
ComputeArgumentName const particleSpeciesCodes
static int destroy(KIM_ModelDestroy *const modelDestroy)
KIM_ComputeArgumentName const KIM_COMPUTE_ARGUMENT_NAME_partialEnergy
void KIM_ModelDriverCreate_SetModelBufferPointer(KIM_ModelDriverCreate *const modelDriverCreate, void *const ptr)
void KIM_ModelRefresh_SetNeighborListPointers(KIM_ModelRefresh *const modelRefresh, int const numberOfNeighborLists, double const *const cutoffs, int const *const paddingNeighborHints, int const *const halfListHints)
int KIM_ModelDriverCreate_SetModelNumbering(KIM_ModelDriverCreate *const modelDriverCreate, KIM_Numbering const numbering)
KIM_LengthUnit const KIM_LENGTH_UNIT_A
int KIM_ModelDriverCreate_SetRefreshPointer(KIM_ModelDriverCreate *const modelDriverCreate, KIM_LanguageName const languageName, func *const fptr)
KIM_Numbering const KIM_NUMBERING_zeroBased
int KIM_ModelComputeArguments_GetArgumentPointerInteger(KIM_ModelComputeArguments const *const modelComputeArguments, KIM_ComputeArgumentName const computeArgumentName, int **const ptr)
KIM_ComputeArgumentName const KIM_COMPUTE_ARGUMENT_NAME_particleContributing
struct KIM_ModelCompute KIM_ModelCompute