7 SUBROUTINE tomnsps_par(frzl_array, armn, brmn, crmn, azmn,
8 & bzmn, czmn, blmn, clmn, arcon, azcon)
9 USE realspace,
ONLY: wint, phip
10 USE vmec_main, p5 => cp5
11 USE vmec_params,
ONLY: jlam, jmin2, ntmax, rcc, rss, zsc, zcs,
13 USE fbal,
ONLY: rru_fac, rzu_fac, frcc_fac, fzsc_fac
14 USE precon2d,
ONLY: ictrl_prec2d
15 USE parallel_include_module
20 REAL(dp),
DIMENSION(0:ntor,0:mpol1,ns,3*ntmax),
21 &
TARGET,
INTENT(out) :: frzl_array
22 REAL(dp),
DIMENSION(nzeta,ntheta3,ns,0:1),
INTENT(INout) ::
23 & armn, brmn, crmn, azmn, bzmn, czmn, blmn, clmn, arcon, azcon
27 INTEGER,
PARAMETER :: m0 = 0, m1 = 1, n0 = 0
28 INTEGER :: jmax, m, mparity, i, n, k, l, nsz
29 INTEGER :: ioff, joff, mj, ni, nsl, j2, j2l, jl, jll, jmaxl
30 REAL(dp),
DIMENSION(:,:,:),
POINTER ::
31 & frcc, frss, fzcs, fzsc, flcs, flsc
32 REAL(dp),
ALLOCATABLE,
DIMENSION(:,:,:) :: work1
33 REAL(dp),
DIMENSION(:,:),
ALLOCATABLE :: tempr, tempz
35 INTEGER :: j, nsmin, nsmax, ub1, lb1, ub2, lb2, js
39 frcc => frzl_array(:,:,:,rcc)
40 fzsc => frzl_array(:,:,:,zsc+ntmax)
41 flsc => frzl_array(:,:,:,zsc+2*ntmax)
43 frss => frzl_array(:,:,:,rss)
44 fzcs => frzl_array(:,:,:,zcs+ntmax)
45 flcs => frzl_array(:,:,:,zcs+2*ntmax)
53 ALLOCATE (work1(12,nzeta,nsmin:nsmax), stat=i)
54 ALLOCATE (tempr(nzeta,nsmin:nsmax), stat=i)
55 ALLOCATE (tempz(nzeta,nsmin:nsmax), stat=i)
57 stop
'Allocation error in VMEC2000 tomnsps'
78 frzl_array(:,:,js,:) = 0
86 tempr(k,js) = armn(k,i,js,mparity)
88 & + xmpq(m,1)*arcon(k,i,js,mparity)
90 tempz(k,js) = azmn(k,i,js,mparity)
92 & + xmpq(m,1)*azcon(k,i,js,mparity)
94 work1(1,k,js) = work1(1,k,js)
95 & + tempr(k,js)*cosmui(i,m)
96 & + brmn(k,i,js,mparity)*sinmumi(i,m)
97 work1(7,k,js) = work1(7,k,js)
98 & + tempz(k,js)*sinmui(i,m)
99 & + bzmn(k,i,js,mparity)*cosmumi(i,m)
100 work1(11,k,js) = work1(11,k,js)
101 & + blmn(k,i,js,mparity)*cosmumi(i,m)
103 IF (.NOT.lthreed) cycle
105 work1(2,k,js) = work1(2,k,js)
106 & - crmn(k,i,js,mparity)*cosmui(i,m)
107 work1(3,k,js) = work1(3,k,js)
108 & + tempr(k,js)*sinmui(i,m)
109 & + brmn(k,i,js,mparity)*cosmumi(i,m)
110 work1(4,k,js) = work1(4,k,js)
111 & - crmn(k,i,js,mparity)*sinmui(i,m)
112 work1(5,k,js) = work1(5,k,js)
113 & + tempz(k,js)*cosmui(i,m)
114 & + bzmn(k,i,js,mparity)*sinmumi(i,m)
115 work1(6,k,js) = work1(6,k,js)
116 & - czmn(k,i,js,mparity)*cosmui(i,m)
117 work1(8,k,js) = work1(8,k,js)
118 & - czmn(k,i,js,mparity)*sinmui(i,m)
119 work1(9,k,js) = work1(9,k,js)
120 & + blmn(k,i,js,mparity)*sinmumi(i,m)
121 work1(10,k,js) = work1(10,k,js)
122 & - clmn(k,i,js,mparity)*cosmui(i,m)
123 work1(12,k,js) = work1(12,k,js)
124 & - clmn(k,i,js,mparity)*sinmui(i,m)
135 ub1 = min(trglob,jmax)
144 IF (lb1 .LE. js .AND. js .LE. ub1)
THEN
145 frcc(ni,mj,js) = frcc(ni,mj,js)
146 & + work1(1,k,js)*cosnv(k,n)
148 fzsc(ni,mj,js) = fzsc(ni,mj,js)
149 & + work1(7,k,js)*cosnv(k,n)
152 IF (lb2 .LE. js .AND. js .LE. ub2)
THEN
153 flsc(ni,mj,js) = flsc(ni,mj,js)
154 & + work1(11,k,js)*cosnv(k,n)
157 IF (.NOT.lthreed) cycle
159 IF (lb1 .LE. js .AND. js .LE. ub1)
THEN
160 frcc(ni,mj,js) = frcc(ni,mj,js)
161 & + work1(2,k,js)*sinnvn(k,n)
163 fzsc(ni,mj,js) = fzsc(ni,mj,js)
164 & + work1(8,k,js)*sinnvn(k,n)
166 frss(ni,mj,js) = frss(ni,mj,js)
167 & + work1(3,k,js)*sinnv(k,n)
168 & + work1(4,k,js)*cosnvn(k,n)
170 fzcs(ni,mj,js) = fzcs(ni,mj,js)
171 & + work1(5,k,js)*sinnv(k,n)
172 & + work1(6,k,js)*cosnvn(k,n)
175 IF (lb2 .LE. js .AND. js .LE. ub2)
THEN
176 flsc(ni,mj,js) = flsc(ni,mj,js)
177 & + work1(12,k,js)*sinnvn(k,n)
179 flcs(ni,mj,js) = flcs(ni,mj,js)
180 & + work1(9,k,js)*sinnv(k,n)
181 & + work1(10,k,js)*cosnvn(k,n)
192 #if defined(CHI_FORCE)
193 IF (ictrl_prec2d .NE. 0 .AND. ncurr .EQ. 1)
THEN
197 nsmin = max(2,tlglob)
200 flsc(ni, mj, js) = -t1*(buco(js) - icurv(js))
211 t1 = nscale(n0)*r0scale
212 nsmin = max(2,tlglob)
213 nsmax = min(trglob,ns-1)
216 work1(k,1,jl) = frcc_fac(jl)*frcc(ni,mj,jl)
217 & + fzsc_fac(jl)*fzsc(ni,mj,jl)
218 frcc(ni,mj,jl) = rzu_fac(jl)*(t1*equif(jl)
220 fzsc(ni,mj,jl) = rru_fac(jl)*(t1*equif(jl)
226 DEALLOCATE (work1, tempr, tempz)
228 CALL second0 (tfftoff)
229 tomnsps_time = tomnsps_time + (tfftoff - tffton)
230 timer(tffi) = timer(tffi) + (tfftoff - tffton)
232 END SUBROUTINE tomnsps_par
234 SUBROUTINE tomnspa_par(frzl_array, armn, brmn, crmn, azmn, bzmn,
235 & czmn, blmn, clmn, arcon, azcon)
237 USE vmec_params,
ONLY: jlam, jmin2, ntmax, rsc, rcs, zcc, zss
238 USE parallel_include_module
242 REAL(dp),
DIMENSION(0:ntor,0:mpol1,ns,3*ntmax),
243 &
TARGET,
INTENT(inout) :: frzl_array
244 REAL(dp),
DIMENSION(nzeta,ntheta3,ns,0:1),
INTENT(in) ::
245 & armn, brmn, crmn, azmn, bzmn, czmn, blmn, clmn, arcon, azcon
249 INTEGER :: jmax, m, mparity, i, n, k, l
250 INTEGER :: ioff, joff, mj, ni, nsl, j2, j2l, jl, jll, jmaxl
251 REAL(dp),
DIMENSION(:,:,:),
POINTER ::
252 & frcs, frsc, fzcc, fzss, flcc, flss
254 REAL(dp),
DIMENSION(:,:),
ALLOCATABLE :: temp1, temp3
255 REAL(dp),
DIMENSION(:,:,:),
ALLOCATABLE :: work1
256 INTEGER :: j, nsmin, nsmax, ub1, lb1, ub2, lb2, js
260 frsc => frzl_array(:,:,:,rsc)
261 fzcc => frzl_array(:,:,:,zcc+ntmax)
262 flcc => frzl_array(:,:,:,zcc+2*ntmax)
264 frcs => frzl_array(:,:,:,rcs)
265 fzss => frzl_array(:,:,:,zss+ntmax)
266 flss => frzl_array(:,:,:,zss+2*ntmax)
271 ALLOCATE (work1(12,nzeta,nsmin:nsmax),
272 & temp1(nzeta,nsmin:nsmax),
273 & temp3(nzeta,nsmin:nsmax), stat=i)
275 stop
'Allocation error in VMEC tomnspa'
278 ioff = lbound(frsc,1)
279 joff = lbound(frsc,2)
282 IF (ivac .LT. 1)
THEN
301 temp1(k,js) = armn(k,i,js,mparity)
303 & + xmpq(m,1)*arcon(k,i,js,mparity)
305 temp3(k,js) = azmn(k,i,js,mparity)
307 & + xmpq(m,1)*azcon(k,i,js,mparity)
309 work1(3,k,js) = work1(3,k,js)
310 & + temp1(k,js)*sinmui(i,m)
311 & + brmn(k,i,js,mparity)*cosmumi(i,m)
312 work1(5,k,js) = work1(5,k,js)
313 & + temp3(k,js)*cosmui(i,m)
314 & + bzmn(k,i,js,mparity)*sinmumi(i,m)
315 work1(9,k,js) = work1(9,k,js)
316 & + blmn(k,i,js,mparity)*sinmumi(i,m)
318 IF (.not.lthreed) cycle
320 work1(1,k,js) = work1(1,k,js)
321 & + temp1(k,js)*cosmui(i,m)
322 & + brmn(k,i,js,mparity)*sinmumi(i,m)
323 work1(2,k,js) = work1(2,k,js)
324 & - crmn(k,i,js,mparity)*cosmui(i,m)
325 work1(4,k,js) = work1(4,k,js)
326 & - crmn(k,i,js,mparity)*sinmui(i,m)
327 work1(6,k,js) = work1(6,k,js)
328 & - czmn(k,i,js,mparity)*cosmui(i,m)
329 work1(7,k,js) = work1(7,k,js)
330 & + temp3(k,js)*sinmui(i,m)
331 & + bzmn(k,i,js,mparity)*cosmumi(i,m)
332 work1(8,k,js) = work1(8,k,js)
333 & - czmn(k,i,js,mparity)*sinmui(i,m)
334 work1(10,k,js) = work1(10,k,js)
335 & - clmn(k,i,js,mparity)*cosmui(i,m)
336 work1(11,k,js) = work1(11,k,js)
337 & + blmn(k,i,js,mparity)*cosmumi(i,m)
338 work1(12,k,js) = work1(12,k,js)
339 & - clmn(k,i,js,mparity)*sinmui(i,m)
347 ub1 = min(trglob,jmax)
355 IF (lb1 .LE. js .AND. js .LE. ub1)
THEN
356 frsc(ni,mj,js) = frsc(ni,mj,js)
357 & + work1(3,k,js)*cosnv(k,n)
358 fzcc(ni,mj,js) = fzcc(ni,mj,js)
359 & + work1(5,k,js)*cosnv(k,n)
362 IF (lb2 .LE. js .AND. js .LE. ub2)
THEN
363 flcc(ni,mj,js) = flcc(ni,mj,js)
364 & + work1(9,k,js)*cosnv(k,n)
367 IF (.not.lthreed) cycle
369 IF (lb1 .LE. js .AND. js .LE. ub1)
THEN
370 frsc(ni,mj,js) = frsc(ni,mj,js)
371 & + work1(4,k,js)*sinnvn(k,n)
372 fzcc(ni,mj,js) = fzcc(ni,mj,js)
373 & + work1(6,k,js)*sinnvn(k,n)
374 frcs(ni,mj,js) = frcs(ni,mj,js)
375 & + work1(1,k,js)*sinnv(k,n)
376 & + work1(2,k,js)*cosnvn(k,n)
377 fzss(ni,mj,js) = fzss(ni,mj,js)
378 & + work1(7,k,js)*sinnv(k,n)
379 & + work1(8,k,js)*cosnvn(k,n)
382 IF (lb2 .LE. js .AND. js .LE. ub2)
THEN
383 flcc(ni,mj,js) = flcc(ni,mj,js)
384 & + work1(10,k,js)*sinnvn(k,n)
385 flss(ni,mj,js) = flss(ni,mj,js)
386 & + work1(11,k,js)*sinnv(k,n)
387 & + work1(12,k,js)*cosnvn(k,n)
398 DEALLOCATE (work1, temp1, temp3)
399 CALL second0(tfftoff)
400 tomnspa_time = tomnspa_time + (tfftoff - tffton)
401 timer(tffi) = timer(tffi) + (tfftoff - tffton)
403 END SUBROUTINE tomnspa_par
405 SUBROUTINE tomnsps(frzl_array, armn, brmn, crmn, azmn,
406 1 bzmn, czmn, blmn, clmn, arcon, azcon)
407 USE realspace,
ONLY: wint, phip
408 USE vmec_main, p5 => cp5
409 USE vmec_params,
ONLY: jlam, jmin2, ntmax, rcc, rss, zsc, zcs,
411 USE fbal,
ONLY: rru_fac, rzu_fac, frcc_fac, fzsc_fac
412 USE precon2d,
ONLY: ictrl_prec2d
416 REAL(dp),
DIMENSION(ns,0:ntor,0:mpol1,3*ntmax),
417 1
TARGET,
INTENT(out) :: frzl_array
418 REAL(dp),
DIMENSION(ns*nzeta*ntheta3,0:1),
INTENT(in) ::
419 1 armn, brmn, crmn, azmn, bzmn, czmn, blmn, clmn, arcon, azcon
423 INTEGER :: jmax, m, mparity, i, n, k, l, nsz
424 INTEGER :: ioff, joff, mj, ni, nsl, j2, j2l, jl, jll, jmaxl
425 REAL(dp),
DIMENSION(:,:,:),
POINTER ::
426 1 frcc, frss, fzcs, fzsc, flcs, flsc
427 REAL(dp),
ALLOCATABLE,
DIMENSION(:,:) :: work1
428 REAL(dp),
DIMENSION(:),
ALLOCATABLE :: tempr, tempz
431 frcc => frzl_array(:,:,:,rcc)
432 fzsc => frzl_array(:,:,:,zsc+ntmax)
433 flsc => frzl_array(:,:,:,zsc+2*ntmax)
435 frss => frzl_array(:,:,:,rss)
436 fzcs => frzl_array(:,:,:,zcs+ntmax)
437 flcs => frzl_array(:,:,:,zcs+2*ntmax)
442 ALLOCATE (work1(nsz,12), tempr(nsz), tempz(nsz),
445 stop
'Allocation error in VMEC2000 tomnsps'
448 ioff = lbound(frcc,2)
449 joff = lbound(frcc,3)
454 IF (ivac .lt. 1)
THEN
477 tempr(:) = armn(jll:nsl,mparity)
479 & + xmpq(m,1)*arcon(jll:nsl,mparity)
481 tempz(:) = azmn(jll:nsl,mparity)
483 & + xmpq(m,1)*azcon(jll:nsl,mparity)
485 work1(:,1) = work1(:,1) + tempr(:)*cosmui(i,m)
486 & + brmn(jll:nsl,mparity)*sinmumi(i,m)
487 work1(:,7) = work1(:,7) + tempz(:)*sinmui(i,m)
488 & + bzmn(jll:nsl,mparity)*cosmumi(i,m)
489 work1(:,11)= work1(:,11)+ blmn(jll:nsl,mparity)*cosmumi(i,m)
491 IF (.not.lthreed) cycle
493 work1(:,2) = work1(:,2) - crmn(jll:nsl,mparity)*cosmui(i,m)
494 work1(:,3) = work1(:,3) + tempr(:)*sinmui(i,m)
495 & + brmn(jll:nsl,mparity)*cosmumi(i,m)
496 work1(:,4) = work1(:,4) - crmn(jll:nsl,mparity)*sinmui(i,m)
497 work1(:,5) = work1(:,5) + tempz(:)*cosmui(i,m)
498 & + bzmn(jll:nsl,mparity)*sinmumi(i,m)
499 work1(:,6) = work1(:,6) - czmn(jll:nsl,mparity)*cosmui(i,m)
500 work1(:,8) = work1(:,8) - czmn(jll:nsl,mparity)*sinmui(i,m)
502 work1(:,9) = work1(:,9) + blmn(jll:nsl,mparity)*sinmumi(i,m)
503 work1(:,10) =work1(:,10)- clmn(jll:nsl,mparity)*cosmui(i,m)
504 work1(:,12) =work1(:,12)- clmn(jll:nsl,mparity)*sinmui(i,m)
522 frcc(j2:jmax,ni,mj) = frcc(j2:jmax,ni,mj)
523 & + work1(j2l:jmaxl,1)*cosnv(k,n)
524 fzsc(j2:jmax,ni,mj) = fzsc(j2:jmax,ni,mj)
525 & + work1(j2l:jmaxl,7)*cosnv(k,n)
526 flsc(jl:ns,ni,mj) = flsc(jl:ns,ni,mj)
527 & + work1(jll:nsl,11)*cosnv(k,n)
529 IF (.not.lthreed) cycle
531 frcc(j2:jmax,ni,mj) = frcc(j2:jmax,ni,mj)
532 & + work1(j2l:jmaxl,2)*sinnvn(k,n)
533 fzsc(j2:jmax,ni,mj) = fzsc(j2:jmax,ni,mj)
534 & + work1(j2l:jmaxl,8)*sinnvn(k,n)
535 frss(j2:jmax,ni,mj) = frss(j2:jmax,ni,mj)
536 & + work1(j2l:jmaxl,3)*sinnv(k,n)
537 & + work1(j2l:jmaxl,4)*cosnvn(k,n)
538 fzcs(j2:jmax,ni,mj) = fzcs(j2:jmax,ni,mj)
539 & + work1(j2l:jmaxl,5)*sinnv(k,n)
540 & + work1(j2l:jmaxl,6)*cosnvn(k,n)
542 flsc(jl:ns,ni,mj) = flsc(jl:ns,ni,mj)
543 & + work1(jll:nsl,12)*sinnvn(k,n)
544 flcs(jl:ns,ni,mj) = flcs(jl:ns,ni,mj)
545 & + work1(jll:nsl,9)*sinnv(k,n)
546 & + work1(jll:nsl,10)*cosnvn(k,n)
554 #if defined(CHI_FORCE)
555 IF (ictrl_prec2d.gt.0 .and. ncurr.eq.1)
THEN
560 flsc(jl, ni, mj) = -t1*(buco(jl) - icurv(jl))
571 t1 = nscale(0)*r0scale
573 work1(jl,1) = frcc_fac(jl)*frcc(jl,ni,mj)
574 & + fzsc_fac(jl)*fzsc(jl,ni,mj)
575 frcc(jl,ni,mj) = rzu_fac(jl)*(t1*equif(jl) + work1(jl,1))
576 fzsc(jl,ni,mj) = rru_fac(jl)*(t1*equif(jl) - work1(jl,1))
580 DEALLOCATE (work1, tempr, tempz)
582 END SUBROUTINE tomnsps
584 SUBROUTINE tomnspa(frzl_array, armn, brmn, crmn, azmn, bzmn,
585 & czmn, blmn, clmn, arcon, azcon)
587 USE vmec_params,
ONLY: jlam, jmin2, ntmax, rsc, rcs, zcc, zss
591 REAL(dp),
DIMENSION(ns,0:ntor,0:mpol1,3*ntmax),
592 &
TARGET,
INTENT(inout) :: frzl_array
593 REAL(dp),
DIMENSION(ns*nzeta,ntheta3,0:1),
INTENT(in) ::
594 & armn, brmn, crmn, azmn, bzmn, czmn, blmn, clmn, arcon, azcon
598 INTEGER :: jmax, m, mparity, i, n, k, l
599 INTEGER :: ioff, joff, mj, ni, nsl, j2, j2l, jl, jll, jmaxl
600 REAL(dp),
DIMENSION(:,:,:),
POINTER ::
601 & frcs, frsc, fzcc, fzss, flcc, flss
602 REAL(dp),
DIMENSION(ns*nzeta) :: temp1, temp3
603 REAL(dp),
DIMENSION(:,:),
ALLOCATABLE :: work1
605 frsc => frzl_array(:,:,:,rsc)
606 fzcc => frzl_array(:,:,:,zcc+ntmax)
607 flcc => frzl_array(:,:,:,zcc+2*ntmax)
609 frcs => frzl_array(:,:,:,rcs)
610 fzss => frzl_array(:,:,:,zss+ntmax)
611 flss => frzl_array(:,:,:,zss+2*ntmax)
614 ALLOCATE (work1(ns*nzeta,12), stat=i)
616 stop
'Allocation error in VMEC tomnspa'
619 ioff = lbound(frsc,2)
620 joff = lbound(frsc,3)
623 IF (ivac .lt. 1) jmax = ns1
637 temp1(:) = armn(:,i,mparity)
639 & + xmpq(m,1)*arcon(:,i,mparity)
641 temp3(:) = azmn(:,i,mparity)
643 & + xmpq(m,1)*azcon(:,i,mparity)
645 work1(:,3) = work1(:,3) + temp1(:)*sinmui(i,m)
646 & + brmn(:,i,mparity)*cosmumi(i,m)
647 work1(:,5) = work1(:,5) + temp3(:)*cosmui(i,m)
648 & + bzmn(:,i,mparity)*sinmumi(i,m)
649 work1(:,9) = work1(:,9) + blmn(:,i,mparity)*sinmumi(i,m)
651 IF (.not.lthreed) cycle
653 work1(:,1) = work1(:,1) + temp1(:)*cosmui(i,m)
654 & + brmn(:,i,mparity)*sinmumi(i,m)
655 work1(:,2) = work1(:,2) - crmn(:,i,mparity)*cosmui(i,m)
656 work1(:,4) = work1(:,4) - crmn(:,i,mparity)*sinmui(i,m)
657 work1(:,6) = work1(:,6) - czmn(:,i,mparity)*cosmui(i,m)
658 work1(:,7) = work1(:,7) + temp3(:)*sinmui(i,m)
659 & + bzmn(:,i,mparity)*cosmumi(i,m)
660 work1(:,8) = work1(:,8) - czmn(:,i,mparity)*sinmui(i,m)
661 work1(:,10) = work1(:,10) - clmn(:,i,mparity)*cosmui(i,m)
662 work1(:,11) = work1(:,11) + blmn(:,i,mparity)*cosmumi(i,m)
663 work1(:,12) = work1(:,12) - clmn(:,i,mparity)*sinmui(i,m)
676 frsc(j2:jmax,ni,mj) = frsc(j2:jmax,ni,mj)
677 & + work1(j2l:jmaxl,3)*cosnv(k,n)
678 fzcc(j2:jmax,ni,mj) = fzcc(j2:jmax,ni,mj)
679 & + work1(j2l:jmaxl,5)*cosnv(k,n)
680 flcc(jl:ns,ni,mj) = flcc(jl:ns,ni,mj)
681 & + work1(jll:nsl,9)*cosnv(k,n)
683 IF (.not.lthreed) cycle
685 frsc(j2:jmax,ni,mj) = frsc(j2:jmax,ni,mj)
686 & + work1(j2l:jmaxl,4)*sinnvn(k,n)
687 fzcc(j2:jmax,ni,mj) = fzcc(j2:jmax,ni,mj)
688 & + work1(j2l:jmaxl,6)*sinnvn(k,n)
689 frcs(j2:jmax,ni,mj) = frcs(j2:jmax,ni,mj)
690 & + work1(j2l:jmaxl,1)*sinnv(k,n)
691 & + work1(j2l:jmaxl,2)*cosnvn(k,n)
692 fzss(j2:jmax,ni,mj) = fzss(j2:jmax,ni,mj)
693 & + work1(j2l:jmaxl,7)*sinnv(k,n)
694 & + work1(j2l:jmaxl,8)*cosnvn(k,n)
695 flcc(jl:ns,ni,mj) = flcc(jl:ns,ni,mj)
696 & + work1(jll:nsl,10)*sinnvn(k,n)
697 flss(jl:ns,ni,mj) = flss(jl:ns,ni,mj)
698 & + work1(jll:nsl,11)*sinnv(k,n)
699 & + work1(jll:nsl,12)*cosnvn(k,n)
710 END SUBROUTINE tomnspa
712 END MODULE tomnsp_mod