Difference between revisions of "Operator.m"
(sync with Spinach main f053e432: central transition operator labels, op_cache note) |
|||
| (17 intermediate revisions by the same user not shown) | |||
| Line 6: | Line 6: | ||
A=operator(spin_system,operators,spins,operator_type,format) | A=operator(spin_system,operators,spins,operator_type,format) | ||
| − | == | + | ==Parameters== |
This function supports three types of calls: | This function supports three types of calls: | ||
| − | 1. If operators is a string and spins is a string | + | '''1. If operators is a string and spins is a string''' |
| − | + | operators='Lz'; spins='13C'; | |
| − | the function returns the sum of the corresponding single-spin operators | + | the function returns the sum of the corresponding single-spin operators (Hilbert space) or superoperators (Liouville space) on all spins of that type. Valid labels for states in this type of call are 'E' (identity), 'Lz', 'Lx', 'Ly', 'L+', 'L-', 'Tl,m' (irreducible spherical tensor, l and m are integers), 'CTx', 'CTy', 'CTz', 'CT+', 'CT-' (central transition operators in the Zeeman basis). Valid labels for spins are standard isotope names, as well as 'electrons', 'nuclei', and 'all'. |
| − | (Hilbert space) or superoperators (Liouville space) on all spins of that | ||
| − | type. Valid labels for | ||
| − | 'Lz' | ||
| − | l and m are integers). Valid labels for spins are standard isotope names | ||
| − | as well as 'electrons', 'nuclei' and 'all'. | ||
| − | 2. If operators is a string and spins is a vector | + | '''2. If operators is a string and spins is a vector''' |
operators='Lz'; spins=[1 2 4]; | operators='Lz'; spins=[1 2 4]; | ||
| − | the function returns the sum of all single-spin operators (Hilbert space) | + | the function returns the sum of all single-spin operators (Hilbert space) or superoperators (Liouville space) for all spins with the specified numbers. Valid labels for operators are the same as in Item 1 above. |
| − | or superoperators (Liouville space) for all spins with the specified | ||
| − | |||
| − | 3. If operators is a cell array of strings and spins is a cell array of | + | '''3. If operators is a cell array of strings and spins is a cell array of numbers''' |
| − | numbers | ||
operators={'Lz','L+'}; spins={1,2}; | operators={'Lz','L+'}; spins={1,2}; | ||
| − | then a product operator (Hilbert space) or its | + | then a product operator (Hilbert space) or its superoperator (Liouville space) is produced. In the case above, Spinach will generate LzS+ in Hilbert space or its specified superoperator in Liouville space. Valid labels for operators are the same as in Item 1 above. |
| − | (Liouville space) is produced. In the case above, Spinach will generate | + | |
| − | LzS+ in Hilbert space or its specified superoperator in Liouville space. | + | Bosonic modes - cavities, phonon modes, and transmons - have their own operator labels: 'E' (identity), 'C' (creation), 'A' (annihilation), 'N' (population number), products such as 'CCAA', and 'BL#' for the projector onto the #-th Fock level, counted from 1, so that 'BL1' is the vacuum. These may be mixed with spin labels in product operator calls, for example operators={'L+','A'}; spins={1,2} builds one of the two flip-flop terms of a Jaynes-Cummings coupling. |
| − | Valid labels for operators are the same as in Item 1 above. | ||
In Liouville space calculations, operator_type can be set to: | In Liouville space calculations, operator_type can be set to: | ||
| Line 50: | Line 41: | ||
In Hilbert space calculations operator_type parameter is ignored, and the operator itself is always returned. | In Hilbert space calculations operator_type parameter is ignored, and the operator itself is always returned. | ||
| − | The format parameter refers to the format of the output: 'csc' returns a Matlab sparse matrix | + | The format parameter refers to the format of the output: |
| + | |||
| + | 'csc' - returns a Matlab sparse matrix | ||
| + | |||
| + | 'xyz' - returns a [rows, cols, vals] array | ||
==Outputs== | ==Outputs== | ||
| Line 61: | Line 56: | ||
Lp=operator(spin_system,{'L+'},{3}); | Lp=operator(spin_system,{'L+'},{3}); | ||
| − | |||
| − | |||
'''2. A sum of Lx on all 15N spins in the system''' | '''2. A sum of Lx on all 15N spins in the system''' | ||
Lx=operator(spin_system,'Lx','15N'); | Lx=operator(spin_system,'Lx','15N'); | ||
| − | |||
| − | |||
'''3. AxBx between spin 2 and spin 5''' | '''3. AxBx between spin 2 and spin 5''' | ||
| Line 74: | Line 65: | ||
AxBx=operator(spin_system,{'Lx','Lx'},{2,5}); | AxBx=operator(spin_system,{'Lx','Lx'},{2,5}); | ||
| − | + | Operators will be generated in Hilbert space and superoperators in Liouville space. | |
==Notes== | ==Notes== | ||
| − | '''WARNING''': do not try to obtain product commutation superoperators by multiplying | + | '''WARNING''': do not try to obtain product commutation superoperators by multiplying up single-spin commutation superoperators. It is easy to see that |
<center> | <center> | ||
| Line 84: | Line 75: | ||
If you require a commutation superoperator corresponding to a multi-spin operator, use the syntax given in Section 3 above. | If you require a commutation superoperator corresponding to a multi-spin operator, use the syntax given in Section 3 above. | ||
| + | |||
| + | Operator caching is supported, add 'op_cache' to sys.enable array to enable; make sure your scratch storage is fast. | ||
==See also== | ==See also== | ||
| − | [[unit_state.m]], [[unit_oper.m]], [[mprealloc.m]], [[singlet.m]], [[equilibrium.m]], [[state.m]] | + | [[unit_state.m]], [[unit_oper.m]], [[mprealloc.m]], [[singlet.m]], [[equilibrium.m]], [[state.m]], [[human2opspec.m]], [[bos2ist.m]], [[boson_mono.m]], [[boson_ortho.m]], [[centrans.m]], [[ct2ist.m]], [[enlev2bm.m]], [[enlev2ist.m]], [[hamiltonian.m]], [[kinetics.m]], [[lindbladian.m]], [[oper2bm.m]], [[oper2ist.m]], [[orientation.m]], [[propagator.m]], [[relaxation.m]], [[sin_tran.m]], [[weyl.m]], [[coherent.m]], [[device.m]], [[Kernel_functions]] |
| − | |||
| − | [[ | ||
| − | |||
| − | [[Kernel_functions | ||
| − | |||
''Version 2.8, authors: [[Ilya Kuprov]], [[Luke Edwards]], [[Dmitry Savostyanov]]'' | ''Version 2.8, authors: [[Ilya Kuprov]], [[Luke Edwards]], [[Dmitry Savostyanov]]'' | ||
Latest revision as of 07:04, 30 August 2026
Generates Hilbert space operators and Liouville space superoperators from their human-readable descriptions.
Syntax
A=operator(spin_system,operators,spins,operator_type,format)
Parameters
This function supports three types of calls:
1. If operators is a string and spins is a string
operators='Lz'; spins='13C';
the function returns the sum of the corresponding single-spin operators (Hilbert space) or superoperators (Liouville space) on all spins of that type. Valid labels for states in this type of call are 'E' (identity), 'Lz', 'Lx', 'Ly', 'L+', 'L-', 'Tl,m' (irreducible spherical tensor, l and m are integers), 'CTx', 'CTy', 'CTz', 'CT+', 'CT-' (central transition operators in the Zeeman basis). Valid labels for spins are standard isotope names, as well as 'electrons', 'nuclei', and 'all'.
2. If operators is a string and spins is a vector
operators='Lz'; spins=[1 2 4];
the function returns the sum of all single-spin operators (Hilbert space) or superoperators (Liouville space) for all spins with the specified numbers. Valid labels for operators are the same as in Item 1 above.
3. If operators is a cell array of strings and spins is a cell array of numbers
operators={'Lz','L+'}; spins={1,2};
then a product operator (Hilbert space) or its superoperator (Liouville space) is produced. In the case above, Spinach will generate LzS+ in Hilbert space or its specified superoperator in Liouville space. Valid labels for operators are the same as in Item 1 above.
Bosonic modes - cavities, phonon modes, and transmons - have their own operator labels: 'E' (identity), 'C' (creation), 'A' (annihilation), 'N' (population number), products such as 'CCAA', and 'BL#' for the projector onto the #-th Fock level, counted from 1, so that 'BL1' is the vacuum. These may be mixed with spin labels in product operator calls, for example operators={'L+','A'}; spins={1,2} builds one of the two flip-flop terms of a Jaynes-Cummings coupling.
In Liouville space calculations, operator_type can be set to:
'left' - produces left side product superoperator
'right' - produces right side product superoperator
'comm' - produces commutation superoperator (default)
'acomm' - produces anticommutation superoperator
In Hilbert space calculations operator_type parameter is ignored, and the operator itself is always returned.
The format parameter refers to the format of the output:
'csc' - returns a Matlab sparse matrix
'xyz' - returns a [rows, cols, vals] array
Outputs
A - a CSC sparse (default) or a [rows, cols, vals] repre-
sentation of a spin operator or superoperator.
Examples
1. L+ on spin 3
Lp=operator(spin_system,{'L+'},{3});
2. A sum of Lx on all 15N spins in the system
Lx=operator(spin_system,'Lx','15N');
3. AxBx between spin 2 and spin 5
AxBx=operator(spin_system,{'Lx','Lx'},{2,5});
Operators will be generated in Hilbert space and superoperators in Liouville space.
Notes
WARNING: do not try to obtain product commutation superoperators by multiplying up single-spin commutation superoperators. It is easy to see that
\({{\hat{\hat{O}}}^{2}}=\left[ \hat{O},\left[ \hat{O},\_ \right] \right]\ne \left[ {{{\hat{O}}}^{2}},\_ \right]\)
If you require a commutation superoperator corresponding to a multi-spin operator, use the syntax given in Section 3 above.
Operator caching is supported, add 'op_cache' to sys.enable array to enable; make sure your scratch storage is fast.
See also
unit_state.m, unit_oper.m, mprealloc.m, singlet.m, equilibrium.m, state.m, human2opspec.m, bos2ist.m, boson_mono.m, boson_ortho.m, centrans.m, ct2ist.m, enlev2bm.m, enlev2ist.m, hamiltonian.m, kinetics.m, lindbladian.m, oper2bm.m, oper2ist.m, orientation.m, propagator.m, relaxation.m, sin_tran.m, weyl.m, coherent.m, device.m, Kernel_functions
Version 2.8, authors: Ilya Kuprov, Luke Edwards, Dmitry Savostyanov