|
2 | 2 | /*
|
3 | 3 | * PCMSolver, an API for the Polarizable Continuum Model
|
4 | 4 | * Copyright (C) 2013-2016 Roberto Di Remigio, Luca Frediani and contributors
|
5 |
| - * |
| 5 | + * |
6 | 6 | * This file is part of PCMSolver.
|
7 |
| - * |
| 7 | + * |
8 | 8 | * PCMSolver is free software: you can redistribute it and/or modify
|
9 | 9 | * it under the terms of the GNU Lesser General Public License as published by
|
10 | 10 | * the Free Software Foundation, either version 3 of the License, or
|
11 | 11 | * (at your option) any later version.
|
12 |
| - * |
| 12 | + * |
13 | 13 | * PCMSolver is distributed in the hope that it will be useful,
|
14 | 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15 | 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16 | 16 | * GNU Lesser General Public License for more details.
|
17 |
| - * |
| 17 | + * |
18 | 18 | * You should have received a copy of the GNU Lesser General Public License
|
19 | 19 | * along with PCMSolver. If not, see <http://www.gnu.org/licenses/>.
|
20 |
| - * |
| 20 | + * |
21 | 21 | * For information on the complete list of contributors to the
|
22 | 22 | * PCMSolver API, see: <http://pcmsolver.readthedocs.io/>
|
23 | 23 | */
|
@@ -73,6 +73,10 @@ inline Molecule C2H4();
|
73 | 73 | */
|
74 | 74 | inline Molecule C6H6();
|
75 | 75 |
|
| 76 | +/*! Returns the water molecule with C1 symmetry |
| 77 | + */ |
| 78 | +inline Molecule H2O(); |
| 79 | + |
76 | 80 | template <int group>
|
77 | 81 | Molecule dummy(double radius, const Eigen::Vector3d & center)
|
78 | 82 | {
|
@@ -508,10 +512,47 @@ Molecule C6H6()
|
508 | 512 | spheres.push_back(sph11);
|
509 | 513 | spheres.push_back(sph12);
|
510 | 514 |
|
511 |
| - // D2h as generated by Oxy, Oxz, Oyz |
512 | 515 | Symmetry pGroup = buildGroup(0, 0, 0, 0);
|
513 | 516 |
|
514 | 517 | return Molecule(nAtoms, charges, masses, geom, atoms, spheres, pGroup);
|
515 | 518 | };
|
516 | 519 |
|
| 520 | +Molecule H2O() |
| 521 | +{ |
| 522 | + int nAtoms = 3; |
| 523 | + |
| 524 | + // Geometry in atomic units |
| 525 | + Eigen::Vector3d H1( 0.0000000000, 0.0000000000, -0.2249058930); |
| 526 | + Eigen::Vector3d H2(-1.4523499293, 0.0000000000, 0.8996235720); |
| 527 | + Eigen::Vector3d O( 1.4523499293, 0.0000000000, 0.8996235720); |
| 528 | + |
| 529 | + Eigen::MatrixXd geom(3, nAtoms); |
| 530 | + geom.col(0) = H1.transpose(); |
| 531 | + geom.col(1) = H2.transpose(); |
| 532 | + geom.col(2) = O.transpose(); |
| 533 | + Eigen::Vector3d charges, masses; |
| 534 | + charges << 1.0, 1.0, 8.0; |
| 535 | + masses << 1.0078250, 1.0078250, 15.9949150; |
| 536 | + |
| 537 | + double radiusO = (1.52 * 1.20) / bohrToAngstrom(); |
| 538 | + double radiusH = (1.20 * 1.20) / bohrToAngstrom(); |
| 539 | + std::vector<Atom> atoms; |
| 540 | + atoms.push_back( Atom("Hydrogen", "H", charges(0), masses(0), radiusH, H1, 1.0) ); |
| 541 | + atoms.push_back( Atom("Hydrogen", "H", charges(1), masses(1), radiusH, H2, 1.0) ); |
| 542 | + atoms.push_back( Atom("Oxygen", "O", charges(2), masses(2), radiusO, O, 1.0) ); |
| 543 | + |
| 544 | + std::vector<Sphere> spheres; |
| 545 | + Sphere sph1(H1, radiusH); |
| 546 | + Sphere sph2(H2, radiusH); |
| 547 | + Sphere sph3(O, radiusO); |
| 548 | + spheres.push_back(sph1); |
| 549 | + spheres.push_back(sph2); |
| 550 | + spheres.push_back(sph3); |
| 551 | + |
| 552 | + Symmetry pGroup = buildGroup(0, 0, 0, 0); |
| 553 | + |
| 554 | + return Molecule(nAtoms, charges, masses, geom, atoms, spheres, pGroup); |
| 555 | +}; |
| 556 | + |
| 557 | + |
517 | 558 | #endif // TESTINGMOLECULES_HPP
|
0 commit comments