1 SUBROUTINE initialize_radial(nsval, ns_old, delt0,
2 1 lscreen, reset_file_name)
4 USE vmec_params,
ONLY: ntmax
8 USE angle_constraints,
ONLY: getrz, store_init_array
10 USE parallel_include_module
15 INTEGER,
INTENT(IN) :: nsval
16 INTEGER,
INTENT(INOUT) :: ns_old
17 CHARACTER(LEN=*),
OPTIONAL :: reset_file_name
18 REAL(dp),
INTENT(OUT) :: delt0
19 LOGICAL,
INTENT(IN) :: lscreen
23 INTEGER :: neqs_old = 0
24 LOGICAL :: lreset_internal, linterp
25 INTEGER :: nsmin, nsmax, i, j, k, l, lk
60 IF (grank .EQ. 0)
THEN
61 WRITE (nthreed, 1000) ns, mnmax, ftolv, niter
63 print 1000, ns, mnmax, ftolv, niter
67 WRITE(nthreed,1002) nranks, vnranks
68 IF (lscreen) print 1002, nranks, vnranks
70 WRITE (nthreed, 1001) nranks
71 IF (lscreen) print 1001, nranks
79 lreset_internal = .true.
80 linterp = (ns_old .LT. ns .AND. ns_old .NE. 0)
81 IF (ns_old .EQ. ns)
RETURN
82 CALL allocate_ns(linterp, neqs_old)
86 IF (neqs_old.gt.0 .and. linterp)
THEN
94 pgc(1:neqs_old) = pscalxc(1:neqs_old)*pxstore(1:neqs_old)
96 CALL mpi_bcast(rbsq,
SIZE(rbsq), mpi_real8,
97 & 0, ns_comm, mpi_err)
101 gc(1:neqs_old) = scalxc(1:neqs_old)*xstore(1:neqs_old)
110 CALL profil1d_par(pxc, pxcdot, lreset_internal)
112 CALL profil1d(xc, xcdot, lreset_internal)
114 IF (
PRESENT(reset_file_name))
THEN
115 IF (len_trim(reset_file_name) .ne. 0)
THEN
116 CALL load_xc_from_wout(xc(1), xc(1+irzloff),
117 & xc(1+2*irzloff), lreset_internal,
118 & ntor, mpol1, ns, reset_file_name)
120 CALL serial2parallel4x(xc,pxc)
126 CALL profil3d_par(pxc(1), pxc(1+irzloff), lreset_internal,
129 CALL profil3d(xc(1), xc(1+irzloff), lreset_internal, linterp)
136 CALL interp_par(pxc, pgc, pscalxc, ns, ns_old)
138 CALL interp(xc, gc, scalxc, ns, ns_old)
141 CALL store_init_array(xc)
147 CALL restart_iter(delt)
152 1000
FORMAT(/
' NS = ',i4,
' NO. FOURIER MODES = ',i4,
' FTOLV = ',
153 & 1p,e10.3,
' NITER = ',i6)
154 1001
FORMAT(
' PROCESSOR COUNT - RADIAL: ',i4)
155 1002
FORMAT(
' PROCESSOR COUNT - RADIAL: ',i4,
' VACUUM: ',i4)
157 END SUBROUTINE initialize_radial