PT_SOLVER is a transport solver developed by X. Yuan and implemented in TRANSP in 2013. It is specifically designed to allow multiple transport models in different radial regions and is particularly suited to deal with stiff transport models, like GLF23 and TGLF. As of October 2020, pt-solver replaces completely the former mode of operation for predictive transport.

## PT_SOLVER settings

The predictive simulations are enabled in PT_SOLVER by selecting lpredictive_mode = 3.

### TRANSP equation selection

The following controls have values of either 1 or 0: 1 means, use the predictive transport model to advance the quantity; 0 means, either use input data (at the start of a run), or, scale previous predicted results proportionally to changes in the boundary condition (if a previous use of predictive model is rescinded with a namelist update).

These controls only have meaning if a PT_SOLVER is active:

- lpredict_Ti (default 1) -- predict Ti
- lpredict_Te (default 1) -- predict Te
- lpredict_Pphi (default 1) -- predict Pphi and angular velocity
- lpredict_ne (default 0) -- predict electron density

`~update_time = 2.700000`

lpredict_te = 1

lpredict_ti = 1

lpredict_ne = 0

lpredict_pphi = 0

will inform PT_SOLVER to start predicting the electron and density profiles in a predictive way starting 2.7 sec. PT_SOLVER will not evolve any other profiles from this time.

## Transport region boundaries

PT_SOLVER allows multiple predictive transport models to be used in different regions.

In PT_SOLVER, the core plasma is divided into three regions, within each of which a different combination of transport models may be selected (here xi is the radial toroidal flux coordinate, xi=sqrt(Phi_tor/Phi_tor_bdy)):

- axial region (can have null extent): xi range 0 to XIMIN_CONF;
- confinement region: xi range XIMIN_CONF to min(XIMAX_CONF,X*BOUND);
- near-edge region (can have null extent): xi range XIMAX_CONF to to X*BOUND.

The (updatable) namelist controls XIMIN_CONF and XIMAX_CONF define the boundaries of these regions; default values are XIMIN_CONF=0.0 and XIMAX_CONF=1.0 (which would leave the axial and near-edge regions with null extent).

{XIMIN_CONF,XIMAX_CONF} define the above listed three regions of application of predictive models; however, all regions are bounded by the "boundary region", within which either input data or a predictive Pedestal Model determine temperatures, densities, and plasma rotation rates. The boundary location can differ according to predictive quantity, as follows:

- XIBOUND (default 1.0) -- boundary location for Te and Ti prediction
- XPHIBOUND (default 1.0) -- boundary location for Pphi prediction
- XNBOUND (default 1.0) -- boundary location for density prediction

Collectively these are referred to as X*BOUND, above; these can limit the extent of either the confinement region or the near-edge region.

It is possible for the axial and near-edge regions to have null extent, in which case controls on transport in these regions would have no effect.

The multi-region is defined for PTRANSP using XIMIN_CONF, and XIMAX_CONF namelist.

Examples:

- AXIAL region: 0 < XI < XIMIN_CONF
- CONFINEMENT region: XMIN_CONF < XI < XIMAX_CONF
- EDGE region: XIMAX_CONF < XI < min{XIBOUND,XPHIBOUND,XNBOUND).

## Transport model selection

The transport models in PT_SOLVER are set by a separate namelist. A link to this namelist is defined in the TR.DAT input file by setting PT_TEMPLATE variable. For example,- PT_TEMPLATE = './pt.nml'

PTRANSP uses the following variable structure to select anomalous models:

- pt_[region_name]%[model_name]%active

Here, [region_name] is axial, confinement, or edge; [model_name] is GLF23, TGLF, MMM, RLW, COPPI, CDBM, USER, and Paleo.

By default, all pt_[region_name]%[model_name]%active variables are set to false. In order to activate the model in a particular region, the variable needs to be set to true. For example:

- pt_confinement%glf23%active = .true.

The neoclassical models are set in a similar way. Selection for neoclassical models include NEOCH (Chang-Hinton model), NEOGK (NEO model), and NCLASS. Please note that the implementation of the NEO model is not verified.

Exactly one anomalous model and one neoclassical model need to be selected to predict the plasma profiles. In addition, one ExB flow shear model is required to be set. The ExB flow shear model is set using the variable

- pt_[region_name]%exb%version.

Possible options for this variable are

- 1 - NCEXB: Based on the NCLASS predictions
- 2 - DMEXB: ExB flow shear computation that reproduce the computations in the XPTOR code
- 3 - TGYROEXB: R.Waltz EXB shear model that used to match TGYRO run
- 4 - TRANSPEXB: Hahm-Burrell ExB shear model

