1 SUBROUTINE load_xc_from_wout(rmn, zmn, lmn, lreset,
2 1 ntor_in, mpol1_in, ns_in, reset_file)
3 USE read_wout_mod,
ONLY: rmnc, zmns, lmns, rmns, zmnc, lmnc,
5 2 nfp, mnmax, read_wout_file, read_wout_deallocate
6 USE vmec_params,
ONLY: mscale, nscale, ntmax,
7 1 rcc, rss, rsc, rcs, zsc, zcs, zcc, zss
8 USE vmec_dim,
ONLY: mpol1
9 USE vparams,
ONLY: one, zero, rprec
10 USE vmec_input,
ONLY: lasym
11 USE vmec_main,
ONLY: lthreed, p5 => cp5, sp, sm, phipf
12 USE parallel_include_module,
ONLY: rank
17 INTEGER :: ns_in, mpol1_in, ntor_in
18 REAL(rprec),
DIMENSION(ns_in,0:ntor_in,0:mpol1_in,ntmax),
19 1
INTENT(out) :: rmn, zmn, lmn
20 LOGICAL,
INTENT(out) :: lreset
21 CHARACTER(LEN=*) :: reset_file
25 INTEGER :: ierr, mn, m, n, n1, js
27 REAL(rprec),
ALLOCATABLE :: temp(:,:)
36 CALL read_wout_file (reset_file, ierr)
40 IF (ierr .ne. 0.AND.rank.EQ.0)
THEN
41 print *,
' Error opening/reading wout file in VMEC load_xc!'
45 IF (ns_in .ne. ns.AND.rank.EQ.0)
THEN
46 print *,
'ns_in (passed to load_xc) != ns (from reading wout)'
50 IF (ntor_in .ne. ntor ) stop
'ntor_in != ntor in load_xc'
51 IF (mpol1_in .ne. mpol1) stop
'mpol1_in != mpol1 in load_xc'
52 IF (nfp .eq. 0) stop
'nfp = 0 in load_xc'
64 t1 = one/(mscale(m)*nscale(n1))
66 IF (n .lt. 0) t2 = -t2
67 IF (n .eq. 0) t2 = zero
68 rmn(:ns,n1,m,rcc) = rmn(:ns,n1,m,rcc) + t1*rmnc(mn,:ns)
69 zmn(:ns,n1,m,zsc) = zmn(:ns,n1,m,zsc) + t1*zmns(mn,:ns)
70 lmn(:ns,n1,m,zsc) = lmn(:ns,n1,m,zsc) + t1*lmns(mn,:ns)
72 rmn(:ns,n1,m,rss) = rmn(:ns,n1,m,rss) + t2*rmnc(mn,:ns)
73 zmn(:ns,n1,m,zcs) = zmn(:ns,n1,m,zcs) - t2*zmns(mn,:ns)
74 lmn(:ns,n1,m,zcs) = lmn(:ns,n1,m,zcs) - t2*lmns(mn,:ns)
77 rmn(:ns,n1,m,rsc) = rmn(:ns,n1,m,rsc) + t1*rmns(mn,:ns)
78 zmn(:ns,n1,m,zcc) = zmn(:ns,n1,m,zcc) + t1*zmnc(mn,:ns)
79 lmn(:ns,n1,m,zcc) = lmn(:ns,n1,m,zcc) + t1*lmnc(mn,:ns)
81 rmn(:ns,n1,m,rcs) = rmn(:ns,n1,m,rcs) - t2*rmns(mn,:ns)
82 zmn(:ns,n1,m,zss) = zmn(:ns,n1,m,zss) + t2*zmnc(mn,:ns)
83 lmn(:ns,n1,m,zss) = lmn(:ns,n1,m,zss) + t2*lmnc(mn,:ns)
87 zmn(:ns,n1,m,zsc) = zero
88 lmn(:ns,n1,m,zsc) = zero
89 IF (lthreed) rmn(:ns,n1,m,rss) = zero
91 rmn(:ns,n1,m,rsc) = zero
93 zmn(:ns,n1,m,zss) = zero
94 lmn(:ns,n1,m,zss) = zero
104 IF (lthreed .or. lasym)
ALLOCATE (temp(ns_in,0:ntor_in))
106 temp = rmn(:,:,1,rss)
107 rmn(:,:,1,rss) = p5*(temp + zmn(:,:,1,zcs))
108 zmn(:,:,1,zcs) = p5*(temp - zmn(:,:,1,zcs))
111 temp = rmn(:,:,1,rsc)
112 rmn(:,:,1,rsc) = p5*(temp + zmn(:,:,1,zcc))
113 zmn(:,:,1,zcc) = p5*(temp - zmn(:,:,1,zcc))
116 IF (
ALLOCATED(temp))
DEALLOCATE (temp)
123 lmn(1,:,0,:) = lmn(2,:,0,:)
124 lmn(1,:,1,:) = 2*lmn(2,:,1,:)/(sm(2) + sp(1))
129 lmn(js,:,m,:) = 2*lmn(js,:,m,:) - lmn(js-1,:,m,:)
135 lmn(js,:,m,:) = (2*lmn(js,:,m,:)
136 1 - sp(js-1)*lmn(js-1,:,m,:))/sm(js)
141 lmn(js,:,:,:) = phipf(js)*lmn(js,:,:,:)
144 CALL read_wout_deallocate
146 END SUBROUTINE load_xc_from_wout