00001 // expde: expression templates for partial differential equations. 00002 // Copyright (C) 2001 Christoph Pflaum 00003 // This program is free software; you can redistribute it and/or modify 00004 // it under the terms of the GNU General Public License as published by 00005 // the Free Software Foundation; either version 2 of the License, or 00006 // (at your option) any later version. 00007 // 00008 // This program is distributed in the hope that it will be useful, 00009 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00010 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00011 // GNU General Public License for more details. 00012 // 00013 // SEE Notice1.doc made by 00014 // LAWRENCE LIVERMORE NATIONAL LABORATORY 00015 // 00016 00017 // ------------------------------------------------------------ 00018 // 00019 // subdiv.h 00020 // 00021 // 00022 // ------------------------------------------------------------ 00023 00024 #ifndef SUBDIV_H_ 00025 #define SUBDIV_H_ 00026 00027 inline void Tell_about_round_of_problem(double a, double b) { 00028 if(tell_round_off_problem) { 00029 if(ABS(a - b) < eps_round_off_problem) 00030 cout << " there may be a round off problem" 00031 << " in the subdivision of the boundary cells! " << endl; 00032 } 00033 } 00034 00035 00037 // Klasse zur Berechnung von FE auf Randzellen 00039 00040 00041 class Calculator_FE { 00042 public: 00043 void Start(Bo_description* desc, BoCeData* boc) { 00044 bo_desc = desc; 00045 bo_cell = boc; 00046 } 00047 void Tetraeder(Edge_Corner_point p0, Edge_Corner_point p1, 00048 Edge_Corner_point p2, Edge_Corner_point p3); 00049 // local_coord_normi ist lokale Koordinate in [-0.5,0.5]^3 Zelle 00050 void Add_Bo_freedom(D3vector local_coord_normi) { 00051 bo_cell->Add_Bo_freedom(local_coord_normi*bo_cell->Meshsize()); 00052 }; 00053 private: 00054 Bo_description* bo_desc; 00055 BoCeData* bo_cell; 00056 }; 00057 00058 00060 void Act_on_subdivision(Bo_description* Description, Calculator_FE* Act); 00061 00062 00063 #endif 00064