The GLF23 and TGLF models expect the TGYROEXB ExB model and the MMM model expects the TRANSPEXB model.

The effective diffusivities computed with each transport model can be scaled using the variable:

- pt_[region_name]%[model_name]%xanom

This input variable expects an array of six scaling factors for six transport channels (Te, Ti, Pphi, Ni, Nz, and Ne). By default, all scaling factors are set to 1.

For example, using

- pt_axial%glf23%xanom = 1.0, 0.5, 1.0, 1.0, 1.0, 1.0

will scale the effective diffusivity computed with the GLF23 model for ion thermal anomalous transport with the factor 0.5.

Note that some of the named transport models calculate transport coefficients only for a subset of transported quantities.

Model | Te | Ti | PPhi | ni | nx | ne | Comment |
---|---|---|---|---|---|---|---|

NEOCH | x | x | x | Chang-Hilton neoclassical model | |||

NEOGK | x | x | x | x | x | x | Gyrokinetic NEO model |

NCLASS | x | x | x | x | x | x | NCLASS model |

PALEO | x | Paleoclassical Model | |||||

RLW | x | x | Rebut-Lallia-Watkins model | ||||

GLF23 | x | x | x | x | x | GLF23 model | |

MMM | x | x | x | x | x | Multi-Mode Model (MMM) v9 | |

TGLF | x | x | x | x | x | x | TGLF model |

USER | x | x | x | x | x | x | USER defined model |

COPPI | x | x | Coppi's model | ||||

CDBM | x | x | Current Diffusive Ballooning Mode (CDBM) model |

The anomalous and neoclassical models are shaded with different colors in this table.

Neoclassical Models | Anomalous Models |

The selection of transport models can be updated in time. While it is uncommon and only one combination of models is usually used for the whole run, an option to change this combination exists. If the combination of transport models needs to be updated, the PT_SOLVER input files should start with a number that indicates how many updates are expected. This number is followed by pt_updates namelist block that includes times of the updates.

Two examples below show initialization of PT_SOLVER with one combination of transport models for the whole simulation and with a combination of models that is updated in time.

Example 1: In this example, the GLF23 anomalous, Chang-Hinton neoclassical and Waltz ExB models are used for the whole simulation time. The simulation has only one (confinement) region. Note, that this selection should be in accord with the XIMIN_CONF and XIMAX_CONF from the TR.DAT input file.

`&pt_controls`

pt_update_time = -1.

! Anomalous transport model

! Possible selections : GLF23, TGLF, MMM, RLW, COPPI, CDBM, USER, Paleo

pt_confinement%glf23%active = .true.

pt_confinement%exb%version = 3 ! 1 - NCEXB; 2 - DMEXB; 3 - TGYROEXB; 4 - TRANSPEXB

! Neoclassical transport model

! Possible selections : NEOCH, NEOGK, NCLASS, GTCNEO

pt_axial%neoch%active = .true.

pt_confinement%neoch%active = .true.

pt_edge%neoch%active = .true.

/

pt_update_time = -1.

! Anomalous transport model

! Possible selections : GLF23, TGLF, MMM, RLW, COPPI, CDBM, USER, Paleo

pt_confinement%glf23%active = .true.

pt_confinement%exb%version = 3 ! 1 - NCEXB; 2 - DMEXB; 3 - TGYROEXB; 4 - TRANSPEXB

! Neoclassical transport model

! Possible selections : NEOCH, NEOGK, NCLASS, GTCNEO

pt_axial%neoch%active = .true.

pt_confinement%neoch%active = .true.

pt_edge%neoch%active = .true.

/

Example 2: This simulation has edge and confinement regions and two update times. The simulation starts with the GLF23, Chang-Hinton, and Waltz ExB model and continues with TGLF, Chang-Hinton, and Waltz models after 0.5 sec.

`2`

&pt_updates

pt_times=-1.0, 0.5

/

&pt_controls

pt_update_time = -1.

! Anomalous transport model

! Possible selections : GLF23, TGLF, MMM, RLW, COPPI, CDBM, USER, Paleo

pt_axial%glf23%active = .true.

pt_axial%glf23%xanom = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ! Te, Ti, Pphi, Ni, Nz, Ne

pt_axial%exb%version = 3 ! 1 - NCEXB; 2 - DMEXB; 3 - TGYROEXB; 4 - TRANSPEXB

pt_confinement%glf23%active = .true.

pt_confinement%glf23%xanom = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ! Te, Ti, Pphi, Ni, Nz, Ne

pt_confinement%exb%version = 3 ! 1 - NCEXB; 2 - DMEXB; 3 - TGYROEXB; 4 - TRANSPEXB

! Neoclassical transport model

! Possible selections : NEOCH, NEOGK, NCLASS, GTCNEO

pt_axial%neoch%active = .true.

pt_axial%neoch%xanom = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ! Te, Ti, Pphi, Ni, Nz, Ne

pt_confinement%neoch%active = .true.

pt_confinement%neoch%xanom = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ! Te, Ti, Pphi, Ni, Nz, Ne

/

&pt_controls

pt_update_time = 0.5

pt_sawtooth%active = .true.

pt_sawtooth%version = 2 ! 1 - PTSAW-1; 2 - PTSAW-2; 3 - PTSAW-3; 4 - USER

pt_sawtooth%xsaw_bound = 0.1

pt_sawtooth%xanom = 1e3, 1e3, 1e3, 1e3, 1e3, 1e3 ! Te, Ti, Pphi, Ni, Nz, Ne

! Anomalous transport model

! Possible selections : GLF23, TGLF, MMM, RLW, COPPI, CDBM, USER, Paleo

pt_axial%tglf%active = .true.

pt_axial%tglf%xanom = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ! Te, Ti, Pphi, Ni, Nz, Ne

pt_axial%exb%version = 3 ! 1 - NCEXB; 2 - DMEXB; 3 - TGYROEXB; 4 - TRANSPEXB

pt_confinement%tglf%active = .true.

pt_confinement%tglf%xanom = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ! Te, Ti, Pphi, Ni, Nz, Ne

pt_confinement%exb%version = 3 ! 1 - NCEXB; 2 - DMEXB; 3 - TGYROEXB; 4 - TRANSPEXB

! Neoclassical transport model

! Possible selections : NEOCH, NEOGK, NCLASS, GTCNEO

pt_axial%neoch%active = .true.

pt_axial%neoch%xanom = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ! Te, Ti, Pphi, Ni, Nz, Ne

pt_confinement%neoch%active = .true.

pt_confinement%neoch%xanom = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ! Te, Ti, Pphi, Ni, Nz, Ne

/

&pt_updates

pt_times=-1.0, 0.5

/

&pt_controls

pt_update_time = -1.

! Anomalous transport model

! Possible selections : GLF23, TGLF, MMM, RLW, COPPI, CDBM, USER, Paleo

pt_axial%glf23%active = .true.

pt_axial%glf23%xanom = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ! Te, Ti, Pphi, Ni, Nz, Ne

pt_axial%exb%version = 3 ! 1 - NCEXB; 2 - DMEXB; 3 - TGYROEXB; 4 - TRANSPEXB

pt_confinement%glf23%active = .true.

pt_confinement%glf23%xanom = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ! Te, Ti, Pphi, Ni, Nz, Ne

pt_confinement%exb%version = 3 ! 1 - NCEXB; 2 - DMEXB; 3 - TGYROEXB; 4 - TRANSPEXB

! Neoclassical transport model

! Possible selections : NEOCH, NEOGK, NCLASS, GTCNEO

pt_axial%neoch%active = .true.

pt_axial%neoch%xanom = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ! Te, Ti, Pphi, Ni, Nz, Ne

pt_confinement%neoch%active = .true.

pt_confinement%neoch%xanom = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ! Te, Ti, Pphi, Ni, Nz, Ne

/

&pt_controls

pt_update_time = 0.5

pt_sawtooth%active = .true.

pt_sawtooth%version = 2 ! 1 - PTSAW-1; 2 - PTSAW-2; 3 - PTSAW-3; 4 - USER

pt_sawtooth%xsaw_bound = 0.1

pt_sawtooth%xanom = 1e3, 1e3, 1e3, 1e3, 1e3, 1e3 ! Te, Ti, Pphi, Ni, Nz, Ne

! Anomalous transport model

! Possible selections : GLF23, TGLF, MMM, RLW, COPPI, CDBM, USER, Paleo

pt_axial%tglf%active = .true.

pt_axial%tglf%xanom = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ! Te, Ti, Pphi, Ni, Nz, Ne

pt_axial%exb%version = 3 ! 1 - NCEXB; 2 - DMEXB; 3 - TGYROEXB; 4 - TRANSPEXB

pt_confinement%tglf%active = .true.

pt_confinement%tglf%xanom = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ! Te, Ti, Pphi, Ni, Nz, Ne

