| 5020 | } |
| 5021 | |
| 5022 | int MPCORecorder::writeModelNodes() |
| 5023 | { |
| 5024 | #ifdef MPCO_TIMING |
| 5025 | mpco::Timer timer("writeModelNodes"); timer.start(); |
| 5026 | #endif // MPCO_TIMING |
| 5027 | /* |
| 5028 | error flags |
| 5029 | */ |
| 5030 | int retval = 0; |
| 5031 | herr_t status = 0; |
| 5032 | /* |
| 5033 | get all nodes except pressure nodes |
| 5034 | */ |
| 5035 | m_data->nodes.clear(); |
| 5036 | ID pressure_node_tags(0, m_data->info.domain->getNumPCs()); |
| 5037 | Pressure_ConstraintIter& pressure_constraint_iter = m_data->info.domain->getPCs(); |
| 5038 | Pressure_Constraint* pressure_constraint = 0; |
| 5039 | while ((pressure_constraint = pressure_constraint_iter()) != 0) { |
| 5040 | Node* pressure_node = pressure_constraint->getPressureNode(); |
| 5041 | if (pressure_node) { |
| 5042 | pressure_node_tags.insert(pressure_node->getTag()); |
| 5043 | } |
| 5044 | } |
| 5045 | if (m_data->has_region) { // only nodes in the requested regions |
| 5046 | for (std::vector<int>::const_iterator id_iter = m_data->node_set.begin(); id_iter != m_data->node_set.end(); ++id_iter) { |
| 5047 | int node_id = *id_iter; |
| 5048 | if (pressure_node_tags.getLocationOrdered(node_id) < 0) { |
| 5049 | Node *current_node = m_data->info.domain->getNode(node_id); |
| 5050 | if (current_node != 0) { |
| 5051 | m_data->nodes.push_back(current_node); |
| 5052 | } |
| 5053 | } |
| 5054 | } |
| 5055 | } |
| 5056 | else { // all nodes |
| 5057 | NodeIter& node_iter = m_data->info.domain->getNodes(); |
| 5058 | Node* current_node = 0; |
| 5059 | while ((current_node = node_iter()) != 0) { |
| 5060 | int nd = current_node->getTag(); |
| 5061 | if (pressure_node_tags.getLocationOrdered(nd) < 0) { |
| 5062 | m_data->nodes.push_back(current_node); |
| 5063 | } |
| 5064 | } |
| 5065 | } |
| 5066 | |
| 5067 | /* |
| 5068 | quick return |
| 5069 | */ |
| 5070 | size_t num_nodes = m_data->nodes.size(); |
| 5071 | if (num_nodes == 0) { |
| 5072 | opserr << "MPCORecorder Error: no nodes to write\n"; |
| 5073 | return -1; |
| 5074 | } |
| 5075 | /* |
| 5076 | allocate data for id and coordinates datasets |
| 5077 | */ |
| 5078 | std::vector<int> buffer_id(num_nodes); |
| 5079 | std::vector<double> buffer_coord(num_nodes*m_data->info.num_dimensions); |
nothing calls this directly
no test coverage detected