File: test_fortran_extract_atom.f90

package info (click to toggle)
lammps 20250204%2Bdfsg.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 474,368 kB
  • sloc: cpp: 1,060,070; python: 27,785; ansic: 8,956; f90: 7,254; sh: 6,044; perl: 4,171; fortran: 2,442; xml: 1,714; makefile: 1,352; objc: 238; lisp: 188; yacc: 58; csh: 16; awk: 14; tcl: 6; javascript: 2
file content (175 lines) | stat: -rw-r--r-- 5,773 bytes parent folder | download
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
FUNCTION f_lammps_with_args() BIND(C, name="f_lammps_with_args")
  USE ISO_C_BINDING, ONLY: c_ptr
  USE liblammps
  USE keepstuff, 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 keepstuff, ONLY: lmp
  IMPLICIT NONE

  CALL lmp%close()
  lmp%handle = c_null_ptr
END SUBROUTINE f_lammps_close

SUBROUTINE f_lammps_setup_extract_atom() BIND(C)
   USE LIBLAMMPS
   USE keepstuff, ONLY : lmp, big_input, cont_input, pair_input, prop_input
   IMPLICIT NONE

   CALL lmp%commands_list(big_input)
   CALL lmp%commands_list(cont_input)
   CALL lmp%commands_list(pair_input)
   CALL lmp%commands_list(prop_input)
END SUBROUTINE f_lammps_setup_extract_atom

FUNCTION f_lammps_extract_atom_mass() BIND(C)
   USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double
   USE LIBLAMMPS
   USE keepstuff, ONLY : lmp
   IMPLICIT NONE
   REAL(c_double) :: f_lammps_extract_atom_mass
   REAL(c_double), DIMENSION(:), POINTER :: mass => NULL()

   mass = lmp%extract_atom('mass')
   f_lammps_extract_atom_mass = mass(1)
END FUNCTION f_lammps_extract_atom_mass

FUNCTION f_lammps_extract_atom_mass_size() BIND(C)
   USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double, c_int
   USE LIBLAMMPS
   USE keepstuff, ONLY : lmp
   IMPLICIT NONE
   INTEGER(c_int) :: f_lammps_extract_atom_mass_size, ntypes
   REAL(c_double), DIMENSION(:), POINTER :: mass => NULL()

   ntypes = lmp%extract_setting('ntypes')
   mass = lmp%extract_atom('mass')
   f_lammps_extract_atom_mass_size = SIZE(mass)
END FUNCTION f_lammps_extract_atom_mass_size

FUNCTION f_lammps_extract_atom_tag_int(i) BIND(C)
   USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double, c_int
   USE LIBLAMMPS
   USE keepstuff, ONLY : lmp
   IMPLICIT NONE
   INTEGER(c_int), INTENT(IN), VALUE :: i
   INTEGER(c_int) :: f_lammps_extract_atom_tag_int
   INTEGER(c_int), DIMENSION(:), POINTER :: tag => NULL()

   tag = lmp%extract_atom('id')
   f_lammps_extract_atom_tag_int = tag(i)
END FUNCTION f_lammps_extract_atom_tag_int

FUNCTION f_lammps_extract_atom_tag_int64(i) BIND(C)
   USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double, c_int64_t
   USE LIBLAMMPS
   USE keepstuff, ONLY : lmp
   IMPLICIT NONE
   INTEGER(c_int64_t), INTENT(IN), VALUE :: i
   INTEGER(c_int64_t) :: f_lammps_extract_atom_tag_int64
   INTEGER(c_int64_t), DIMENSION(:), POINTER :: tag => NULL()

   tag = lmp%extract_atom('id')
   f_lammps_extract_atom_tag_int64 = tag(i)
END FUNCTION f_lammps_extract_atom_tag_int64

