atomes 1.3.1
atomes: an atomic scale modeling tool box
Loading...
Searching...
No Matches
bonds.F90
Go to the documentation of this file.
1! This file is part of the 'atomes' software.
2!
3! 'atomes' is free software: you can redistribute it and/or modify it under the terms
4! of the GNU Affero General Public License as published by the Free Software Foundation,
5! either version 3 of the License, or (at your option) any later version.
6!
7! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
8! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9! See the GNU General Public License for more details.
10!
11! You should have received a copy of the GNU Affero General Public License along with 'atomes'.
12! If not, see <https://www.gnu.org/licenses/>
13!
14! Copyright (C) 2022-2026 by CNRS and University of Strasbourg
15!
16!>
17!! @file bonds.F90
18!! @short Bonding properties
19!! @author Sébastien Le Roux <sebastien.leroux@ipcms.unistra.fr>
20
21INTEGER (KIND=c_int) FUNCTION bonding (scf, sbf, adv, bdist, bmin, delt_ij, sfil) bind (C,NAME='bonding_')
22
23USE parameters
24
25#ifdef OPENMP
26!$ USE OMP_LIB
27#endif
28IMPLICIT NONE
29
30INTEGER (KIND=c_int), INTENT(IN) :: scf, sbf, adv, bdist
31real(kind=c_double), INTENT(IN) :: bmin, delt_ij
32CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: sfil
33INTEGER, DIMENSION(:), ALLOCATABLE :: gesp
34CHARACTER (LEN=scf) :: sfile
35DOUBLE PRECISION :: dbd
36DOUBLE PRECISION, DIMENSION(3) :: rbd
37#ifdef OPENMP
38INTEGER :: numth
39LOGICAL :: doatoms
40#endif
41TYPE geometry
42 INTEGER :: indice
43 INTEGER :: coord
44 INTEGER :: ncoord
45 INTEGER, DIMENSION(:), ALLOCATABLE :: geo
46 TYPE (geometry), POINTER :: first
47 TYPE (geometry), POINTER :: last
48 TYPE (geometry), POINTER :: next
49 TYPE (geometry), POINTER :: prev
50END TYPE geometry
51
52TYPE(geometry), DIMENSION(:), POINTER :: geot, geop
53TYPE(geometry), POINTER :: ga
54
55INTERFACE
56 LOGICAL FUNCTION allocbonds (alloc)
57 !INTEGER, INTENT(IN) :: adv
58 LOGICAL, INTENT(IN) :: alloc
59 END FUNCTION
60 LOGICAL FUNCTION allocedco (alloc)
61 LOGICAL, INTENT(IN) :: alloc
62 END FUNCTION
63 DOUBLE PRECISION FUNCTION calcdij(R12, AT1, AT2, STEP_1, STEP_2, SID)
64 DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: r12
65 INTEGER, INTENT(IN) :: at1, at2, step_1, step_2, sid
66 END FUNCTION
67 LOGICAL FUNCTION eescs ()
68 END FUNCTION
69 INTEGER FUNCTION molecules()
70 END FUNCTION
71END INTERFACE
72
73if (adv .eq. 1) then
74 if (allocated(statbd)) deallocate(statbd)
75 allocate(statbd(nsp,nsp,0:bdist), stat=err)
76 if (err .ne. 0) then
77 call show_error ("Impossible to allocate memory"//char(0), &
78 "Function: bonding"//char(0), "Table: STATBD"//char(0))
79 bonding=0
80 goto 001
81 endif
82 statbd(:,:,:)=0
83endif
84
85if (.not. allocbonds(.true.)) then
86 bonding=0
87 goto 001
88endif
89
90if (allocated(gesp)) deallocate(gesp)
91allocate(gesp(nsp), stat=err)
92if (err .ne. 0) then
93 call show_error ("Impossible to allocate memory"//char(0), &
94 "Function: bonding"//char(0), "Table: GESP"//char(0))
95 bonding=0
96 goto 001
97endif
98if (allocated(lt_geom)) deallocate(lt_geom)
99allocate(lt_geom(nsp,na), stat=err)
100if (err .ne. 0) then
101 call show_error ("Impossible to allocate memory"//char(0), &
102 "Function: bonding"//char(0), "Table: LT_GEOM"//char(0))
103 bonding=0
104 goto 001
105endif
106lt_geom(:,:) = 0
107allocate(geot(nsp), stat=err)
108if (err .ne. 0) then
109 call show_error ("Impossible to allocate memory"//char(0), &
110 "Function: bonding"//char(0), "Pointer: GEOT"//char(0))
111 bonding=0
112 goto 001
113endif
114allocate(geop(nsp), stat=err)
115if (err .ne. 0) then
116 call show_error ("Impossible to allocate memory"//char(0), &
117 "Function: bonding"//char(0), "Pointer: GEOP"//char(0))
118 bonding=0
119 goto 001
120endif
121allocate(ga, stat=err)
122if (err .ne. 0) then
123 call show_error ("Impossible to allocate memory"//char(0), &
124 "Function: bonding"//char(0), "Pointer: GA"//char(0))
125 bonding=0
126 goto 001
127endif
128do i=1, nsp
129 geot(i)%INDICE = 0
130 nullify(geot(i)%NEXT)
131 nullify(geot(i)%PREV)
132 nullify(geot(i)%FIRST)
133 nullify(geot(i)%LAST)
134 geop(i)%INDICE = 0
135 nullify(geop(i)%NEXT)
136 nullify(geop(i)%PREV)
137 nullify(geop(i)%FIRST)
138 nullify(geop(i)%LAST)
139enddo
140
141! Décompte des nombres de coordination
142! Evaluation of the coordination numbers
143#ifdef OPENMP
144numth = omp_get_max_threads()
145doatoms=.false.
146if (ns.lt.numth) then
147 if (numth .ge. 2*(ns-1)) then
148 doatoms=.true.
149 else
150 numth=ns
151 endif
152endif
153
154if (all_atoms) doatoms=.true.
155
156if (doatoms) then
157
158 if (na.lt.numth) numth=na
159 do i=1, ns
160 ! OpemMP on Atoms
161 !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) &
162 !$OMP& PRIVATE(j, l, k, m, n, o, p, DBD, RBD, GESP, GA) &
163 !$OMP& SHARED(NUMTH, NS, i, NA, NCELLS, LOT, CONTJ, VOISJ, LA_COUNT, STATBD, adv, bmin, delt_ij)
164 !$OMP DO SCHEDULE(STATIC,NA/NUMTH)
165 do j=1, na
166 k = lot(j)
167 l = contj(j,i)
168 do m=1, l
169 n = voisj(m,j,i)
170 o = lot(n)
171 la_count(j,o,i)=la_count(j,o,i)+1
172 if (adv .eq. 1) then
173 if (ncells .gt. 1) then
174 dbd = calcdij(rbd, j, n, i, i, i)
175 else
176 dbd = calcdij(rbd, j, n, i, i, 1)
177 endif
178 dbd = sqrt(dbd)
179 p =int((dbd-bmin)/delt_ij)
180 !$OMP ATOMIC
181 statbd(k,o,p)=statbd(k,o,p) + 1
182 endif
183 enddo
184 enddo
185 !$OMP END DO NOWAIT
186 !$OMP END PARALLEL
187 enddo
188else
189 ! OpemMP on MD steps
190 !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) &
191 !$OMP& PRIVATE(i, j, k, l, m, n, o, p, DBD, RBD, GESP, GA) &
192 !$OMP& SHARED(NUMTH, NS, NA, NCELLS, LOT, CONTJ, VOISJ, LA_COUNT, STATBD, adv, bmin, delt_ij)
193 !$OMP DO SCHEDULE(STATIC,NS/NUMTH)
194#endif
195 do i=1, ns
196 do j=1, na
197 k = lot(j)
198 l = contj(j,i)
199 do m=1, l
200 n = voisj(m,j,i)
201 o = lot(n)
202 la_count(j,o,i)=la_count(j,o,i)+1
203 if (adv .eq. 1) then
204 if (ncells .gt. 1) then
205 dbd = calcdij(rbd, j, n, i, i, i)
206 else
207 dbd = calcdij(rbd, j, n, i, i, 1)
208 endif
209 dbd = sqrt(dbd)
210 p =int((dbd-bmin)/delt_ij)
211 !$OMP ATOMIC
212 statbd(k,o,p)=statbd(k,o,p) + 1
213 endif
214 enddo
215 enddo
216 enddo
217#ifdef OPENMP
218 !$OMP END DO NOWAIT
219 !$OMP END PARALLEL
220endif
221#endif
222
223if (sbf .eq. 1 .and. scf.gt.0) then
224 do i=1, scf
225 sfile(i:i) = sfil(i)
226 enddo
227 open(unit=100, file=sfile, action="write", status='unknown')
228 do i=1, ns
229 write (100, '("Configuration N°",i6)') i
230 write (100, *)
231 do j=1, na
232 write (100, '(A2,i6)') tl(lot(j)), j
233 write (100, '(4x,"Nc[tot]= ",i2)') contj(j,i)
234 do k=1, nsp
235 write (100, '(5x,"Nc[",A2,"]= ",i2)') tl(k), la_count(j,k,i)
236 do l=1, contj(j,i)
237 if (lot(voisj(l,j,i)) .eq. l) then
238 if (ncells .gt. 1) then
239 dbd = calcdij(rbd, j, voisj(l,j,i), i, i, i)
240 else
241 dbd = calcdij(rbd, j, voisj(l,j,i), i, i, 1)
242 endif
243 write (100, '(10x,A2,1x,i6,1x,"at",1x,f7.5,1x,"Å")') tl(k), voisj(l,j,i), sqrt(dbd)
244 endif
245 enddo
246 enddo
247 enddo
248 enddo
249 close(100)
250endif
251
252do i=1, ns
253 do j=1, na
254 k = lot(j)
255 l = 0
256 do m=1, nsp
257 n = la_count(j,m,i)
258 l = l + n
259 gesp(m) = n
262 enddo
263 ga => geop(k)
264 m = newcoord(1, l, ga, nsp, gesp)
265 ga => geot(k)
266 n = newcoord(0, l, ga, nsp, gesp)
267 if (m > 0 .and. n > 0) then
268 lt_geom(k,n) = 1
269 togl((i-1)*na+j) = m
270 tigl((i-1)*na+j) = n
271 else
272 bonding=0
273 goto 001
274 endif
275 enddo
276enddo
277
278n=0
279m=0
280
281do i=1, nsp
282 j = geop(i)%LAST%INDICE
283 n = n + j
284 ga => geop(i)%FIRST
285 do k=1, j
286 m = max(m, ga%COORD)
287 if (k < j) ga => ga%NEXT
288 enddo
289enddo
290
291call send_coord_opengl (1, ns*na, 0, 0, n, togl)
292if (allocated(togl)) deallocate(togl)
293
294o = 0
295n = 0
296m = 20
297do i=1, nsp
298 j = geot(i)%LAST%INDICE
299 o = o + j
300 ga => geot(i)%FIRST
301 do k=1, j
302 n = max(n, ga%COORD)
303 m = min(m, ga%COORD)
304 if (k < j) ga => ga%NEXT
305 enddo
306enddo
307
308call send_coord_opengl (0, ns*na, m, n, o, tigl)
309
310do i=1, nsp
311 j = geot(i)%LAST%INDICE
312 if (allocated(lgsa)) deallocate(lgsa)
313 allocate(lgsa(j), stat=err)
314 if (err .ne. 0) then
315 call show_error ("Impossible to allocate memory"//char(0), &
316 "Function: bonding"//char(0), "Table: LGSA"//char(0))
317 bonding=0
318 goto 001
319 endif
320 ga => geot(i)%FIRST
321 do k=1, j
322 lgsa(k) = ga%COORD
323 if (k < j) ga => ga%NEXT
324 enddo
325 call init_menu_coordinations (0, i-1, j, lgsa)
326enddo
327
328if (allocated(lgsa)) deallocate(lgsa)
329if (allocated(tigl)) deallocate(tigl)
330do i=1, nsp
332 do j=1, nsp
334 enddo
335enddo
336
337do i=1, nsp
338 do j=1, nsp
339 mac(j)=ma_count(i,j)
340 enddo
341 call coordout (i-1, sa_count(i), mac, geop(i)%LAST%INDICE)
342enddo
343
344do i=1, nsp
345 j = geop(i)%LAST%INDICE
346 if (allocated(ngsa)) deallocate(ngsa)
347 allocate(ngsa(j), stat=err)
348 if (err .ne. 0) then
349 call show_error ("Impossible to allocate memory"//char(0), &
350 "Function: bonding"//char(0), "Table: NGSA"//char(0))
351 bonding=0
352 goto 001
353 endif
354 if (allocated(lgsa)) deallocate(lgsa)
355 allocate(lgsa(j), stat=err)
356 if (err .ne. 0) then
357 call show_error ("Impossible to allocate memory"//char(0), &
358 "Function: bonding"//char(0), "Table: LGSA"//char(0))
359 bonding=0
360 goto 001
361 endif
362 ga => geop(i)%FIRST
363 call allocate_partial_geo (i-1, j)
364 do k=1, j
365 lgsa(k)=ga%COORD
366 ngsa(k)=ga%NCOORD
367 do l=1, nsp
368 gesp(l) = ga%GEO(l)
369 enddo
370 call partial_geo_out (i-1, k-1, nsp, gesp)
371 if (k .lt. j) ga => ga%NEXT
372 enddo
373 call envout (i-1, j, ngsa)
374 call init_menu_coordinations (1, i-1, j, lgsa)
375 if (allocated(ngsa)) deallocate(ngsa)
376 if (allocated(lgsa)) deallocate(lgsa)
377enddo
378call clean_geom ()
379if (allocated(gesp)) deallocate(gesp)
380
381if (nsp .eq. 2) then
382 do i=1, nsp
383 do j=1, nsp
384 mac(j)=ma_count(i,j)
385 enddo
386 call warren_cowley_out (i-1, mac)
387 enddo
388 do i=1, nsp
389 do j=1, nsp
390 mac(j)=ma_count(i,j)
391 enddo
392 call cargill_spaepen_out (i-1, mac)
393 enddo
394endif
395
396if (adv .eq. 1) then
397 if (.not.eescs()) then
398 bonding=0
399 goto 001
400 endif
401 do i=1, nsp
402 do j=1, nsp
403 eabl(j)=edgeta(i,j)
404 cabl(j)=corta(i,j)
405 dabl(j)=defta(i,j)
406 etabl(j)=etypea(i,j)
407 ctabl(j)=ctypea(i,j)
408 dtabl(j)=detypea(i,j)
409 tdtabl(j)=tda(i,j)
410 ectabl(j)=etda(i,j)
411 enddo
412 call tetraout (i-1, eabl, cabl, dabl, etabl, ctabl, dtabl, tdtabl, ectabl)
413 enddo
414endif
415if (.not.allocedco(.false.)) then
416 bonding=0
417 goto 001
418endif
419
420if (adv .eq. 1) then
421
422 if (allocated(eabl)) deallocate(eabl)
423 allocate(eabl(0:bdist), stat=err)
424 if (err .ne. 0) then
425 call show_error ("Impossible to allocate memory"//char(0), &
426 "Function: bonding"//char(0), "Table: EABL"//char(0))
427 bonding=0
428 goto 001
429 endif
430 do k=0, bdist
431 eabl(k) = 0.0
432 enddo
433 l=0
434 do i=1, nsp
435 do j=1, nsp
436 m=0
437 do k=0, bdist
438 m = m + statbd(i,j,k)
439 enddo
440 if (m .ne. 0) then
441 do k=0, bdist
442 eabl(k) = 100.0*statbd(i,j,k)/m
443 enddo
444 call save_curve (bdist+1, eabl, l, idbd)
445 else
446 call save_curve (0, eabl, l, idbd)
447 endif
448 l=l+1
449 enddo
450 enddo
451 if (allocated(statbd)) deallocate(statbd)
452endif
453
454if (.not.allocbonds(.false.)) then
455 bonding=0
456 goto 001
457endif
458
459bonding=1
460
461001 continue
462
463CONTAINS
464
465INTEGER FUNCTION newcoord (ID, GEO, GP, NP, GSP)
466
467INTEGER, INTENT(IN) :: id, geo, np
468INTEGER, DIMENSION(NP), INTENT(IN) :: gsp
469TYPE(geometry), INTENT(INOUT), POINTER :: gp
470INTEGER :: ab, ac, ad
471LOGICAL :: newgeo=.false.
472TYPE(geometry), POINTER :: gm
473
474if (gp%INDICE .eq. 0) then
475 gp%INDICE = 1
476 gp%COORD = geo
477 gp%NCOORD = 1
478 gp%LAST => gp
479 gp%FIRST => gp
480 newcoord=gp%INDICE
481 if (id .eq. 1) then
482 allocate(gp%GEO(np))
483 do ab=1, np
484 gp%GEO(ab) = gsp(ab)
485 enddo
486 endif
487else
488
489 gp => gp%FIRST
490 ac = gp%LAST%INDICE
491 newgeo=.true.
492 if (id .eq. 0) then
493 do ab=1, ac
494 if (gp%COORD .eq. geo) then
495 newgeo=.false.
496 newcoord = gp%INDICE
497 exit
498 endif
499 if (ab .lt. ac) gp => gp%NEXT
500 enddo
501 else
502 do ab=1, ac
503 if (gp%COORD .eq. geo) then
504 newgeo=.false.
505 do ad=1, np
506 if (gp%GEO(ad) .ne. gsp(ad)) then
507 newgeo=.true.
508 exit
509 endif
510 enddo
511 if (.not.newgeo) exit
512 endif
513 if (ab .lt. ac) gp => gp%NEXT
514 enddo
515 endif
516 if (newgeo) then
517 allocate(gm, stat=err)
518 if (err .ne. 0) then
519 call show_error ("Impossible to allocate memory"//char(0), &
520 "Function: NEWCOORD"//char(0), "Pointer: GM"//char(0))
521 newcoord=0
522 goto 001
523 endif
524 nullify(gm%FIRST)
525 nullify(gm%NEXT)
526 nullify(gm%LAST)
527 nullify(gm%PREV)
528 gm%FIRST => gp%FIRST
529 gp%NEXT => gm
530 gp%FIRST%LAST => gm
531 gp%LAST => gm
532 gm%LAST => gm
533 gm%PREV => gp
534 gm%INDICE = gp%INDICE+1
535 gm%COORD = geo
536 gm%NCOORD = 1
537 newcoord = gm%INDICE
538 if (id .eq. 1) then
539 allocate(gm%GEO(np))
540 do ab=1, np
541 gm%GEO(ab) = gsp(ab)
542 enddo
543 endif
544 gp => gm
545 else
546 newcoord = gp%INDICE
547 gp%NCOORD = gp%NCOORD+1
548 endif
549
550endif
551
552001 continue
553
554END FUNCTION
555
556SUBROUTINE clean_geom ()
557
558INTEGER :: ab, ac, ad
559
560do ab=1, nsp
561 ga => geot(ab)%LAST
562 ac=ga%INDICE
563 do ad=1, ac-1
564 ga => ga%PREV
565 deallocate (ga%NEXT)
566 enddo
567enddo
568deallocate(geot)
569
570do ab=1, nsp
571 ga => geop(ab)%LAST
572 ac=ga%INDICE
573 do ad=1, ac-1
574 ga => ga%PREV
575 deallocate (ga%NEXT)
576 enddo
577enddo
578deallocate(geop)
579
580END SUBROUTINE
581
582END FUNCTION
583
584SUBROUTINE sendcuts (cspa, cspb, cutab) bind (C,NAME='sendcuts_')
585
586USE parameters
587
588IMPLICIT NONE
589
590INTEGER (KIND=c_int), INTENT(IN) :: cspa, cspb
591real(kind=c_double), INTENT(IN) :: cutab
592
593if (cspa .eq. nsp) then
594 gr_cutoff=cutab**2
595else
596 gr_cut(cspa+1,cspb+1) = cutab**2
597endif
598
599END SUBROUTINE
600
601REAL (KIND=c_double) FUNCTION fdmax(use_pbc) bind (C,NAME='fdmax_')
602
603USE parameters
604
605IMPLICIT NONE
606
607INTEGER (KIND=c_int), INTENT(IN) :: use_pbc
608
609if (use_pbc .eq. 0) then
610 do l=1,3
611 pmin(l) = fullpos(1,l,1)
612 pmax(l) = pmin(l)
613 enddo
614 do i=1, ns
615 if (i .eq. 1) then
616 k = 2
617 else
618 k = 1
619 endif
620 do j=k, na
621 do l=1,3
622 pmin(l) = min(pmin(l), fullpos(j,l,i))
623 pmax(l) = max(pmax(l), fullpos(j,l,i))
624 enddo
625 enddo
626 enddo
627 fdmax = 0.0d0
628 do l=1,3
629 fdmax = fdmax + (pmax(l)-pmin(l))**2
630 enddo
631 fdmax = sqrt(fdmax)
632else
633 if (the_box(1)%CUBIC) then
634 fdmax = sqrt(2.0)*the_box(1)%minv/2.0
635 else
636 fdmax = the_box(1)%minv/2.0
637 endif
638 if (ncells .gt. 1) then
639 do l=2, ncells
640 if (the_box(l)%CUBIC) then
641 fdmax = min(fdmax,sqrt(2.0)*the_box(l)%minv/2.0)
642 else
643 fdmax = min(fdmax, the_box(l)%minv/2.0)
644 endif
645 enddo
646 endif
647
648endif
649
650END FUNCTION
651
652REAL (KIND=c_double) FUNCTION fkmin(use_pbc) bind (C,NAME='fkmin_')
653
654USE parameters
655
656IMPLICIT NONE
657
658INTEGER (KIND=c_int), INTENT(IN) :: use_pbc
659
660if (use_pbc .eq. 0) then
661 fkmin = 0.0
662else
663 fkmin = 0.0
664 do l=1, ncells
665 fkmin = fkmin + the_box(l)%minr
666 enddo
667 fkmin = fkmin / ncells
668endif
669
670END FUNCTION
671
672REAL (KIND=c_double) FUNCTION oglmax() bind (C,NAME='oglmax_')
673
674USE parameters
675
676IMPLICIT NONE
677
678DOUBLE PRECISION :: maxd
679DOUBLE PRECISION, DIMENSION(3) :: dmax
680
681do l=1,3
682 pmin(l) = fullpos(1,l,1)
683 pmax(l) = pmin(l)
684enddo
685do i=1, ns
686 if (i .eq. 1) then
687 k = 2
688 else
689 k = 1
690 endif
691 do j=k, na
692 do l=1,3
693 pmin(l) = min(pmin(l), fullpos(j,l,i))
694 pmax(l) = max(pmax(l), fullpos(j,l,i))
695 enddo
696 enddo
697enddo
698
699allocate (nfullpos(2,3,1))
700do l=1, 3
701 nfullpos(1,l,1) = pmin(l)
702 nfullpos(2,l,1) = pmax(l)
703enddo
704call calcrij (1, 2, -2, 1, 1)
705deallocate (nfullpos)
706
707if (pbc) then
708 oglmax = sqrt(dij)
709 dmax(:) = 0.0d0
710 maxd = 0.0d0
711 do l=1, ncells
712 do m=1, 3
713 dmax(m) = max(dmax(m), the_box(l)%modv(m)*the_box(l)%modv(m))
714 enddo
715 enddo
716 maxd = sqrt(dmax(1)+dmax(2)+dmax(3))
717 if (oglmax < maxd) oglmax = maxd;
718else
719 oglmax=sqrt(dij)
720endif
721oglmax = 2.0*oglmax
722if (oglmax .lt. 10.0) oglmax = 10.0
723
724END FUNCTION
logical function allocedco(alloc)
logical function allocbonds(alloc)
integer(kind=c_int) function bonding(scf, sbf, adv, bdist, bmin, delt_ij, sfil)
Definition bonds.F90:22
subroutine sendcuts(cspa, cspb, cutab)
Definition bonds.F90:585
real(kind=c_double) function oglmax()
Definition bonds.F90:673
real(kind=c_double) function fdmax(use_pbc)
Definition bonds.F90:602
real(kind=c_double) function fkmin(use_pbc)
Definition bonds.F90:653
logical function eescs()
Definition escs.F90:22
#define min(a, b)
Definition global.h:93
#define max(a, b)
Definition global.h:92
action
Definition glview.h:198
void show_error(char *error, int val, GtkWidget *win)
show error message
Definition interface.c:299
integer(kind=c_int) function molecules(frag_and_mol, allbonds)
double precision, dimension(:,:,:), allocatable fullpos
integer, dimension(:,:,:), allocatable statbd
integer ncells
double precision, dimension(:,:,:), allocatable nfullpos
double precision, dimension(:), allocatable tdtabl
integer, dimension(:), allocatable lgsa
integer, dimension(:,:), allocatable contj
double precision, dimension(:,:), allocatable ctypea
character(len=2), dimension(:), allocatable tl
double precision, dimension(:,:), allocatable ma_count
double precision, dimension(:), allocatable ctabl
double precision, dimension(3) pmax
integer, dimension(:), allocatable nbspbs
double precision, dimension(:,:), allocatable etypea
double precision, dimension(:), allocatable eabl
double precision gr_cutoff
integer, dimension(:,:), allocatable corta
integer idbd
integer, dimension(:,:,:), allocatable la_count
integer err
type(lattice), dimension(:), allocatable, target the_box
double precision, dimension(:), allocatable mac
integer, dimension(:), allocatable ngsa
double precision, dimension(:), allocatable cabl
double precision, dimension(3) pmin
integer, dimension(:,:), allocatable edgeta
integer, dimension(:,:,:), allocatable voisj
integer, dimension(:,:), allocatable tda
double precision, dimension(:,:), allocatable etda
double precision dij
integer, dimension(:,:), allocatable defta
double precision, dimension(:), allocatable ectabl
double precision, dimension(:,:), allocatable gr_cut
double precision, dimension(:), allocatable etabl
double precision, dimension(:), allocatable dabl
double precision, dimension(:), allocatable sa_count
double precision, dimension(:), allocatable dtabl
integer, dimension(:), allocatable lot
logical pbc
double precision, dimension(:,:), allocatable detypea
integer nsp
integer, dimension(:,:), allocatable lt_geom
integer, dimension(:), allocatable tigl
integer, dimension(:), allocatable togl
double precision function calcdij(r12, at1, at2, step_1, step_2, sid)
Definition utils.F90:185
subroutine calcrij(at1, at2, step_1, step_2, sid)
Definition utils.F90:115