00001 00026 /****************************************************************************/ 00027 /* */ 00028 /* include files */ 00029 /* system include files */ 00030 /* application include files */ 00031 /* */ 00032 /****************************************************************************/ 00033 00034 #ifndef __SIBC1ST__ 00035 #define __SIBC1ST__ 00036 00037 // include standard C header files 00038 #include <math.h> 00039 #include <stdlib.h> 00040 #include <stdio.h> 00041 #include <string.h> 00042 00043 // include UG header files 00044 #include "gm.h" /* for data structure */ 00045 #include "shapes.h" /* general element shape calculations */ 00046 #include "ugstruct.h" /* for GetStringValue */ 00047 #include "misc.h" /* for MIN, MAX, PI, ... */ 00048 #include "ugdevices.h" /* for UserWrite, PrintErrorMessage */ 00049 #include "commands.h" /* for GetCurrentMultigrid */ 00050 #include "cmdint.h" /* for CreateCommand */ 00051 #include "cmdline.h" /* for command line processing */ 00052 #include "general.h" /* for general desclarations */ 00053 #include "np.h" /* for NUMPROC implementation */ 00054 #include "assemble.h" /* for CreateCLASS implementation */ 00055 #include "compiler.h" 00056 #include "namespace.h" 00057 00058 // include proprietary header files 00059 #include "disconst.h" /* discretization constants */ 00060 #include "tdwaveforms.h" /* time doman source waveforms */ 00061 #include "aqhdSysParams.h" /* get system parameters from standard include file */ 00062 #include "aqhdReleaseInfo.h" /* get release information */ 00063 #include "aqhdPhysicoMath.h" /* get mathematical & physical constants */ 00064 #include "aqhdBaseTypes.h" /* get mathematical & physical constants */ 00065 #include "sibc1stdisc.h" /* get discretization of Maxwell equations */ 00066 #include "whitney.h" /* include basis functions */ 00067 #include "linmaterials.h" /* include NUMPROC definitions for linear, non-dispersive materials */ 00068 #include "iinternalsrc.h" /* include NUMPROC definitions for internal excitation aka source */ 00069 #include "auxiliary.h" /* auxiliary functions for matrix output etc. */ 00070 00071 /****************************************************************************/ 00072 /* */ 00073 /* defines in the following order */ 00074 /* */ 00075 /* compile time constants defining static data size (i.e. arrays) */ 00076 /* other constants */ 00077 /* macros */ 00078 /* */ 00079 /****************************************************************************/ 00080 00081 #define T_SIBC1ST_CLASS_NAME "sibc1stclass" 00082 00083 /****************************************************************************/ 00084 /* */ 00085 /* data structures used in this source file (exported data structures are */ 00086 /* in the corresponding include file!) */ 00087 /* */ 00088 /****************************************************************************/ 00089 00090 /* declare NUMPROC class and methods for 'NP_IMPLICIT_TIME_DOMAIN_INTEGRATION' */ 00091 00092 typedef struct 00093 { 00094 NP_BASE base; // inherits base class 00095 00096 NP_LINEAR_MATERIALS *linmat; // pointer to NUMPROC that provides linear, non-dispersive electrical materials 00097 NP_IMPLICIT_INTERNAL_SOURCE *iinternalsrc; // pointer to NUMPROCE that provides internal source for the electric field 00098 00099 DOUBLE dt; // time step for explicit scheme 00100 DOUBLE t; // current time 00101 00102 DOUBLE frequency0; // frequency at which we evaluate the surface resistance and inductance 00103 DOUBLE sigmasurface; // the conductivity of the boundary material 00104 DOUBLE mrsurface; // the relative magnetic permeability of the boundary material 00105 00106 DOUBLE rs; // surface resistance, derived from numproc parameters 00107 DOUBLE ls; // surface inductance, derived from numproc parameters 00108 00109 INT fl; // from level with respect to multigrid 00110 INT tl; // to level with respect to multigrid 00111 00112 VECDATA_DESC* efldp; // pointer to electric field vector at t_(n+1) 00113 VECDATA_DESC* efldn; // pointer to electric field vector at t_n 00114 VECDATA_DESC* efldm; // pointer to electric field vector at t_(m-1) 00115 00116 VECDATA_DESC* rhs; // pointer to right hand side vector 00117 VECDATA_DESC* force; // pointer to excitation aka force vector 00118 00119 MATDATA_DESC* tmat; // pointer to [T_ij] matrix structure 00120 MATDATA_DESC* smat; // pointer to [S_ij] matrix structure 00121 00122 MATDATA_DESC* rmat; // pointer to [R_ij] matrix structure 00123 MATDATA_DESC* prmat; // pointer to [PR_ij] matrix structure, used for resistive sibc matrix 00124 MATDATA_DESC* plmat; // pointer to [PR_ij] matrix structure, used for inductive sibc matrix 00125 00126 MATDATA_DESC* amat; // pointer to matrix A in final system A * x = rhs 00127 00128 VECDATA_DESC* hv1; // pointer to auxiliary vector, used in implicit time update scheme 00129 VECDATA_DESC* hv2; // pointer to auxiliary vector, used in implicit time update scheme 00130 00131 MATDATA_DESC* hmat1; // pointer to auxiliary matrix structure, used in implicit time update scheme 00132 MATDATA_DESC* hmat2; // pointer to auxiliary matrix structure, used in implicit time update scheme 00133 00134 INT (*Assemble)(NP_BASE *base, INT, char**); // pointer to Assembling function 00135 INT (*PreProcess)(NP_BASE *base, INT, char**); // pointer to PreProcessing function 00136 INT (*PostProcess)(NP_BASE *base, INT, char**); // pointer to PostProcessing function 00137 00138 } NP_SIBC1ST_SOLVER; 00139 00140 00144 INT InitSIBC1st(void); /* check class & methods into UG */ 00145 00146 00147 #endif 00148