⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 repl.h

📁 大型并行量子化学软件;支持密度泛函(DFT)。可以进行各种量子化学计算。支持CHARMM并行计算。非常具有应用价值。
💻 H
字号:
//// repl.h//// Copyright (C) 1996 Limit Point Systems, Inc.//// Author: Curtis Janssen <cljanss@limitpt.com>// Maintainer: LPS//// This file is part of the SC Toolkit.//// The SC Toolkit is free software; you can redistribute it and/or modify// it under the terms of the GNU Library General Public License as published by// the Free Software Foundation; either version 2, or (at your option)// any later version.//// The SC Toolkit is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU Library General Public License for more details.//// You should have received a copy of the GNU Library General Public License// along with the SC Toolkit; see the file COPYING.LIB.  If not, write to// the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.//// The U.S. Government is granted a limited license as per AL 91-7.//#ifdef __GNUC__#pragma interface#endif#ifndef _math_scmat_repl_h#define _math_scmat_repl_h#include <util/group/message.h>#include <math/scmat/block.h>#include <math/scmat/matrix.h>#include <math/scmat/abstract.h>namespace sc {/** The ReplSCMatrixKit produces matrices that work in a many processorenvironment.  A copy of the entire matrix is stored on each node.*/class ReplSCMatrixKit: public SCMatrixKit {  public:    ReplSCMatrixKit();    ReplSCMatrixKit(const Ref<KeyVal>&);    ~ReplSCMatrixKit();    SCMatrix* matrix(const RefSCDimension&,const RefSCDimension&);    SymmSCMatrix* symmmatrix(const RefSCDimension&);    DiagSCMatrix* diagmatrix(const RefSCDimension&);    SCVector* vector(const RefSCDimension&);};class ReplSCMatrixListSubblockIter: public SCMatrixListSubblockIter {  protected:    Ref<MessageGrp> grp_;    double *data_;    int ndata_;  public:    ReplSCMatrixListSubblockIter(Access,                             const Ref<SCMatrixBlockList> &list,                             const Ref<MessageGrp> &grp,                             double *data, int ndata);    ~ReplSCMatrixListSubblockIter();};class ReplSCVector: public SCVector {    friend class ReplSCMatrix;    friend class ReplSymmSCMatrix;    friend class ReplDiagSCMatrix;  protected:    Ref<SCMatrixBlockList> blocklist;    double* vector;    void init_blocklist();    void before_elemop();    void after_elemop();  public:    ReplSCVector(const RefSCDimension&,ReplSCMatrixKit*);    ~ReplSCVector();    void assign_val(double);    void assign_v(SCVector*);    void assign_p(const double*);    void set_element(int,double);    void accumulate_element(int,double);    double get_element(int) const;    void accumulate_product_sv(SymmSCMatrix*,SCVector*);    void accumulate_product_rv(SCMatrix*,SCVector*);    void accumulate(const SCVector*);    void accumulate(const SCMatrix*);    double scalar_product(SCVector*);    void element_op(const Ref<SCElementOp>&);    void element_op(const Ref<SCElementOp2>&,                    SCVector*);    void element_op(const Ref<SCElementOp3>&,                    SCVector*,SCVector*);    void vprint(const char* title=0,                std::ostream& out=ExEnv::out0(), int =10) const;    // return a pointer to the data for fast access    double *get_data() { return vector; }    Ref<SCMatrixSubblockIter> local_blocks(SCMatrixSubblockIter::Access);    Ref<SCMatrixSubblockIter> all_blocks(SCMatrixSubblockIter::Access);    Ref<ReplSCMatrixKit> skit();};class ReplSCMatrix: public SCMatrix {    friend class ReplSymmSCMatrix;    friend class ReplDiagSCMatrix;    friend class ReplSCVector;  protected:    Ref<SCMatrixBlockList> blocklist;    double* matrix;    double** rows;  protected:    // utility functions    int compute_offset(int,int) const;    void init_blocklist();    void before_elemop();    void after_elemop();  public:    ReplSCMatrix(const RefSCDimension&,const RefSCDimension&,                 ReplSCMatrixKit*);    ~ReplSCMatrix();    // implementations and overrides of virtual functions    void assign_val(double);    double get_element(int,int) const;    void set_element(int,int,double);    void accumulate_element(int,int,double);    SCMatrix * get_subblock(int,int,int,int);    void assign_subblock(SCMatrix*, int,int,int,int,int=0,int=0);    void accumulate_subblock(SCMatrix*, int,int,int,int,int=0,int=0);    SCVector * get_row(int i);    SCVector * get_column(int i);    void assign_row(SCVector *v, int i);    void assign_column(SCVector *v, int i);    void accumulate_row(SCVector *v, int i);    void accumulate_column(SCVector *v, int i);    void accumulate_outer_product(SCVector*,SCVector*);    void accumulate_product_rr(SCMatrix*,SCMatrix*);    void accumulate_product_rs(SCMatrix*,SymmSCMatrix*);    void accumulate_product_rd(SCMatrix*,DiagSCMatrix*);    void accumulate(const SCMatrix*);    void accumulate(const SymmSCMatrix*);    void accumulate(const DiagSCMatrix*);    void accumulate(const SCVector*);    void transpose_this();    double invert_this();    void svd_this(SCMatrix *U, DiagSCMatrix *sigma, SCMatrix *V);    double solve_this(SCVector*);    double determ_this();    double trace();    void schmidt_orthog(SymmSCMatrix*,int);    int schmidt_orthog_tol(SymmSCMatrix*, double tol, double *res=0);    void element_op(const Ref<SCElementOp>&);    void element_op(const Ref<SCElementOp2>&,                    SCMatrix*);    void element_op(const Ref<SCElementOp3>&,                    SCMatrix*,SCMatrix*);    void vprint(const char* title=0,                std::ostream& out=ExEnv::out0(), int =10) const;    // return a pointer to the data for fast access    double *get_data() { return matrix; }    double **get_rows() { return rows; }    Ref<SCMatrixSubblockIter> local_blocks(SCMatrixSubblockIter::Access);    Ref<SCMatrixSubblockIter> all_blocks(SCMatrixSubblockIter::Access);    Ref<ReplSCMatrixKit> skit();};class ReplSymmSCMatrix: public SymmSCMatrix {    friend class ReplSCMatrix;    friend class ReplDiagSCMatrix;    friend class ReplSCVector;  protected:    Ref<SCMatrixBlockList> blocklist;    double* matrix;    double** rows;  protected:    // utility functions    int compute_offset(int,int) const;    void init_blocklist();    void before_elemop();    void after_elemop();  public:    ReplSymmSCMatrix(const RefSCDimension&, ReplSCMatrixKit*);    ~ReplSymmSCMatrix();    // implementations and overrides of virtual functions    void assign_val(double);    void assign_s(SymmSCMatrix*);    void assign_p(const double*);    void assign_pp(const double**);    double get_element(int,int) const;    void set_element(int,int,double);    void accumulate_element(int,int,double);    void scale(double);    SCMatrix * get_subblock(int,int,int,int);    SymmSCMatrix * get_subblock(int,int);    void assign_subblock(SCMatrix*, int,int,int,int);    void assign_subblock(SymmSCMatrix*, int,int);    void accumulate_subblock(SCMatrix*, int,int,int,int);    void accumulate_subblock(SymmSCMatrix*, int,int);    SCVector * get_row(int i);    void assign_row(SCVector *v, int i);    void accumulate_row(SCVector *v, int i);    void accumulate_product_rr(SCMatrix*,SCMatrix*);    void accumulate(const SymmSCMatrix*);    double invert_this();    double solve_this(SCVector*);    double trace();    double determ_this();    void gen_invert_this();    double scalar_product(SCVector*);    void diagonalize(DiagSCMatrix*,SCMatrix*);    void accumulate_symmetric_outer_product(SCVector*);    void accumulate_symmetric_product(SCMatrix*);    void accumulate_symmetric_sum(SCMatrix*);    void accumulate_transform(SCMatrix*,SymmSCMatrix*,                              SCMatrix::Transform = SCMatrix::NormalTransform);    void accumulate_transform(SCMatrix*,DiagSCMatrix*,                              SCMatrix::Transform = SCMatrix::NormalTransform);    void accumulate_transform(SymmSCMatrix*,SymmSCMatrix*);    void element_op(const Ref<SCElementOp>&);    void element_op(const Ref<SCElementOp2>&,                    SymmSCMatrix*);    void element_op(const Ref<SCElementOp3>&,                    SymmSCMatrix*,SymmSCMatrix*);    void vprint(const char* title=0,                std::ostream& out=ExEnv::out0(), int =10) const;    // return a pointer to the data for fast access    double *get_data() { return matrix; }    double **get_rows() { return rows; }    Ref<SCMatrixSubblockIter> local_blocks(SCMatrixSubblockIter::Access);    Ref<SCMatrixSubblockIter> all_blocks(SCMatrixSubblockIter::Access);    Ref<ReplSCMatrixKit> skit();};class ReplDiagSCMatrix: public DiagSCMatrix {    friend class ReplSCMatrix;    friend class ReplSymmSCMatrix;    friend class ReplSCVector;  protected:    Ref<SCMatrixBlockList> blocklist;    void init_blocklist();    double* matrix;    void before_elemop();    void after_elemop();  public:    ReplDiagSCMatrix(const RefSCDimension&, ReplSCMatrixKit*);    ~ReplDiagSCMatrix();    // implementations and overrides of virtual functions    void assign_val(double);    double get_element(int) const;    void set_element(int,double);    void accumulate_element(int,double);    void accumulate(const DiagSCMatrix*);    double invert_this();    double determ_this();    double trace();    void gen_invert_this();    void element_op(const Ref<SCElementOp>&);    void element_op(const Ref<SCElementOp2>&,                    DiagSCMatrix*);    void element_op(const Ref<SCElementOp3>&,                    DiagSCMatrix*,DiagSCMatrix*);    void vprint(const char* title=0,                std::ostream& out=ExEnv::out0(), int =10) const;    // return a pointer to the data for fast access    double *get_data() { return matrix; }    Ref<SCMatrixSubblockIter> local_blocks(SCMatrixSubblockIter::Access);    Ref<SCMatrixSubblockIter> all_blocks(SCMatrixSubblockIter::Access);    Ref<ReplSCMatrixKit> skit();};}#endif// Local Variables:// mode: c++// c-file-style: "CLJ"// End:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -