00001 // copyright by benedikt oswald, all rights reserved, 2002-2006. 00002 // project - aqhdes2003 00003 // file name - mat3d.c 00004 // file type - C include file 00005 // objective - define NUMPROC mat3d to model fully arbitrary 3D material properties 00006 // inheritance - derived from dlz.h 00007 // modified - 2004 aug 12, benedikt oswald, creation 00008 // modified - 00009 // required software - UG 3.1 or higher 00010 // feature - defines NUMPROC mat3d to model fully arbitrary 3D material properties, 00011 // feature - such as dielectric permittivitiy, magnetic permeability and ohmic 00012 // feature - conductivitiy; at present dispersion is not modeled. 00013 00014 #ifndef __MATERIALS_3D__ 00015 #define __MATERIALS_3D__ 00016 00017 // include standard header files 00018 #include <math.h> 00019 #include <stdlib.h> 00020 #include <stdio.h> 00021 #include <string.h> 00022 #include <time.h> 00023 00024 // include UG header files 00025 #include "gm.h" /* for data structure */ 00026 #include "ugstruct.h" /* for GetStringValue */ 00027 #include "misc.h" /* for MIN, MAX, PI, ... */ 00028 #include "ugdevices.h" /* for UserWrite, PrintErrorMessage */ 00029 #include "commands.h" /* for GetCurrentMultigrid */ 00030 #include "cmdint.h" /* for CreateCommand */ 00031 #include "cmdint.h" /* for CreateCommand */ 00032 #include "cmdline.h" /* for command line processing */ 00033 #include "general.h" /* for general desclarations */ 00034 #include "np.h" /* for NUMPROC implementation */ 00035 #include "assemble.h" /* for CreateCLASS implementation */ 00036 #include "pfile.h" /* header file for parallel file access */ 00037 #include "parallel.h" /* include parallel support */ 00038 00039 // include proprietary header files 00040 #include "aqhdSysParams.h" /* get system parameters from standard include file */ 00041 #include "aqhdReleaseInfo.h" /* get release information */ 00042 #include "aqhdPhysicoMath.h" /* get release information */ 00043 #include "linmaterials.h" /* get declaration of base NUMRPOC for linear materials */ 00044 00045 /****************************************************************************/ 00046 /* */ 00047 /* data structures used in this source file (exported data structures are */ 00048 /* in the corresponding include file!) */ 00049 /* */ 00050 /****************************************************************************/ 00051 00052 /* declare NUMPROC class and methods for 'NP_MATERIALS_3D'; 00053 which implements a fully flexible 3 dimensional material assignment on 00054 a per element basis; this is realized through querying the sumbdomain 00055 of an element and using the respective material properties that are 00056 assigned to this specific subdomain. 00057 */ 00058 00059 struct np_materials_3d 00060 { 00061 NP_LINEAR_MATERIALS linmat; // uses NP_LINEARMATERIALS NUMPROC 00062 00063 INT nmatdef; // number of material definitions 00064 00065 char **matname; // array of material names 00066 DOUBLE *er; // array stores relative permittivity values of defined materials 00067 DOUBLE *mr; // array stores relative permeability values of defined materials 00068 DOUBLE *sigma; // array stores ohmic conductivity of defined materials 00069 00070 INT nsubdom; // number of subdomains used in mat3d NUMPROC class instance; starts at 0 00071 INT *sdid; // stores ID's of subdomains defined in mat3d NUMPROC class instance; 00072 INT *sdm; // array stores material index belonging to the respectiv subdomain 00073 00074 }; 00075 typedef struct np_materials_3d NP_MATERIALS_3D; 00076 00077 INT InitMaterials3d(void); /* check class & methods into UG */ 00078 00079 #endif