00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <PenalizedFictitousDomain.hpp>
00021 #include <BoundaryConditionDiscretizationPenalty.hpp>
00022
00023 template <ScalarDiscretizationTypeBase::Type TypeOfDiscretization,
00024 typename MeshType>
00025 ReferenceCounting<BoundaryConditionDiscretization>
00026 PenalizedFictitousDomain::__discretizeBoundaryConditionsOnMesh()
00027 {
00028 BoundaryConditionDiscretizationPenalty<MeshType,
00029 TypeOfDiscretization>* bcDiscretization
00030 = new BoundaryConditionDiscretizationPenalty<MeshType,
00031 TypeOfDiscretization>(problem(),
00032 dynamic_cast<const MeshType&>(mesh()),
00033 __degreeOfFreedomSet,
00034 __epsilon);
00035 (*bcDiscretization).associatesMeshesToBoundaryConditions();
00036 return bcDiscretization;
00037 }
00038
00039
00040 template <ScalarDiscretizationTypeBase::Type TypeOfDiscretization>
00041 ReferenceCounting<BoundaryConditionDiscretization>
00042 PenalizedFictitousDomain::__discretizeBoundaryConditions()
00043 {
00044 switch (mesh().type()) {
00045 case Mesh::cartesianHexahedraMesh: {
00046 return this->__discretizeBoundaryConditionsOnMesh<TypeOfDiscretization,
00047 Structured3DMesh>();
00048 break;
00049 }
00050 default: {
00051 throw ErrorHandler(__FILE__,__LINE__,
00052 "unexpected mesh type",
00053 ErrorHandler::unexpected);
00054 return 0;
00055 }
00056 }
00057 }
00058
00059
00060 ReferenceCounting<BoundaryConditionDiscretization>
00061 PenalizedFictitousDomain::discretizeBoundaryConditions()
00062 {
00063 switch(__discretizationType[0].type()) {
00064 case ScalarDiscretizationTypeBase::lagrangianFEM1: {
00065 return this->__discretizeBoundaryConditions<ScalarDiscretizationTypeBase::lagrangianFEM1>();
00066 }
00067 case ScalarDiscretizationTypeBase::lagrangianFEM2: {
00068 return this->__discretizeBoundaryConditions<ScalarDiscretizationTypeBase::lagrangianFEM2>();
00069 }
00070 default: {
00071 throw ErrorHandler(__FILE__,__LINE__,
00072 "Discretization type not implemented",
00073 ErrorHandler::normal);
00074 return 0;
00075 }
00076 }
00077 }