1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
MODULE keepcmds
USE liblammps
TYPE(LAMMPS) :: lmp
CHARACTER(len=40), DIMENSION(3), PARAMETER :: demo_input = &
[ CHARACTER(len=40) :: &
'region box block 0 $x 0 2 0 2', &
'create_box 1 box', &
'create_atoms 1 single 1.0 1.0 ${zpos}' ]
CHARACTER(len=40), DIMENSION(2), PARAMETER :: cont_input = &
[ CHARACTER(len=40) :: &
'create_atoms 1 single &', &
' 0.2 0.1 0.1' ]
END MODULE keepcmds
FUNCTION f_lammps_with_args() BIND(C, name="f_lammps_with_args")
USE ISO_C_BINDING, ONLY: c_ptr
USE liblammps
USE keepcmds, ONLY: lmp
IMPLICIT NONE
TYPE(c_ptr) :: f_lammps_with_args
CHARACTER(len=12), DIMENSION(12), PARAMETER :: args = &
[ CHARACTER(len=12) :: 'liblammps', '-log', 'none', &
'-echo','screen','-nocite','-var','zpos','1.5','-var','x','2']
lmp = lammps(args)
f_lammps_with_args = lmp%handle
END FUNCTION f_lammps_with_args
SUBROUTINE f_lammps_close() BIND(C, name="f_lammps_close")
USE ISO_C_BINDING, ONLY: c_null_ptr
USE liblammps
USE keepcmds, ONLY: lmp
IMPLICIT NONE
CALL lmp%close()
lmp%handle = c_null_ptr
END SUBROUTINE f_lammps_close
FUNCTION f_lammps_get_natoms() BIND(C, name="f_lammps_get_natoms")
USE ISO_C_BINDING, ONLY: c_null_ptr, c_double
USE liblammps
USE keepcmds, ONLY: lmp
IMPLICIT NONE
REAL(c_double) :: f_lammps_get_natoms
f_lammps_get_natoms = lmp%get_natoms()
END FUNCTION f_lammps_get_natoms
SUBROUTINE f_lammps_file() BIND(C, name="f_lammps_file")
USE ISO_C_BINDING, ONLY: c_null_ptr
USE liblammps
USE keepcmds, ONLY: lmp, demo_input, cont_input
IMPLICIT NONE
INTEGER :: i
CHARACTER(len=*), PARAMETER :: demo_file = 'in.test', cont_file = 'in.cont'
OPEN(10, file=demo_file, status='replace')
WRITE(10, fmt='(A)') (demo_input(i),i=1,SIZE(demo_input))
CLOSE(10)
OPEN(11, file=cont_file, status='replace')
WRITE(11, fmt='(A)') (cont_input(i),i=1,SIZE(cont_input))
CLOSE(11)
CALL lmp%file(demo_file)
CALL lmp%file(cont_file)
OPEN(12, file=demo_file, status='old')
CLOSE(12, status='delete')
OPEN(13, file=cont_file, status='old')
CLOSE(13, status='delete')
END SUBROUTINE f_lammps_file
SUBROUTINE f_lammps_command() BIND(C, name="f_lammps_command")
USE ISO_C_BINDING, ONLY: c_null_ptr
USE liblammps
USE keepcmds, ONLY: lmp, demo_input
IMPLICIT NONE
INTEGER :: i
DO i=1,SIZE(demo_input)
call lmp%command(demo_input(i))
END DO
END SUBROUTINE f_lammps_command
SUBROUTINE f_lammps_commands_list() BIND(C, name="f_lammps_commands_list")
USE ISO_C_BINDING, ONLY: c_null_ptr
USE liblammps
USE keepcmds, ONLY: lmp, demo_input, cont_input
IMPLICIT NONE
CALL lmp%commands_list(demo_input)
CALL lmp%commands_list(cont_input)
END SUBROUTINE f_lammps_commands_list
SUBROUTINE f_lammps_commands_string() BIND(C, name="f_lammps_commands_string")
USE ISO_C_BINDING, ONLY: c_null_ptr
USE liblammps
USE keepcmds, ONLY: lmp, demo_input, cont_input
IMPLICIT NONE
INTEGER :: i
CHARACTER(len=512) :: cmds
cmds = ''
DO i=1,SIZE(demo_input)
cmds = TRIM(cmds) // TRIM(demo_input(i)) // NEW_LINE('A')
END DO
DO i=1,SIZE(cont_input)
cmds = TRIM(cmds) // TRIM(cont_input(i)) // NEW_LINE('A')
END DO
CALL lmp%commands_string(cmds)
END SUBROUTINE f_lammps_commands_string
|