atomes 1.1.15
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-2024 by CNRS and University of Strasbourg
15!
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 (adv .eq. 1) then
382 if (.not.eescs()) then
383 bonding=0
384 goto 001
385 endif
386 do i=1, nsp
387 do j=1, nsp
388 eabl(j)=edgeta(i,j)
389 cabl(j)=corta(i,j)
390 dabl(j)=defta(i,j)
391 etabl(j)=etypea(i,j)
392 ctabl(j)=ctypea(i,j)
393 dtabl(j)=detypea(i,j)
394 tdtabl(j)=tda(i,j)
395 ectabl(j)=etda(i,j)
396 enddo
397 call tetraout (i-1, eabl, cabl, dabl, etabl, ctabl, dtabl, tdtabl, ectabl)
398 enddo
399endif
400if (.not.allocedco(.false.)) then
401 bonding=0
402 goto 001
403endif
404
405if (adv .eq. 1) then
406
407 if (allocated(eabl)) deallocate(eabl)
408 allocate(eabl(0:bdist), stat=err)
409 if (err .ne. 0) then
410 call show_error ("Impossible to allocate memory"//char(0), &
411 "Function: bonding"//char(0), "Table: EABL"//char(0))
412 bonding=0
413 goto 001
414 endif
415 do k=0, bdist
416 eabl(k) = 0.0
417 enddo
418 l=0
419 do i=1, nsp
420 do j=1, nsp
421 m=0
422 do k=0, bdist
423 m = m + statbd(i,j,k)
424 enddo
425 if (m .ne. 0) then
426 do k=0, bdist
427 eabl(k) = 100.0*statbd(i,j,k)/m
428 enddo
429 call save_curve (bdist+1, eabl, l, idbd)
430 else
431 call save_curve (0, eabl, l, idbd)
432 endif
433 l=l+1
434 enddo
435 enddo
436 if (allocated(statbd)) deallocate(statbd)
437endif
438
439if (.not.allocbonds(.false.)) then
440 bonding=0
441 goto 001
442endif
443
444bonding=1
445
446001 continue
447
448CONTAINS
449
450INTEGER FUNCTION newcoord (ID, GEO, GP, NP, GSP)
451
452INTEGER, INTENT(IN) :: id, geo, np
453INTEGER, DIMENSION(NP), INTENT(IN) :: gsp
454TYPE(geometry), INTENT(INOUT), POINTER :: gp
455INTEGER :: ab, ac, ad
456LOGICAL :: newgeo=.false.
457TYPE(geometry), POINTER :: gm
458
459if (gp%INDICE .eq. 0) then
460 gp%INDICE = 1
461 gp%COORD = geo
462 gp%NCOORD = 1
463 gp%LAST => gp
464 gp%FIRST => gp
465 newcoord=gp%INDICE
466 if (id .eq. 1) then
467 allocate(gp%GEO(np))
468 do ab=1, np
469 gp%GEO(ab) = gsp(ab)
470 enddo
471 endif
472else
473
474 gp => gp%FIRST
475 ac = gp%LAST%INDICE
476 newgeo=.true.
477 if (id .eq. 0) then
478 do ab=1, ac
479 if (gp%COORD .eq. geo) then
480 newgeo=.false.
481 newcoord = gp%INDICE
482 exit
483 endif
484 if (ab .lt. ac) gp => gp%NEXT
485 enddo
486 else
487 do ab=1, ac
488 if (gp%COORD .eq. geo) then
489 newgeo=.false.
490 do ad=1, np
491 if (gp%GEO(ad) .ne. gsp(ad)) then
492 newgeo=.true.
493 exit
494 endif
495 enddo
496 if (.not.newgeo) exit
497 endif
498 if (ab .lt. ac) gp => gp%NEXT
499 enddo
500 endif
501 if (newgeo) then
502 allocate(gm, stat=err)
503 if (err .ne. 0) then
504 call show_error ("Impossible to allocate memory"//char(0), &
505 "Function: NEWCOORD"//char(0), "Pointer: GM"//char(0))
506 newcoord=0
507 goto 001
508 endif
509 nullify(gm%FIRST)
510 nullify(gm%NEXT)
511 nullify(gm%LAST)
512 nullify(gm%PREV)
513 gm%FIRST => gp%FIRST
514 gp%NEXT => gm
515 gp%FIRST%LAST => gm
516 gp%LAST => gm
517 gm%LAST => gm
518 gm%PREV => gp
519 gm%INDICE = gp%INDICE+1
520 gm%COORD = geo
521 gm%NCOORD = 1
522 newcoord = gm%INDICE
523 if (id .eq. 1) then
524 allocate(gm%GEO(np))
525 do ab=1, np
526 gm%GEO(ab) = gsp(ab)
527 enddo
528 endif
529 gp => gm
530 else
531 newcoord = gp%INDICE
532 gp%NCOORD = gp%NCOORD+1
533 endif
534
535endif
536
537001 continue
538
539END FUNCTION
540
541SUBROUTINE clean_geom ()
542
543INTEGER :: ab, ac, ad
544
545do ab=1, nsp
546 ga => geot(ab)%LAST
547 ac=ga%INDICE
548 do ad=1, ac-1
549 ga => ga%PREV
550 deallocate (ga%NEXT)
551 enddo
552enddo
553deallocate(geot)
554
555do ab=1, nsp
556 ga => geop(ab)%LAST
557 ac=ga%INDICE
558 do ad=1, ac-1
559 ga => ga%PREV
560 deallocate (ga%NEXT)
561 enddo
562enddo
563deallocate(geop)
564
565END SUBROUTINE
566
567END FUNCTION
568
569SUBROUTINE sendcuts (cspa, cspb, cutab) bind (C,NAME='sendcuts_')
570
571USE parameters
572
573IMPLICIT NONE
574
575INTEGER (KIND=c_int), INTENT(IN) :: cspa, cspb
576real(kind=c_double), INTENT(IN) :: cutab
577
578if (cspa .eq. nsp) then
579 gr_cutoff=cutab**2
580else
581 gr_cut(cspa+1,cspb+1) = cutab**2
582endif
583
584END SUBROUTINE
585
586REAL (KIND=c_double) FUNCTION fdmax(use_pbc) bind (C,NAME='fdmax_')
587
588USE parameters
589
590IMPLICIT NONE
591
592INTEGER (KIND=c_int), INTENT(IN) :: use_pbc
593
594if (use_pbc .eq. 0) then
595 do l=1,3
596 pmin(l) = fullpos(1,l,1)
597 pmax(l) = pmin(l)
598 enddo
599 do i=1, ns
600 if (i .eq. 1) then
601 k = 2
602 else
603 k = 1
604 endif
605 do j=k, na
606 do l=1,3
607 pmin(l) = min(pmin(l), fullpos(j,l,i))
608 pmax(l) = max(pmax(l), fullpos(j,l,i))
609 enddo
610 enddo
611 enddo
612 fdmax = 0.0d0
613 do l=1,3
614 fdmax = fdmax + (pmax(l)-pmin(l))**2
615 enddo
616 fdmax = sqrt(fdmax)
617else
618 if (the_box(1)%CUBIC) then
619 fdmax = sqrt(2.0)*the_box(1)%minv/2.0
620 else
621 fdmax = the_box(1)%minv/2.0
622 endif
623 if (ncells .gt. 1) then
624 do l=2, ncells
625 if (the_box(l)%CUBIC) then
626 fdmax = min(fdmax,sqrt(2.0)*the_box(l)%minv/2.0)
627 else
628 fdmax = min(fdmax, the_box(l)%minv/2.0)
629 endif
630 enddo
631 endif
632
633endif
634
635END FUNCTION
636
637REAL (KIND=c_double) FUNCTION fkmin(use_pbc) bind (C,NAME='fkmin_')
638
639USE parameters
640
641IMPLICIT NONE
642
643INTEGER (KIND=c_int), INTENT(IN) :: use_pbc
644
645if (use_pbc .eq. 0) then
646 fkmin = 0.0
647else
648 fkmin = 0.0
649 do l=1, ncells
650 fkmin = fkmin + the_box(l)%minr
651 enddo
652 fkmin = fkmin / ncells
653endif
654
655END FUNCTION
656
657REAL (KIND=c_double) FUNCTION oglmax() bind (C,NAME='oglmax_')
658
659USE parameters
660
661IMPLICIT NONE
662
663DOUBLE PRECISION :: dmax
664
665do l=1,3
666 pmin(l) = fullpos(1,l,1)
667 pmax(l) = pmin(l)
668enddo
669do i=1, ns
670 if (i .eq. 1) then
671 k = 2
672 else
673 k = 1
674 endif
675 do j=k, na
676 do l=1,3
677 pmin(l) = min(pmin(l), fullpos(j,l,i))
678 pmax(l) = max(pmax(l), fullpos(j,l,i))
679 enddo
680 enddo
681enddo
682
683allocate (nfullpos(2,3,1))
684do l=1, 3
685 nfullpos(1,l,1) = pmin(l)
686 nfullpos(2,l,1) = pmax(l)
687enddo
688call calcrij (1, 2, -2, 1, 1)
689deallocate (nfullpos)
690
691if (pbc) then
692 oglmax = sqrt(dij)
693 dmax = 0.0d0
694 do l=1, ncells
695 dmax = max(dmax, the_box(l)%maxv)
696 enddo
697 if (oglmax < dmax) oglmax = dmax*3.0;
698else
699 oglmax=2.0*sqrt(dij)
700endif
701
702if (oglmax .lt. 10.0) oglmax = 10.0
703
704END 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:570
real(kind=c_double) function oglmax()
Definition bonds.F90:658
real(kind=c_double) function fdmax(use_pbc)
Definition bonds.F90:587
real(kind=c_double) function fkmin(use_pbc)
Definition bonds.F90:638
logical function eescs()
Definition escs.F90:22
#define min(a, b)
Definition global.h:81
#define max(a, b)
Definition global.h:80
action
Definition glview.h:189
void show_error(char *error, int val, GtkWidget *win)
show error message
Definition interface.c:293
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