forked from lijiext/lammps
Merge pull request #672 from akohlmey/phana-w-tricubic
Streamline compilation of "phana" tool for fix phonon
This commit is contained in:
commit
0dd7ba26c0
|
@ -1,7 +1,7 @@
|
||||||
.SUFFIXES : .o .cpp
|
.SUFFIXES : .o .cpp
|
||||||
# compiler and flags
|
# compiler and flags
|
||||||
CC = g++ -Wno-unused-result
|
CC = g++ -Wall
|
||||||
LINK = $(CC) -static
|
LINK = $(CC)
|
||||||
CFLAGS = -O3 $(DEBUG) $(UFLAG)
|
CFLAGS = -O3 $(DEBUG) $(UFLAG)
|
||||||
#
|
#
|
||||||
OFLAGS = -O3 $(DEBUG)
|
OFLAGS = -O3 $(DEBUG)
|
||||||
|
@ -9,18 +9,17 @@ INC = $(LPKINC) $(TCINC) $(SPGINC)
|
||||||
LIB = $(LPKLIB) $(TCLIB) $(SPGLIB)
|
LIB = $(LPKLIB) $(TCLIB) $(SPGLIB)
|
||||||
#
|
#
|
||||||
# cLapack library needed
|
# cLapack library needed
|
||||||
LPKINC = -I/opt/libs/clapack/3.2.1/include
|
LPKINC =
|
||||||
LPKLIB = -L/opt/libs/clapack/3.2.1/lib -lclapack -lblas -lf2c #-lm
|
LPKLIB =-llapack
|
||||||
#
|
#
|
||||||
# Tricubic library needed
|
|
||||||
TCINC = -I/opt/libs/tricubic/1.0/include
|
|
||||||
TCLIB = -L/opt/libs/tricubic/1.0/lib -ltricubic
|
|
||||||
#
|
#
|
||||||
# spglib 1.8.2, used to get the irreducible q-points
|
# spglib 1.8.2, used to get the irreducible q-points
|
||||||
# if UFLAG is not set, spglib won't be used.
|
# if UFLAG is not set, spglib won't be used.
|
||||||
UFLAG = -DUseSPG
|
|
||||||
SPGINC = -I/opt/libs/spglib/1.8.2/include
|
# UFLAG = -DUseSPG
|
||||||
SPGLIB = -L/opt/libs/spglib/1.8.2/lib -lsymspg
|
# SPGINC = -I/opt/libs/spglib/1.8.2/include
|
||||||
|
# SPGLIB = -L/opt/libs/spglib/1.8.2/lib -lsymspg
|
||||||
|
|
||||||
# if spglib other than version 1.8.2 is used, please
|
# if spglib other than version 1.8.2 is used, please
|
||||||
# modify file phonon.cpp, instruction can be found by searching 1.8.2
|
# modify file phonon.cpp, instruction can be found by searching 1.8.2
|
||||||
|
|
||||||
|
@ -36,7 +35,7 @@ SRC = $(wildcard *.cpp)
|
||||||
OBJ = $(SRC:.cpp=.o)
|
OBJ = $(SRC:.cpp=.o)
|
||||||
|
|
||||||
#====================================================================
|
#====================================================================
|
||||||
all: ver ${EXE}
|
all: ${EXE}
|
||||||
|
|
||||||
${EXE}: $(OBJ)
|
${EXE}: $(OBJ)
|
||||||
$(LINK) $(OFLAGS) $(OBJ) $(LIB) -o $@
|
$(LINK) $(OFLAGS) $(OBJ) $(LIB) -o $@
|
||||||
|
@ -59,3 +58,16 @@ ver:
|
||||||
$(CC) $(CFLAGS) -c $<
|
$(CC) $(CFLAGS) -c $<
|
||||||
.cpp.o:
|
.cpp.o:
|
||||||
$(CC) $(CFLAGS) $(INC) -c $<
|
$(CC) $(CFLAGS) $(INC) -c $<
|
||||||
|
|
||||||
|
#====================================================================
|
||||||
|
# dependencies
|
||||||
|
disp.o: disp.cpp phonon.h dynmat.h memory.h interpolate.h green.h timer.h \
|
||||||
|
global.h
|
||||||
|
dynmat.o: dynmat.cpp dynmat.h memory.h interpolate.h version.h global.h
|
||||||
|
green.o: green.cpp green.h memory.h global.h
|
||||||
|
interpolate.o: interpolate.cpp interpolate.h memory.h global.h
|
||||||
|
main.o: main.cpp dynmat.h memory.h interpolate.h phonon.h
|
||||||
|
memory.o: memory.cpp memory.h
|
||||||
|
phonon.o: phonon.cpp phonon.h dynmat.h memory.h interpolate.h green.h \
|
||||||
|
timer.h global.h
|
||||||
|
timer.o: timer.cpp timer.h
|
||||||
|
|
|
@ -5,15 +5,9 @@
|
||||||
analyse the phonon related information.
|
analyse the phonon related information.
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
1. Dependencies
|
1. Dependencies
|
||||||
The clapack library is needed to solve the eigen problems,
|
The LAPACK library is needed to solve the eigen problems.
|
||||||
which could be downloaded from:
|
http://www.netlib.org/lapack/
|
||||||
http://www.netlib.org/clapack/
|
Intel MKL can be used as well.
|
||||||
|
|
||||||
The tricubic library is also needed to do tricubic interpolations,
|
|
||||||
which could be obtained from:
|
|
||||||
http://orca.princeton.edu/francois/software/tricubic/
|
|
||||||
or
|
|
||||||
http://1drv.ms/1J2WFYk
|
|
||||||
|
|
||||||
The spglib is optionally needed, enabling one to evaluate the
|
The spglib is optionally needed, enabling one to evaluate the
|
||||||
phonon density of states or vibrational thermal properties
|
phonon density of states or vibrational thermal properties
|
||||||
|
|
|
@ -18,7 +18,8 @@ void Phonon::pdisp()
|
||||||
{
|
{
|
||||||
// ask the output file name and write the header.
|
// ask the output file name and write the header.
|
||||||
char str[MAXLINE];
|
char str[MAXLINE];
|
||||||
for (int ii = 0; ii < 80; ++ii) printf("="); printf("\n");
|
for (int ii = 0; ii < 80; ++ii) printf("=");
|
||||||
|
printf("\n");
|
||||||
#ifdef UseSPG
|
#ifdef UseSPG
|
||||||
// ask method to generate q-lines
|
// ask method to generate q-lines
|
||||||
int method = 2;
|
int method = 2;
|
||||||
|
@ -53,7 +54,6 @@ void Phonon::pdisp()
|
||||||
while (1){
|
while (1){
|
||||||
for (int i = 0; i < 3; ++i) qstr[i] = qend[i];
|
for (int i = 0; i < 3; ++i) qstr[i] = qend[i];
|
||||||
|
|
||||||
int quit = 0;
|
|
||||||
printf("\nPlease input the start q-point in unit of B1->B3, q to exit [%g %g %g]: ", qstr[0], qstr[1], qstr[2]);
|
printf("\nPlease input the start q-point in unit of B1->B3, q to exit [%g %g %g]: ", qstr[0], qstr[1], qstr[2]);
|
||||||
int n = count_words(fgets(str, MAXLINE, stdin));
|
int n = count_words(fgets(str, MAXLINE, stdin));
|
||||||
ptr = strtok(str, " \t\n\r\f");
|
ptr = strtok(str, " \t\n\r\f");
|
||||||
|
@ -2844,7 +2844,8 @@ void Phonon::pdisp()
|
||||||
printf("\nPhonon dispersion data are written to: %s, you can visualize the results\n", fname);
|
printf("\nPhonon dispersion data are written to: %s, you can visualize the results\n", fname);
|
||||||
printf("by invoking: `gnuplot pdisp.gnuplot; gv pdisp.eps`\n");
|
printf("by invoking: `gnuplot pdisp.gnuplot; gv pdisp.eps`\n");
|
||||||
}
|
}
|
||||||
for (int ii = 0; ii < 80; ++ii) printf("="); printf("\n");
|
for (int ii = 0; ii < 80; ++ii) printf("=");
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
delete []fname;
|
delete []fname;
|
||||||
nodes.clear();
|
nodes.clear();
|
||||||
|
|
|
@ -3,6 +3,11 @@
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
|
||||||
|
extern "C" void zheevd_(char *, char *, long int *, doublecomplex *,
|
||||||
|
long int *, double *, doublecomplex *,
|
||||||
|
long int *, double *, long int *, long int *,
|
||||||
|
long int *, long int *);
|
||||||
|
|
||||||
// to initialize the class
|
// to initialize the class
|
||||||
DynMat::DynMat(int narg, char **arg)
|
DynMat::DynMat(int narg, char **arg)
|
||||||
{
|
{
|
||||||
|
@ -81,7 +86,8 @@ DynMat::DynMat(int narg, char **arg)
|
||||||
printf("Number of atoms per unit cell : %d\n", nucell);
|
printf("Number of atoms per unit cell : %d\n", nucell);
|
||||||
printf("System dimension : %d\n", sysdim);
|
printf("System dimension : %d\n", sysdim);
|
||||||
printf("Boltzmann constant in used units : %g\n", boltz);
|
printf("Boltzmann constant in used units : %g\n", boltz);
|
||||||
for (int i = 0; i < 80; ++i) printf("="); printf("\n");
|
for (int i = 0; i < 80; ++i) printf("=");
|
||||||
|
printf("\n");
|
||||||
if (sysdim < 1||sysdim > 3||nx < 1||ny < 1||nz < 1||nucell < 1){
|
if (sysdim < 1||sysdim > 3||nx < 1||ny < 1||nz < 1||nucell < 1){
|
||||||
printf("Wrong values read from header of file: %s, please check the binary file!\n", binfile);
|
printf("Wrong values read from header of file: %s, please check the binary file!\n", binfile);
|
||||||
fclose(fp); exit(3);
|
fclose(fp); exit(3);
|
||||||
|
@ -117,11 +123,11 @@ DynMat::DynMat(int narg, char **arg)
|
||||||
memory->create(attyp, nucell, "DynMat:attyp");
|
memory->create(attyp, nucell, "DynMat:attyp");
|
||||||
memory->create(M_inv_sqrt, nucell, "DynMat:M_inv_sqrt");
|
memory->create(M_inv_sqrt, nucell, "DynMat:M_inv_sqrt");
|
||||||
|
|
||||||
if ( fread(&Tmeasure, sizeof(double), 1, fp) != 1 ){printf("\nError while reading temperature from file: %s\n", binfile); fclose(fp); exit(3);}
|
if ( (int) fread(&Tmeasure, sizeof(double), 1, fp) != 1 ){printf("\nError while reading temperature from file: %s\n", binfile); fclose(fp); exit(3);}
|
||||||
if ( fread(&basevec[0], sizeof(double), 9, fp) != 9 ){printf("\nError while reading lattice info from file: %s\n", binfile); fclose(fp); exit(3);}
|
if ( (int) fread(&basevec[0], sizeof(double), 9, fp) != 9 ){printf("\nError while reading lattice info from file: %s\n", binfile); fclose(fp); exit(3);}
|
||||||
if ( fread(basis[0], sizeof(double), fftdim, fp) != fftdim){printf("\nError while reading basis info from file: %s\n", binfile); fclose(fp); exit(3);}
|
if ( (int) fread(basis[0], sizeof(double), fftdim, fp) != fftdim){printf("\nError while reading basis info from file: %s\n", binfile); fclose(fp); exit(3);}
|
||||||
if ( fread(&attyp[0], sizeof(int), nucell, fp) != nucell){printf("\nError while reading atom types from file: %s\n", binfile); fclose(fp); exit(3);}
|
if ( (int) fread(&attyp[0], sizeof(int), nucell, fp) != nucell){printf("\nError while reading atom types from file: %s\n", binfile); fclose(fp); exit(3);}
|
||||||
if ( fread(&M_inv_sqrt[0], sizeof(double), nucell, fp) != nucell){printf("\nError while reading atomic masses from file: %s\n", binfile); fclose(fp); exit(3);}
|
if ( (int) fread(&M_inv_sqrt[0], sizeof(double), nucell, fp) != nucell){printf("\nError while reading atomic masses from file: %s\n", binfile); fclose(fp); exit(3);}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
car2dir();
|
car2dir();
|
||||||
|
@ -229,9 +235,9 @@ return;
|
||||||
int DynMat::geteigen(double *egv, int flag)
|
int DynMat::geteigen(double *egv, int flag)
|
||||||
{
|
{
|
||||||
char jobz, uplo;
|
char jobz, uplo;
|
||||||
integer n, lda, lwork, lrwork, *iwork, liwork, info;
|
long int n, lda, lwork, lrwork, *iwork, liwork, info;
|
||||||
doublecomplex *work;
|
doublecomplex *work;
|
||||||
doublereal *w = &egv[0], *rwork;
|
double *w = &egv[0], *rwork;
|
||||||
|
|
||||||
n = fftdim;
|
n = fftdim;
|
||||||
if (flag) jobz = 'V';
|
if (flag) jobz = 'V';
|
||||||
|
@ -338,7 +344,8 @@ void DynMat::EnforceASR()
|
||||||
char *ptr = strtok(str," \t\n\r\f");
|
char *ptr = strtok(str," \t\n\r\f");
|
||||||
if (ptr) nasr = atoi(ptr);
|
if (ptr) nasr = atoi(ptr);
|
||||||
if (nasr < 1){
|
if (nasr < 1){
|
||||||
for (int i=0; i<80; i++) printf("="); printf("\n");
|
for (int i=0; i<80; i++) printf("=");
|
||||||
|
printf("\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -404,7 +411,8 @@ void DynMat::EnforceASR()
|
||||||
if (i == 99){ printf("...... (%d more skiped)", fftdim-100); break;}
|
if (i == 99){ printf("...... (%d more skiped)", fftdim-100); break;}
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
for (int i = 0; i < 80; ++i) printf("="); printf("\n\n");
|
for (int i = 0; i < 80; ++i) printf("=");
|
||||||
|
printf("\n\n");
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -456,7 +464,7 @@ return;
|
||||||
* --------------------------------------------------------------------*/
|
* --------------------------------------------------------------------*/
|
||||||
void DynMat::GaussJordan(int n, double *Mat)
|
void DynMat::GaussJordan(int n, double *Mat)
|
||||||
{
|
{
|
||||||
int i,icol,irow,j,k,l,ll,idr,idc;
|
int i,icol=0,irow=0,j,k,l,ll,idr,idc;
|
||||||
int *indxc,*indxr,*ipiv;
|
int *indxc,*indxr,*ipiv;
|
||||||
double big, nmjk;
|
double big, nmjk;
|
||||||
double dum, pivinv;
|
double dum, pivinv;
|
||||||
|
|
|
@ -7,11 +7,6 @@
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "interpolate.h"
|
#include "interpolate.h"
|
||||||
|
|
||||||
extern "C"{
|
|
||||||
#include "f2c.h"
|
|
||||||
#include "clapack.h"
|
|
||||||
}
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
class DynMat {
|
class DynMat {
|
||||||
|
|
|
@ -224,7 +224,6 @@ void Green::recursion()
|
||||||
{
|
{
|
||||||
// local variables
|
// local variables
|
||||||
std::complex<double> Z, rec_x, rec_x_inv;
|
std::complex<double> Z, rec_x, rec_x_inv;
|
||||||
std::complex<double> cunit = std::complex<double>(0.,1.);
|
|
||||||
|
|
||||||
double w = wmin;
|
double w = wmin;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,125 @@
|
||||||
#include "interpolate.h"
|
#include "interpolate.h"
|
||||||
#include "math.h"
|
#include <math.h>
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
|
||||||
|
///////////////////////
|
||||||
|
// tricubic library code
|
||||||
|
static int A[64][64] = {
|
||||||
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{-3, 3, 0, 0, 0, 0, 0, 0,-2,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 2,-2, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{-3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0,-3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 9,-9,-9, 9, 0, 0, 0, 0, 6, 3,-6,-3, 0, 0, 0, 0, 6,-6, 3,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{-6, 6, 6,-6, 0, 0, 0, 0,-3,-3, 3, 3, 0, 0, 0, 0,-4, 4,-2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2,-2,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 2, 0,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{-6, 6, 6,-6, 0, 0, 0, 0,-4,-2, 4, 2, 0, 0, 0, 0,-3, 3,-3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2,-1,-2,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 4,-4,-4, 4, 0, 0, 0, 0, 2, 2,-2,-2, 0, 0, 0, 0, 2,-2, 2,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 3, 0, 0, 0, 0, 0, 0,-2,-1, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,-2, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2, 0,-1, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,-9,-9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3,-6,-3, 0, 0, 0, 0, 6,-6, 3,-3, 0, 0, 0, 0, 4, 2, 2, 1, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-6, 6, 6,-6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3,-3, 3, 3, 0, 0, 0, 0,-4, 4,-2, 2, 0, 0, 0, 0,-2,-2,-1,-1, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-6, 6, 6,-6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4,-2, 4, 2, 0, 0, 0, 0,-3, 3,-3, 3, 0, 0, 0, 0,-2,-1,-2,-1, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,-4,-4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,-2,-2, 0, 0, 0, 0, 2,-2, 2,-2, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0},
|
||||||
|
{-3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0,-3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 9,-9, 0, 0,-9, 9, 0, 0, 6, 3, 0, 0,-6,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,-6, 0, 0, 3,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 2, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{-6, 6, 0, 0, 6,-6, 0, 0,-3,-3, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 4, 0, 0,-2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2,-2, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2, 0, 0, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2, 0, 0, 0,-1, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,-9, 0, 0,-9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 3, 0, 0,-6,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,-6, 0, 0, 3,-3, 0, 0, 4, 2, 0, 0, 2, 1, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-6, 6, 0, 0, 6,-6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3,-3, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 4, 0, 0,-2, 2, 0, 0,-2,-2, 0, 0,-1,-1, 0, 0},
|
||||||
|
{ 9, 0,-9, 0,-9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 0,-6, 0,-3, 0, 6, 0,-6, 0, 3, 0,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 2, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 9, 0,-9, 0,-9, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 0,-6, 0,-3, 0, 6, 0,-6, 0, 3, 0,-3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 2, 0, 2, 0, 1, 0},
|
||||||
|
{-27,27,27,-27,27,-27,-27,27,-18,-9,18, 9,18, 9,-18,-9,-18,18,-9, 9,18,-18, 9,-9,-18,18,18,-18,-9, 9, 9,-9,-12,-6,-6,-3,12, 6, 6, 3,-12,-6,12, 6,-6,-3, 6, 3,-12,12,-6, 6,-6, 6,-3, 3,-8,-4,-4,-2,-4,-2,-2,-1},
|
||||||
|
{18,-18,-18,18,-18,18,18,-18, 9, 9,-9,-9,-9,-9, 9, 9,12,-12, 6,-6,-12,12,-6, 6,12,-12,-12,12, 6,-6,-6, 6, 6, 6, 3, 3,-6,-6,-3,-3, 6, 6,-6,-6, 3, 3,-3,-3, 8,-8, 4,-4, 4,-4, 2,-2, 4, 4, 2, 2, 2, 2, 1, 1},
|
||||||
|
{-6, 0, 6, 0, 6, 0,-6, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 0,-3, 0, 3, 0, 3, 0,-4, 0, 4, 0,-2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2, 0,-2, 0,-1, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0,-6, 0, 6, 0, 6, 0,-6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 0,-3, 0, 3, 0, 3, 0,-4, 0, 4, 0,-2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2, 0,-2, 0,-1, 0,-1, 0},
|
||||||
|
{18,-18,-18,18,-18,18,18,-18,12, 6,-12,-6,-12,-6,12, 6, 9,-9, 9,-9,-9, 9,-9, 9,12,-12,-12,12, 6,-6,-6, 6, 6, 3, 6, 3,-6,-3,-6,-3, 8, 4,-8,-4, 4, 2,-4,-2, 6,-6, 6,-6, 3,-3, 3,-3, 4, 2, 4, 2, 2, 1, 2, 1},
|
||||||
|
{-12,12,12,-12,12,-12,-12,12,-6,-6, 6, 6, 6, 6,-6,-6,-6, 6,-6, 6, 6,-6, 6,-6,-8, 8, 8,-8,-4, 4, 4,-4,-3,-3,-3,-3, 3, 3, 3, 3,-4,-4, 4, 4,-2,-2, 2, 2,-4, 4,-4, 4,-2, 2,-2, 2,-2,-2,-2,-2,-1,-1,-1,-1},
|
||||||
|
{ 2, 0, 0, 0,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{-6, 6, 0, 0, 6,-6, 0, 0,-4,-2, 0, 0, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 3, 0, 0,-3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2,-1, 0, 0,-2,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 4,-4, 0, 0,-4, 4, 0, 0, 2, 2, 0, 0,-2,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,-2, 0, 0, 2,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-6, 6, 0, 0, 6,-6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4,-2, 0, 0, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-3, 3, 0, 0,-3, 3, 0, 0,-2,-1, 0, 0,-2,-1, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,-4, 0, 0,-4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0,-2,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,-2, 0, 0, 2,-2, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0},
|
||||||
|
{-6, 0, 6, 0, 6, 0,-6, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0,-2, 0, 4, 0, 2, 0,-3, 0, 3, 0,-3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2, 0,-1, 0,-2, 0,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0,-6, 0, 6, 0, 6, 0,-6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-4, 0,-2, 0, 4, 0, 2, 0,-3, 0, 3, 0,-3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,-2, 0,-1, 0,-2, 0,-1, 0},
|
||||||
|
{18,-18,-18,18,-18,18,18,-18,12, 6,-12,-6,-12,-6,12, 6,12,-12, 6,-6,-12,12,-6, 6, 9,-9,-9, 9, 9,-9,-9, 9, 8, 4, 4, 2,-8,-4,-4,-2, 6, 3,-6,-3, 6, 3,-6,-3, 6,-6, 3,-3, 6,-6, 3,-3, 4, 2, 2, 1, 4, 2, 2, 1},
|
||||||
|
{-12,12,12,-12,12,-12,-12,12,-6,-6, 6, 6, 6, 6,-6,-6,-8, 8,-4, 4, 8,-8, 4,-4,-6, 6, 6,-6,-6, 6, 6,-6,-4,-4,-2,-2, 4, 4, 2, 2,-3,-3, 3, 3,-3,-3, 3, 3,-4, 4,-2, 2,-4, 4,-2, 2,-2,-2,-1,-1,-2,-2,-1,-1},
|
||||||
|
{ 4, 0,-4, 0,-4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0,-2, 0,-2, 0, 2, 0,-2, 0, 2, 0,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
|
||||||
|
{ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0,-4, 0,-4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0,-2, 0,-2, 0, 2, 0,-2, 0, 2, 0,-2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0},
|
||||||
|
{-12,12,12,-12,12,-12,-12,12,-8,-4, 8, 4, 8, 4,-8,-4,-6, 6,-6, 6, 6,-6, 6,-6,-6, 6, 6,-6,-6, 6, 6,-6,-4,-2,-4,-2, 4, 2, 4, 2,-4,-2, 4, 2,-4,-2, 4, 2,-3, 3,-3, 3,-3, 3,-3, 3,-2,-1,-2,-1,-2,-1,-2,-1},
|
||||||
|
{ 8,-8,-8, 8,-8, 8, 8,-8, 4, 4,-4,-4,-4,-4, 4, 4, 4,-4, 4,-4,-4, 4,-4, 4, 4,-4,-4, 4, 4,-4,-4, 4, 2, 2, 2, 2,-2,-2,-2,-2, 2, 2,-2,-2, 2, 2,-2,-2, 2,-2, 2,-2, 2,-2, 2,-2, 1, 1, 1, 1, 1, 1, 1, 1}};
|
||||||
|
|
||||||
|
static int ijk2n(int i, int j, int k) {
|
||||||
|
return(i+4*j+16*k);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
static void tricubic_get_coeff_stacked(double a[64], double x[64]) {
|
||||||
|
int i,j;
|
||||||
|
for (i=0;i<64;i++) {
|
||||||
|
a[i]=(double)(0.0);
|
||||||
|
for (j=0;j<64;j++) {
|
||||||
|
a[i]+=A[i][j]*x[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void tricubic_get_coeff(double a[64], double f[8], double dfdx[8], double dfdy[8], double dfdz[8], double d2fdxdy[8], double d2fdxdz[8], double d2fdydz[8], double d3fdxdydz[8]) {
|
||||||
|
int i;
|
||||||
|
double x[64];
|
||||||
|
for (i=0;i<8;i++) {
|
||||||
|
x[0+i]=f[i];
|
||||||
|
x[8+i]=dfdx[i];
|
||||||
|
x[16+i]=dfdy[i];
|
||||||
|
x[24+i]=dfdz[i];
|
||||||
|
x[32+i]=d2fdxdy[i];
|
||||||
|
x[40+i]=d2fdxdz[i];
|
||||||
|
x[48+i]=d2fdydz[i];
|
||||||
|
x[56+i]=d3fdxdydz[i];
|
||||||
|
}
|
||||||
|
tricubic_get_coeff_stacked(a,x);
|
||||||
|
}
|
||||||
|
|
||||||
|
static double tricubic_eval(double a[64], double x, double y, double z) {
|
||||||
|
int i,j,k;
|
||||||
|
double ret=(double)(0.0);
|
||||||
|
/* TRICUBIC EVAL
|
||||||
|
This is the short version of tricubic_eval. It is used to compute
|
||||||
|
the value of the function at a given point (x,y,z). To compute
|
||||||
|
partial derivatives of f, use the full version with the extra args.
|
||||||
|
*/
|
||||||
|
for (i=0;i<4;i++) {
|
||||||
|
for (j=0;j<4;j++) {
|
||||||
|
for (k=0;k<4;k++) {
|
||||||
|
ret+=a[ijk2n(i,j,k)]*pow(x,i)*pow(y,j)*pow(z,k);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------
|
||||||
* Constructor used to get info from caller, and prepare other necessary data
|
* Constructor used to get info from caller, and prepare other necessary data
|
||||||
* ---------------------------------------------------------------------------- */
|
* ---------------------------------------------------------------------------- */
|
||||||
|
@ -274,7 +392,8 @@ void Interpolate::set_method()
|
||||||
|
|
||||||
which =2-im%2;
|
which =2-im%2;
|
||||||
printf("Your selection: %d\n", which);
|
printf("Your selection: %d\n", which);
|
||||||
for(int i=0; i<80; i++) printf("="); printf("\n\n");
|
for(int i=0; i<80; i++) printf("=");
|
||||||
|
printf("\n\n");
|
||||||
|
|
||||||
if (which == 1) tricubic_init();
|
if (which == 1) tricubic_init();
|
||||||
|
|
||||||
|
@ -306,4 +425,3 @@ void Interpolate::reset_gamma()
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* ---------------------------------------------------------------------------- */
|
|
||||||
|
|
|
@ -5,11 +5,8 @@
|
||||||
#include "stdlib.h"
|
#include "stdlib.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include <tricubic.h>
|
|
||||||
extern "C"{
|
extern "C" typedef struct { double r, i; } doublecomplex;
|
||||||
#include "f2c.h"
|
|
||||||
#include "clapack.h"
|
|
||||||
}
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,8 @@ Phonon::Phonon(DynMat *dm)
|
||||||
printf("\n");
|
printf("\n");
|
||||||
for (int i = 0; i < 37; ++i) printf("=");
|
for (int i = 0; i < 37; ++i) printf("=");
|
||||||
printf(" Menu ");
|
printf(" Menu ");
|
||||||
for (int i = 0; i < 37; ++i) printf("="); printf("\n");
|
for (int i = 0; i < 37; ++i) printf("=");
|
||||||
|
printf("\n");
|
||||||
printf(" 1. Phonon DOS evaluation;\n");
|
printf(" 1. Phonon DOS evaluation;\n");
|
||||||
printf(" 2. Phonon dispersion curves;\n");
|
printf(" 2. Phonon dispersion curves;\n");
|
||||||
printf(" 3. Dynamical matrix at arbitrary q;\n");
|
printf(" 3. Dynamical matrix at arbitrary q;\n");
|
||||||
|
@ -60,7 +61,8 @@ Phonon::Phonon(DynMat *dm)
|
||||||
printf("Your choice [0]: ");
|
printf("Your choice [0]: ");
|
||||||
if (count_words(fgets(str,MAXLINE,stdin)) > 0) job = atoi(strtok(str," \t\n\r\f"));
|
if (count_words(fgets(str,MAXLINE,stdin)) > 0) job = atoi(strtok(str," \t\n\r\f"));
|
||||||
printf("\nYour selection: %d\n", job);
|
printf("\nYour selection: %d\n", job);
|
||||||
for (int i = 0; i < 80; ++i) printf("=");printf("\n\n");
|
for (int i = 0; i < 80; ++i) printf("=");
|
||||||
|
printf("\n\n");
|
||||||
|
|
||||||
// now to do the job according to user's choice
|
// now to do the job according to user's choice
|
||||||
if (job == 1) pdos();
|
if (job == 1) pdos();
|
||||||
|
@ -414,7 +416,8 @@ void Phonon::vfanyq()
|
||||||
dynmat->geteigen(egvs, 0);
|
dynmat->geteigen(egvs, 0);
|
||||||
printf("q-point: [%lg %lg %lg], ", q[0], q[1], q[2]);
|
printf("q-point: [%lg %lg %lg], ", q[0], q[1], q[2]);
|
||||||
printf("vibrational frequencies at this q-point:\n");
|
printf("vibrational frequencies at this q-point:\n");
|
||||||
for (int i = 0; i < ndim; ++i) printf("%lg ", egvs[i]); printf("\n\n");
|
for (int i = 0; i < ndim; ++i) printf("%lg ", egvs[i]);
|
||||||
|
printf("\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -1001,7 +1004,8 @@ void Phonon::ShowCell()
|
||||||
printf("\n");
|
printf("\n");
|
||||||
for (int i = 0; i < 30; ++i) printf("=");
|
for (int i = 0; i < 30; ++i) printf("=");
|
||||||
printf(" Unit Cell Info ");
|
printf(" Unit Cell Info ");
|
||||||
for (int i = 0; i < 30; ++i) printf("="); printf("\n");
|
for (int i = 0; i < 30; ++i) printf("=");
|
||||||
|
printf("\n");
|
||||||
printf("Number of atoms in the unit cell: %d\n", dynmat->nucell);
|
printf("Number of atoms in the unit cell: %d\n", dynmat->nucell);
|
||||||
printf("Basis vectors of the unit cell:\n");
|
printf("Basis vectors of the unit cell:\n");
|
||||||
printf(" %15.8f %15.8f %15.8f\n", dynmat->basevec[0], dynmat->basevec[1], dynmat->basevec[2]);
|
printf(" %15.8f %15.8f %15.8f\n", dynmat->basevec[0], dynmat->basevec[1], dynmat->basevec[2]);
|
||||||
|
@ -1091,7 +1095,7 @@ int Phonon::count_words(const char *line)
|
||||||
strcpy(copy,line);
|
strcpy(copy,line);
|
||||||
|
|
||||||
char *ptr;
|
char *ptr;
|
||||||
if (ptr = strchr(copy,'#')) *ptr = '\0';
|
if ((ptr = strchr(copy,'#'))) *ptr = '\0';
|
||||||
|
|
||||||
if (strtok(copy," \t\n\r\f") == NULL) {
|
if (strtok(copy," \t\n\r\f") == NULL) {
|
||||||
memory->destroy(copy);
|
memory->destroy(copy);
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
#define VERSION 7
|
#define VERSION 8
|
||||||
|
|
Loading…
Reference in New Issue