47 use,
intrinsic :: iso_c_binding
61 integer(c_int),
parameter :: cd = c_double
62 integer(c_int),
parameter :: DIM = 3
63 integer(c_int),
parameter :: speccode = 1
64 real(c_double),
parameter :: model_cutoff = 8.15_cd
66 real(c_double),
parameter :: model_cutsq = model_cutoff**2
83 real(c_double),
parameter :: lj_epsilon = 0.0104_cd
84 real(c_double),
parameter :: lj_sigma = 3.40_cd
85 real(c_double),
parameter :: lj_cutnorm = model_cutoff/lj_sigma
86 real(c_double),
parameter :: lj_A = 12.0_cd*lj_epsilon*(-26.0_cd &
87 + 7.0_cd*lj_cutnorm**6)/(lj_cutnorm**14 &
89 real(c_double),
parameter :: lj_B = 96.0_cd*lj_epsilon*(7.0_cd &
90 - 2.0_cd*lj_cutnorm**6)/(lj_cutnorm**13*lj_sigma)
91 real(c_double),
parameter :: lj_C = 28.0_cd*lj_epsilon*(-13.0_cd &
92 + 4.0_cd*lj_cutnorm**6)/(lj_cutnorm**12)
94 type, bind(c) :: buffer_type
95 real(c_double) :: influence_distance
96 real(c_double) :: cutoff(1)
106 subroutine calc_phi(r,phi)
110 real(c_double),
intent(in) :: r
111 real(c_double),
intent(out) :: phi
114 real(c_double) rsq,sor,sor6,sor12
121 if (r .gt. model_cutoff)
then 125 phi = 4.0_cd*lj_epsilon*(sor12-sor6) + lj_a*rsq + lj_b*r + lj_c
128 end subroutine calc_phi
135 subroutine calc_phi_dphi(r,phi,dphi)
139 real(c_double),
intent(in) :: r
140 real(c_double),
intent(out) :: phi,dphi
143 real(c_double) rsq,sor,sor6,sor12
150 if (r .gt. model_cutoff)
then 155 phi = 4.0_cd*lj_epsilon*(sor12-sor6) + lj_a*rsq + lj_b*r + lj_c
156 dphi = 24.0_cd*lj_epsilon*(-2.0_cd*sor12+sor6)/r + 2.0_cd*lj_a*r + lj_b
159 end subroutine calc_phi_dphi
341 #include "kim_model_compute_arguments_create_log_macros.fd" 343 model_compute_arguments_create_handle, ierr) bind(c)
344 use,
intrinsic :: iso_c_binding
346 log_entry=>kim_model_compute_arguments_create_log_entry
350 type(kim_model_compute_handle_type),
intent(in) :: model_compute_handle
351 type(kim_model_compute_arguments_create_handle_type),
intent(inout) :: &
352 model_compute_arguments_create_handle
353 integer(c_int),
intent(out) :: ierr
355 integer(c_int) :: ierr2
356 character(kind=c_char, len=100000) compute_arguments_string
362 call kim_model_compute_arguments_create_set_argument_support_status( &
363 model_compute_arguments_create_handle, &
364 kim_compute_argument_name_partial_energy, &
365 kim_support_status_optional, ierr2)
367 call kim_model_compute_arguments_create_set_argument_support_status( &
368 model_compute_arguments_create_handle, &
369 kim_compute_argument_name_partial_forces, &
370 kim_support_status_optional, ierr2)
372 call kim_model_compute_arguments_create_set_argument_support_status( &
373 model_compute_arguments_create_handle, &
374 kim_compute_argument_name_partial_particle_energy, &
375 kim_support_status_optional, ierr2)
377 call kim_model_compute_arguments_create_set_argument_support_status( &
378 model_compute_arguments_create_handle, &
379 kim_compute_argument_name_partial_virial, &
380 kim_support_status_optional, ierr2)
388 kim_log_message =
"Unable to successfully create compute_arguments object" 392 model_compute_arguments_create_handle, compute_arguments_string)
393 print
'(A)', trim(compute_arguments_string)
404 #include "kim_model_compute_arguments_destroy_log_macros.fd" 406 model_compute_arguments_destroy_handle, ierr) bind(c)
407 use,
intrinsic :: iso_c_binding
409 log_entry=>kim_model_compute_arguments_destroy_log_entry
413 type(kim_model_compute_handle_type),
intent(in) :: model_compute_handle
414 type(kim_model_compute_arguments_destroy_handle_type),
intent(inout) :: &
415 model_compute_arguments_destroy_handle
416 integer(c_int),
intent(out) :: ierr
418 integer(c_int) :: ierr2
435 #include "kim_model_create_log_macros.fd" 436 subroutine model_create_routine(model_create_handle, requested_length_unit, &
437 requested_energy_unit, requested_charge_unit, requested_temperature_unit, &
438 requested_time_unit, ierr) bind(c)
439 use,
intrinsic :: iso_c_binding
445 type(kim_model_create_handle_type),
intent(inout) :: model_create_handle
446 type(kim_length_unit_type),
intent(in) :: requested_length_unit
447 type(kim_energy_unit_type),
intent(in) :: requested_energy_unit
448 type(kim_charge_unit_type),
intent(in) :: requested_charge_unit
449 type(kim_temperature_unit_type),
intent(in) :: requested_temperature_unit
450 type(kim_time_unit_type),
intent(in) :: requested_time_unit
451 integer(c_int),
intent(out) :: ierr
454 integer(c_int) :: ierr2
455 type(buffer_type),
pointer :: buf
456 character(kind=c_char, len=100000) model_create_string
458 kim_log_file = __file__
464 call kim_model_create_set_units(model_create_handle, &
466 kim_energy_unit_ev, &
467 kim_charge_unit_unused, &
468 kim_temperature_unit_unused, &
469 kim_time_unit_unused, &
474 call kim_model_create_set_species_code(model_create_handle, &
475 kim_species_name_ar, speccode, ierr2)
479 call kim_model_create_set_model_numbering(model_create_handle, &
480 kim_numbering_one_based, ierr2);
484 call kim_model_create_set_compute_pointer(model_create_handle, &
485 kim_language_name_fortran, c_funloc(kim_model_create_string), ierr2)
487 call kim_model_create_set_compute_arguments_create_pointer( &
488 model_create_handle, kim_language_name_fortran, &
491 call kim_model_create_set_compute_arguments_destroy_pointer( &
492 model_create_handle, kim_language_name_fortran, &
495 call kim_model_create_set_destroy_pointer(model_create_handle, &
496 kim_language_name_fortran, c_funloc(kim_model_create_string), ierr2)
498 call kim_model_create_set_refresh_pointer( &
499 model_create_handle, kim_language_name_fortran, &
500 c_funloc(kim_model_create_string), ierr2)
507 call kim_model_create_set_model_buffer_pointer(model_create_handle, &
511 buf%influence_distance = model_cutoff
512 buf%cutoff = model_cutoff
515 call kim_model_create_set_influence_distance_pointer( &
516 model_create_handle, buf%influence_distance)
519 call kim_model_create_set_neighbor_list_cutoffs_pointer(model_create_handle, &
525 kim_log_message =
"Unable to successfully initialize model" 529 call kim_model_create_string(model_create_handle, model_create_string)
530 print
'(A)', trim(model_create_string)
534 end subroutine model_create_routine
subroutine, public model_compute_arguments_destroy(model_compute_handle, model_compute_arguments_destroy_handle, ierr)
subroutine, public model_compute_arguments_create(model_compute_handle, model_compute_arguments_create_handle, ierr)