📄 radarfdtd.h
字号:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <float.h>
#include <time.h>
/* Define the precision */
#define PRECISION double
#define VERSION_INFO "RadarFDTD Version 6.0 by Carsten Aulbert (Carsten.Aulbert@gmx.net)"
/* Define some common acronyms for the materialConstants array */
#define DTMUDX 0
#define DTEPSDX 1
#define DTMUDY 2
#define DTEPSDY 3
#define DTMUDZ 4
#define DTEPSDZ 5
#define DTSIGEPS 6
#define EPSILON 7
#define SIGMA 8
/* define pi if not defined */
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
/* under which number a value is considered zero */
#define LIMIT 1e-50
/* Now there are some physical constants, don't fiddle around with them too mucyh ;) */
#define LIGHT_SPEED 299792458.0
#define LIGHT_SPEED_SQUARED 89875517873681764.0
#define MU_0 1.2566370614359172953850573533118011536788677597500423283899778369231265625144835994512139301368468271e-6
#define EPSILON_0 8.8541878176203898505365630317107502606083701665994498081024171524053950954599821142852891607182008932e-12
class CradarFDTD
{
private:
#ifdef DEBUG
FILE *loggingFile;
#endif
/* Usually I do not like global variables, but if I had not chosen to use these, the function prototypes would have been quite long! */
/* global variables go here */
int i,j,k; /* indices of 3D array of cells */
int nx, ny, nz; /* number of cells along axes */
int posX1, posY1, posX2, posY2;
PRECISION allocatedBytes;// = 0.0; /* tracker of how much memory is used */
int iteration;// = 0; /* iteration counter */
PRECISION mytmp;
PRECISION stimulus;// = 0.0; /* stimulus value */
PRECISION currentSimulationTime;// = 0.0; /* current simulation time [s] */
PRECISION totalSimulationTime;// = 0.0; /* total simulation time [s] */
PRECISION omega; /* angular frequency for stimulus [radians/second] */
PRECISION lambda; /* wavelength of stimulus [m] */
PRECISION dx, dy, dz; /* space differentials, i.e. size of a cell [m]*/
PRECISION dt,tmp; /* time differential [s] */
PRECISION ***ex, ***ey, ***ez; /* pointers to 3D-arrays */
PRECISION ***hx, ***hy, ***hz; /* pointers to 3D-arrays */
unsigned short int ***material; /* layout of material */
PRECISION **materialConstants; /* constants for various materials */
PRECISION tmpout; /* tmp output */
long int programStartTime; /* number of seconds since 01/01/1970*/
long int tmpTime, tmpTimeRemaining;
float tmpTimePerStep;
int tmpRemainingDays,tmpRemainingHours,tmpRemainingMinutes,tmpRemainingSeconds;
char timeString[1024];
char addString[1024];
PRECISION ***pmlEXYBottomYZ, ***pmlEXZBottomYZ; /* pml values */
PRECISION ***pmlEYXBottomYZ, ***pmlEYZBottomYZ; /* pml values */
PRECISION ***pmlEZXBottomYZ, ***pmlEZYBottomYZ; /* pml values */
PRECISION ***pmlHXYBottomYZ, ***pmlHXZBottomYZ; /* pml values */
PRECISION ***pmlHYXBottomYZ, ***pmlHYZBottomYZ; /* pml values */
PRECISION ***pmlHZXBottomYZ, ***pmlHZYBottomYZ; /* pml values */
PRECISION ***pmlEXYBottomXY, ***pmlEXZBottomXY; /* pml values */
PRECISION ***pmlEYXBottomXY, ***pmlEYZBottomXY; /* pml values */
PRECISION ***pmlEZXBottomXY, ***pmlEZYBottomXY; /* pml values */
PRECISION ***pmlHXYBottomXY, ***pmlHXZBottomXY; /* pml values */
PRECISION ***pmlHYXBottomXY, ***pmlHYZBottomXY; /* pml values */
PRECISION ***pmlHZXBottomXY, ***pmlHZYBottomXY; /* pml values */
PRECISION ***pmlEXYBottomXZ, ***pmlEXZBottomXZ; /* pml values */
PRECISION ***pmlEYXBottomXZ, ***pmlEYZBottomXZ; /* pml values */
PRECISION ***pmlEZXBottomXZ, ***pmlEZYBottomXZ; /* pml values */
PRECISION ***pmlHXYBottomXZ, ***pmlHXZBottomXZ; /* pml values */
PRECISION ***pmlHYXBottomXZ, ***pmlHYZBottomXZ; /* pml values */
PRECISION ***pmlHZXBottomXZ, ***pmlHZYBottomXZ; /* pml values */
PRECISION ***pmlEXYTopYZ, ***pmlEXZTopYZ; /* pml values */
PRECISION ***pmlEYXTopYZ, ***pmlEYZTopYZ; /* pml values */
PRECISION ***pmlEZXTopYZ, ***pmlEZYTopYZ; /* pml values */
PRECISION ***pmlHXYTopYZ, ***pmlHXZTopYZ; /* pml values */
PRECISION ***pmlHYXTopYZ, ***pmlHYZTopYZ; /* pml values */
PRECISION ***pmlHZXTopYZ, ***pmlHZYTopYZ; /* pml values */
PRECISION ***pmlEXYTopXY, ***pmlEXZTopXY; /* pml values */
PRECISION ***pmlEYXTopXY, ***pmlEYZTopXY; /* pml values */
PRECISION ***pmlEZXTopXY, ***pmlEZYTopXY; /* pml values */
PRECISION ***pmlHXYTopXY, ***pmlHXZTopXY; /* pml values */
PRECISION ***pmlHYXTopXY, ***pmlHYZTopXY; /* pml values */
PRECISION ***pmlHZXTopXY, ***pmlHZYTopXY; /* pml values */
PRECISION ***pmlEXYTopXZ, ***pmlEXZTopXZ; /* pml values */
PRECISION ***pmlEYXTopXZ, ***pmlEYZTopXZ; /* pml values */
PRECISION ***pmlEZXTopXZ, ***pmlEZYTopXZ; /* pml values */
PRECISION ***pmlHXYTopXZ, ***pmlHXZTopXZ; /* pml values */
PRECISION ***pmlHYXTopXZ, ***pmlHYZTopXZ; /* pml values */
PRECISION ***pmlHZXTopXZ, ***pmlHZYTopXZ; /* pml values */
PRECISION ***pmlComplexEXYBottomYZ, ***pmlComplexEXZBottomYZ; /* pml values */
PRECISION ***pmlComplexEYXBottomYZ, ***pmlComplexEYZBottomYZ; /* pml values */
PRECISION ***pmlComplexEZXBottomYZ, ***pmlComplexEZYBottomYZ; /* pml values */
PRECISION ***pmlComplexEXYBottomXY, ***pmlComplexEXZBottomXY; /* pml values */
PRECISION ***pmlComplexEYXBottomXY, ***pmlComplexEYZBottomXY; /* pml values */
PRECISION ***pmlComplexEZXBottomXY, ***pmlComplexEZYBottomXY; /* pml values */
PRECISION ***pmlComplexEXYBottomXZ, ***pmlComplexEXZBottomXZ; /* pml values */
PRECISION ***pmlComplexEYXBottomXZ, ***pmlComplexEYZBottomXZ; /* pml values */
PRECISION ***pmlComplexEZXBottomXZ, ***pmlComplexEZYBottomXZ; /* pml values */
PRECISION ***pmlComplexEXYTopYZ, ***pmlComplexEXZTopYZ; /* pml values */
PRECISION ***pmlComplexEYXTopYZ, ***pmlComplexEYZTopYZ; /* pml values */
PRECISION ***pmlComplexEZXTopYZ, ***pmlComplexEZYTopYZ; /* pml values */
PRECISION ***pmlComplexEXYTopXY, ***pmlComplexEXZTopXY; /* pml values */
PRECISION ***pmlComplexEYXTopXY, ***pmlComplexEYZTopXY; /* pml values */
PRECISION ***pmlComplexEZXTopXY, ***pmlComplexEZYTopXY; /* pml values */
PRECISION ***pmlComplexEXYTopXZ, ***pmlComplexEXZTopXZ; /* pml values */
PRECISION ***pmlComplexEYXTopXZ, ***pmlComplexEYZTopXZ; /* pml values */
PRECISION ***pmlComplexEZXTopXZ, ***pmlComplexEZYTopXZ; /* pml values */
PRECISION ***pmlSigmaXBottomYZ, ***pmlSigmaXStarBottomYZ;
PRECISION ***pmlSigmaXBottomXY, ***pmlSigmaXStarBottomXY;
PRECISION ***pmlSigmaXBottomXZ, ***pmlSigmaXStarBottomXZ;
PRECISION ***pmlSigmaXTopYZ, ***pmlSigmaXStarTopYZ;
PRECISION ***pmlSigmaXTopXY, ***pmlSigmaXStarTopXY;
PRECISION ***pmlSigmaXTopXZ, ***pmlSigmaXStarTopXZ;
PRECISION ***pmlSigmaYBottomYZ, ***pmlSigmaYStarBottomYZ;
PRECISION ***pmlSigmaYBottomXY, ***pmlSigmaYStarBottomXY;
PRECISION ***pmlSigmaYBottomXZ, ***pmlSigmaYStarBottomXZ;
PRECISION ***pmlSigmaYTopYZ, ***pmlSigmaYStarTopYZ;
PRECISION ***pmlSigmaYTopXY, ***pmlSigmaYStarTopXY;
PRECISION ***pmlSigmaYTopXZ, ***pmlSigmaYStarTopXZ;
PRECISION ***pmlSigmaZBottomYZ, ***pmlSigmaZStarBottomYZ;
PRECISION ***pmlSigmaZBottomXY, ***pmlSigmaZStarBottomXY;
PRECISION ***pmlSigmaZBottomXZ, ***pmlSigmaZStarBottomXZ;
PRECISION ***pmlSigmaZTopYZ, ***pmlSigmaZStarTopYZ;
PRECISION ***pmlSigmaZTopXY, ***pmlSigmaZStarTopXY;
PRECISION ***pmlSigmaZTopXZ, ***pmlSigmaZStarTopXZ;
/* stretching parameters */
PRECISION ***pmlSXBottomYZ, ***pmlSYBottomYZ, ***pmlSZBottomYZ;
PRECISION ***pmlSXTopYZ, ***pmlSYTopYZ, ***pmlSZTopYZ;
PRECISION ***pmlSXBottomXY, ***pmlSYBottomXY, ***pmlSZBottomXY;
PRECISION ***pmlSXTopXY, ***pmlSYTopXY, ***pmlSZTopXY;
PRECISION ***pmlSXBottomXZ, ***pmlSYBottomXZ, ***pmlSZBottomXZ;
PRECISION ***pmlSXTopXZ, ***pmlSYTopXZ, ***pmlSZTopXZ;
/* materials within pmls */
unsigned short int ***pmlMaterialBottomYZ, ***pmlMaterialTopYZ;
unsigned short int ***pmlMaterialBottomXY, ***pmlMaterialTopXY;
unsigned short int ***pmlMaterialBottomXZ, ***pmlMaterialTopXZ;
/* read the config files*/
int currentConfigFileVersion; //= 3; /* this is needed to detect older config-files */
// int nx, ny, nz; /* number of cells in that direction */
PRECISION dim_X, dim_Y, dim_Z; /* overall dimension of simulation space */
int pmlWidth; /* width of absobing pmls */
int maxAllowedMemory; /* Maximum number of bytes allowd for storing */
int maxIteration; /* max number of iteration steps */
int timeToPlotReceiver, timeToPlotSnapshot; /* decide when to plot */
int maxMaterials; /* maximum number of materials */
int transX, transY, transZ; /* position of transmitter */
int maxReceiver; /* max number of receiver boxes*/
int **receiver; /* receiver positions */
int **tmpReceiver; /* temp. receiver array */
int **tmpTransmitter; /* temp. transmitter positions */
int **transmitter; /* transmitter positions */
int maxTransmitter; /* max. number of transmitter boxes */
PRECISION shortestWavelength; /* shortest desired wavelength [m] */
PRECISION theoreticalReflection;
char *materialFilename;
int numberOfBoxes, currentMaterial, numberOfReceiverBoxes, numberOfTransmitterBoxes, tmpCounter;
int snapshotMode, snapshotPosition, snapshotPlane;
PRECISION transmitterAmplitude;
PRECISION transmitterCharacteristicTime;
PRECISION transmitterFrequency;
PRECISION transmitterParameter;
PRECISION simulationLength;
PRECISION maxSigma;
PRECISION maxStretching;
PRECISION minWavelength;
int stretchSteepness;
int transmitterMode;
int transmitterStimulusComponent;
int storage;// = 0;
public:
/* for output files*/
// FILE *foutput;
// char filename[1024];
// char directory[1024]; /* work directory */
// char outputFilename[1024]; /* output filename for receiver data*/
// char stimulusFilename[1024]; /* output filename for wave data*/
// #ifdef DEBUG
// int tmpMaterial;
// #endif
private:
PRECISION ***MyAllocPrecision(int dimensionX, int dimensionY, int dimensionZ, PRECISION value, int *storage);
unsigned short int ***MyAllocShortInt(int dimensionX, int dimensionY, int dimensionZ, int *storage);
int MyFreePrecision(PRECISION ***pointer, int x, int y, int z);
int MyFreeShortInt(unsigned short int ***pointer, int x, int y, int z);
void PrintCorrectOrder(PRECISION number, FILE *output);
PRECISION ReturnConductivity (PRECISION position, PRECISION pmlThickness, PRECISION maxConductivity);
PRECISION ReturnFieldStrength(int x, int y, int z, int mode);
PRECISION ReturnStretching (PRECISION position, PRECISION pmlThickness, PRECISION maxStretching, int stretchSteepness);
void SetConductivities(void);
void SetPMLMaterial(void);
void ShowWhirl(FILE *output, long int counter);
void UpdateInnerEx(void);
void UpdateInnerEy(void);
void UpdateInnerEz(void);
void UpdateInnerHx(void);
void UpdateInnerHy(void);
void UpdateInnerHz(void);
void UpdatePMLComplexE(void);
void UpdatePMLEx(void);
void UpdatePMLEy(void);
void UpdatePMLEz(void);
void UpdatePMLHx(void);
void UpdatePMLHy(void);
void UpdatePMLHz(void);
void ReadNextLine (FILE *file, char s[]);
void ReadConfigfile(char *directory, char *filename);
public:
CradarFDTD();
~CradarFDTD();
void Simulating(char* m_strDirectory,char* m_strFileName);
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -