V3FIT
All Classes Namespaces Files Functions Variables Enumerations Macros Pages
printout.f
1  SUBROUTINE printout(i0, delt0, w0, lscreen)
2  USE vmec_main
3  USE realspace
4  USE xstuff
5 #ifdef _HBANGLE
6  USE angle_constraints, ONLY: getrz
7 #endif
8  USE parallel_include_module
9  USE parallel_vmec_module, ONLY: copylastntype
10  USE vmec_params, ONLY: ntmax
11  IMPLICIT NONE
12 C-----------------------------------------------
13 C D u m m y A r g u m e n t s
14 C-----------------------------------------------
15  INTEGER :: i0
16  REAL(dp) :: delt0, w0
17  LOGICAL :: lscreen
18 C-----------------------------------------------
19 C L o c a l P a r a m e t e r s
20 C-----------------------------------------------
21  CHARACTER(LEN=*), PARAMETER ::
22 #ifdef _HBANGLE
23  1 iter_line = " ITER FSQRHO FSQ(m=0) FSQL ",
24  1 iter_lines= " ITER FSQRHO FSQ(m=0) FSQL ",
25  2 fsq_line = " fsqrho fsq(m=0) fsql DELT ",
26  2 fsq_lines = " fsqrho fsq(m=0) fsql DELT ",
27  4 raxis_line = " RAX(v=0) ",
28 #else
29  1 iter_line = " ITER FSQR FSQZ FSQL ",
30  2 fsq_line = " fsqr fsqz fsql DELT ",
31  3 iter_lines = iter_line, fsq_lines = fsq_line,
32  4 raxis_line = "RAX(v=0) ",
33 #endif
34  3 delt_line = " DELT ", !J.Geiger 20101118
35  5 zaxis_line = " ZAX(v=0) "
36 C-----------------------------------------------
37 C L o c a l V a r i a b l e s
38 C-----------------------------------------------
39  REAL(dp) :: betav, w, avm, den, tbroadon, tbroadoff
40  REAL(dp), ALLOCATABLE :: bcastbuf(:)
41  CHARACTER(len=LEN(iter_line) + LEN(fsq_line) + 1 LEN(raxis_line) + LEN(zaxis_line)) ::
42  2 print_line
43  INTEGER :: i, j, k, l, lk
44 C-----------------------------------------------
45  IF(grank .GE. nranks) RETURN
46 
47 #ifdef _ANIMEC
48  betav = (2*wper + wpar)/(3*wb)
49 #else
50  betav = wp/wb
51 #endif
52  w = w0*twopi*twopi
53  den = zero
54  specw(1) = one
55 
56  IF(parvmec) THEN
57  CALL copylastntype(pxstore, pgc)
58  ELSE
59  gc = xstore
60  END IF
61 #ifdef _HBANGLE
62  CALL getrz(gc)
63 #endif
64 
65  IF (parvmec) THEN
66  CALL spectrum_par (pgc(:irzloff), pgc(1+irzloff:2*irzloff))
67  CALL gather1xarray(vp)
68  CALL gather1xarray(specw)
69  ELSE
70  CALL spectrum (gc(:irzloff), gc(1+irzloff:2*irzloff))
71  END IF
72 
73  den = sum(vp(2:ns))
74  avm = dot_product(vp(2:ns),specw(2:ns)+specw(1:ns-1))
75  avm = 0.5_dp*avm/den
76  IF (ivac .GE. 1) THEN
77  IF (parvmec) THEN
78 !SPH CHANGE (MOVE OUT OF FUNCT3D)
79 #if defined(MPI_OPT)
80  active1: IF (lactive) THEN
81  CALL second0(tbroadon)
82  ALLOCATE(bcastbuf(3*nznt+1))
83  bcastbuf(1:nznt) = dbsq
84  bcastbuf(nznt+1:2*nznt) = bsqsav(:,3)
85  bcastbuf(2*nznt+1:3*nznt) = rbsq !NEED THIS WHEN INTERPOLATING MESHES
86  bcastbuf(3*nznt+1) = fedge
87 
88  CALL mpi_bcast(bcastbuf,SIZE(bcastbuf),mpi_real8,
89  1 nranks-1,ns_comm,mpi_err)
90 
91  dbsq = bcastbuf(1:nznt)
92  bsqsav(:,3) = bcastbuf(nznt+1:2*nznt)
93  rbsq = bcastbuf(2*nznt+1:3*nznt)
94  fedge = bcastbuf(3*nznt+1)
95  DEALLOCATE(bcastbuf)
96 
97  CALL second0(tbroadoff)
98  broadcast_time = broadcast_time + (tbroadoff - tbroadon)
99  den = sum(bsqsav(:nznt,3)*pwint(:,2))
100  IF (den .NE. zero) delbsq =
101  1 sum(dbsq(:nznt)*pwint(:,2))/den
102  END IF active1
103 #endif
104  ELSE
105  delbsq =
106  1 sum(dbsq(:nznt)*wint(2:nrzt:ns))/
107  2 sum(bsqsav(:nznt,3)*wint(2:nrzt:ns))
108  END IF
109  END IF
110 
111  IF (i0.EQ.1 .AND. lfreeb) THEN
112  print_line = iter_lines // " " // raxis_line
113  IF (lasym) print_line = trim(print_line) // " " // zaxis_line
114  IF (lscreen.AND.grank.EQ.0)
115  1 print 20, trim(print_line)//delt_line !J Geiger 20101118
116  print_line = iter_line // fsq_line // raxis_line
117  IF (lasym) print_line = trim(print_line) // " " // zaxis_line
118  IF (imatch_phiedge .eq. 1) THEN
119  IF(grank.EQ.0) WRITE (nthreed, 15) trim(print_line)
120  ELSE
121  IF(grank.EQ.0) WRITE (nthreed, 16) trim(print_line)
122  ENDIF
123  ELSE IF (i0.eq.1 .and. .not.lfreeb) THEN
124  print_line = raxis_line
125  IF (lasym) print_line = raxis_line // zaxis_line
126  IF (lscreen.AND.grank.EQ.0)
127  1 print 30, iter_lines, trim(print_line)//delt_line !J Geiger 2010118
128  print_line = iter_line // fsq_line // raxis_line // " "
129  IF (lasym) print_line = iter_line // fsq_line // raxis_line
130  1 // zaxis_line
131  IF (grank .EQ. 0) WRITE (nthreed, 25) trim(print_line)
132  ENDIF
133  15 FORMAT(/,a,6x,'WMHD BETA <M> DEL-BSQ FEDGE',/)
134  16 FORMAT(/,a,6x,'WMHD BETA PHIEDGE DEL-BSQ FEDGE',/)
135  20 FORMAT(/,a,6x,'WMHD DEL-BSQ',/)
136  25 FORMAT(/,a,6x,'WMHD BETA <M> ',/)
137  30 FORMAT(/,a,1x,a,5x,'WMHD',/)
138 
139  IF (.not. lasym) THEN
140  IF (.not.lfreeb) THEN
141  IF (lscreen.AND.grank.EQ.0)
142  1 print 45, i0, fsqr, fsqz, fsql, r00, delt0, w !J Geiger 20101118
143  IF(grank.EQ.0) WRITE (nthreed, 40) i0, fsqr, fsqz, fsql,
144  1 fsqr1, fsqz1, fsql1, delt0, r00, w, betav, avm
145  RETURN
146  ENDIF
147  IF (lscreen.AND.grank.EQ.0)
148  1 print 50, i0, fsqr, fsqz, fsql, r00, delt0, w,
149  2 delbsq !J Geiger 20101118
150  IF (imatch_phiedge .eq. 1) THEN
151  IF(grank.EQ.0) WRITE (nthreed, 40) i0, fsqr, fsqz, fsql,
152  1 fsqr1, fsqz1, fsql1, delt0, r00, w, betav, avm, delbsq,
153  2 fedge
154  ELSE
155  IF(grank.EQ.0) WRITE (nthreed, 42) i0, fsqr, fsqz, fsql,
156  1 fsqr1, fsqz1, fsql1, delt0, r00, w, betav,
157  2 abs(phiedge), delbsq, fedge
158  ENDIF
159 
160  ELSE
161  IF (.not.lfreeb) THEN
162  IF (lscreen.AND.grank.EQ.0)
163  1 print 65, i0, fsqr, fsqz, fsql, r00, z00, !J Geiger 20101118
164  2 delt0, w !J Geiger 20101118
165  IF(grank.EQ.0) WRITE (nthreed, 60) i0, fsqr, fsqz, fsql,
166  1 fsqr1, fsqz1, fsql1, delt0, r00, z00, w, betav, avm
167  RETURN
168  ENDIF
169  IF (lscreen.AND.grank.EQ.0)
170  1 print 70, i0, fsqr, fsqz, fsql, r00, z00,
171  2 delt0, w, delbsq !J Geiger 20101118
172  IF (imatch_phiedge .eq. 1) THEN
173  IF(grank.EQ.0) WRITE (nthreed, 60) i0, fsqr, fsqz, fsql,
174  1 fsqr1, fsqz1, fsql1, delt0, r00, z00, w, betav, avm,
175  2 delbsq, fedge
176  ELSE
177  IF(grank.EQ.0) WRITE (nthreed, 60) i0, fsqr, fsqz, fsql,
178  1 fsqr1, fsqz1, fsql1, delt0, r00, z00, w, betav,
179  2 abs(phiedge), delbsq, fedge
180  ENDIF
181  END IF
182 
183  40 FORMAT(i6,1x,1p,7e10.2,e11.3,e12.4,e11.3,0p,f7.3,1p,2e9.2)
184  42 FORMAT(i5,1p,7e10.2,e11.3,e12.4,2e11.3,0p,f7.3,1p,e9.2)
185  45 FORMAT(i5,1p,3e10.2,e11.3,e10.2,e12.4)
186  50 FORMAT(i5,1p,3e10.2,e11.3,e10.2,e12.4,e11.3)
187  60 FORMAT(i6,1x,1p,7e10.2,2e11.3,e12.4,e11.3,0p,f7.3,1p,2e9.2)
188  65 FORMAT(i5,1p,3e10.2,2e11.3,e10.2,e12.4)
189  70 FORMAT(i5,1p,3e10.2,2e11.3,e10.2,e12.4,e11.3)
190 
191  END SUBROUTINE printout
192 
parallel_vmec_module::copylastntype
Definition: parallel_vmec_module.f90:76