User-supplied GRID profiles

A PROFILES block selects a line profile supplied as a table of wavenumber offsets and normalized densities. Each entry specifies a temperature in K, a band-symmetry label, and a filename. Band symmetry is the direct product of the upper- and lower-state irreps:

Temperature 1000
Range 0 10000
Npoints 10001
absorption
Symmetry C2v
Nirreps = 4

QN
  IRREP 9
END

PROFILES
  1000 A1 profile_H2S_A1_T1000K.prof
  1000 B2 profile_H2S_B2_T1000K.prof
END

cutoff 1000
output H2S_grid_T1000
States i-H2S_p24_linearised_0_0.states
Transitions i-H2S_p24_linearised_0_0.trans

The top-level SYMMETRY selects the group. Inside QN, IRREP and SYMMETRY are aliases for the state-file column. That column is read for both states. The column number counts from the state ID in column 1 and must be at least 5. The former UPPER/LOWER selection is not used. Labels can contain up to 20 characters, matching the existing QN storage.

Supported groups are C2v (alias C2v(M), irreps A1, A2, B1, B2), C3v (alias C3v(M), irreps A1, A2, E), and Cs (alias Cs(M), irreps A’, A”). Cs also accepts two apostrophes, A’’, for double prime. Group and irrep names are case-insensitive. Nirreps is inferred as 4, 3 or 2 respectively; the optional Nirreps = 4 or Nirreps 4 checks the count. The group and count may appear before or after PROFILES and QN.

The internal profile name is GRID, but no standalone GRID keyword should be added: that keyword is already an alias for the existing multiple-output-grid block. A PROFILES block selects this profile automatically. HWHM is unused.

Temperature arrays

For TEMPERATURE-LIST or TEMPERATURE-ARRAY, provide one profile for every requested temperature and every profile label, for example:

temperature-list
  1000
  2000
end

PROFILES
  1000 A1 profile_H2S_A1_T1000K.prof
  2000 A1 profile_H2S_A1_T2000K.prof
  1000 B2 profile_H2S_B2_T1000K.prof
  2000 B2 profile_H2S_B2_T2000K.prof
END

Profile entries may occur in any order. Output columns follow the temperature list. Duplicate or missing temperature/label pairs and unrequested temperatures are errors. Matching uses a relative temperature tolerance of 1e-10; no temperature interpolation or extrapolation is performed. An unknown state irrep or a missing product-component profile is an error if used by a retained transition. Only the band irreps actually needed require profiles; a state irrep need not have a profile under its own label.

Irrep products and degenerate bands

The product table for C2v is:

x

A1

A2

B1

B2

A1

A1

A2

B1

B2

A2

A2

A1

B2

B1

B1

B1

B2

A1

A2

B2

B2

B1

A2

A1

For C3v, A1 is the identity, A2 x A2 = A1, A2 x E = E, and E x E = A1 + A2 + E. For Cs, A’ is the identity and A” x A” = A’.

For the reducible E x E product, the initial profile prescription is the equal average (f_A1 + f_A2 + f_E)/3. Each component is interpolated on its own grid. All three component profiles must be supplied at every requested temperature. Their weights sum to one, preserving the original line intensity; the E profile is not given an additional degeneracy factor.

This average is a provisional shape model. Group theory supplies the product decomposition, not the relative transition strengths. No additional dipole selection rules or physical branch weights are inferred.

The new symmetry.f90 module follows TROVE’s SymmetryT structure. It stores sym%Nirreps, sym%label, sym%degen and integer product multiplicities sym%product(gamma,upper,lower). gamma_lookup(upper,lower) returns the multiplicity vector; for C3v E x E it returns [1,1,1] in A1,A2,E order. The profile averaging policy is separate, in configure_band_weights in grid_profiles.f90, so a future physical weighting can replace it without changing the group algebra.

Profile files and sampling

Files have two whitespace-separated columns: offset in cm-1 and profile density per unit wavenumber. Offsets must strictly increase and span zero; values must be finite and nonnegative. At least two points are required. All files must have the same point count, but their grids may differ and may be nonuniform. Asymmetric profiles are allowed; they are not automatically recentered. Blank lines and parenthesised comments are allowed. Paths are relative to the working directory and should be quoted when they contain spaces.

The trapezoidal integral must be positive and within 1e-3 of one. The original integral is printed, and accepted profiles are divided by that integral. Profiles are then evaluated by linear interpolation at output wavenumber minus line centre. No extrapolation is made beyond the supplied support.

Uniform grids use direct arithmetic indexing with spacing determined once when each profile is loaded. Nonuniform profiles use binary search when a new interpolation interval cannot be reached by advancing one neighbouring interval. Both paths interpolate using the actual tabulated wavenumbers and values.

An explicit CUTOFF is in cm-1. If omitted, the tables’ full support is used. Lines centred outside RANGE are included when their wings can overlap it. Truncation by CUTOFF or RANGE does not cause renormalization. This is point sampling: an output grid too coarse to resolve a profile need not preserve its integral exactly.

Supported calculations

The initial implementation supports LTE absorption using ExoMol states and transitions, one uniform output grid in cm-1, scalar or array temperatures, and constant intensity thresholds. The existing restriction on combining temperature arrays and filters remains. Pressure lists, super-lines, additional analytic broadening, non-LTE, emission, HITRAN/SPECTRA input, and multiple or resolving-power output grids are not supported.