diff --git a/src/main.cpp b/src/main.cpp
index 4d4e70be7564dd4624562bf46eb9e3052d33dedd..04e5da5db63012f095550948bf1ca6868f6e9657 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -343,6 +343,17 @@ int main(int argc, char *argv[])
           break;
         }
         case 3: {
+          std::vector<std::string> sym_boundary_name_list = {"XMIN", "XMAX", "YMIN", "YMAX", "ZMIN", "ZMAX"};
+          std::vector<std::shared_ptr<BoundaryConditionDescriptor>> bc_descriptor_list;
+          for (const auto& sym_boundary_name : sym_boundary_name_list){
+            std::shared_ptr<BoundaryDescriptor> boudary_descriptor
+                = std::shared_ptr<BoundaryDescriptor>(new NamedBoundaryDescriptor(sym_boundary_name));
+            SymmetryBoundaryConditionDescriptor* sym_bc_descriptor
+                = new SymmetryBoundaryConditionDescriptor(boudary_descriptor);
+
+            bc_descriptor_list.push_back(std::shared_ptr<BoundaryConditionDescriptor>(sym_bc_descriptor));
+          }
+
           typedef Connectivity3D ConnectivityType;
           typedef Mesh<ConnectivityType> MeshType;
           typedef MeshData<MeshType> MeshDataType;
@@ -355,6 +366,32 @@ int main(int argc, char *argv[])
           MeshDataType mesh_data(mesh);
 
           std::vector<BoundaryConditionHandler> bc_list;
+          {
+            for (const auto& bc_descriptor : bc_descriptor_list) {
+              switch (bc_descriptor->type()) {
+                case BoundaryConditionDescriptor::Type::symmetry: {
+                  const SymmetryBoundaryConditionDescriptor& sym_bc_descriptor
+                      = dynamic_cast<const SymmetryBoundaryConditionDescriptor&>(*bc_descriptor);
+                  for (size_t i_ref_face_list=0; i_ref_face_list<mesh.connectivity().numberOfRefFaceList();
+                       ++i_ref_face_list) {
+                    const RefFaceList& ref_face_list = mesh.connectivity().refFaceList(i_ref_face_list);
+                    const RefId& ref = ref_face_list.refId();
+                    if (ref == sym_bc_descriptor.boundaryDescriptor()) {
+                      SymmetryBoundaryCondition<MeshType::dimension>* sym_bc
+                          = new SymmetryBoundaryCondition<MeshType::dimension>(MeshFlatNodeBoundary<MeshType::dimension>(mesh, ref_face_list));
+                      std::shared_ptr<SymmetryBoundaryCondition<MeshType::dimension>> bc(sym_bc);
+                      bc_list.push_back(BoundaryConditionHandler(bc));
+                    }
+                  }
+                  break;
+                }
+                default: {
+                  std::cerr << "Unknown BCDescription\n";
+                  std::exit(1);
+                }
+              }
+            }
+          }
 
           UnknownsType unknowns(mesh_data);