SYCL: Avoid using no_init read accessor in rocFFT
[alexxy/gromacs.git] / src / gromacs / mdrun / membedholder.cpp
1 /*
2  * This file is part of the GROMACS molecular simulation package.
3  *
4  * Copyright (c) 2020, by the GROMACS development team, led by
5  * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
6  * and including many others, as listed in the AUTHORS file in the
7  * top-level source directory and at http://www.gromacs.org.
8  *
9  * GROMACS is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public License
11  * as published by the Free Software Foundation; either version 2.1
12  * of the License, or (at your option) any later version.
13  *
14  * GROMACS is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with GROMACS; if not, see
21  * http://www.gnu.org/licenses, or write to the Free Software Foundation,
22  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
23  *
24  * If you want to redistribute modifications to GROMACS, please
25  * consider that scientific software is very special. Version
26  * control is crucial - bugs must be traceable. We will be happy to
27  * consider code for inclusion in the official distribution, but
28  * derived work must not be called official GROMACS. Details are found
29  * in the README & COPYING files - if they are missing, get the
30  * official version at http://www.gromacs.org.
31  *
32  * To help us fund GROMACS development, we humbly ask that you cite
33  * the research papers on the package. Check out http://www.gromacs.org.
34  */
35 /*! \internal
36  * \brief Encapsulates membed methods
37  *
38  * \author Joe Jordan <ejjordan@kth.se>
39  * \ingroup module_mdrun
40  */
41 #include "gmxpre.h"
42
43 #include "membedholder.h"
44
45 #include "gromacs/commandline/filenm.h"
46 #include "gromacs/mdlib/membed.h"
47 #include "gromacs/mdtypes/commrec.h"
48 #include "gromacs/mdtypes/state.h"
49 #include "gromacs/topology/topology.h"
50 #include "gromacs/utility/real.h"
51
52 namespace gmx
53 {
54
55 MembedHolder::MembedHolder(int nfile, const t_filenm fnm[]) :
56     doMembed_(opt2bSet("-membed", nfile, fnm))
57 {
58 }
59
60 MembedHolder::~MembedHolder()
61 {
62     if (doMembed_)
63     {
64         free_membed(membed_);
65     }
66 }
67
68 void MembedHolder::initializeMembed(FILE*          fplog,
69                                     int            nfile,
70                                     const t_filenm fnm[],
71                                     gmx_mtop_t*    mtop,
72                                     t_inputrec*    inputrec,
73                                     t_state*       state,
74                                     t_commrec*     cr,
75                                     real*          cpt)
76 {
77     if (doMembed_)
78     {
79         if (MASTER(cr))
80         {
81             fprintf(stderr, "Initializing membed");
82         }
83         /* Note that membed cannot work in parallel because mtop is
84          * changed here. Fix this if we ever want to make it run with
85          * multiple ranks. */
86         membed_ = init_membed(fplog, nfile, fnm, mtop, inputrec, state, cr, cpt);
87     }
88 }
89
90 gmx_membed_t* MembedHolder::membed()
91 {
92     return membed_;
93 }
94
95 MembedHolder::MembedHolder(MembedHolder&& holder) noexcept
96 {
97     doMembed_        = holder.doMembed_;
98     membed_          = holder.membed_;
99     holder.membed_   = nullptr;
100     holder.doMembed_ = false;
101 }
102
103 MembedHolder& MembedHolder::operator=(MembedHolder&& holder) noexcept
104 {
105     if (&holder != this)
106     {
107         doMembed_        = holder.doMembed_;
108         membed_          = holder.membed_;
109         holder.membed_   = nullptr;
110         holder.doMembed_ = false;
111     }
112     return *this;
113 }
114
115 } // namespace gmx