Skip to content

Commit 48bfcaa

Browse files
dyzhengroot
andauthored
Fix: doc of soc (#6856)
Co-authored-by: root <root@LAPTOP-C2B3O75T.localdomain>
1 parent 08a5e4f commit 48bfcaa

4 files changed

Lines changed: 250 additions & 28 deletions

File tree

docs/advanced/input_files/input-main.md

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1369,28 +1369,46 @@ Note: In new angle mixing, you should set `mixing_beta_mag >> mixing_beta`. The
13691369
### lspinorb
13701370

13711371
- **Type**: Boolean
1372-
- **Description**: Whether to consider spin-orbital coupling effect in the calculation.
1373-
- True: Consider spin-orbital coupling effect, and `nspin` is also automatically set to 4.
1374-
- False: Do not consider spin-orbital coupling effect.
1372+
- **Description**: Whether to consider spin-orbit coupling (SOC) effect in the calculation.
1373+
- **True**: Consider spin-orbit coupling effect. When enabled:
1374+
- `nspin` is automatically set to 4 (noncollinear spin representation)
1375+
- Symmetry is automatically disabled (SOC breaks inversion symmetry)
1376+
- **Requires** full-relativistic pseudopotentials with `has_so=true` in the UPF header
1377+
- **False**: Do not consider spin-orbit coupling effect.
1378+
- **Common Error**: "no soc upf used for lspinorb calculation" - ensure you are using full-relativistic pseudopotentials
1379+
- See [Spin-polarization and SOC](../scf/spin.md#soc-effects) for detailed usage and examples
13751380
- **Default**: False
13761381

13771382
### noncolin
13781383

13791384
- **Type**: Boolean
1380-
- **Description**: Whether to allow non-collinear polarization, in which case the coupling between spin up and spin down will be taken into account.
1381-
- True: Allow non-collinear polarization, and `nspin` is also automatically set to 4.
1382-
- False: Do not allow non-collinear polarization.
1385+
- **Description**: Whether to allow non-collinear magnetic moments, where magnetization can point in arbitrary directions (x, y, z components) rather than being constrained to the z-axis.
1386+
- **True**: Allow non-collinear polarization. When enabled:
1387+
- `nspin` is automatically set to 4
1388+
- Wave function dimension is doubled (`npol=2`), and the number of occupied states is doubled
1389+
- Charge density has 4 components (Pauli spin matrices: ρ_total, ρ_x, ρ_y, ρ_z)
1390+
- **Constraint**: Cannot be used with `gamma_only=true`
1391+
- Can be combined with `lspinorb=true` for SOC effects with non-collinear magnetism
1392+
- **False**: Do not allow non-collinear polarization (magnetization constrained to z-axis).
1393+
- **Relationship with lspinorb**:
1394+
- `noncolin=0, lspinorb=1`: SOC with z-axis magnetism only (for non-magnetic materials with SOC)
1395+
- `noncolin=1, lspinorb=0`: Non-collinear magnetism without SOC
1396+
- `noncolin=1, lspinorb=1`: Both non-collinear magnetism and SOC
1397+
- See [Noncollinear Spin Polarized Calculations](../scf/spin.md#noncollinear-spin-polarized-calculations) for usage examples
13831398
- **Default**: False
13841399

13851400
### soc_lambda
13861401

13871402
- **Type**: Real
1388-
- **Availability**: Relevant for soc calculations.
1389-
- **Description**: Sometimes, for some real materials, both scalar-relativistic and full-relativistic can not describe the exact spin-orbit coupling. Artificial modulation may help in such cases.
1403+
- **Availability**: Only works when `lspinorb=true`
1404+
- **Description**: Modulates the strength of spin-orbit coupling effect. Sometimes, for some real materials, both scalar-relativistic and full-relativistic pseudopotentials cannot describe the exact spin-orbit coupling. Artificial modulation may help in such cases.
13901405

1391-
`soc_lambda`, which has value range [0.0, 1.0] , is used for modulate SOC effect.
1406+
`soc_lambda`, which has value range [0.0, 1.0], is used to modulate SOC effect:
1407+
- `soc_lambda 0.0`: Scalar-relativistic case (no SOC)
1408+
- `soc_lambda 1.0`: Full-relativistic case (full SOC)
1409+
- Intermediate values: Partial-relativistic SOC (interpolation between scalar and full)
13921410

1393-
In particular, `soc_lambda 0.0` refers to scalar-relativistic case and `soc_lambda 1.0` refers to full-relativistic case.
1411+
**Use case**: When experimental or high-level theoretical results suggest that the SOC effect is weaker or stronger than what full-relativistic pseudopotentials predict, you can adjust this parameter to match the target behavior.
13941412
- **Default**: 1.0
13951413

13961414
### dfthalf_type

docs/advanced/pp_orb.md

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,57 @@ $$
6565

6666
## Pseudopotentials
6767
### Supported formats
68-
ABACUS supports both norm-conserving and ultrasoft pseudopotentials. For norm-conserving pseudopotentials, UPF, UPF2, VWR, and BLPS formats are supported. For ultrasoft pseudopotentials, UPF and UPF2 formats are supported.
68+
ABACUS supports both norm-conserving and ultrasoft pseudopotentials. For norm-conserving pseudopotentials, UPF, UPF2, VWR, and BLPS formats are supported. For ultrasoft pseudopotentials, UPF and UPF2 formats are supported.
69+
70+
### Pseudopotentials for SOC Calculations
71+
72+
When performing spin-orbit coupling (SOC) calculations with `lspinorb=1`, specific pseudopotential requirements must be met:
73+
74+
#### Identifying SOC Pseudopotentials
75+
76+
Full-relativistic pseudopotentials suitable for SOC calculations can be identified by checking the UPF file header (`PP_HEADER` section):
77+
78+
```xml
79+
<PP_HEADER
80+
...
81+
relativistic="full"
82+
has_so="T"
83+
...
84+
/>
85+
```
86+
87+
- **`relativistic="full"`**: Indicates a full-relativistic pseudopotential
88+
- **`has_so="T"` or `has_so="1"`**: Indicates SOC information is included in the pseudopotential
89+
90+
#### Usage Rules
91+
92+
1. **SOC calculations** (`lspinorb=1`):
93+
- **Required**: Full-relativistic pseudopotentials with `has_so=true`
94+
- **Error if not met**: "no soc upf used for lspinorb calculation"
95+
96+
2. **Non-SOC calculations** (`lspinorb=0`):
97+
- **Flexible**: Can use either scalar-relativistic (`relativistic="scalar"`) or full-relativistic pseudopotentials
98+
- **Automatic conversion**: If full-relativistic PP is used, ABACUS automatically transforms it to scalar-relativistic version
99+
100+
3. **Ultrasoft pseudopotentials (USPP)**:
101+
- **Constraint**: Full-relativistic USPP must be used with `lspinorb=true`
102+
- **Warning if violated**: "FR-USPP please use lspinorb=.true."
103+
104+
#### Validation by ABACUS
105+
106+
ABACUS performs automatic validation when reading pseudopotentials:
107+
- Checks if `lspinorb=1` but pseudopotential has `has_so=false` → terminates with error
108+
- Checks if full-relativistic USPP is used without `lspinorb=1` → shows warning
109+
- Automatically averages SOC-related beta functions when `lspinorb=0`
110+
111+
#### Where to Find SOC Pseudopotentials
112+
113+
For SOC calculations, download full-relativistic pseudopotentials from:
114+
- **SG15_ONCV**: [quantum-simulation.org](http://quantum-simulation.org/potentials/sg15_oncv/upf/) - widely used in ABACUS
115+
- **PseudoDOJO**: [pseudo-dojo.org](http://www.pseudo-dojo.org/) - provides both scalar and full-relativistic versions
116+
- **ABACUS official**: [abacus.ustc.edu.cn](http://abacus.ustc.edu.cn/pseudo/list.htm) - includes both pseudopotentials and numerical atomic orbitals
117+
118+
For more details on SOC calculations, see [Spin-polarization and SOC](./scf/spin.md#soc-effects).
69119

70120
### Usage
71121
For more information about pseudopotential usage, check the `ATOMIC_SPECIES` section in the specification of the [STRU file](./input_files/stru.md).

docs/advanced/scf/spin.md

Lines changed: 154 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,36 +29,37 @@ If **"ocp=1"** and **"ocp_set"** is set in INPUT file, the occupations of states
2929
If **"nupdown"** is set to non-zero, number of spin-up and spin-down electrons will be fixed, and Fermi energy level will split to E_Fermi_up and E_Fermi_down. By the way, total magnetization will also be fixed, and will be the value of **"nupdown"**.
3030

3131
## Noncollinear Spin Polarized Calculations
32-
The spin non-collinear polarization calculation corresponds to setting **"noncolin 1"**, in which case the coupling between spin up and spin down will be taken into account.
32+
The spin non-collinear polarization calculation corresponds to setting **"noncolin 1"**, in which case the coupling between spin up and spin down will be taken into account.
3333
In this case, nspin is automatically set to 4, which is usually not required to be specified manually.
34-
The weight of each band will not change, but the number of occupied states will be double.
34+
The weight of each band will not change, but the number of occupied states will be double.
3535
If the nbands parameter is set manually, it is generally set to twice what it would be when nspin<4.
3636

37-
In general, non-collinear magnetic moment settings are often used in calculations considering [SOC effects](#soc-effects). When **"lspinorb 1"** in INPUT file, "nspin" is also automatically set to 4.
37+
In general, non-collinear magnetic moment settings are often used in calculations considering [SOC effects](#soc-effects). When **"lspinorb 1"** in INPUT file, "nspin" is also automatically set to 4.
38+
3839
Note: different settings for "noncolin" and "lspinorb" correspond to different calculations:
39-
- noncolin=0 lspinorb=0 nspin<4 :
40-
Non-collinear magnetic moments and SOC effects are not considered.
41-
- noncolin=0 lspinorb=0 nspin=4 :
42-
Actualy same as the above setting, but the calculation will be larger. So the setting is not recommended.
43-
- noncolin=1 lspinorb=0 :
44-
Non-collinear magnetic moments are considered but SOC effects are not considered
45-
- noncolin=0 lspinorb=1 :
46-
The SOC effect is considered but the magnetic moment is limited to the Z direction
47-
- noncolin=1 lspinorb=1 :
48-
The SOC effect and non-collinear magnetic moment are both calculated.
40+
41+
| noncolin | lspinorb | nspin | Effect | When to Use |
42+
|----------|----------|-------|--------|-------------|
43+
| 0 | 0 | <4 | No non-collinear magnetism, no SOC | Standard collinear spin-polarized or non-spin-polarized calculations |
44+
| 0 | 0 | 4 | Same as above, but larger calculation | **Not recommended** - wastes computational resources |
45+
| 1 | 0 | 4 | Non-collinear magnetism WITHOUT SOC | Systems with complex magnetic structures (e.g., spin spirals, frustrated magnets) where SOC is negligible |
46+
| 0 | 1 | 4 | SOC WITH z-axis magnetism only | Non-magnetic materials with SOC (e.g., semiconductors with band splitting), or magnetic materials where magnetism is along z-axis |
47+
| 1 | 1 | 4 | Both SOC AND non-collinear magnetism | Heavy-element magnetic materials where both SOC and non-collinear magnetism are important (e.g., magnetic anisotropy, Dzyaloshinskii-Moriya interaction) |
48+
49+
**Special case**: `noncolin=0, lspinorb=1` is commonly used for non-magnetic materials with SOC effects (e.g., topological insulators, semiconductors with spin-orbit splitting). In this case, the magnetization is NOT automatically set, implying no magnetic moments in the system.
4950

5051
## For the continuation job
5152
- Continuation job for "nspin 1" need file "SPIN1_CHG.cube" which is generated by setting "out_chg=1" in task before. By setting "init_chg file" in new job's INPUT file, charge density will start from file but not atomic.
5253
- Continuation job for "nspin 2" need files "SPIN1_CHG.cube" and "SPIN2_CHG.cube" which are generated by "out_chg 1" with "nspin 2", and refer to spin-up and spin-down charge densities respectively. It should be note that reading "SPIN1_CHG.cube" only for the continuation target magnetic moment job is not supported now.
5354
- Continuation job for "nspin 4" need files "SPIN%s_CHG.cube", where %s in {1,2,3,4}, which are generated by "out_chg 1" with any variable setting leading to 'nspin'=4, and refer to charge densities in Pauli spin matrixes. It should be note that reading charge density files printing by 'nspin'=2 case is supported, which means only $\sigma_{tot}$ and $\sigma_{z}$ are read.
5455

5556
# SOC Effects
56-
## SOC
57+
## SOC
5758
`lspinorb` is used for control whether or not SOC(spin-orbit coupling) effects should be considered.
5859

5960
Both `basis_type=pw` and `basis_type=lcao` support `scf` and `nscf` calculation with SOC effects.
6061

61-
Atomic forces and cell stresses can not be calculated with SOC effects yet.
62+
Atomic forces and cell stresses can be calculated with SOC effects (supported since ABACUS v3.9.0).
6263

6364
## Pseudopotentials and Numerical Atomic Orbitals
6465
For Norm-Conserving pseudopotentials, there are differences between SOC version and non-SOC version.
@@ -72,9 +73,146 @@ When full-relativistic pseudopotential is used for non-SOC calculation, ABACUS w
7273
Numerical atomic orbitals in ABACUS are unrelated with spin, and same orbital file can be used for SOC and non-SOC calculation.
7374

7475
## Partial-relativistic SOC Effect
75-
Sometimes, for some real materials, both scalar-relativistic and full-relativistic can not describe the exact spin-orbit coupling.
76+
Sometimes, for some real materials, both scalar-relativistic and full-relativistic can not describe the exact spin-orbit coupling.
7677
Artificial modulation can help for these cases.
7778

7879
`soc_lambda`, which has value range [0.0, 1.0] , is used for modulate SOC effect.
7980
In particular, `soc_lambda 0.0` refers to scalar-relativistic case and `soc_lambda 1.0` refers to full-relativistic case.
8081

82+
## Pseudopotential Requirements for SOC
83+
84+
When performing SOC calculations (`lspinorb=1`), specific pseudopotential requirements must be met:
85+
86+
### Checking Pseudopotential Files
87+
88+
In the UPF (Unified Pseudopotential Format) file header (`PP_HEADER` section), look for:
89+
- `has_so="T"` or `has_so="1"`: Indicates SOC information is included
90+
- `relativistic="full"`: Indicates full-relativistic pseudopotential
91+
92+
Example from a full-relativistic UPF file:
93+
```
94+
<PP_HEADER
95+
...
96+
relativistic="full"
97+
has_so="T"
98+
...
99+
/>
100+
```
101+
102+
### Pseudopotential Usage Rules
103+
104+
1. **For SOC calculations** (`lspinorb=1`):
105+
- **MUST** use full-relativistic pseudopotentials with `has_so=true`
106+
- Code will terminate with error: "no soc upf used for lspinorb calculation" if scalar-relativistic PP is used
107+
108+
2. **For non-SOC calculations** (`lspinorb=0`):
109+
- Can use either scalar-relativistic or full-relativistic pseudopotentials
110+
- If full-relativistic PP is used, ABACUS automatically transforms it to scalar-relativistic version
111+
112+
3. **For ultrasoft pseudopotentials (USPP)**:
113+
- Full-relativistic USPP **requires** `lspinorb=true`
114+
- Code will show warning: "FR-USPP please use lspinorb=.true." if this requirement is not met
115+
116+
### Where to Find SOC Pseudopotentials
117+
118+
- **SG15_ONCV**: Full-relativistic versions available at [quantum-simulation.org](http://quantum-simulation.org/potentials/sg15_oncv/upf/)
119+
- **PseudoDOJO**: Provides both scalar and full-relativistic versions
120+
- **ABACUS official**: [abacus.ustc.edu.cn](http://abacus.ustc.edu.cn/pseudo/list.htm)
121+
122+
## Automatic Parameter Settings
123+
124+
When using SOC or non-collinear calculations, ABACUS automatically adjusts several parameters:
125+
126+
### When `lspinorb=true`:
127+
1. **nspin**: Automatically set to 4 (noncollinear spin representation)
128+
2. **Symmetry**: Automatically disabled (`symm_flag=-1`) because SOC breaks inversion symmetry
129+
3. **Magnetization**: NOT automatically set when `noncolin=0` (implies non-magnetic material with SOC)
130+
131+
### When `noncolin=true`:
132+
1. **nspin**: Automatically set to 4
133+
2. **npol**: Set to 2 (wave function has two spinor components)
134+
3. **Magnetization**: Automatically set if user provides zero values (unless `lspinorb=1` and `noncolin=0`)
135+
136+
### Important Notes:
137+
- You do NOT need to manually set `nspin=4` when using `lspinorb=1` or `noncolin=1`
138+
- Symmetry operations are incompatible with SOC, so they are automatically turned off
139+
- For `lspinorb=1, noncolin=0`: This is a special case for non-magnetic materials with SOC, where magnetization is not initialized
140+
141+
## Common Errors and Solutions
142+
143+
### Error: "no soc upf used for lspinorb calculation"
144+
**Cause**: Using scalar-relativistic pseudopotentials with `lspinorb=1`
145+
146+
**Solution**: Download and use full-relativistic pseudopotentials with `has_so=true`. Check the UPF file header to verify `relativistic="full"` and `has_so="T"`.
147+
148+
### Error: "nspin=4(soc or noncollinear-spin) does not support gamma only calculation"
149+
**Cause**: Trying to use `gamma_only=true` with `lspinorb=1` or `noncolin=1`
150+
151+
**Solution**: Set `gamma_only=false` or `gamma_only=0` in your INPUT file. SOC and non-collinear calculations require k-point sampling beyond the gamma point.
152+
153+
### Warning: "FR-USPP please use lspinorb=.true."
154+
**Cause**: Using full-relativistic ultrasoft pseudopotentials without enabling SOC
155+
156+
**Solution**: Set `lspinorb=true` in your INPUT file, or switch to scalar-relativistic USPP if SOC is not needed.
157+
158+
### Issue: Forces or stresses not calculated
159+
**Note**: This issue has been resolved. Atomic forces and cell stresses can now be calculated with SOC effects (supported since ABACUS v3.9.0).
160+
161+
If you are using an older version of ABACUS (before v3.9.0), force and stress calculations with SOC were not supported. Please upgrade to the latest version to use this feature.
162+
163+
## INPUT File Examples
164+
165+
### Example 1: SOC without Non-collinear Magnetism
166+
For non-magnetic materials with SOC (e.g., GaAs, topological insulators):
167+
168+
```
169+
INPUT_PARAMETERS
170+
calculation scf
171+
basis_type pw
172+
ecutwfc 50
173+
lspinorb 1 # Enable SOC
174+
noncolin 0 # No non-collinear magnetism
175+
# nspin will be automatically set to 4
176+
# symmetry will be automatically disabled
177+
```
178+
179+
### Example 2: Non-collinear Magnetism without SOC
180+
For systems with complex magnetic structures but negligible SOC:
181+
182+
```
183+
INPUT_PARAMETERS
184+
calculation scf
185+
basis_type lcao
186+
lspinorb 0 # No SOC
187+
noncolin 1 # Enable non-collinear magnetism
188+
# nspin will be automatically set to 4
189+
# Magnetization directions should be specified in STRU file
190+
```
191+
192+
### Example 3: Both SOC and Non-collinear Magnetism
193+
For heavy-element magnetic materials (e.g., Fe with SOC, materials with DMI):
194+
195+
```
196+
INPUT_PARAMETERS
197+
calculation scf
198+
basis_type pw
199+
ecutwfc 60
200+
lspinorb 1 # Enable SOC
201+
noncolin 1 # Enable non-collinear magnetism
202+
# nspin will be automatically set to 4
203+
# symmetry will be automatically disabled
204+
# Magnetization directions should be specified in STRU file
205+
```
206+
207+
### Example 4: Partial-relativistic SOC
208+
For fine-tuning SOC strength:
209+
210+
```
211+
INPUT_PARAMETERS
212+
calculation scf
213+
basis_type pw
214+
ecutwfc 50
215+
lspinorb 1 # Enable SOC
216+
soc_lambda 0.5 # 50% SOC strength
217+
# Useful when full SOC overestimates or underestimates experimental results
218+
```

docs/community/faq.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,23 @@ Non-periodic systems such as liquid systems can be calculated by using supercell
4444

4545
**6. How to perform spin-orbital coupling (SOC) calculations in ABACUS?**
4646

47-
Apart from setting relavant keys (`lspinorb` to 1) in the `INPUT` file, SOC calculations can only be performed with fully-relativistic pseudopotentials. Users are suggested to download fully-relativistic versions of SG15_ONCV pseudopotential files from a [website](http://quantum-simulation.org/potentials/sg15_oncv/upf/). The numerical orbital files generated from the corresponding scalar-relativistic pseudoptential files by ABACUS ([here](http://abacus.ustc.edu.cn/pseudo/list.htm)) can be used in collaboration with the fully-relativistic pseudopotentials.
47+
To perform SOC calculations in ABACUS, follow these steps:
48+
49+
1. **Set `lspinorb=1` in the INPUT file**: This enables spin-orbit coupling effects
50+
2. **Use full-relativistic pseudopotentials**: SOC calculations require pseudopotentials with `has_so=true` in the UPF header
51+
- Download full-relativistic versions of SG15_ONCV pseudopotentials from [quantum-simulation.org](http://quantum-simulation.org/potentials/sg15_oncv/upf/)
52+
- Check the UPF file header for `relativistic="full"` and `has_so="T"`
53+
3. **Verify automatic settings**: When `lspinorb=1` is set, `nspin` is automatically set to 4 and symmetry is automatically disabled
54+
55+
**Basis set support**: Both `basis_type=pw` (plane wave) and `basis_type=lcao` (numerical atomic orbitals) support SOC calculations for both SCF and NSCF.
56+
57+
**Force and stress calculations**: Atomic forces and cell stresses can be calculated with SOC (supported since ABACUS v3.9.0).
58+
59+
**Numerical atomic orbitals**: The numerical orbital files generated from scalar-relativistic pseudopotentials (available at [abacus.ustc.edu.cn](http://abacus.ustc.edu.cn/pseudo/list.htm)) can be used with full-relativistic pseudopotentials, as orbitals are spin-independent.
60+
61+
**Common error**: If you see "no soc upf used for lspinorb calculation", ensure you are using full-relativistic pseudopotentials with `has_so=true`.
62+
63+
For detailed information, examples, and troubleshooting, see [Spin-polarization and SOC](../advanced/scf/spin.md#soc-effects).
4864

4965
**7. How to restart jobs in abacus?**
5066

0 commit comments

Comments
 (0)