Skip to content

Commit

Permalink
Substantial rework of occ cg outputs, renaming lots of fields in JSON…
Browse files Browse the repository at this point in the history
… etc.
  • Loading branch information
peterspackman committed Jan 9, 2025
1 parent 686f333 commit 1cd58a0
Show file tree
Hide file tree
Showing 15 changed files with 282 additions and 275 deletions.
12 changes: 6 additions & 6 deletions 3rdparty/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
CPMAddPackage(
NAME fmt
GITHUB_REPOSITORY "fmtlib/fmt"
VERSION "11.0.1"
GIT_TAG "11.0.1"
VERSION "11.0.2"
GIT_TAG "11.0.2"
)

CPMAddPackage(
NAME spdlog
GITHUB_REPOSITORY "gabime/spdlog"
OPTIONS "SPDLOG_FMT_EXTERNAL ON"
VERSION "1.14.1"
VERSION "1.15.0"
)

CPMAddPackage(
NAME unordered_dense
GITHUB_REPOSITORY "martinus/unordered_dense"
VERSION "4.1.2"
VERSION "4.5.0"
)

CPMAddPackage(
NAME scnlib
GITHUB_REPOSITORY "eliaskosunen/scnlib"
VERSION "2.0.2"
VERSION "4.0.1"
OPTIONS "SIMDUTF_TESTS OFF" "ENABLE_FULL OFF"
)


CPMAddPackage(
NAME CLI11
GITHUB_REPOSITORY "CLIUtils/CLI11"
VERSION "2.4.1"
VERSION "2.4.2"
)

if("${USE_MLX}")
Expand Down
4 changes: 2 additions & 2 deletions cmake/CPM.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
#
# SPDX-FileCopyrightText: Copyright (c) 2019-2023 Lars Melchior and contributors

set(CPM_DOWNLOAD_VERSION 0.40.2)
set(CPM_HASH_SUM "c8cdc32c03816538ce22781ed72964dc864b2a34a310d3b7104812a5ca2d835d")
set(CPM_DOWNLOAD_VERSION 0.40.5)
set(CPM_HASH_SUM "c46b876ae3b9f994b4f05a4c15553e0485636862064f1fcc9d8b4f832086bc5d")

if(CPM_SOURCE_CACHE)
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
Expand Down
39 changes: 0 additions & 39 deletions include/occ/cg/crystal_growth_energies.h

This file was deleted.

12 changes: 6 additions & 6 deletions include/occ/cg/interaction_mapper.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#pragma once
#include <occ/cg/crystal_growth_energies.h>
#include <occ/cg/result_types.h>
#include <occ/crystal/crystal.h>
#include <occ/crystal/dimer_mapping_table.h>

Expand All @@ -20,26 +20,26 @@ class InteractionMapper {

std::vector<double>
map_interactions(const std::vector<double> &solution_terms,
const std::vector<Energies> &interaction_energies_vec);
const std::vector<DimerResults> &interaction_energies_vec);

private:
void map_molecule_interactions(
size_t mol_idx, const Molecule &mol,
const std::vector<double> &solution_terms,
const std::vector<Energies> &interaction_energies_vec,
const std::vector<DimerResults> &interaction_energies_vec,
std::vector<double> &solution_terms_uc);

void map_neighbor_interactions(
size_t mol_idx,
std::vector<CrystalDimers::SymmetryRelatedDimer> &unit_cell_neighbors,
const std::vector<CrystalDimers::SymmetryRelatedDimer>
&asymmetric_neighbors,
const Energies &interaction_energies);
const DimerResults &interaction_energies);

void map_single_dimer(size_t mol_idx, size_t neighbor_idx, Dimer &dimer,
const std::vector<CrystalDimers::SymmetryRelatedDimer>
&asymmetric_neighbors,
const Energies &interaction_energies);
const DimerResults &interaction_energies);

ankerl::unordered_dense::set<DimerIndex, DimerIndexHash>
build_related_set(const std::vector<DimerIndex> &related) const;
Expand All @@ -57,7 +57,7 @@ class InteractionMapper {
void update_dimer_properties(
Dimer &dimer, size_t interaction_id,
const std::vector<CrystalDimers::SymmetryRelatedDimer> &asym_dimers,
const Energies &energies) const;
const DimerResults &energies) const;

