| 111 | } |
| 112 | |
| 113 | int |
| 114 | FiberSection::addFiber(Fiber &newFiber) |
| 115 | { |
| 116 | if (order == 0) { |
| 117 | order = newFiber.getOrder(); |
| 118 | |
| 119 | e = new Vector(order); |
| 120 | eCommit = new Vector(order); |
| 121 | s = new Vector(order); |
| 122 | ks = new Matrix(order,order); |
| 123 | |
| 124 | code = new ID(order); |
| 125 | *code = newFiber.getType(); |
| 126 | } |
| 127 | |
| 128 | if (numFibers < sizeFibers) { |
| 129 | // space available in array .. set new pointer and increment number |
| 130 | theFibers[numFibers] = &newFiber; |
| 131 | numFibers++; |
| 132 | } |
| 133 | else { |
| 134 | // need to create a larger array |
| 135 | int newSize = 2*numFibers; |
| 136 | if (newSize == 0) |
| 137 | newSize = 2; // in case failed in constructor |
| 138 | |
| 139 | Fiber **newArray = new Fiber *[newSize]; |
| 140 | |
| 141 | if (newArray == 0) { |
| 142 | opserr << "FiberSection::addFiber -- failed to allocate Fiber pointers"; |
| 143 | exit(-1); |
| 144 | |
| 145 | return -1; |
| 146 | } |
| 147 | |
| 148 | // set the new size of the array |
| 149 | sizeFibers = newSize; |
| 150 | |
| 151 | // copy the old pointers |
| 152 | for (int i = 0; i < numFibers; i++) |
| 153 | newArray[i] = theFibers[i]; |
| 154 | |
| 155 | // add the new pointer |
| 156 | newArray[numFibers] = &newFiber; |
| 157 | numFibers++; |
| 158 | |
| 159 | // zero the last elements of the array |
| 160 | for (int j = numFibers; j < newSize; j++) |
| 161 | newArray[j] = 0; |
| 162 | |
| 163 | delete [] theFibers; |
| 164 | |
| 165 | theFibers = newArray; |
| 166 | } |
| 167 | |
| 168 | return 0; |
| 169 | } |
| 170 |
no test coverage detected