Skip to content

Commit

Permalink
chore: add multi-material support for VASPContextProvider + cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
azech-hqs committed Oct 15, 2022
1 parent 384d2c8 commit fbba475
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 32 deletions.
31 changes: 2 additions & 29 deletions src/context/providers/espresso/providers.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,6 @@ export class QEPWXContextProvider extends mix(ExecutableContextProvider).with(
) {
static Material = Made.Material;

get atomSymbols() {
return this.material.Basis.uniqueElements;
}

static atomSymbols(material) {
return material.Basis.uniqueElements;
}
Expand All @@ -44,21 +40,6 @@ export class QEPWXContextProvider extends mix(ExecutableContextProvider).with(
return material.Basis.atomicPositions.join("\n");
}

static getMaterialContext(material) {
return {
NAT: material.Basis.atomicPositions.length,
NTYP: material.Basis.uniqueElements.length,
ATOMIC_POSITIONS: QEPWXContextProvider.atomicPositionsWithConstraints(material),
ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: QEPWXContextProvider.atomicPositions(material),
CELL_PARAMETERS: QEPWXContextProvider.CELL_PARAMETERS(material),
};
}

static getMaterialsContext(materials) {
if (!materials) return {};
return { perMaterial: materials.map((material) => this.getMaterialContext(material)) };
}

static NAT(material) {
return material.Basis.atomicPositions.length;
}
Expand All @@ -73,7 +54,7 @@ export class QEPWXContextProvider extends mix(ExecutableContextProvider).with(
return {
IBRAV,
RESTART_MODE: this.RESTART_MODE,
ATOMIC_SPECIES: this._ATOMIC_SPECIES(material),
ATOMIC_SPECIES: this.ATOMIC_SPECIES(material),
NAT: QEPWXContextProvider.NAT(material),
NTYP: QEPWXContextProvider.NTYP(material),
ATOMIC_POSITIONS: QEPWXContextProvider.atomicPositionsWithConstraints(material),
Expand Down Expand Up @@ -110,14 +91,6 @@ export class QEPWXContextProvider extends mix(ExecutableContextProvider).with(
return (this.methodData.pseudo || []).find((p) => p.element === symbol);
}

get ATOMIC_SPECIES() {
// atomic species with pseudopotentials
return _.map(this.atomSymbols, (symbol) => {
const pseudo = this.getPseudoBySymbol(symbol);
return QEPWXContextProvider.symbolToAtomicSpecie(symbol, pseudo);
}).join("\n");
}

/** Builds ATOMIC SPECIES block of pw.x input in the format
* X Mass_X PseudoPot_X
* where X is the atom label
Expand All @@ -126,7 +99,7 @@ export class QEPWXContextProvider extends mix(ExecutableContextProvider).with(
*
* Note: assumes this.methodData is defined
*/
_ATOMIC_SPECIES(material) {
ATOMIC_SPECIES(material) {
return QEPWXContextProvider.atomSymbols(material)
.map((symbol) => {
const pseudo = this.getPseudoBySymbol(symbol);
Expand Down
20 changes: 17 additions & 3 deletions src/context/providers/vasp/providers.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,27 @@ import { ExecutableContextProvider } from "../../providers";

export class VASPContextProvider extends mix(ExecutableContextProvider).with(
MaterialContextMixin,
MaterialsContextMixin,
MethodDataContextMixin,
WorkflowContextMixin,
JobContextMixin,
) {
static Material = Made.Material;

// eslint-disable-next-line class-methods-use-this
buildVASPContext(material) {
return {
// TODO: figure out whether we need two separate POSCARS, maybe one is enough
POSCAR: material.getAsPOSCAR(true, true),
POSCAR_WITH_CONSTRAINTS: material.getAsPOSCAR(true),
};
}

getDataPerMaterial() {
if (!this.materials || this.materials.length <= 1) return {};
return { perMaterial: this.materials.map((material) => this.buildVASPContext(material)) };
}

/*
* @NOTE: Overriding getData makes this provider "stateless", ie. delivering data from scratch each time and not
* considering the content of `this.data`, and `this.isEdited` field(s).
Expand All @@ -29,9 +44,8 @@ export class VASPContextProvider extends mix(ExecutableContextProvider).with(
// ECUTRHO;

return {
// TODO: figure out whether we need two separate POSCARS, maybe one is enough
POSCAR: this.material.getAsPOSCAR(true, true),
POSCAR_WITH_CONSTRAINTS: this.material.getAsPOSCAR(true),
...this.buildVASPContext(this.material),
...this.getDataPerMaterial(),
};
}
}
Expand Down

0 comments on commit fbba475

Please sign in to comment.