Skip to content

Commit

Permalink
Merge pull request #77 from Exabyte-io/feat/SOF-7315
Browse files Browse the repository at this point in the history
SOF-7315: accomodate constrained magnetization in CollinearMagnetizationContextProvider
  • Loading branch information
pranabdas committed Apr 5, 2024
2 parents ec60a93 + cf7e99f commit 3e6629c
Show file tree
Hide file tree
Showing 9 changed files with 92 additions and 72 deletions.
24 changes: 12 additions & 12 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Expand Up @@ -46,8 +46,8 @@
"underscore.string": "^3.3.4"
},
"devDependencies": {
"@exabyte-io/ade.js": "2024.3.29-0",
"@exabyte-io/application-flavors.js": "2024.3.29-0",
"@exabyte-io/ade.js": "2024.4.5-0",
"@exabyte-io/application-flavors.js": "2024.4.5-0",
"@exabyte-io/eslint-config": "^2022.11.17-0",
"@exabyte-io/ide.js": "2024.3.26-0",
"@exabyte-io/mode.js": "2024.3.26-0",
Expand Down
2 changes: 1 addition & 1 deletion src/context/providers.js
Expand Up @@ -105,6 +105,6 @@ export const wodeProviders = {
},
CollinearMagnetizationDataManager: {
providerCls: CollinearMagnetizationContextProvider,
config: _makeImportant({ name: "starting_magnetization" }),
config: _makeImportant({ name: "collinearMagnetization" }),
},
};
114 changes: 73 additions & 41 deletions src/context/providers/CollinearMagnetizationContextProvider.js
@@ -1,12 +1,20 @@
import { JSONSchemaFormDataProvider, MaterialContextMixin } from "@mat3ra/code/dist/js/context";
import { Made } from "@mat3ra/made";
import lodash from "lodash";
import { mix } from "mixwith";

export class CollinearMagnetizationContextProvider extends mix(JSONSchemaFormDataProvider).with(
MaterialContextMixin,
) {
static Material = Made.Material;

constructor(config) {
super(config);
this.firstElement =
this.uniqueElementsWithLabels?.length > 0 ? this.uniqueElementsWithLabels[0] : "";
this.isTotalMagnetization = lodash.get(this.data, "isTotalMagnetization", false);
}

get uniqueElementsWithLabels() {
const elementsWithLabelsArray = this.material?.Basis?.elementsWithLabelsArray || [];
return [...new Set(elementsWithLabelsArray)];
Expand All @@ -16,69 +24,93 @@ export class CollinearMagnetizationContextProvider extends mix(JSONSchemaFormDat
return this.uniqueElementsWithLabels.indexOf(element) + 1;
};

// eslint-disable-next-line class-methods-use-this
get defaultData() {
return [
{
index: 1,
atomicSpecies:
this.uniqueElementsWithLabels?.length > 0
? this.uniqueElementsWithLabels[0]
: "",
value: 0.0,
},
];
return {
startingMagnetization: [
{
index: 1,
atomicSpecies: this.firstElement,
value: 0.0,
},
],
isTotalMagnetization: false,
totalMagnetization: 0.0,
};
}

transformData = (data) => {
return data.map((row) => ({
const startingMagnetizationWithIndex = data.startingMagnetization.map((row) => ({
...row,
index: this.indexOfElement(row.atomicSpecies),
}));

return {
...data,
startingMagnetization: startingMagnetizationWithIndex,
};
};

// eslint-disable-next-line class-methods-use-this
get uiSchemaStyled() {
return {
"ui:options": {
addable: true,
orderable: false,
removable: true,
},
items: {
atomicSpecies: this.defaultFieldStyles,
value: {
"ui:classNames": "col-xs-6 ",
startingMagnetization: {
items: {
atomicSpecies: {
"ui:classNames": "col-xs-3",
},
value: {
"ui:classNames": "col-xs-6",
},
},
"ui:readonly": this.isTotalMagnetization,
},
isTotalMagnetization: {},
totalMagnetization: {
"ui:classNames": "col-xs-6",
"ui:readonly": !this.isTotalMagnetization,
},
};
}

get jsonSchema() {
return {
$schema: "http://json-schema.org/draft-04/schema#",
$schema: "http://json-schema.org/draft-07/schema#",
title: "",
description: "Set starting magnetization, can have values in the range [-1, +1].",
type: "array",
items: {
type: "object",
properties: {
atomicSpecies: {
type: "string",
title: "Atomic species",
enum: this.uniqueElementsWithLabels,
default:
this.uniqueElementsWithLabels?.length > 0
? this.uniqueElementsWithLabels[0]
: "",
},
value: {
type: "number",
title: "Starting magnetization",
default: 0.0,
minimum: -1.0,
maximum: 1.0,
type: "object",
properties: {
startingMagnetization: {
type: "array",
maxItems: this.uniqueElementsWithLabels.length,
items: {
type: "object",
properties: {
atomicSpecies: {
type: "string",
title: "Atomic species",
enum: this.uniqueElementsWithLabels,
default: this.firstElement,
},
value: {
type: "number",
title: "Starting magnetization",
default: 0.0,
minimum: -1.0,
maximum: 1.0,
},
},
},
},
isTotalMagnetization: {
type: "boolean",
title: "Set total magnetization instead",
default: false,
},
totalMagnetization: {
type: "number",
title: "Total magnetization",
default: 0.0,
},
},
};
}
Expand Down
3 changes: 0 additions & 3 deletions src/context/providers/HubbardContextProviderLegacy.js
Expand Up @@ -35,9 +35,6 @@ export class HubbardContextProviderLegacy extends HubbardUContextProvider {
orderable: false,
removable: true,
},
title: {
"ui:classNames": "col-xs-12",
},
items: {
atomicSpecies: this.defaultFieldStyles,
atomicSpeciesIndex: { ...this.defaultFieldStyles, "ui:readonly": true },
Expand Down
5 changes: 1 addition & 4 deletions src/context/providers/HubbardJContextProvider.js
Expand Up @@ -24,9 +24,6 @@ export class HubbardJContextProvider extends HubbardUContextProvider {
orderable: true,
removable: true,
},
title: {
"ui:classNames": "col-xs-12",
},
items: {
paramType: this.defaultFieldStyles,
atomicSpecies: this.defaultFieldStyles,
Expand All @@ -38,7 +35,7 @@ export class HubbardJContextProvider extends HubbardUContextProvider {

get jsonSchema() {
return {
$schema: "http://json-schema.org/draft-04/schema#",
$schema: "http://json-schema.org/draft-07/schema#",
title: "",
description: "Hubbard parameters for DFT+U+J calculation.",
type: "array",
Expand Down
5 changes: 1 addition & 4 deletions src/context/providers/HubbardUContextProvider.js
Expand Up @@ -58,9 +58,6 @@ export class HubbardUContextProvider extends mix(JSONSchemaFormDataProvider).wit
orderable: false,
removable: true,
},
title: {
"ui:classNames": "col-xs-12",
},
items: {
atomicSpecies: this.defaultFieldStyles,
atomicOrbital: this.defaultFieldStyles,
Expand All @@ -71,7 +68,7 @@ export class HubbardUContextProvider extends mix(JSONSchemaFormDataProvider).wit

get jsonSchema() {
return {
$schema: "http://json-schema.org/draft-04/schema#",
$schema: "http://json-schema.org/draft-07/schema#",
title: "",
description: "Hubbard U parameters for DFT+U or DFT+U+V calculation.",
type: "array",
Expand Down
5 changes: 1 addition & 4 deletions src/context/providers/HubbardVContextProvider.js
Expand Up @@ -40,9 +40,6 @@ export class HubbardVContextProvider extends HubbardUContextProvider {
orderable: true,
removable: true,
},
title: {
"ui:classNames": "col-xs-12",
},
items: {
atomicSpecies: this.defaultFieldStyles,
atomicOrbital: this.defaultFieldStyles,
Expand All @@ -57,7 +54,7 @@ export class HubbardVContextProvider extends HubbardUContextProvider {

get jsonSchema() {
return {
$schema: "http://json-schema.org/draft-04/schema#",
$schema: "http://json-schema.org/draft-07/schema#",
title: "",
description: "Hubbard V parameters for DFT+U+V calculation.",
type: "array",
Expand Down
2 changes: 1 addition & 1 deletion src/context/providers/IonDynamicsContextProvider.js
Expand Up @@ -26,7 +26,7 @@ export class IonDynamicsContextProvider extends JSONSchemaFormDataProvider {
// eslint-disable-next-line class-methods-use-this
get jsonSchema() {
return {
$schema: "http://json-schema.org/draft-04/schema#",
$schema: "http://json-schema.org/draft-07/schema#",
type: "object",
description: "Important parameters for molecular dynamics calculation",
properties: {
Expand Down

0 comments on commit 3e6629c

Please sign in to comment.