CellPopulationElementWriter.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include "CellPopulationElementWriter.hpp"
00037 #include "AbstractCellPopulation.hpp"
00038 #include "MeshBasedCellPopulation.hpp"
00039 #include "CaBasedCellPopulation.hpp"
00040 #include "NodeBasedCellPopulation.hpp"
00041 #include "PottsBasedCellPopulation.hpp"
00042 #include "VertexBasedCellPopulation.hpp"
00043
00044 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00045 CellPopulationElementWriter<ELEMENT_DIM, SPACE_DIM>::CellPopulationElementWriter()
00046 : AbstractCellPopulationWriter<ELEMENT_DIM, SPACE_DIM>("results.vizelements")
00047 {
00048 }
00049
00050 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00051 void CellPopulationElementWriter<ELEMENT_DIM, SPACE_DIM>::Visit(MeshBasedCellPopulation<ELEMENT_DIM, SPACE_DIM>* pCellPopulation)
00052 {
00053 for (typename MutableMesh<ELEMENT_DIM,SPACE_DIM>::ElementIterator elem_iter = static_cast<MutableMesh<ELEMENT_DIM,SPACE_DIM>&>((pCellPopulation->rGetMesh())).GetElementIteratorBegin();
00054 elem_iter != static_cast<MutableMesh<ELEMENT_DIM,SPACE_DIM>&>((pCellPopulation->rGetMesh())).GetElementIteratorEnd();
00055 ++elem_iter)
00056 {
00057 bool element_contains_dead_cells_or_deleted_nodes = false;
00058
00059
00060 for (unsigned i=0; i<ELEMENT_DIM+1; i++)
00061 {
00062 unsigned node_index = elem_iter->GetNodeGlobalIndex(i);
00063
00064 if (pCellPopulation->GetNode(node_index)->IsDeleted())
00065 {
00066 element_contains_dead_cells_or_deleted_nodes = true;
00067 break;
00068 }
00069 else if (pCellPopulation->IsCellAttachedToLocationIndex(node_index))
00070 {
00071 if (pCellPopulation->GetCellUsingLocationIndex(node_index)->IsDead())
00072 {
00073 element_contains_dead_cells_or_deleted_nodes = true;
00074 break;
00075 }
00076 }
00077 }
00078 if (!element_contains_dead_cells_or_deleted_nodes)
00079 {
00080 for (unsigned i=0; i<ELEMENT_DIM+1; i++)
00081 {
00082 *this->mpOutStream << elem_iter->GetNodeGlobalIndex(i) << " ";
00083 }
00084 }
00085 }
00086 }
00087
00088 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00089 void CellPopulationElementWriter<ELEMENT_DIM, SPACE_DIM>::Visit(CaBasedCellPopulation<SPACE_DIM>* pCellPopulation)
00090 {
00091 }
00092
00093 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00094 void CellPopulationElementWriter<ELEMENT_DIM, SPACE_DIM>::Visit(NodeBasedCellPopulation<SPACE_DIM>* pCellPopulation)
00095 {
00096 }
00097
00098 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00099 void CellPopulationElementWriter<ELEMENT_DIM, SPACE_DIM>::Visit(PottsBasedCellPopulation<SPACE_DIM>* pCellPopulation)
00100 {
00101
00102 for (typename AbstractCellPopulation<SPACE_DIM, SPACE_DIM>::Iterator cell_iter = pCellPopulation->Begin();
00103 cell_iter != pCellPopulation->End();
00104 ++cell_iter)
00105 {
00106 unsigned elem_index = pCellPopulation->GetLocationIndexUsingCell(*cell_iter);
00107
00108
00109 bool elem_corresponds_to_dead_cell = false;
00110
00111 if (pCellPopulation->IsCellAttachedToLocationIndex(elem_index))
00112 {
00113 elem_corresponds_to_dead_cell = pCellPopulation->GetCellUsingLocationIndex(elem_index)->IsDead();
00114 }
00115
00116
00117 if (!(pCellPopulation->GetElement(elem_index)->IsDeleted()) && !elem_corresponds_to_dead_cell)
00118 {
00119 PottsElement<SPACE_DIM>* p_element = pCellPopulation->rGetMesh().GetElement(elem_index);
00120 unsigned num_nodes_in_element = p_element->GetNumNodes();
00121
00122
00123 *this->mpOutStream << num_nodes_in_element << " ";
00124
00125
00126 for (unsigned i=0; i<num_nodes_in_element; i++)
00127 {
00128 *this->mpOutStream << p_element->GetNodeGlobalIndex(i) << " ";
00129 }
00130 }
00131 }
00132 }
00133
00134 template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
00135 void CellPopulationElementWriter<ELEMENT_DIM, SPACE_DIM>::Visit(VertexBasedCellPopulation<SPACE_DIM>* pCellPopulation)
00136 {
00137
00138 for (typename AbstractCellPopulation<SPACE_DIM, SPACE_DIM>::Iterator cell_iter = pCellPopulation->Begin();
00139 cell_iter != pCellPopulation->End();
00140 ++cell_iter)
00141 {
00142 unsigned elem_index = pCellPopulation->GetLocationIndexUsingCell(*cell_iter);
00143
00144
00145 bool elem_corresponds_to_dead_cell = false;
00146
00147 if (pCellPopulation->IsCellAttachedToLocationIndex(elem_index))
00148 {
00149 elem_corresponds_to_dead_cell = pCellPopulation->GetCellUsingLocationIndex(elem_index)->IsDead();
00150 }
00151
00152
00153 if (!(pCellPopulation->GetElement(elem_index)->IsDeleted()) && !elem_corresponds_to_dead_cell)
00154 {
00155 VertexElement<SPACE_DIM, SPACE_DIM>* p_element = pCellPopulation->rGetMesh().GetElement(elem_index);
00156 unsigned num_nodes_in_element = p_element->GetNumNodes();
00157
00158
00159 *this->mpOutStream << num_nodes_in_element << " ";
00160
00161
00162 for (unsigned i=0; i<num_nodes_in_element; i++)
00163 {
00164 *this->mpOutStream << p_element->GetNodeGlobalIndex(i) << " ";
00165 }
00166 }
00167 }
00168 }
00169
00170
00171 template class CellPopulationElementWriter<1,1>;
00172 template class CellPopulationElementWriter<1,2>;
00173 template class CellPopulationElementWriter<2,2>;
00174 template class CellPopulationElementWriter<1,3>;
00175 template class CellPopulationElementWriter<2,3>;
00176 template class CellPopulationElementWriter<3,3>;
00177
00178 #include "SerializationExportWrapperForCpp.hpp"
00179
00180 EXPORT_TEMPLATE_CLASS_ALL_DIMS(CellPopulationElementWriter)