Skip to content

Commit f960053

Browse files
authored
Merge pull request #56 from Exabyte-io/feat/SOF-7123
SOF-7123: support DFT+U+V and DFT+U+J0 calculations in QE
2 parents 06e045f + 97ae6d5 commit f960053

6 files changed

+230
-31
lines changed

src/context/context.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { BoundaryConditionsFormDataProvider } from "./providers/BoundaryConditionsFormDataProvider";
2-
import { HubbardContextProvider } from "./providers/HubbardContextProvider";
32
import { HubbardContextProviderLegacy } from "./providers/HubbardContextProviderLegacy";
3+
import { HubbardJContextProvider } from "./providers/HubbardJContextProvider";
4+
import { HubbardUContextProvider } from "./providers/HubbardUContextProvider";
5+
import { HubbardVContextProvider } from "./providers/HubbardVContextProvider";
46
import { MLSettingsContextProvider } from "./providers/MLSettingsContextProvider";
57
import { MLTrainTestSplitContextProvider } from "./providers/MLTrainTestSplitContextProvider";
68
import { NEBFormDataProvider } from "./providers/NEBFormDataProvider";
@@ -22,6 +24,8 @@ export default {
2224
PointsPathFormDataProvider,
2325
ExplicitPointsPathFormDataProvider,
2426
ExplicitPointsPath2PIBAFormDataProvider,
25-
HubbardContextProvider,
27+
HubbardJContextProvider,
28+
HubbardUContextProvider,
29+
HubbardVContextProvider,
2630
HubbardContextProviderLegacy,
2731
};

src/context/providers.js

+14-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ const {
1010
PointsPathFormDataProvider,
1111
ExplicitPointsPathFormDataProvider,
1212
ExplicitPointsPath2PIBAFormDataProvider,
13-
HubbardContextProvider,
13+
HubbardJContextProvider,
14+
HubbardUContextProvider,
15+
HubbardVContextProvider,
1416
HubbardContextProviderLegacy,
1517
} = context;
1618

