multisplitcontrol.h

Go to the documentation of this file.
00001 #ifndef multisplitcontrol_h
00002 #define multisplitcontrol_h
00003 
00004 class MultiSplitThread {
00005 public:
00006    MultiSplitThread();
00007    virtual ~MultiSplitThread();
00008    
00009    void del_sidA();
00010    void triang(NrnThread*);
00011    void bksub(NrnThread*);
00012    void triang_subtree2backbone(NrnThread*);
00013    void triang_backbone(NrnThread*);
00014    void bksub_backbone(NrnThread*);
00015    void bksub_short_backbone_part1(NrnThread*);
00016    void bksub_subtrees(NrnThread*);
00017    void v_setup(NrnThread*);
00018 
00019    double *sid1A, *sid1B; // to be filled in sid1 and sid0 columns
00020    int* sid0i; // interior node to sid0 index. parallel to sid1B
00021    // for mapping sid1A... to transfer buffer when ReducedTree not on this machine
00022    int nbackrt_; // number of backbones that send info to ReducedTree
00023    int* backsid_; // sid0
00024    int* backAindex_; // sid1A index for sid0
00025    int* backBindex_; // sid1B index for sid1
00026    int backbone_begin, backbone_long_begin, backbone_interior_begin;
00027    int backbone_sid1_begin, backbone_long_sid1_begin, backbone_end;
00028    int i1, i2, i3;
00029 };
00030 
00031 class MultiSplitControl {
00032 public:
00033    MultiSplitControl();
00034    virtual ~MultiSplitControl();
00035    
00036    void multisplit_clear();
00037    void multisplit_nocap_v();
00038    void multisplit_nocap_v_part1(NrnThread*);
00039    void multisplit_nocap_v_part2(NrnThread*);
00040    void multisplit_nocap_v_part3(NrnThread*);
00041    void multisplit_adjust_rhs(NrnThread*);
00042    void prstruct();
00043    void reduce_solve();
00044 
00045    void multisplit(double, int, int);
00046    void solve();
00047    void reduced_mark(int, int, int, int*, int*, int*);
00048    void matrix_exchange();
00049    void matrix_exchange_nocap();
00050    void v_setup();
00051    void exchange_setup();
00052    void rt_map_update();
00053    void del_msti();
00054    void pmat(boolean full = false);
00055    void pmatf(boolean full = false);
00056    void pmat1(const char*);
00057    void pexch();
00058 
00059    int narea2buf_, narea2rt_;
00060    Area2Buf* area2buf_;
00061    Area2RT* area2rt_;
00062 
00063    int nthost_; // number of distinct hosts that need send-receive
00064    int ihost_reduced_long_, ihost_short_long_; // indices for groups
00065    MultiSplitTransferInfo* msti_; // will be nthost_ of them
00066    int tbsize;
00067    int ndbsize;
00068    double* trecvbuf_; //enough buffer for all receives
00069    double* tsendbuf_; // enough for all send
00070    int* nodeindex_buffer_; // nodeindex_ points into here
00071    int* nodeindex_buffer_th_; // thread for above
00072    int* nodeindex_rthost_; // ReducedTree machine that gets this node info. Normally -1.
00073    int narea_; // number of transfer nodes that need area adjustment
00074    int iarea_short_long_;// different ones get adjusted at different times
00075    int* buf_area_indices_;
00076    int* area_node_indices_;
00077 
00078    int nrtree_;
00079    ReducedTree** rtree_;
00080 
00081    MultiSplitTable* classical_root_to_multisplit_;
00082    MultiSplitList* multisplit_list_; // NrnHashIterate is not in insertion order
00083 
00084    int nth_;
00085    MultiSplitThread* mth_;
00086 };
00087 
00088 #endif
Generated on Mon Jun 13 08:10:25 2011 for NEURON by  doxygen 1.6.3