📄 pre_termoffemequation.c
字号:
#define RCSID "$Id: Pre_TermOfFemEquation.c,v 1.17 2006/02/26 00:42:54 geuzaine Exp $"/* * Copyright (C) 1997-2006 P. Dular, C. Geuzaine * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA. * * Please report all bugs and problems to <getdp@geuz.org>. */#include "GetDP.h"#include "Treatment_Formulation.h"#include "Get_DofOfElement.h"#include "ExtendedGroup.h"#include "Data_Active.h"#include "DofData.h"#include "CurrentData.h"#include "Tools.h"/* ------------------------------------------------------------------------ *//* P r e _ I n i t T e r m O f F e m F o r m u l a t i o n *//* ------------------------------------------------------------------------ */void Pre_InitTermOfFemEquation(struct EquationTerm * EquationTerm_P, struct QuantityStorage * QuantityStorage_P0) { struct DefineQuantity * DefineQuantity_P ; GetDP_Begin("Pre_InitTermOfFemEquation"); if (EquationTerm_P->Case.LocalTerm.Term.DefineQuantityIndexDof >= 0) { DefineQuantity_P = (QuantityStorage_P0 + EquationTerm_P->Case.LocalTerm.Term.DefineQuantityIndexDof)->DefineQuantity ; Dof_AddFunctionSpaceIndex(DefineQuantity_P->FunctionSpaceIndex) ; } if (EquationTerm_P->Case.LocalTerm.Term.DefineQuantityIndexNoDof >= 0) { DefineQuantity_P = (QuantityStorage_P0 + EquationTerm_P->Case.LocalTerm.Term.DefineQuantityIndexNoDof)->DefineQuantity ; Dof_AddFunctionSpaceIndex(DefineQuantity_P->FunctionSpaceIndex) ; } GetDP_End ;}/* ------------------------------------------------------------------------ *//* P r e _ T e r m O f F e m F o r m u l a t i o n *//* ------------------------------------------------------------------------ */void Pre_TermOfFemEquation(struct Element * Element, struct EquationTerm * EquationTerm_P, struct QuantityStorage * QuantityStorage_P0) { struct QuantityStorage * QuantityStorageEqu_P, * QuantityStorageDof_P ; int i ; GetDP_Begin("Pre_TermOfFemEquation"); QuantityStorageEqu_P = QuantityStorage_P0 + EquationTerm_P->Case.LocalTerm.Term.DefineQuantityIndexEqu ; QuantityStorageDof_P = (EquationTerm_P->Case.LocalTerm.Term.DefineQuantityIndexDof >= 0)? QuantityStorage_P0 + EquationTerm_P->Case.LocalTerm.Term.DefineQuantityIndexDof : NULL ; if (QuantityStorageEqu_P->NumLastElementForEquDefinition != Element->Num) { QuantityStorageEqu_P->NumLastElementForEquDefinition = Element->Num ; for (i = 0 ; i < QuantityStorageEqu_P->NbrElementaryBasisFunction ; i++) switch(QuantityStorageEqu_P->BasisFunction[i].Constraint){ case NONE: Dof_DefineUnknownDof (QuantityStorageEqu_P->BasisFunction[i].CodeBasisFunction, QuantityStorageEqu_P->BasisFunction[i].CodeEntity, Current.NbrHar) ; break; case ASSIGN: Dof_DefineAssignFixedDof (QuantityStorageEqu_P->BasisFunction[i].CodeBasisFunction, QuantityStorageEqu_P->BasisFunction[i].CodeEntity, Current.NbrHar, QuantityStorageEqu_P->BasisFunction[i].Value, QuantityStorageEqu_P->BasisFunction[i].TimeFunctionIndex) ; break; case INIT: Dof_DefineInitFixedDof (QuantityStorageEqu_P->BasisFunction[i].CodeBasisFunction, QuantityStorageEqu_P->BasisFunction[i].CodeEntity, Current.NbrHar, QuantityStorageEqu_P->BasisFunction[i].Value) ; break; case ASSIGNFROMRESOLUTION: Dof_DefineAssignSolveDof (QuantityStorageEqu_P->BasisFunction[i].CodeBasisFunction, QuantityStorageEqu_P->BasisFunction[i].CodeEntity, Current.NbrHar, QuantityStorageEqu_P->BasisFunction[i].TimeFunctionIndex) ; break; case INITFROMRESOLUTION: Dof_DefineInitSolveDof (QuantityStorageEqu_P->BasisFunction[i].CodeBasisFunction, QuantityStorageEqu_P->BasisFunction[i].CodeEntity, Current.NbrHar); break; case CST_LINK: Dof_DefineLinkDof (QuantityStorageEqu_P->BasisFunction[i].CodeBasisFunction, QuantityStorageEqu_P->BasisFunction[i].CodeEntity, Current.NbrHar, QuantityStorageEqu_P->BasisFunction[i].Value, QuantityStorageEqu_P->BasisFunction[i].CodeEntity_Link) ; break; case CST_LINKCPLX: Dof_DefineLinkCplxDof (QuantityStorageEqu_P->BasisFunction[i].CodeBasisFunction, QuantityStorageEqu_P->BasisFunction[i].CodeEntity, Current.NbrHar, QuantityStorageEqu_P->BasisFunction[i].Value, QuantityStorageEqu_P->BasisFunction[i].CodeEntity_Link) ; break; } } if (QuantityStorageDof_P && (QuantityStorageDof_P != QuantityStorageEqu_P) && (QuantityStorageDof_P->NumLastElementForDofDefinition != Element->Num)) { QuantityStorageDof_P->NumLastElementForDofDefinition = Element->Num ; for (i = 0 ; i < QuantityStorageDof_P->NbrElementaryBasisFunction ; i++) switch(QuantityStorageDof_P->BasisFunction[i].Constraint){ case ASSIGN: Dof_DefineAssignFixedDof (QuantityStorageDof_P->BasisFunction[i].CodeBasisFunction, QuantityStorageDof_P->BasisFunction[i].CodeEntity, Current.NbrHar, QuantityStorageDof_P->BasisFunction[i].Value, QuantityStorageDof_P->BasisFunction[i].TimeFunctionIndex) ; break; case INIT: Dof_DefineInitFixedDof (QuantityStorageDof_P->BasisFunction[i].CodeBasisFunction, QuantityStorageDof_P->BasisFunction[i].CodeEntity, Current.NbrHar, QuantityStorageDof_P->BasisFunction[i].Value) ; break; case ASSIGNFROMRESOLUTION: Dof_DefineAssignSolveDof (QuantityStorageDof_P->BasisFunction[i].CodeBasisFunction, QuantityStorageDof_P->BasisFunction[i].CodeEntity, Current.NbrHar, QuantityStorageDof_P->BasisFunction[i].TimeFunctionIndex) ; break; case INITFROMRESOLUTION: Dof_DefineInitSolveDof (QuantityStorageDof_P->BasisFunction[i].CodeBasisFunction, QuantityStorageDof_P->BasisFunction[i].CodeEntity, Current.NbrHar); break; case CST_LINK: Dof_DefineLinkDof (QuantityStorageDof_P->BasisFunction[i].CodeBasisFunction, QuantityStorageDof_P->BasisFunction[i].CodeEntity, Current.NbrHar, QuantityStorageDof_P->BasisFunction[i].Value, QuantityStorageDof_P->BasisFunction[i].CodeEntity_Link) ; break; case CST_LINKCPLX: Dof_DefineLinkCplxDof (QuantityStorageDof_P->BasisFunction[i].CodeBasisFunction, QuantityStorageDof_P->BasisFunction[i].CodeEntity, Current.NbrHar, QuantityStorageDof_P->BasisFunction[i].Value, QuantityStorageDof_P->BasisFunction[i].CodeEntity_Link) ; break; } } GetDP_End ;}/* ------------------------------------------------------------------------ *//* P r e _ I n i t G l o b a l T e r m O f F e m F o r m u l a t i o n *//* ------------------------------------------------------------------------ */void Pre_InitGlobalTermOfFemEquation(struct EquationTerm * EquationTerm_P, struct QuantityStorage * QuantityStorage_P0) { struct DefineQuantity * DefineQuantity_P ; GetDP_Begin("Pre_InitGlobalTermOfFemEquation"); if (EquationTerm_P->Case.GlobalTerm.Term.DefineQuantityIndexDof >= 0) { DefineQuantity_P = (QuantityStorage_P0 + EquationTerm_P->Case.GlobalTerm.Term.DefineQuantityIndexDof)->DefineQuantity ; Dof_AddFunctionSpaceIndex(DefineQuantity_P->FunctionSpaceIndex) ; } if (EquationTerm_P->Case.GlobalTerm.Term.DefineQuantityIndexNoDof >= 0) { DefineQuantity_P = (QuantityStorage_P0 + EquationTerm_P->Case.GlobalTerm.Term.DefineQuantityIndexNoDof)->DefineQuantity ; Dof_AddFunctionSpaceIndex(DefineQuantity_P->FunctionSpaceIndex) ; } GetDP_End ;}/* ------------------------------------------------------------------------ *//* P r e _ G l o b a l T e r m O f F e m F o r m u l a t i o n *//* ------------------------------------------------------------------------ */void Pre_GlobalTermOfFemEquation(int Num_Region, struct EquationTerm * EquationTerm_P, struct QuantityStorage * QuantityStorage_P0) { struct QuantityStorage * QuantityStorageEqu_P, * QuantityStorageDof_P ; GetDP_Begin("Pre_GlobalTermOfFemEquation"); QuantityStorageEqu_P = QuantityStorage_P0 + EquationTerm_P->Case.GlobalTerm.Term.DefineQuantityIndexEqu ; QuantityStorageDof_P = (EquationTerm_P->Case.GlobalTerm.Term.DefineQuantityIndexDof >= 0)? QuantityStorage_P0 + EquationTerm_P->Case.GlobalTerm.Term.DefineQuantityIndexDof : NULL ; if (QuantityStorageEqu_P->NbrElementaryBasisFunction == 1) { switch(QuantityStorageEqu_P->BasisFunction[0].Constraint) { case NONE: Dof_DefineUnknownDof (QuantityStorageEqu_P->BasisFunction[0].CodeBasisFunction, QuantityStorageEqu_P->BasisFunction[0].CodeEntity, Current.NbrHar) ; break ; case ASSIGN: Dof_DefineAssignFixedDof (QuantityStorageEqu_P->BasisFunction[0].CodeBasisFunction, QuantityStorageEqu_P->BasisFunction[0].CodeEntity, Current.NbrHar, QuantityStorageEqu_P->BasisFunction[0].Value, QuantityStorageEqu_P->BasisFunction[0].TimeFunctionIndex) ; break ; case INIT: Dof_DefineInitFixedDof (QuantityStorageEqu_P->BasisFunction[0].CodeBasisFunction, QuantityStorageEqu_P->BasisFunction[0].CodeEntity, Current.NbrHar, QuantityStorageEqu_P->BasisFunction[0].Value) ; break; case ASSIGNFROMRESOLUTION: Dof_DefineAssignSolveDof (QuantityStorageEqu_P->BasisFunction[0].CodeBasisFunction, QuantityStorageEqu_P->BasisFunction[0].CodeEntity, Current.NbrHar, QuantityStorageEqu_P->BasisFunction[0].TimeFunctionIndex) ; break; case INITFROMRESOLUTION: Dof_DefineInitSolveDof (QuantityStorageEqu_P->BasisFunction[0].CodeBasisFunction, QuantityStorageEqu_P->BasisFunction[0].CodeEntity, Current.NbrHar); break; case CST_LINK: Dof_DefineLinkDof (QuantityStorageEqu_P->BasisFunction[0].CodeBasisFunction, QuantityStorageEqu_P->BasisFunction[0].CodeEntity, Current.NbrHar, QuantityStorageEqu_P->BasisFunction[0].Value, QuantityStorageEqu_P->BasisFunction[0].CodeEntity_Link) ; break; case CST_LINKCPLX: Dof_DefineLinkCplxDof (QuantityStorageEqu_P->BasisFunction[0].CodeBasisFunction, QuantityStorageEqu_P->BasisFunction[0].CodeEntity, Current.NbrHar, QuantityStorageEqu_P->BasisFunction[0].Value, QuantityStorageEqu_P->BasisFunction[0].CodeEntity_Link) ; break; } } if (QuantityStorageDof_P && (QuantityStorageDof_P != QuantityStorageEqu_P)) { if (QuantityStorageDof_P->NbrElementaryBasisFunction == 1) { switch(QuantityStorageDof_P->BasisFunction[0].Constraint) { case NONE: if (QuantityStorageDof_P->BasisFunction[0].CodeAssociateBasisFunction > 0) Dof_DefineAssociateDof (QuantityStorageDof_P->BasisFunction[0].CodeAssociateBasisFunction, QuantityStorageDof_P->BasisFunction[0].CodeEntity, QuantityStorageDof_P->BasisFunction[0].CodeBasisFunction, QuantityStorageDof_P->BasisFunction[0].CodeEntity, Current.NbrHar) ; break ; case ASSIGN: Dof_DefineAssignFixedDof (QuantityStorageDof_P->BasisFunction[0].CodeBasisFunction, QuantityStorageDof_P->BasisFunction[0].CodeEntity, Current.NbrHar, QuantityStorageDof_P->BasisFunction[0].Value, QuantityStorageDof_P->BasisFunction[0].TimeFunctionIndex) ; break ; case INIT: Dof_DefineInitFixedDof (QuantityStorageDof_P->BasisFunction[0].CodeBasisFunction, QuantityStorageDof_P->BasisFunction[0].CodeEntity, Current.NbrHar, QuantityStorageDof_P->BasisFunction[0].Value); break; case ASSIGNFROMRESOLUTION: Dof_DefineAssignSolveDof (QuantityStorageDof_P->BasisFunction[0].CodeBasisFunction, QuantityStorageDof_P->BasisFunction[0].CodeEntity, Current.NbrHar, QuantityStorageDof_P->BasisFunction[0].TimeFunctionIndex) ; break; case INITFROMRESOLUTION: Dof_DefineInitSolveDof (QuantityStorageDof_P->BasisFunction[0].CodeBasisFunction, QuantityStorageDof_P->BasisFunction[0].CodeEntity, Current.NbrHar); break; case CST_LINK: Dof_DefineLinkDof (QuantityStorageDof_P->BasisFunction[0].CodeBasisFunction,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -