Line data Source code
1 : !!****m* ABINIT/m_pretty_rec
2 : !! NAME
3 : !! m_pretty_rec
4 : !!
5 : !! FUNCTION
6 : !! This module provides some minor functions applied in the
7 : !! recursion
8 : !!
9 : !! COPYRIGHT
10 : !! Copyright (C) 2002-2026 ABINIT group (XG)
11 : !! This file is distributed under the terms of the
12 : !! GNU General Public License, see ~abinit/COPYING
13 : !! or http://www.gnu.org/copyleft/gpl.txt .
14 : !! For the initials of contributors, see ~abinit/doc/developers/contributors.txt.
15 : !!
16 : !! NOTES
17 : !!
18 : !!
19 : !! SOURCE
20 :
21 : #if defined HAVE_CONFIG_H
22 : #include "config.h"
23 : #endif
24 :
25 : #include "abi_common.h"
26 :
27 :
28 : MODULE m_pretty_rec
29 :
30 : use defs_basis
31 : use m_abicore
32 :
33 : implicit none
34 :
35 : private
36 :
37 : public :: prtwork ! calculate the work done during recursion
38 :
39 : interface prtwork
40 : module procedure prtworksim
41 : module procedure prtworksiRe
42 : module procedure prtworkadv
43 : end interface prtwork
44 :
45 : CONTAINS !===========================================================
46 : !!***
47 :
48 : !!****f* m_pretty_rec/prtworksim
49 : !! NAME
50 : !! prtworksim
51 : !!
52 : !! FUNCTION
53 : !! Calculate the work done during recursion
54 : !!
55 : !! INPUTS
56 : !! counter
57 : !!
58 : !! SIDE EFFECTS
59 : !!
60 : !! OUTPUT
61 : !! SOURCE
62 :
63 17280 : subroutine prtworksim(work_now)
64 :
65 : !Arguments ------------------------------------
66 : ! scalars
67 : integer,intent(in) :: work_now
68 : ! arrays
69 : !Local ---------------------------
70 : integer,save :: work_done=0
71 : integer :: ii,pt
72 : character(500) :: msg
73 : ! *********************************************************************
74 17280 : if(mod(work_done-work_now,5)==0 .and. work_now/=work_done .and. work_now <105) then
75 646 : work_done = work_now
76 646 : pt = work_done/5
77 15504 : write(msg,'(a,23a,i3,a)')'work done:',('-',ii=1,pt),(' ',ii=1,23-pt),work_done,'%'
78 646 : call wrtout(std_out,msg,'COLL')
79 : endif
80 :
81 17280 : end subroutine prtworksim
82 : !!***
83 :
84 : !!****f* m_pretty_rec/prtworksiRe
85 : !! NAME
86 : !! prtworksiRe
87 : !!
88 : !! FUNCTION
89 : !! Calculate the work done during recursion
90 : !!
91 : !! INPUTS
92 : !! counter
93 : !!
94 : !! SIDE EFFECTS
95 : !!
96 : !! OUTPUT
97 : !! SOURCE
98 :
99 189 : subroutine prtworksiRe(work_now)
100 :
101 : !Arguments ------------------------------------
102 : ! scalars
103 : real(dp),intent(in) :: work_now
104 : ! arrays
105 : !Local ---------------------------
106 : integer,save :: work_done=0
107 : integer :: ii,pt,work_now_int
108 : character(500) :: msg
109 : ! *********************************************************************
110 189 : work_now_int = int(work_now)
111 189 : if(mod(work_done-work_now_int,5)==0 .and. work_now_int/=work_done .and. work_now_int <105) then
112 42 : work_done = work_now_int
113 42 : pt = work_done/5
114 1008 : write(msg,'(a,23a,i3,a)')'work done:',('-',ii=1,pt),(' ',ii=1,23-pt),work_done,'%'
115 42 : call wrtout(std_out,msg,'COLL')
116 : endif
117 :
118 189 : end subroutine prtworksiRe
119 : !!***
120 :
121 : !!****f* m_pretty_rec/prtworkadv
122 : !! NAME
123 : !! prtworkadv
124 : !!
125 : !! FUNCTION
126 : !! Calculate the work done during recursion
127 : !!
128 : !! INPUTS
129 : !! counter
130 : !!
131 : !! SIDE EFFECTS
132 : !!
133 : !! OUTPUT
134 : !! SOURCE
135 :
136 0 : subroutine prtworkadv(work_now,adv)
137 :
138 : !Arguments ------------------------------------
139 : ! scalars
140 : integer,intent(in) :: work_now
141 : character(1),intent(in) ::adv
142 : ! arrays
143 : !Local ---------------------------
144 : integer,save :: work_done=0, first_wk=0
145 : ! *********************************************************************
146 : if(adv /= 'no' .or. adv/='yes' ) then
147 0 : write(std_out, "(a,i3,i3)")'nn'
148 : end if
149 0 : if(work_now >=100 .and. first_wk ==0) return
150 0 : if(work_now == 0 .and. first_wk==0) then
151 0 : write(std_out,"(a)")' work done: '
152 0 : first_wk=1
153 : end if
154 0 : if(mod(work_done-work_now,10)==0 .and. work_now/=work_done) then
155 0 : work_done = work_now
156 : !write(std_out, "(a,$)")'|'
157 0 : write(std_out, "(a,i3,i3)")'work_done',work_done,work_now
158 0 : if(work_done == 100) then
159 0 : write(std_out,"(a)")' '
160 0 : first_wk = 0
161 0 : work_done = 0
162 : end if
163 : endif
164 :
165 : end subroutine prtworkadv
166 : !!***
167 :
168 : END MODULE m_pretty_rec
169 : !!***
|