MCPcopy Create free account
hub / github.com/OpenSees/OpenSees / writeModelNodes

Method writeModelNodes

SRC/recorder/MPCORecorder.cpp:5022–5121  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5020}
5021
5022int 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);

Callers

nothing calls this directly

Calls 15

createAndWriteFunction · 0.85
closeFunction · 0.85
push_backMethod · 0.80
getNodesMethod · 0.80
getCrdsMethod · 0.80
stopMethod · 0.80
createFunction · 0.70
startMethod · 0.45
clearMethod · 0.45
getNumPCsMethod · 0.45
getPressureNodeMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected