Evaluate the basis and all derivatives for a list of (theta, zeta) positions on all flux surfaces given by s
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | n_s |
number of evaluation points |
||
| integer, | intent(in) | :: | n_tz |
number of evaluation points |
||
| real, | intent(in) | :: | s(n_s) |
evaluation points |
||
| real, | intent(in) | :: | thetazeta(2,n_tz) |
evaluation points |
||
| character(len=2), | intent(in) | :: | Qsel |
selection string: which variable to evaluate |
||
| real, | intent(out), | DIMENSION(n_s,n_tz) | :: | Q |
reference space position and derivatives |
|
| real, | intent(out), | DIMENSION(n_s,n_tz) | :: | dQ_ds |
reference space position and derivatives |
|
| real, | intent(out), | DIMENSION(n_s,n_tz) | :: | dQ_dthet |
reference space position and derivatives |
|
| real, | intent(out), | DIMENSION(n_s,n_tz) | :: | dQ_dzeta |
reference space position and derivatives |
|
| real, | intent(out), | DIMENSION(n_s,n_tz) | :: | dQ_dss |
reference space position and derivatives |
|
| real, | intent(out), | DIMENSION(n_s,n_tz) | :: | dQ_dst |
reference space position and derivatives |
|
| real, | intent(out), | DIMENSION(n_s,n_tz) | :: | dQ_dsz |
reference space position and derivatives |
|
| real, | intent(out), | DIMENSION(n_s,n_tz) | :: | dQ_dtt |
reference space position and derivatives |
|
| real, | intent(out), | DIMENSION(n_s,n_tz) | :: | dQ_dtz |
reference space position and derivatives |
|
| real, | intent(out), | DIMENSION(n_s,n_tz) | :: | dQ_dzz |
reference space position and derivatives |
SUBROUTINE evaluate_base_list_tz_all(n_s, n_tz, s, thetazeta, Qsel, Q, dQ_ds, dQ_dthet, dQ_dzeta, & dQ_dss, dQ_dst, dQ_dsz, dQ_dtt, dQ_dtz, dQ_dzz) ! MODULES USE MODgvec_base, ONLY: t_base ! INPUT/OUTPUT VARIABLES ------------------------------------------------------------------------------------------------------! INTEGER, INTENT(IN) :: n_s, n_tz !! number of evaluation points REAL, INTENT(IN) :: s(n_s), thetazeta(2,n_tz) !! evaluation points CHARACTER(LEN=2), INTENT(IN) :: Qsel !! selection string: which variable to evaluate REAL, INTENT(OUT), DIMENSION(n_s,n_tz) :: Q, & !! reference space position and derivatives dQ_ds, dQ_dthet, dQ_dzeta, dQ_dss, dQ_dst, dQ_dsz, dQ_dtt, dQ_dtz, dQ_dzz ! LOCAL VARIABLES -------------------------------------------------------------------------------------------------------------! INTEGER :: i ! loop variables CLASS(t_base), POINTER :: base ! pointer to the base object (X1, X2, LA) REAL, POINTER :: solution_dofs(:,:) ! pointer to the solution dofs (U(0)%X1, U(0)%X2, U(0)%LA) REAL, ALLOCATABLE, DIMENSION(:) :: Q_dofs, dQ_ds_dofs, dQ_dss_dofs ! DOFs for the fourier series ! CODE ------------------------------------------------------------------------------------------------------------------------! CALL select_base_dofs(Qsel, base, solution_dofs) ALLOCATE(Q_dofs( base%f%modes), & dQ_ds_dofs( base%f%modes), & dQ_dss_dofs(base%f%modes)) !$OMP PARALLEL DO SCHEDULE(STATIC) DEFAULT(SHARED) & !$OMP PRIVATE(i,Q_dofs,dQ_ds_dofs,dQ_dss_dofs) DO i=1,n_s ! evaluate spline to get the fourier dofs Q_dofs = base%s%evalDOF2D_s(s(i), base%f%modes, 0, solution_dofs(:,:)) dQ_ds_dofs = base%s%evalDOF2D_s(s(i), base%f%modes, DERIV_S, solution_dofs(:,:)) dQ_dss_dofs = base%s%evalDOF2D_s(s(i), base%f%modes, DERIV_S_S, solution_dofs(:,:)) ! use the tensorproduct for theta and zeta Q( i,:) = base%f%evalDOF_xn(n_tz, thetazeta, 0, Q_dofs) dQ_ds( i,:) = base%f%evalDOF_xn(n_tz, thetazeta, 0, dQ_ds_dofs) dQ_dthet(i,:) = base%f%evalDOF_xn(n_tz, thetazeta, DERIV_THET, Q_dofs) dQ_dzeta(i,:) = base%f%evalDOF_xn(n_tz, thetazeta, DERIV_ZETA, Q_dofs) dQ_dss( i,:) = base%f%evalDOF_xn(n_tz, thetazeta, 0, dQ_dss_dofs) dQ_dst( i,:) = base%f%evalDOF_xn(n_tz, thetazeta, DERIV_THET, dQ_ds_dofs) dQ_dsz( i,:) = base%f%evalDOF_xn(n_tz, thetazeta, DERIV_ZETA, dQ_ds_dofs) dQ_dtt( i,:) = base%f%evalDOF_xn(n_tz, thetazeta, DERIV_THET_THET, Q_dofs) dQ_dtz( i,:) = base%f%evalDOF_xn(n_tz, thetazeta, DERIV_THET_ZETA, Q_dofs) dQ_dzz( i,:) = base%f%evalDOF_xn(n_tz, thetazeta, DERIV_ZETA_ZETA, Q_dofs) END DO !$OMP END PARALLEL DO DEALLOCATE(Q_dofs, dQ_ds_dofs, dQ_dss_dofs) END SUBROUTINE evaluate_base_list_tz_all