pt_confinement%exb%version = 3 ! 1 - NCEXB; 2 - DMEXB; 3 - TGYROEXB; 4 - TRANSPEXB

! Neoclassical transport model

! Possible selections : NEOCH, NEOGK, NCLASS, GTCNEO

pt_axial%neoch%active = .true.

pt_axial%neoch%xanom = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ! Te, Ti, Pphi, Ni, Nz, Ne

pt_confinement%neoch%active = .true.

pt_confinement%neoch%xanom = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ! Te, Ti, Pphi, Ni, Nz, Ne

/

## Other control parameters in the PT_SOLVER namelist

### Sawtooth model in PT_SOLVER

The sawooth model in PT_SOLVER can be activated by setting

- pt_sawtooth%active = .true.

However, it is not recommended to use the sawtooth model in PT_SOLVER because other sawtooth models implemented in TRANSP (and controlled through the TR.DAT input) are more advanced and better verified and validated. However, the sawtooth model in PT_SOLVER provides an option to include the interchange instability effect in the plasma core. The TGLF model often requires these modes to reproduce the plasma profiles near the magnetic axis. There are four versions of the sawtooth model in PT_SOLVER:

- 1 - PTSAW-1: Sawtooth model that enhances the transport in the region where q<1
- 2 - PTSAW-2: Interchange model
- 3 - PTSAW-3: Combination of sawtooth and interchange models
- 4 - USER: User-defined model for sawtooth

The enhancement of different transport channels can be set using the parameter pt_sawtooth%xanom. For example,

- pt_sawtooth%xanom = 1e3, 1e3, 1e3, 1e3, 1e3, 1e3 ! Te, Ti, Pphi, Ni, Nz, Ne

The sawtooth radius in the USER sawtooth model in PT_SOLVER is controlled using the input parameter pt_sawtooth%xsaw_bound.

### Numerical parameters in PT_SOLVER

Number of Newton iterations can be set using the input parameter NEWTON_ITERATES. The implicitness factor is set by THETA_IMPLICIT. In most simulations, these parameters don't need to be modified. However, when it is absolutely necessary THETA_IMPLICIT should set be in a range between 0 and 1, and NEWTON_ITERATES is typically around 100.

Residuals can be set for all six transport channels individually using the pt_residual%RES_* parameters. The default values usually work. They should be set to resonably small positive and non-zero numbers. Additional convergence studies are recommended when these values are set to the values larger than the default values.

Example:

`! Residuals`

pt_residual%RES_TE = 1D-3

pt_residual%RES_TI = 1D-3

pt_residual%RES_NE = 1D-3

pt_residual%RES_NIMP = 1D-3

pt_residual%RES_NMAIN = 1D-3

pt_residual%RES_Pphi = 1D-3

pt_residual%RES_TE = 1D-3

pt_residual%RES_TI = 1D-3

pt_residual%RES_NE = 1D-3

pt_residual%RES_NIMP = 1D-3

pt_residual%RES_NMAIN = 1D-3

pt_residual%RES_Pphi = 1D-3

Another set of numerical parameters controls the numerical diffusivities in PT_SOLVER. They contribute to the Peclet numbers computation. It is not recommended to change these numerical parameters unless absolutely necessary. An example that shows how these numerical parameters can be set can be found below.

`!Numerical diffusivities factors and min numerical diffusivities for the Peclet numbers`

! electron thermal

pt_num_diffusivity%pt_chie_fact = 500D0

pt_num_diffusivity%pt_chie_min = 100D0

! ion thermal

pt_num_diffusivity%pt_chii_fact = 100D0

pt_num_diffusivity%pt_chii_min = 100D0

! toroidal momentum

pt_num_diffusivity%pt_chiphi_fact = 200D0

pt_num_diffusivity%pt_chiphi_min = 50D0

! electron density

pt_num_diffusivity%pt_chine_fact = 200D0

pt_num_diffusivity%pt_chine_min = 50D0

! electron thermal

pt_num_diffusivity%pt_chie_fact = 500D0

pt_num_diffusivity%pt_chie_min = 100D0

! ion thermal

pt_num_diffusivity%pt_chii_fact = 100D0

pt_num_diffusivity%pt_chii_min = 100D0

! toroidal momentum

pt_num_diffusivity%pt_chiphi_fact = 200D0

pt_num_diffusivity%pt_chiphi_min = 50D0

! electron density

pt_num_diffusivity%pt_chine_fact = 200D0

pt_num_diffusivity%pt_chine_min = 50D0