summaryrefslogtreecommitdiff
path: root/src/compression/tng_compress.c
diff options
context:
space:
mode:
authorMagnus Lundborg <lundborg.magnus@gmail.com>2013-05-28 14:04:15 (GMT)
committerMagnus Lundborg <lundborg.magnus@gmail.com>2013-05-28 14:04:15 (GMT)
commit3d6794f4d8bfdf0f0a38b704a1e2a2c17026e824 (patch)
tree595211f4c69570493cb57c4047877a828b644711 /src/compression/tng_compress.c
parent583a3deb5bd37d5e81e17761b32831a190192281 (diff)
Allocate enough memory in Ptngc_pack_array_xtc3
When simulating with very few particles too little memory was allocated. Add a minimum value to allocate. Removed earlier debugging outputs.
Diffstat (limited to 'src/compression/tng_compress.c')
-rw-r--r--src/compression/tng_compress.c60
1 files changed, 25 insertions, 35 deletions
diff --git a/src/compression/tng_compress.c b/src/compression/tng_compress.c
index cccab04..31818ee 100644
--- a/src/compression/tng_compress.c
+++ b/src/compression/tng_compress.c
@@ -63,16 +63,6 @@ static int verify_input_data_float(float *x, int natoms, int nframes, float prec
#if 1
for (iframe=0; iframe<nframes; iframe++)
for (i=0; i<natoms; i++)
- {
- printf("vel test: %d %d:",iframe,i);
- for (j=0; j<3; j++)
- printf(" %g",x[iframe*natoms*3+i*3+j]);
- printf("\n");
- }
-#endif
-#if 1
- for (iframe=0; iframe<nframes; iframe++)
- for (i=0; i<natoms; i++)
for (j=0; j<3; j++)
if (fabs(x[iframe*natoms*3+i*3+j]/precision+0.5)>=MAX_FVAL)
printf("ERROR. Too large value: %d %d %d: %g %g %g\n",iframe,i,j,x[iframe*natoms*3+i*3+j],precision,x[iframe*natoms*3+i*3+j]/precision/MAX_FVAL);
@@ -116,7 +106,7 @@ static void quant_inter_differences(int *quant, int natoms, int nframes,
for (iframe=1; iframe<nframes; iframe++)
for (i=0; i<natoms; i++)
for (j=0; j<3; j++)
- quant_inter[iframe*natoms*3+i*3+j]=quant[iframe*natoms*3+i*3+j]-quant[(iframe-1)*natoms*3+i*3+j];
+ quant_inter[iframe*natoms*3+i*3+j]=quant[iframe*natoms*3+i*3+j]-quant[(iframe-1)*natoms*3+i*3+j];
}
static void quant_intra_differences(int *quant, int natoms, int nframes,
@@ -232,7 +222,7 @@ static void unquant_intra_differences_first_frame(int *quant, int natoms)
}
#endif
}
-
+
static void unquantize_intra_differences(double *x, int natoms, int nframes,
double precision,
int *quant)
@@ -334,7 +324,7 @@ static void compress_quantized_pos(int *quant, int *quant_inter, int *quant_intr
/* Information needed for decompression. */
if (data)
bufferfix((unsigned char*)data+bufloc,(fix_t)MAGIC_INT_POS,4);
- bufloc+=4;
+ bufloc+=4;
/* Number of atoms. */
if (data)
bufferfix((unsigned char*)data+bufloc,(fix_t)natoms,4);
@@ -384,7 +374,7 @@ static void compress_quantized_pos(int *quant, int *quant_inter, int *quant_intr
length=natoms*3;
datablock=(char*)Ptngc_pack_array(coder,quant_intra,&length,
initial_coding,initial_coding_parameter,natoms,speed);
- Ptngc_coder_deinit(coder);
+ Ptngc_coder_deinit(coder);
}
/* Block length. */
if (data)
@@ -408,7 +398,7 @@ static void compress_quantized_pos(int *quant, int *quant_inter, int *quant_intr
length=natoms*3*(nframes-1);
datablock=(char*)Ptngc_pack_array(coder,quant_inter+natoms*3,&length,
coding,coding_parameter,natoms,speed);
- Ptngc_coder_deinit(coder);
+ Ptngc_coder_deinit(coder);
}
/* One-to-one compression? */
else if ((coding==TNG_COMPRESS_ALGO_POS_XTC2) ||
@@ -459,7 +449,7 @@ static void compress_quantized_vel(int *quant, int *quant_inter,
/* Information needed for decompression. */
if (data)
bufferfix((unsigned char*)data+bufloc,(fix_t)MAGIC_INT_VEL,4);
- bufloc+=4;
+ bufloc+=4;
/* Number of atoms. */
if (data)
bufferfix((unsigned char*)data+bufloc,(fix_t)natoms,4);
@@ -666,7 +656,7 @@ static void determine_best_pos_initial_coding(int *quant, int *quant_intra, int
}
}
Ptngc_coder_deinit(coder);
-
+
if (speed>=2)
{
current_coding=TNG_COMPRESS_ALGO_POS_XTC3;
@@ -931,7 +921,7 @@ static void determine_best_vel_initial_coding(int *quant, int natoms, int speed,
best_code_size=current_code_size;
}
Ptngc_coder_deinit(coder);
-
+
/* Determine best parameter for triplet one-to-one. */
current_coding=TNG_COMPRESS_ALGO_VEL_TRIPLET_ONETOONE;
coder=Ptngc_coder_init();
@@ -1020,7 +1010,7 @@ static void determine_best_vel_coding(int *quant, int *quant_inter, int natoms,
best_coding=current_coding;
best_code_size=current_code_size;
best_coding_parameter=current_coding_parameter;
-
+
/* Test triplet interframe */
current_coding=TNG_COMPRESS_ALGO_VEL_TRIPLET_INTER;
current_code_size=natoms*3*(nframes-1);
@@ -1033,7 +1023,7 @@ static void determine_best_vel_coding(int *quant, int *quant_inter, int natoms,
{
best_coding=current_coding;
best_code_size=current_code_size;
- best_coding_parameter=current_coding_parameter;
+ best_coding_parameter=current_coding_parameter;
}
}
Ptngc_coder_deinit(coder);
@@ -1050,11 +1040,11 @@ static void determine_best_vel_coding(int *quant, int *quant_inter, int natoms,
{
best_coding=current_coding;
best_code_size=current_code_size;
- best_coding_parameter=current_coding_parameter;
+ best_coding_parameter=current_coding_parameter;
}
}
Ptngc_coder_deinit(coder);
-
+
/* Test stopbit interframe */
current_coding=TNG_COMPRESS_ALGO_VEL_STOPBIT_INTER;
current_code_size=natoms*3*(nframes-1);
@@ -1067,11 +1057,11 @@ static void determine_best_vel_coding(int *quant, int *quant_inter, int natoms,
{
best_coding=current_coding;
best_code_size=current_code_size;
- best_coding_parameter=current_coding_parameter;
- }
+ best_coding_parameter=current_coding_parameter;
+ }
}
Ptngc_coder_deinit(coder);
-
+
if (speed>=4)
{
/* Test BWLZH inter */
@@ -1086,7 +1076,7 @@ static void determine_best_vel_coding(int *quant, int *quant_inter, int natoms,
{
best_coding=current_coding;
best_code_size=current_code_size;
- best_coding_parameter=current_coding_parameter;
+ best_coding_parameter=current_coding_parameter;
}
/* Test BWLZH one-to-one */
@@ -1101,7 +1091,7 @@ static void determine_best_vel_coding(int *quant, int *quant_inter, int natoms,
{
best_coding=current_coding;
best_code_size=current_code_size;
- best_coding_parameter=current_coding_parameter;
+ best_coding_parameter=current_coding_parameter;
}
}
*coding=best_coding;
@@ -1201,7 +1191,7 @@ char DECLSPECDLLEXPORT *tng_compress_pos_int(int *pos, int natoms, int nframes,
{
coding_parameter=-1;
determine_best_pos_coding(quant,quant_inter,quant_intra,natoms,nframes,speed,prec_hi,prec_lo,
- &coding,&coding_parameter);
+ &coding,&coding_parameter);
}
else if (coding_parameter==-1)
{
@@ -1228,7 +1218,7 @@ char DECLSPECDLLEXPORT *tng_compress_pos_int(int *pos, int natoms, int nframes,
}
char DECLSPECDLLEXPORT *tng_compress_pos(double *pos, int natoms, int nframes,
- double desired_precision,
+ double desired_precision,
int speed,int *algo,
int *nitems)
{
@@ -1246,7 +1236,7 @@ char DECLSPECDLLEXPORT *tng_compress_pos(double *pos, int natoms, int nframes,
}
char DECLSPECDLLEXPORT *tng_compress_pos_float(float *pos, int natoms, int nframes,
- float desired_precision,
+ float desired_precision,
int speed,int *algo,
int *nitems)
{
@@ -1352,20 +1342,20 @@ char DECLSPECDLLEXPORT *tng_compress_vel_int(int *vel, int natoms, int nframes,
determine_best_vel_initial_coding(quant,natoms,speed,prec_hi,prec_lo,
&initial_coding,&initial_coding_parameter);
}
-
+
if (nframes==1)
{
coding=0;
coding_parameter=0;
}
-
+
if (nframes>1)
{
if (coding==-1)
{
coding_parameter=-1;
determine_best_vel_coding(quant,quant_inter,natoms,nframes,speed,prec_hi,prec_lo,
- &coding,&coding_parameter);
+ &coding,&coding_parameter);
}
else if (coding_parameter==-1)
{
@@ -1562,7 +1552,7 @@ static int tng_compress_uncompress_pos_gen(char *data,double *posd,float *posf,i
coder=Ptngc_coder_init();
rval=Ptngc_unpack_array(coder,(unsigned char*)data+bufloc,quant,natoms*3,
initial_coding,initial_coding_parameter,natoms);
- Ptngc_coder_deinit(coder);
+ Ptngc_coder_deinit(coder);
if (rval)
goto error;
/* Skip past the actual data block. */
@@ -1711,7 +1701,7 @@ static int tng_compress_uncompress_vel_gen(char *data,double *veld,float *velf,i
coder=Ptngc_coder_init();
rval=Ptngc_unpack_array(coder,(unsigned char*)data+bufloc,quant,natoms*3,
initial_coding,initial_coding_parameter,natoms);
- Ptngc_coder_deinit(coder);
+ Ptngc_coder_deinit(coder);
if (rval)
goto error;
/* Skip past the actual data block. */
contact: Jan Huwald // Impressum