@@ -62,9 +64,17 @@ export const wodeProviders = {
6264
providerCls: ExplicitPointsPath2PIBAFormDataProvider,
6365
config: _makeImportant({ name: "explicitKPath2PIBA" }),
6466
},
65-
HubbardContextManager: {
66-
providerCls: HubbardContextProvider,
67-
config: _makeImportant({ name: "hubbard" }),
67+
HubbardJContextManager: {
68+
providerCls: HubbardJContextProvider,
69+
config: _makeImportant({ name: "hubbard_j" }),
70+
},
71+
HubbardUContextManager: {
72+
providerCls: HubbardUContextProvider,
73+
config: _makeImportant({ name: "hubbard_u" }),
74+
},
75+
HubbardVContextManager: {
76+
providerCls: HubbardVContextProvider,
77+
config: _makeImportant({ name: "hubbard_v" }),
6878
},
6979
HubbardContextManagerLegacy: {
7080
providerCls: HubbardContextProviderLegacy,

src/context/providers/HubbardContextProviderLegacy.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import { HubbardContextProvider } from "./HubbardContextProvider";
1+
import { HubbardUContextProvider } from "./HubbardUContextProvider";
22

33
const defaultHubbardConfig = {
44
hubbardUValue: 1.0,
55
};
66

7-
export class HubbardContextProviderLegacy extends HubbardContextProvider {
7+
export class HubbardContextProviderLegacy extends HubbardUContextProvider {
88
get defaultData() {
99
return [
1010
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import { HubbardUContextProvider } from "./HubbardUContextProvider";
2+
3+
const defaultHubbardConfig = {
4+
paramType: "U",
5+
atomicSpecies: "",
6+
atomicOrbital: "2p",
7+
value: 1.0,
8+
};
9+
10+
export class HubbardJContextProvider extends HubbardUContextProvider {
11+
get defaultData() {
12+
return [
13+
{
14+
...defaultHubbardConfig,
15+
atomicSpecies: this.uniqueElements?.length > 0 ? this.uniqueElements[0] : "",
16+
},
17+
];
18+
}
19+
20+
get uiSchemaStyled() {
21+
return {
22+
"ui:options": {
23+
addable: true,
24+
orderable: true,
25+
removable: true,
26+
},
27+
title: {
28+
"ui:classNames": "col-xs-12",
29+
},
30+
items: {
31+
paramType: this.defaultFieldStyles,
32+
atomicSpecies: this.defaultFieldStyles,
33+
atomicOrbital: this.defaultFieldStyles,
34+
value: this.defaultFieldStyles,
35+
},
36+
};
37+
}
38+
39+
get jsonSchema() {
40+
return {
41+
$schema: "http://json-schema.org/draft-04/schema#",
42+
title: "",
43+
description: "Hubbard parameters for DFT+U+J calculation.",
44+
type: "array",
45+
items: {
46+
type: "object",
47+
properties: {
48+
paramType: {
49+
type: "string",
50+
title: "Species",
51+
enum: ["U", "J", "B", "E2", "E3"],
52+
default: defaultHubbardConfig.paramType,
53+
},
54+
atomicSpecies: {
55+
type: "string",
56+
title: "Species",
57+
enum: this.uniqueElements,
58+
default: this.uniqueElements?.length > 0 ? this.uniqueElements[0] : "",
59+
},
60+
atomicOrbital: {
61+
type: "string",
62+
title: "Orbital",
63+
enum: this.orbitalList,
64+
default: defaultHubbardConfig.atomicOrbital,
65+
},
66+
value: {
67+
type: "number",
68+
title: "Value (eV)",
69+
default: defaultHubbardConfig.value,
70+
},
71+
},
72+
},
73+
minItems: 1,
74+
};
75+
}
76+
}

src/context/providers/HubbardContextProvider.js renamed to src/context/providers/HubbardUContextProvider.js

+23-23
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,34 @@ const defaultHubbardConfig = {
88
hubbardUValue: 1.0,
99
};
1010

11-
export class HubbardContextProvider extends mix(JSONSchemaFormDataProvider).with(
11+
export class HubbardUContextProvider extends mix(JSONSchemaFormDataProvider).with(
1212
MaterialContextMixin,
1313
) {
1414
static Material = Made.Material;
1515

1616
constructor(config) {
1717
super(config);
1818
this.uniqueElements = this.material?.Basis?.uniqueElements || [];
19+
this.orbitalList = [
20+
"2p",
21+
"3s",
22+
"3p",
23+
"3d",
24+
"4s",
25+
"4p",
26+
"4d",
27+
"4f",
28+
"5s",
29+
"5p",
30+
"5d",
31+
"5f",
32+
"6s",
33+
"6p",
34+
"6d",
35+
"7s",
36+
"7p",
37+
"7d",
38+
];
1939
}
2040

2141
get defaultData() {
@@ -49,7 +69,7 @@ export class HubbardContextProvider extends mix(JSONSchemaFormDataProvider).with
4969
return {
5070
$schema: "http://json-schema.org/draft-04/schema#",
5171
title: "",
52-
description: "Hubbard parameters for DFT+U calculation.",
72+
description: "Hubbard U parameters for DFT+U or DFT+U+V calculation.",
5373
type: "array",
5474
items: {
5575
type: "object",
@@ -63,26 +83,7 @@ export class HubbardContextProvider extends mix(JSONSchemaFormDataProvider).with
6383
atomicOrbital: {
6484
type: "string",
6585
title: "Atomic orbital",
66-
enum: [
67-
"2p",
68-
"3s",
69-
"3p",
70-
"3d",
71-
"4s",
72-
"4p",
73-
"4d",
74-
"4f",
75-
"5s",
76-
"5p",
77-
"5d",
78-
"5f",
79-
"6s",
80-
"6p",
81-
"6d",
82-
"7s",
83-
"7p",
84-
"7d",
85-
],
86+
enum: this.orbitalList,
8687
default: defaultHubbardConfig.atomicOrbital,
8788
},
8889
hubbardUValue: {
@@ -92,7 +93,6 @@ export class HubbardContextProvider extends mix(JSONSchemaFormDataProvider).with
9293
},
9394
},
9495
},
95-
minItems: 1,
9696
};
9797
}
9898
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
import { HubbardUContextProvider } from "./HubbardUContextProvider";
2+
3+
const defaultHubbardConfig = {
4+
atomicSpecies: "",
5+
atomicOrbital: "2p",
6+
atomicSpecies2: "",
7+
atomicOrbital2: "2p",
8+
siteIndex: 1,
9+
siteIndex2: 1,
10+
hubbardVValue: 1.0,
11+
};
12+
13+
export class HubbardVContextProvider extends HubbardUContextProvider {
14+
get defaultData() {
15+
return [
16+
{
17+
...defaultHubbardConfig,
18+
atomicSpecies: this.firstSpecies,
19+
atomicSpecies2: this.secondSpecies,
20+
siteIndex2: this.uniqueElements?.length > 1 ? 2 : defaultHubbardConfig.siteIndex2,
21+
},
22+
];
23+
}
24+
25+
get firstSpecies() {
26+
return this.uniqueElements?.length > 0 ? this.uniqueElements[0] : "";
27+
}
28+
29+
get secondSpecies() {
30+
return this.uniqueElements?.length > 1 ? this.uniqueElements[1] : this.firstSpecies;
31+
}
32+
33+
get uiSchemaStyled() {
34+
return {
35+
"ui:options": {
36+
addable: true,
37+
orderable: true,
38+
removable: true,
39+
},
40+
title: {
41+
"ui:classNames": "col-xs-12",
42+
},
43+
items: {
44+
atomicSpecies: this.defaultFieldStyles,
45+
atomicOrbital: this.defaultFieldStyles,
46+
atomicSpecies2: this.defaultFieldStyles,
47+
atomicOrbital2: this.defaultFieldStyles,
48+
siteIndex: this.defaultFieldStyles,
49+
siteIndex2: this.defaultFieldStyles,
50+
hubbardVValue: this.defaultFieldStyles,
51+
},
52+
};
53+
}
54+
55+
get jsonSchema() {
56+
return {
57+
$schema: "http://json-schema.org/draft-04/schema#",
58+
title: "",
59+
description: "Hubbard V parameters for DFT+U+V calculation.",
60+
type: "array",
61+
items: {
62+
type: "object",
63+
properties: {
64+
atomicSpecies: {
65+
type: "string",
66+
title: "Species 1",
67+
enum: this.uniqueElements,
68+
default: this.firstSpecies,
69+
},
70+
siteIndex: {
71+
type: "integer",
72+
title: "Site no 1",
73+
default: defaultHubbardConfig.siteIndex,
74+
},
75+
atomicOrbital: {
76+
type: "string",
77+
title: "Orbital 1",
78+
enum: this.orbitalList,
79+
default: defaultHubbardConfig.atomicOrbital,
80+
},
81+
atomicSpecies2: {
82+
type: "string",
83+
title: "Species 2",
84+
enum: this.uniqueElements,
85+
default: this.secondSpecies,
86+
},
87+
siteIndex2: {
88+
type: "integer",
89+
title: "Site no 2",
90+
default:
91+
this.uniqueElements?.length > 1 ? 2 : defaultHubbardConfig.siteIndex2,
92+
},
93+
atomicOrbital2: {
94+
type: "string",
95+
title: "Orbital 2",
96+
enum: this.orbitalList,
97+
default: defaultHubbardConfig.atomicOrbital,
98+
},
99+
hubbardVValue: {
100+
type: "number",
101+
title: "V (eV)",
102+
default: defaultHubbardConfig.hubbardVValue,
103+
},
104+
},
105+
},
106+
minItems: 1,
107+
};
108+
}
109+
}

0 commit comments

Comments
 (0)