void log_neighbor_info(size_t mol_idx, size_t uc_neighbors_size,
size_t asym_neighbors_size,
Expand Down
26 changes: 24 additions & 2 deletions include/occ/cg/result_types.h
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
#pragma once
#include <ankerl/unordered_dense.h>
#include <occ/core/dimer.h>
#include <occ/interaction/pairinteraction.h>
#include <string>
#include <vector>

namespace occ::cg {

using PairEnergies = std::vector<occ::interaction::CEEnergyComponents>;
using CGEnergyComponents = ankerl::unordered_dense::map<std::string, double>;
using CGEnergies = std::vector<CGEnergyComponents>;

namespace components {

constexpr const char *total = "Total";
constexpr const char *crystal_total = "Crystal Total";
constexpr const char *crystal_nn = "Crystal (reassigned)";
constexpr const char *crystal_nn = "Crystal (redistributed)";
constexpr const char *solvation_ab = "Solvation (A->B)";
constexpr const char *solvation_ba = "Solvation (B->A)";
constexpr const char *solvation_total = "Solvation Total";
Expand All @@ -22,9 +27,22 @@ constexpr const char *exchange = "Exchange";

} // namespace components

struct DimerSolventTerm {
double ab{0.0};
double ba{0.0};
double total{0.0};
};

struct EnergyTotal {
double crystal_energy{0.0};
double interaction_energy{0.0};
double solution_term{0.0};
};

struct DimerResult {
occ::core::Dimer dimer;
bool is_nearest_neighbor{false};
size_t unique_idx{0};
int unique_idx{0};

CGEnergyComponents energy_components{{components::total, 0.0},
{components::crystal_total, 0.0},
Expand All @@ -38,6 +56,8 @@ struct DimerResult {
bool has_energy_component(const std::string &key) const;
};

using DimerResults = std::vector<DimerResult>;

struct MoleculeResult {
CGEnergyComponents energy_components{{components::total, 0.0},
{components::crystal_total, 0.0},
Expand All @@ -46,6 +66,8 @@ struct MoleculeResult {
std::vector<DimerResult> dimer_results;
bool has_inversion_symmetry{true};

cg::EnergyTotal total;

double total_energy() const;
void add_dimer_result(const DimerResult &dimer);

Expand Down
7 changes: 5 additions & 2 deletions include/occ/core/dimer.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ class Dimer {
BA = false /**< The B molecule data is first, then A */
};

// Default (empty) constructor.
Dimer() = default;

/**
* Constructor from two Molecule objects
*
Expand Down Expand Up @@ -200,7 +203,7 @@ class Dimer {
* \param e a double representing the interaction energy.
* \param key a string labelling the component of the interaction energy.
*/
void set_interaction_energy(double e, const std::string &key = "total");
void set_interaction_energy(double e, const std::string &key = "Total");

/**
* Get the stored interaction energy for this Dimer.
Expand All @@ -209,7 +212,7 @@ class Dimer {
*
* \returns a double representing the interaction energy (default = 0.0)
*/
double interaction_energy(const std::string &key = "total") const;
double interaction_energy(const std::string &key = "Total") const;

inline void set_interaction_energies(
const ankerl::unordered_dense::map<std::string, double> &e) {
Expand Down
17 changes: 6 additions & 11 deletions include/occ/driver/crystal_growth.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#pragma once
#include <occ/cg/crystal_growth_energies.h>
#include <occ/cg/distance_partition.h>
#include <occ/cg/result_types.h>
#include <occ/cg/smd_solvation.h>
#include <occ/cg/solvation_contribution.h>
#include <occ/cg/solvent_surface.h>
Expand All @@ -15,8 +15,6 @@
#include <occ/interaction/pairinteraction.h>
#include <occ/io/wavefunction_json.h>
#include <occ/qm/wavefunction.h>
#include <string>
#include <vector>

namespace occ::driver {

Expand Down Expand Up @@ -109,8 +107,7 @@ class CrystalGrowthCalculator {
virtual void init_monomer_energies() = 0;
virtual void converge_lattice_energy() = 0;

virtual std::tuple<cg::EnergyTotal, std::vector<cg::CrystalGrowthDimer>>
process_neighbors_for_symmetry_unique_molecule(
virtual cg::MoleculeResult process_neighbors_for_symmetry_unique_molecule(
int i, const std::string &molname) = 0;

virtual cg::CrystalGrowthResult evaluate_molecular_surroundings() = 0;
Expand All @@ -127,8 +124,8 @@ class CrystalGrowthCalculator {
cg::PairEnergies m_dimer_energies;
crystal::CrystalDimers m_nearest_dimers;
std::vector<SolventNeighborContributionList> m_solvation_breakdowns;
std::vector<cg::Energies> m_interaction_energies;
std::vector<cg::Energies> m_crystal_interaction_energies;
std::vector<cg::DimerResults> m_interaction_energies;
std::vector<cg::DimerResults> m_crystal_interaction_energies;
std::vector<double> m_solution_terms;

private:
Expand All @@ -146,8 +143,7 @@ class CEModelCrystalGrowthCalculator : public CrystalGrowthCalculator {

cg::CrystalGrowthResult evaluate_molecular_surroundings() override;

std::tuple<cg::EnergyTotal, std::vector<cg::CrystalGrowthDimer>>
process_neighbors_for_symmetry_unique_molecule(
cg::MoleculeResult process_neighbors_for_symmetry_unique_molecule(
int i, const std::string &molname) override;
};

Expand All @@ -162,8 +158,7 @@ class XTBCrystalGrowthCalculator : public CrystalGrowthCalculator {

cg::CrystalGrowthResult evaluate_molecular_surroundings() override;

std::tuple<cg::EnergyTotal, std::vector<cg::CrystalGrowthDimer>>
process_neighbors_for_symmetry_unique_molecule(
cg::MoleculeResult process_neighbors_for_symmetry_unique_molecule(
int i, const std::string &molname) override;

std::vector<double> m_gas_phase_energies;
Expand Down
49 changes: 28 additions & 21 deletions include/occ/io/crystalgrower.h
Original file line number Diff line number Diff line change
@@ -1,35 +1,42 @@
#pragma once
#include <ankerl/unordered_dense.h>
#include <fstream>
#include <occ/crystal/crystal.h>
#include <vector>

namespace occ::io::crystalgrower {

class StructureWriter {
public:
StructureWriter(const std::string &filename);
StructureWriter(std::ostream &);

void write(const occ::crystal::Crystal &,
const occ::crystal::CrystalDimers &);
void write_net(const occ::crystal::Crystal &,
const occ::crystal::CrystalDimers &);

private:
std::ofstream m_owned_destination;
std::ostream &m_dest;
public:
StructureWriter(const std::string &filename);
StructureWriter(std::ostream &);

void write(const occ::crystal::Crystal &,
const occ::crystal::CrystalDimers &);
void write_net(const occ::crystal::Crystal &,
const occ::crystal::CrystalDimers &);

private:
std::ofstream m_owned_destination;
std::ostream &m_dest;
};

class NetWriter {
public:
NetWriter(const std::string &filename);
NetWriter(std::ostream &);
public:
using InteractionLabels =
ankerl::unordered_dense::map<std::string, std::string>;
NetWriter(const std::string &filename);
NetWriter(std::ostream &);

void write(const occ::crystal::Crystal &,
const occ::crystal::CrystalDimers &);

void write(const occ::crystal::Crystal &,
const occ::crystal::CrystalDimers &);
inline const InteractionLabels &interaction_labels() const {
return m_interaction_labels;
};

private:
std::ofstream m_owned_destination;
std::ostream &m_dest;
private:
std::ofstream m_owned_destination;
std::ostream &m_dest;
InteractionLabels m_interaction_labels;
};
} // namespace occ::io::crystalgrower
2 changes: 1 addition & 1 deletion include/occ/main/occ_cg.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#pragma once
#include <CLI/App.hpp>
#include <occ/cg/crystal_growth_energies.h>
#include <occ/cg/result_types.h>
#include <occ/core/dimer.h>
#include <occ/interaction/pair_energy.h>

Expand Down
Loading

0 comments on commit 1cd58a0

Please sign in to comment.