FUNCTION f_lammps_extract_atom_type(i) BIND(C)
   USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_int
   USE LIBLAMMPS
   USE keepstuff, ONLY : lmp
   IMPLICIT NONE
   INTEGER(c_int), INTENT(IN), VALUE :: i
   INTEGER(c_int) :: f_lammps_extract_atom_type
   INTEGER(c_int), DIMENSION(:), POINTER :: atype => NULL()

   atype = lmp%extract_atom('type')
   f_lammps_extract_atom_type = atype(i)
END FUNCTION f_lammps_extract_atom_type

FUNCTION f_lammps_extract_atom_type_size() BIND(C)
   USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_int
   USE LIBLAMMPS
   USE keepstuff, ONLY : lmp
   IMPLICIT NONE
   INTEGER(c_int) :: f_lammps_extract_atom_type_size
   INTEGER(c_int), DIMENSION(:), POINTER :: atype => NULL()

   atype = lmp%extract_atom('type')
   f_lammps_extract_atom_type_size = size(atype)
END FUNCTION f_lammps_extract_atom_type_size

FUNCTION f_lammps_extract_atom_mask(i) BIND(C)
   USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_int
   USE LIBLAMMPS
   USE keepstuff, ONLY : lmp
   IMPLICIT NONE
   INTEGER(c_int), INTENT(IN), VALUE :: i
   INTEGER(c_int) :: f_lammps_extract_atom_mask
   INTEGER(c_int), DIMENSION(:), POINTER :: mask => NULL()

   mask = lmp%extract_atom('mask')
   f_lammps_extract_atom_mask = mask(i)
END FUNCTION f_lammps_extract_atom_mask

SUBROUTINE f_lammps_extract_atom_x(i, x) BIND(C)
   USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double, c_int
   USE LIBLAMMPS
   USE keepstuff, ONLY : lmp
   IMPLICIT NONE
   INTEGER(c_int), INTENT(IN), VALUE :: i
   REAL(c_double), DIMENSION(3) :: x
   REAL(c_double), DIMENSION(:,:), POINTER :: xptr => NULL()

   xptr = lmp%extract_atom('x')
   x = xptr(:,i)
END SUBROUTINE f_lammps_extract_atom_x

FUNCTION f_lammps_extract_atom_x_size(i) BIND(C)
   USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double, c_int
   USE LIBLAMMPS
   USE keepstuff, ONLY : lmp
   IMPLICIT NONE
   INTEGER(c_int), INTENT(IN), VALUE :: i
   INTEGER(c_int) :: f_lammps_extract_atom_x_size
   REAL(c_double), DIMENSION(:,:), POINTER :: xptr => NULL()

   xptr = lmp%extract_atom('x')
   f_lammps_extract_atom_x_size = SIZE(xptr, i)
END FUNCTION f_lammps_extract_atom_x_size

SUBROUTINE f_lammps_extract_atom_v(i, v) BIND(C)
   USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double, c_int
   USE LIBLAMMPS
   USE keepstuff, ONLY : lmp
   IMPLICIT NONE
   INTEGER(c_int), INTENT(IN), VALUE :: i
   REAL(c_double), DIMENSION(3) :: v
   REAL(c_double), DIMENSION(:,:), POINTER :: vptr => NULL()

   vptr = lmp%extract_atom('v')
   v = vptr(:,i)
END SUBROUTINE f_lammps_extract_atom_v

FUNCTION f_lammps_extract_atom_v_size(i) BIND(C)
   USE, INTRINSIC :: ISO_C_BINDING, ONLY : c_double, c_int
   USE LIBLAMMPS
   USE keepstuff, ONLY : lmp
   IMPLICIT NONE
   INTEGER(c_int), INTENT(IN), VALUE :: i
   INTEGER(c_int) :: f_lammps_extract_atom_v_size
   REAL(c_double), DIMENSION(:,:), POINTER :: xptr => NULL()

   xptr = lmp%extract_atom('v')
   f_lammps_extract_atom_v_size = SIZE(xptr, i)
END FUNCTION f_lammps_extract_atom_v_size