47 use,
intrinsic :: iso_c_binding
63 integer(c_int),
parameter :: cd = c_double
64 integer(c_int),
parameter :: DIM = 3
65 integer(c_int),
parameter :: speccode = 1
66 real(c_double),
parameter :: model_cutoff = 8.15_cd
68 real(c_double),
parameter :: model_cutsq = model_cutoff**2
85 real(c_double),
parameter :: lj_epsilon = 0.0104_cd
86 real(c_double),
parameter :: lj_sigma = 3.40_cd
87 real(c_double),
parameter :: lj_cutnorm = model_cutoff/lj_sigma
88 real(c_double),
parameter :: lj_A = 12.0_cd*lj_epsilon*(-26.0_cd &
89 + 7.0_cd*lj_cutnorm**6)/(lj_cutnorm**14 &
91 real(c_double),
parameter :: lj_B = 96.0_cd*lj_epsilon*(7.0_cd &
92 - 2.0_cd*lj_cutnorm**6)/(lj_cutnorm**13*lj_sigma)
93 real(c_double),
parameter :: lj_C = 28.0_cd*lj_epsilon*(-13.0_cd &
94 + 4.0_cd*lj_cutnorm**6)/(lj_cutnorm**12)
96 type, bind(c) :: buffer_type
97 real(c_double) :: influence_distance
98 real(c_double) :: cutoff(1)
99 integer(c_int) :: padding_neighbor_hints(1)
100 integer(c_int) :: half_list_hints(1)
110 subroutine calc_phi(r,phi)
114 real(c_double),
intent(in) :: r
115 real(c_double),
intent(out) :: phi
118 real(c_double) rsq,sor,sor6,sor12
125 if (r .gt. model_cutoff)
then 129 phi = 4.0_cd*lj_epsilon*(sor12-sor6) + lj_a*rsq + lj_b*r + lj_c
132 end subroutine calc_phi
139 subroutine calc_phi_dphi(r,phi,dphi)
143 real(c_double),
intent(in) :: r
144 real(c_double),
intent(out) :: phi,dphi
147 real(c_double) rsq,sor,sor6,sor12
154 if (r .gt. model_cutoff)
then 159 phi = 4.0_cd*lj_epsilon*(sor12-sor6) + lj_a*rsq + lj_b*r + lj_c
160 dphi = 24.0_cd*lj_epsilon*(-2.0_cd*sor12+sor6)/r + 2.0_cd*lj_a*r + lj_b
163 end subroutine calc_phi_dphi
345 #include "kim_model_destroy_log_macros.fd" 347 use,
intrinsic :: iso_c_binding
351 type(kim_model_destroy_handle_type),
intent(inout) :: model_destroy_handle
352 integer(c_int),
intent(out) :: ierr
354 type(buffer_type),
pointer :: buf;
type(c_ptr) :: pbuf
356 kim_log_file = __file__
358 call kim_model_destroy_get_model_buffer_pointer(model_destroy_handle, pbuf)
359 call c_f_pointer(pbuf, buf)
360 kim_log_message =
"deallocating model buffer" 371 #include "kim_model_refresh_log_macros.fd" 373 use,
intrinsic :: iso_c_binding
377 type(kim_model_refresh_handle_type),
intent(inout) :: model_refresh_handle
378 integer(c_int),
intent(out) :: ierr
380 type(buffer_type),
pointer :: buf;
type(c_ptr) :: pbuf
382 kim_log_file = __file__
384 call kim_model_refresh_get_model_buffer_pointer(model_refresh_handle, pbuf)
385 call c_f_pointer(pbuf, buf)
387 kim_log_message =
"Resettings influence distance and cutoffs" 389 call kim_model_refresh_set_influence_distance_pointer( &
390 model_refresh_handle, buf%cutoff(1))
391 call kim_model_refresh_set_neighbor_list_pointers( &
392 model_refresh_handle, 1, buf%cutoff, buf%padding_neighbor_hints, &
403 #include "kim_model_compute_arguments_create_log_macros.fd" 405 model_compute_arguments_create_handle, ierr) bind(c)
406 use,
intrinsic :: iso_c_binding
408 log_entry=>kim_model_compute_arguments_create_log_entry
412 type(kim_model_compute_handle_type),
intent(in) :: model_compute_handle
413 type(kim_model_compute_arguments_create_handle_type),
intent(inout) :: &
414 model_compute_arguments_create_handle
415 integer(c_int),
intent(out) :: ierr
417 integer(c_int) :: ierr2
423 call kim_model_compute_arguments_create_set_argument_support_status( &
424 model_compute_arguments_create_handle, &
425 kim_compute_argument_name_partial_energy, &
426 kim_support_status_optional, ierr2)
428 call kim_model_compute_arguments_create_set_argument_support_status( &
429 model_compute_arguments_create_handle, &
430 kim_compute_argument_name_partial_forces, &
431 kim_support_status_optional, ierr2)
433 call kim_model_compute_arguments_create_set_argument_support_status( &
434 model_compute_arguments_create_handle, &
435 kim_compute_argument_name_partial_particle_energy, &
436 kim_support_status_optional, ierr2)
438 call kim_model_compute_arguments_create_set_argument_support_status( &
439 model_compute_arguments_create_handle, &
440 kim_compute_argument_name_partial_virial, &
441 kim_support_status_optional, ierr2)
449 kim_log_message =
"Unable to successfully create compute_arguments object" 461 #include "kim_model_compute_arguments_destroy_log_macros.fd" 463 model_compute_arguments_destroy_handle, ierr) bind(c)
464 use,
intrinsic :: iso_c_binding
466 log_entry=>kim_model_compute_arguments_destroy_log_entry
470 type(kim_model_compute_handle_type),
intent(in) :: model_compute_handle
471 type(kim_model_compute_arguments_destroy_handle_type),
intent(inout) :: &
472 model_compute_arguments_destroy_handle
473 integer(c_int),
intent(out) :: ierr
475 integer(c_int) :: ierr2
492 #include "kim_model_create_log_macros.fd" 493 subroutine model_create_routine(model_create_handle, requested_length_unit, &
494 requested_energy_unit, requested_charge_unit, requested_temperature_unit, &
495 requested_time_unit, ierr) bind(c)
496 use,
intrinsic :: iso_c_binding
502 type(kim_model_create_handle_type),
intent(inout) :: model_create_handle
503 type(kim_length_unit_type),
intent(in) :: requested_length_unit
504 type(kim_energy_unit_type),
intent(in) :: requested_energy_unit
505 type(kim_charge_unit_type),
intent(in) :: requested_charge_unit
506 type(kim_temperature_unit_type),
intent(in) :: requested_temperature_unit
507 type(kim_time_unit_type),
intent(in) :: requested_time_unit
508 integer(c_int),
intent(out) :: ierr
511 integer(c_int) :: ierr2
512 type(buffer_type),
pointer :: buf
514 kim_log_file = __file__
520 call kim_model_create_set_units(model_create_handle, &
522 kim_energy_unit_ev, &
523 kim_charge_unit_unused, &
524 kim_temperature_unit_unused, &
525 kim_time_unit_unused, &
530 call kim_model_create_set_species_code(model_create_handle, &
531 kim_species_name_ar, speccode, ierr2)
535 call kim_model_create_set_model_numbering(model_create_handle, &
536 kim_numbering_one_based, ierr2);
540 call kim_model_create_set_compute_pointer(model_create_handle, &
541 kim_language_name_fortran, c_funloc(kim_model_create_string), ierr2)
543 call kim_model_create_set_compute_arguments_create_pointer( &
544 model_create_handle, kim_language_name_fortran, &
547 call kim_model_create_set_compute_arguments_destroy_pointer( &
548 model_create_handle, kim_language_name_fortran, &
551 call kim_model_create_set_destroy_pointer(model_create_handle, &
554 call kim_model_create_set_refresh_pointer( &
555 model_create_handle, kim_language_name_fortran, &
563 call kim_model_create_set_model_buffer_pointer(model_create_handle, &
567 buf%influence_distance = model_cutoff
568 buf%cutoff = model_cutoff
569 buf%padding_neighbor_hints = 1
570 buf%half_list_hints = 0
573 call kim_model_create_set_influence_distance_pointer( &
574 model_create_handle, buf%influence_distance)
577 call kim_model_create_set_neighbor_list_pointers(model_create_handle, &
578 1, buf%cutoff, buf%padding_neighbor_hints, buf%half_list_hints)
583 kim_log_message =
"Unable to successfully initialize model" 589 end subroutine model_create_routine
subroutine, public model_destroy_func(model_destroy_handle, ierr)
subroutine, public model_refresh_func(model_refresh_handle, ierr)
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)