Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add atom centered basis set #132

Draft
wants to merge 34 commits into
base: develop
Choose a base branch
from
Draft
Changes from 6 commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
d436e95
add main and auxiliary basis set quantities to AtomCenteredBasisSet
EBB2675 Sep 24, 2024
022c1fa
formatting
EBB2675 Sep 24, 2024
bf1f6f4
Merge branch 'develop' into coupled_cluster
EBB2675 Sep 25, 2024
af88624
add a draft for AtomCenteredFunction
EBB2675 Sep 25, 2024
0a9d98b
add a quantity for number of primitives
EBB2675 Sep 25, 2024
a204ec4
add atoms_state reference to AtomCenteredBasisSet
EBB2675 Sep 26, 2024
a325753
Merge remote-tracking branch 'origin/develop' into 130-atom-centered-…
EBB2675 Oct 1, 2024
8866ab7
assign JSON format to basis set
EBB2675 Oct 2, 2024
c7b078a
add type and auxiliary_type quantities to AtomCenteredBasisSet
EBB2675 Oct 8, 2024
1208e88
reformatted basis_set.py
EBB2675 Oct 8, 2024
fbc13f9
add NAO and point charges to basis set types
EBB2675 Oct 8, 2024
ddab789
add cECPs and pointcharges to AtomCenteredBasisSet
EBB2675 Oct 9, 2024
8c6ae1a
fix point charge Quantity type
EBB2675 Oct 11, 2024
c94e995
a bit of a cleanup
EBB2675 Oct 14, 2024
a007e1e
merge develop
EBB2675 Oct 18, 2024
62de243
move GTOIntegralDecomposition to NumericalSettings
EBB2675 Oct 24, 2024
c12adac
Merge branch 'develop' into 130-atom-centered-basis-set
EBB2675 Nov 19, 2024
52d6b9a
merge develop
EBB2675 Nov 19, 2024
646430c
add Mesh, NumericalIntegration and MolecularHamiltonianSubTerms
EBB2675 Nov 19, 2024
cca109f
minor adjustments to Mesh and NumericalIntegration
EBB2675 Nov 19, 2024
42f4f38
add integration_thresh and weight_cutoff to NumericalIntegration
EBB2675 Nov 20, 2024
0f92eb9
check whether n_primitive matches the lengths of exponents and contra…
EBB2675 Nov 20, 2024
e8fb5ef
add tests for AtomCenteredBasisSet and AtomCenteredFunction
EBB2675 Nov 20, 2024
4826f0c
add tests for Mesh and NumericalIntegration
EBB2675 Nov 20, 2024
c5141ab
modify Mesh
EBB2675 Nov 20, 2024
23d7615
MEnum for MolecularHamiltonianContributions
EBB2675 Nov 21, 2024
9ef13ea
remove contributions
EBB2675 Nov 21, 2024
80c8b64
add a normalizer function for the AtomCenteredFunction to handle comb…
EBB2675 Nov 28, 2024
4ac1076
fix test_basis_set.py
EBB2675 Dec 4, 2024
10e782c
add OrbitalLocalization to numerical_settings.py
EBB2675 Dec 4, 2024
5c15e97
add method to LocalCorrelation
EBB2675 Dec 4, 2024
2fd6398
add total_charge and total_spin to ModelSystem
EBB2675 Dec 5, 2024
c9d6118
add a simple HF class
EBB2675 Dec 10, 2024
816c7ba
a placeholder for MO and LCAO
EBB2675 Dec 11, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 68 additions & 2 deletions src/nomad_simulations/schema_packages/basis_set.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,16 +190,82 @@ class AtomCenteredFunction(ArchiveSection):
Specifies a single function (term) in an atom-centered basis set.
"""

pass
function_type = Quantity(
type=MEnum('S', 'P', 'D', 'F', 'G', 'H', 'I', 'J'),
description="""
the angular momentum of the shell to be added.
""",
)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks more like something for AtomsState. @JosePizarro3

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think @EBB2675 wants to store the angular momentum here simply. I'd say if a string is enough, go ahead. Tho I will keep consistent with notation: small letters type=MEnum('s', 'p', 'd', 'f')

Now, are there cases where one needs to go to h, i, j? I must admit g "might" be ok in some excited state calculations, but the others... I am not sure.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tho I will keep consistent with notation: small letters type=MEnum('s', 'p', 'd', 'f')

Shouldn't we use capital letters for the total momentum?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@EBB2675 Is this orbital angular momentum? Could you specify in the description, pls?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah sorry, if it is total ang mom yes, capital letters is good. Tho we need to decide where this kind of information should be living in a more consistent way.

We can leave that discussion out of this pr.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's the type of basis functions. Let me improve all the Quantity and class descriptions, it will be clearer


n_primitive = Quantity(
type=int,
description="""
Number of primitives.
""",
)

exponents = Quantity(
type=np.float32,
shape=['n_primitive'],
description="""
List of exponents for the basis function.
""",
)

# TODO: design system for writing basis functions like gaussian or slater orbitals
contraction_coefficients = Quantity(
type=np.float32,
shape=['n_primitive'],
description="""
List of contraction coefficients corresponding to the exponents.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would elaborate a bit more here, keeping also non-experts in mind.

""",
)

def normalize(self, archive: 'EntryArchive', logger: 'BoundLogger') -> None:
super().normalize(archive, logger)
# self.name = self.m_def.name


class AtomCenteredBasisSet(BasisSetComponent):
"""
Defines an atom-centered basis set.
"""

main_basis_set = Quantity(
type=str,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think str is fine for now, we'll likely want to constrain the choice here down the line.

description="""
Name of the main basis set.
""",
)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the distinction between main and aux? If it's method routines, you can use BasisSetContainer to distinguish them.


aux_c_basis_set = Quantity(
type=str,
description="""
AuxC type of basis set.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would also be good to elaborate on the description here.

""",
)

aux_j_basis_set = Quantity(
type=str,
description="""
AuxJ type of basis set.
""",
)

aux_jk_basis_set = Quantity(
type=str,
description="""
AuxJK type of basis set.
""",
)

atoms_ref = Quantity(
type=AtomsState,
shape=['*'],
description="""
References to the `AtomsState` sections that define the atoms this basis set applies to.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Connected to my comment in the issue, you might also want a map to a ModelSystem.
For simplicity sake, I'd try to use only 1 type of linker when possible. Convenience can be added in other ways.

""",
)

functional_composition = SubSection(
sub_section=AtomCenteredFunction.m_def, repeats=True
) # TODO change name
Expand Down