Remove terms with kx=0 and ky<=0
This commit is contained in:
@@ -241,12 +241,12 @@ int ns_init_tmps(
|
||||
unsigned int nthreads
|
||||
){
|
||||
// velocity field
|
||||
*u=calloc(sizeof(_Complex double),(K1+1)*(2*K2+1));
|
||||
*u=calloc(sizeof(_Complex double),K1*(2*K2+1)+K2);
|
||||
|
||||
// allocate tmp vectors for computation
|
||||
*tmp1=calloc(sizeof(_Complex double),(K1+1)*(2*K2+1));
|
||||
*tmp2=calloc(sizeof(_Complex double),(K1+1)*(2*K2+1));
|
||||
*tmp3=calloc(sizeof(_Complex double),(K1+1)*(2*K2+1));
|
||||
*tmp1=calloc(sizeof(_Complex double),K1*(2*K2+1)+K2);
|
||||
*tmp2=calloc(sizeof(_Complex double),K1*(2*K2+1)+K2);
|
||||
*tmp3=calloc(sizeof(_Complex double),K1*(2*K2+1)+K2);
|
||||
|
||||
// init threads
|
||||
fftw_init_threads();
|
||||
@@ -303,7 +303,7 @@ int copy_u(
|
||||
){
|
||||
int i;
|
||||
|
||||
for(i=0;i<(K1+1)*(2*K2+1);i++){
|
||||
for(i=0;i<K1*(2*K2+1)+K2;i++){
|
||||
u[i]=u0[i];
|
||||
}
|
||||
|
||||
@@ -335,14 +335,14 @@ int ns_step(
|
||||
ns_rhs(tmp1, u, K1, K2, N1, N2, nu, L, g, fft1, fft2, ifft, irreversible);
|
||||
// add to output
|
||||
for(kx=0;kx<=K1;kx++){
|
||||
for(ky=-K2;ky<=K2;ky++){
|
||||
for(ky=(kx>0 ? -K2 : 1);ky<=K2;ky++){
|
||||
tmp3[klookup_sym(kx,ky,K2)]=u[klookup_sym(kx,ky,K2)]+delta/6*tmp1[klookup_sym(kx,ky,K2)];
|
||||
}
|
||||
}
|
||||
|
||||
// u+h*k1/2
|
||||
for(kx=0;kx<=K1;kx++){
|
||||
for(ky=-K2;ky<=K2;ky++){
|
||||
for(ky=(kx>0 ? -K2 : 1);ky<=K2;ky++){
|
||||
tmp2[klookup_sym(kx,ky,K2)]=u[klookup_sym(kx,ky,K2)]+delta/2*tmp1[klookup_sym(kx,ky,K2)];
|
||||
}
|
||||
}
|
||||
@@ -350,14 +350,14 @@ int ns_step(
|
||||
ns_rhs(tmp1, tmp2, K1, K2, N1, N2, nu, L, g, fft1, fft2, ifft, irreversible);
|
||||
// add to output
|
||||
for(kx=0;kx<=K1;kx++){
|
||||
for(ky=-K2;ky<=K2;ky++){
|
||||
for(ky=(kx>0 ? -K2 : 1);ky<=K2;ky++){
|
||||
tmp3[klookup_sym(kx,ky,K2)]+=delta/3*tmp1[klookup_sym(kx,ky,K2)];
|
||||
}
|
||||
}
|
||||
|
||||
// u+h*k2/2
|
||||
for(kx=0;kx<=K1;kx++){
|
||||
for(ky=-K2;ky<=K2;ky++){
|
||||
for(ky=(kx>0 ? -K2 : 1);ky<=K2;ky++){
|
||||
tmp2[klookup_sym(kx,ky,K2)]=u[klookup_sym(kx,ky,K2)]+delta/2*tmp1[klookup_sym(kx,ky,K2)];
|
||||
}
|
||||
}
|
||||
@@ -365,14 +365,14 @@ int ns_step(
|
||||
ns_rhs(tmp1, tmp2, K1, K2, N1, N2, nu, L, g, fft1, fft2, ifft, irreversible);
|
||||
// add to output
|
||||
for(kx=0;kx<=K1;kx++){
|
||||
for(ky=-K2;ky<=K2;ky++){
|
||||
for(ky=(kx>0 ? -K2 : 1);ky<=K2;ky++){
|
||||
tmp3[klookup_sym(kx,ky,K2)]+=delta/3*tmp1[klookup_sym(kx,ky,K2)];
|
||||
}
|
||||
}
|
||||
|
||||
// u+h*k3
|
||||
for(kx=0;kx<=K1;kx++){
|
||||
for(ky=-K2;ky<=K2;ky++){
|
||||
for(ky=(kx>0 ? -K2 : 1);ky<=K2;ky++){
|
||||
tmp2[klookup_sym(kx,ky,K2)]=u[klookup_sym(kx,ky,K2)]+delta*tmp1[klookup_sym(kx,ky,K2)];
|
||||
}
|
||||
}
|
||||
@@ -380,7 +380,7 @@ int ns_step(
|
||||
ns_rhs(tmp1, tmp2, K1, K2, N1, N2, nu, L, g, fft1, fft2, ifft, irreversible);
|
||||
// add to output
|
||||
for(kx=0;kx<=K1;kx++){
|
||||
for(ky=-K2;ky<=K2;ky++){
|
||||
for(ky=(kx>0 ? -K2 : 1);ky<=K2;ky++){
|
||||
u[klookup_sym(kx,ky,K2)]=tmp3[klookup_sym(kx,ky,K2)]+delta/6*tmp1[klookup_sym(kx,ky,K2)];
|
||||
}
|
||||
}
|
||||
@@ -417,14 +417,12 @@ int ns_rhs(
|
||||
alpha=compute_alpha(u,K1,K2,g,L);
|
||||
}
|
||||
|
||||
for(i=0; i<(K1+1)*(2*K2+1); i++){
|
||||
for(i=0; i<K1*(2*K2+1)+K2; i++){
|
||||
out[i]=0;
|
||||
}
|
||||
for(kx=0;kx<=K1;kx++){
|
||||
for(ky=-K2;ky<=K2;ky++){
|
||||
if(kx!=0 || ky!=0){
|
||||
out[klookup_sym(kx,ky,K2)]=-4*M_PI*M_PI/L/L*alpha*(kx*kx+ky*ky)*u[klookup_sym(kx,ky,K2)]+g[klookup_sym(kx,ky,K2)]+4*M_PI*M_PI/L/L/sqrt(kx*kx+ky*ky)*ifft.fft[klookup(kx,ky,N1,N2)];
|
||||
}
|
||||
for(ky=(kx>0 ? -K2 : 1);ky<=K2;ky++){
|
||||
out[klookup_sym(kx,ky,K2)]=-4*M_PI*M_PI/L/L*alpha*(kx*kx+ky*ky)*u[klookup_sym(kx,ky,K2)]+g[klookup_sym(kx,ky,K2)]+4*M_PI*M_PI/L/L/sqrt(kx*kx+ky*ky)*ifft.fft[klookup(kx,ky,N1,N2)];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -610,7 +608,7 @@ int klookup(
|
||||
return (kx>=0 ? kx : S1+kx)*S2 + (ky>=0 ? ky : S2+ky);
|
||||
}
|
||||
|
||||
// get index for kx,ky in array of size K1,K2 in which only the terms with kx>=0 are stored
|
||||
// get index for kx,ky in array of size K1,K2 in which only the terms with kx>=0 and if kx=0, ky>0 are stored
|
||||
int klookup_sym(
|
||||
int kx,
|
||||
int ky,
|
||||
@@ -620,7 +618,14 @@ int klookup_sym(
|
||||
fprintf(stderr, "bug!: attempting to access a symmetrized vector at kx<0\n Contact Ian at ian.jauslin@rutgers.edu!\n");
|
||||
exit(-1);
|
||||
}
|
||||
return kx*(2*K2+1) + (ky>=0 ? ky : (2*K2+1)+ky);
|
||||
if (kx==0) {
|
||||
if (ky<=0){
|
||||
fprintf(stderr, "bug!: attempting to access a symmetrized vector at kx=0 and ky<=0\n Contact Ian at ian.jauslin@rutgers.edu!\n");
|
||||
exit(-1);
|
||||
}
|
||||
return ky-1;
|
||||
}
|
||||
return K2+(kx-1)*(2*K2+1) + (ky>=0 ? ky : (2*K2+1)+ky);
|
||||
}
|
||||
|
||||
// get u_{kx,ky} from a vector u in which only the values for kx>=0 are stored, assuming u_{-k}=u_k^*
|
||||
@@ -630,5 +635,12 @@ _Complex double getval_sym(
|
||||
int ky,
|
||||
int K2
|
||||
){
|
||||
return (kx>=0 ? u[klookup_sym(kx,ky,K2)] : conj(u[klookup_sym(-kx,-ky,K2)]));
|
||||
if(kx>0 || (kx==0 && ky>0)){
|
||||
return u[klookup_sym(kx,ky,K2)];
|
||||
}
|
||||
else if(kx==0 && ky==0){
|
||||
return 0;
|
||||
} else {
|
||||
return conj(u[klookup_sym(-kx,-ky,K2)]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user