ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/SimState.cpp
Revision: 829
Committed: Tue Oct 28 16:03:37 2003 UTC (20 years, 8 months ago) by gezelter
File size: 2829 byte(s)
Log Message:
replace c++ header stuff with more portable c header stuff
Also, mod file fixes and portability changes
Some fortran changes will need to be reversed.

File Contents

# User Rev Content
1 mmeineke 707 #include <iostream>
2    
3 gezelter 829 #include <stdlib.h>
4     #include <stdio.h>
5 mmeineke 670
6     #include "simError.h"
7     #include "SimState.hpp"
8    
9    
10     SimState::SimState(){
11    
12     nElements = 0;
13     arraysAllocated = false;
14    
15     pos = NULL;
16     vel = NULL;
17     frc = NULL;
18     trq = NULL;
19     Amat = NULL;
20     mu = NULL;
21     ul = NULL;
22     }
23    
24    
25     SimState::~SimState(){
26    
27     if(pos != NULL) delete[] pos;
28     if(vel != NULL) delete[] vel;
29     if(frc != NULL) delete[] frc;
30     if(trq != NULL) delete[] trq;
31     if(Amat != NULL) delete[] Amat;
32     if(mu != NULL) delete[] mu;
33     if(ul != NULL) delete[] ul;
34    
35     }
36    
37    
38     void SimState::createArrays (int the_nElements) {
39     int i, index3, index9;
40 mmeineke 707
41 mmeineke 670 if( arraysAllocated ){
42    
43     sprintf( painCave.errMsg,
44     "Someone has attempted to allocate SimState arrays before "
45     "deallocating the previous arrays.\n" );
46     painCave.isFatal = 1;
47     simError();
48     }
49    
50     nElements = the_nElements;
51    
52     pos = new double[nElements*3];
53     vel = new double[nElements*3];
54     frc = new double[nElements*3];
55     trq = new double[nElements*3];
56     Amat = new double[nElements*9];
57     mu = new double[nElements];
58     ul = new double[nElements*3];
59    
60     // init directional values to zero
61    
62     for( i=0; i<nElements; i++){
63     index3 = i*3;
64     index9 = i*9;
65    
66     trq[index3+0] = 0.0;
67     trq[index3+1] = 0.0;
68     trq[index3+2] = 0.0;
69    
70     Amat[index9+0] = 1.0;
71     Amat[index9+1] = 0.0;
72     Amat[index9+2] = 0.0;
73    
74     Amat[index9+3] = 0.0;
75     Amat[index9+4] = 1.0;
76     Amat[index9+5] = 0.0;
77    
78     Amat[index9+6] = 0.0;
79     Amat[index9+7] = 0.0;
80     Amat[index9+8] = 1.0;
81    
82     mu[i] = 0.0;
83    
84     ul[index3+0] = 1.0;
85     ul[index3+1] = 0.0;
86     ul[index3+2] = 0.0;
87     }
88    
89     arraysAllocated = true;
90     }
91    
92     void SimState::destroyArrays( void ){
93    
94     if(pos != NULL) delete[] pos;
95     if(vel != NULL) delete[] vel;
96     if(frc != NULL) delete[] frc;
97     if(trq != NULL) delete[] trq;
98     if(Amat != NULL) delete[] Amat;
99     if(mu != NULL) delete[] mu;
100     if(ul != NULL) delete[] ul;
101    
102     pos = NULL;
103     vel = NULL;
104     frc = NULL;
105     trq = NULL;
106     Amat = NULL;
107     mu = NULL;
108     ul = NULL;
109    
110     arraysAllocated = false;
111     nElements = 0;
112     }
113    
114     void SimState::getAtomPointers( int index,
115     double** the_pos,
116     double** the_vel,
117     double** the_frc,
118     double** the_trq,
119     double** the_Amat,
120     double** the_mu,
121     double** the_ul ){
122     int index3, index9;
123    
124     if( arraysAllocated ){
125    
126     index3 = index*3;
127     index9 = index*9;
128    
129     *the_pos = &(pos[index3]);
130     *the_vel = &(vel[index3]);
131     *the_frc = &(frc[index3]);
132     *the_trq = &(trq[index3]);
133     *the_Amat = &(Amat[index9]);
134     *the_mu = &(mu[index]);
135     *the_ul = &(ul[index3]);
136     }
137     else{
138    
139     sprintf( painCave.errMsg,
140     "Atom %d attempted to access its arrays before they had been"
141     " allocated\n",
142     index );
143     painCave.isFatal = 1;
144     simError();
145     }
146     }