You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
2.0 KiB
118 lines
2.0 KiB
#include "float_regcvtr.h"
|
|
|
|
regcvtr::regcvtr()
|
|
{
|
|
n = 0;
|
|
field = 0;
|
|
}
|
|
|
|
ifstream &operator>> (ifstream &inputFile, regcvtr ®)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < reg.n; i ++) {
|
|
double re, im;
|
|
inputFile >> re >> im;
|
|
reg.field[i].x = Complex (re, im);
|
|
|
|
inputFile >> re >> im;
|
|
reg.field[i].y = Complex (re, im);
|
|
|
|
inputFile >> re >> im;
|
|
reg.field[i].z = Complex (re, im);
|
|
}
|
|
|
|
return inputFile;
|
|
}
|
|
|
|
ofstream &operator<< (ofstream &outputFile, const regcvtr ®)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < reg.n; i ++) {
|
|
outputFile << reg.field[i].x.real() << " " << reg.field[i].x.imag() << endl;
|
|
outputFile << reg.field[i].y.real() << " " << reg.field[i].y.imag() << endl;
|
|
outputFile << reg.field[i].z.real() << " " << reg.field[i].z.imag() << endl;
|
|
}
|
|
outputFile << endl;
|
|
|
|
return outputFile;
|
|
}
|
|
|
|
regcvtr ®cvtr::operator= (regcvtr ®)
|
|
{
|
|
int i;
|
|
n = reg.n;
|
|
for (i = 0; i < n; i ++)
|
|
SetField(i, reg.GetField(i));
|
|
return *this;
|
|
}
|
|
|
|
void regcvtr::SetField(int id, cVtr cv)
|
|
{
|
|
if (id < 0 || id >= n) return;
|
|
|
|
field[id] = cv;
|
|
}
|
|
|
|
cVtr regcvtr::GetField(int id)
|
|
{
|
|
cVtr cv;
|
|
|
|
if (id < 0 || id >= n) return cv;
|
|
|
|
return field[id];
|
|
}
|
|
|
|
void regcvtr::init(int dim)
|
|
{
|
|
n = dim;
|
|
field = new cVtr[dim];
|
|
|
|
for (int i=0; i< dim; i++)
|
|
field[i].reset();
|
|
|
|
}
|
|
|
|
void ReadRegcvtr(char *regName, int nT, regcvtr *reg)
|
|
{
|
|
ifstream fin(regName, ios::in);
|
|
int i;
|
|
char buffer[360];
|
|
|
|
// fin >> buffer;
|
|
|
|
for (i = 0; i < nT; i ++)
|
|
fin >> (reg[i]);
|
|
|
|
fin.close();
|
|
}
|
|
|
|
cVtr GetField(regcvtr reg, double z0, double z1, double z2)
|
|
{
|
|
double zeta[3];
|
|
cVtr cv;
|
|
|
|
zeta[0] = z0; zeta[1] = z1; zeta[2] = z2;
|
|
|
|
int i, i1, i2;
|
|
if (reg.n == 6) {
|
|
for (i = 0; i < 3; i ++)
|
|
cv = cv + reg.GetField(i) * (2.0 * zeta[i] * (zeta[i] - 0.5));
|
|
for (i = 0; i < 3; i ++) {
|
|
i1 = (i + 1) % 3;
|
|
i2 = (i + 2) % 3;
|
|
|
|
cv = cv + reg.GetField(i + 3) * (4.0 * zeta[i1] * zeta[i2]);
|
|
}
|
|
}
|
|
if (reg.n == 3) {
|
|
for (i = 0; i < 3; i ++)
|
|
cv = cv + reg.GetField(i) * zeta[i];
|
|
}
|
|
|
|
return cv;
|
|
}
|
|
|
|
|
|
|
|
|