c09face.c

/* nag_wav_dim3_sngl_fwd (c09fac) Example Program.
 *
 * Copyright 2025 Numerical Algorithms Group.
 *
 * Mark 31.1, 2025.
 */
#include<math.h>
#include<nag.h>
#include<stdio.h>
#define A(I, J, K) a[I - 1 + (J - 1) * lda + (K - 1) * lda * sda]
#define B(I, J, K) b[I - 1 + (J - 1) * ldb + (K - 1) * ldb * sdb]
#define D(I, J, K) d[I - 1 + (J - 1) * nwcm + (K - 1) * nwcm * nwcn]
intmain(void){
/* Scalars */
Integerexit_status=0,zero=0;
Integercindex,i,j,k,lda,ldb,lenc;
Integerm,n,fr,nf,nwcfr,nwcm,nwcn,nwct,nwl,sda,sdb;
/* Arrays */
charmode[25],wavnam[25];
double*a=0,*b=0,*c=0,*d=0;
Integericomm[260];
/* Nag Types */
Nag_Waveletwavnamenum;
Nag_WaveletModemodenum;
Nag_MatrixTypematrix=Nag_GeneralMatrix;
Nag_OrderTypeorder=Nag_ColMajor;
Nag_DiagTypediag=Nag_NonUnitDiag;
NagErrorfail;
INIT_FAIL(fail);
printf("nag_wav_dim3_sngl_fwd (c09fac) Example Program Results\n\n");
fflush(stdout);
/* Skip heading in data file and read problem parameters */
scanf("%*[^\n] %"NAG_IFMT"%"NAG_IFMT"%"NAG_IFMT"%*[^\n]",&m,&n,&fr);
lda=m;
ldb=m;
sda=n;
sdb=n;
scanf("%24s%24s%*[^\n]\n",wavnam,mode);
if(!(a=NAG_ALLOC((lda)*(sda)*(fr),double))||
!(b=NAG_ALLOC((ldb)*(sdb)*(fr),double))){
printf("Allocation failure\n");
exit_status=1;
gotoEND;
}
printf("Parameters read from file :: \n");
printf("DWT :: Wavelet : %s\n",wavnam);
printf(" End mode : %s\n",mode);
printf(" m : %4"NAG_IFMT"\n",m);
printf(" n : %4"NAG_IFMT"\n",n);
printf(" fr : %4"NAG_IFMT"\n\n",fr);
/* nag_enum_name_to_value (x04nac).
 * Converts NAG enum member name to value
 */
wavnamenum=(Nag_Wavelet)nag_enum_name_to_value(wavnam);
modenum=(Nag_WaveletMode)nag_enum_name_to_value(mode);
/* Read data array */
for(k=1;k<=fr;k++){
for(i=1;i<=m;i++){
for(j=1;j<=n;j++)
scanf("%lf",&A(i,j,k));
}
scanf("%*[^\n] ");
}
/* Print out the input data */
printf("Input Data :\n");
fflush(stdout);
for(k=1;k<=fr;k++){
/* nag_file_print_matrix_real_gen_comp (x04cbc).
 * Prints out a matrix.
 */
nag_file_print_matrix_real_gen_comp(order,matrix,diag,m,n,&A(1,1,k),
lda,"%8.4f"," ",Nag_NoLabels,0,
Nag_NoLabels,0,80,0,0,&fail);
if(fail.code!=NE_NOERROR){
printf("Error from nag_file_print_matrix_real_gen_comp (x04cbc).\n%s\n",
fail.message);
exit_status=2;
gotoEND;
}
printf("\n");
fflush(stdout);
}
/* nag_wav_dim3_init (c09acc).
 * Three-dimensional wavelet filter initialization
 */
nag_wav_dim3_init(wavnamenum,Nag_SingleLevel,modenum,m,n,fr,&nwl,&nf,
&nwct,&nwcn,&nwcfr,icomm,&fail);
if(fail.code!=NE_NOERROR){
printf("Error from nag_wav_dim3_init (c09acc).\n%s\n",fail.message);
exit_status=3;
gotoEND;
}
/* Calculate the number of wavelet coefficients in
 * the first dimension, nwcm.
 */
nwcm=nwct/(8*nwcn*nwcfr);
lenc=nwct;
/* Allocate space for the coefficients array, C */
if(!(c=NAG_ALLOC((lenc),double))){
printf("Allocation failure\n");
exit_status=4;
gotoEND;
}
/* nag_wav_dim3_sngl_fwd (c09fac).
 * Three-dimensional discrete wavelet transform
 */
nag_wav_dim3_sngl_fwd(m,n,fr,a,lda,sda,lenc,c,icomm,&fail);
if(fail.code!=NE_NOERROR){
printf("Error from nag_wav_dim3_sngl_fwd (c09fac).\n%s\n",fail.message);
exit_status=5;
gotoEND;
}
/* Allocate space for extraction of coefficients of a single type */
if(!(d=NAG_ALLOC((nwcm)*(nwcn)*(nwcfr),double))){
printf("Allocation failure\n");
exit_status=6;
gotoEND;
}
for(cindex=0;cindex<=7;cindex++){
/* Use the extraction routine c09fyc to retrieve the required
 * coefficients.
 */
/* nag_wav_dim3_coeff_ext (c09fyc).
 * Extract the nominated coefficients.
 */
nag_wav_dim3_coeff_ext(zero,cindex,lenc,c,d,nwcm,nwcn,icomm,&fail);
if(fail.code!=NE_NOERROR){
printf("Error from nag_wav_dim3_coeff_ext (c09fyc).\n%s\n",fail.message);
exit_status=7;
gotoEND;
}
/* Print out the extracted coefficients */
switch(cindex){
case0:
printf("Approximation coefficients (LLL)\n");
break;
case1:
printf("Detail coefficients (LLH)\n");
break;
case2:
printf("Detail coefficients (LHL)\n");
break;
case3:
printf("Detail coefficients (LHH)\n");
break;
case4:
printf("Detail coefficients (HLL)\n");
break;
case5:
printf("Detail coefficients (HLH)\n");
break;
case6:
printf("Detail coefficients (HHL)\n");
break;
case7:
printf("Detail coefficients (HHH)\n");
break;
}
for(i=1;i<=nwcm;i++){
if(i==1){
printf("Coefficients ");
for(k=1;k<=nwcfr;k++){
printf("Frame %4"NAG_IFMT,k);
for(j=1;j<=9*nwcn-8;j++)
printf(" ");
}
printf("\n");
}
for(k=1;k<=nwcfr;k++){
if(k==1&&i==1)
printf("%5"NAG_IFMT"%8s",cindex," ");
elseif(k==1)
printf("%13s"," ");
else
printf("%2s"," ");
for(j=1;j<=nwcn;j++){
printf("%8.4f ",D(i,j,k));
}
}
printf("\n");
}
printf("\n");
}
fflush(stdout);
/* nag_wav_dim3_sngl_inv (c09fbc).
 * Three-dimensional inverse discrete wavelet transform
 */
nag_wav_dim3_sngl_inv(m,n,fr,lenc,c,b,ldb,sdb,icomm,&fail);
if(fail.code!=NE_NOERROR){
printf("Error from nag_wav_dim3_sngl_inv (c09fbc).\n%s\n",fail.message);
exit_status=8;
gotoEND;
}
printf("Output Data :\n");
fflush(stdout);
for(k=1;k<=fr;k++){
/* nag_file_print_matrix_real_gen_comp (x04cbc).
 * Prints out a matrix.
 */
nag_file_print_matrix_real_gen_comp(order,matrix,diag,m,n,&B(1,1,k),
ldb,"%8.4f"," ",Nag_NoLabels,0,
Nag_NoLabels,0,80,0,0,&fail);
if(fail.code!=NE_NOERROR){
printf("Error from nag_file_print_matrix_real_gen_comp (x04cbc).\n%s\n",
fail.message);
exit_status=9;
gotoEND;
}
printf("\n");
fflush(stdout);
}
END:
NAG_FREE(a);
NAG_FREE(b);
NAG_FREE(c);
NAG_FREE(d);
returnexit_status;
}

AltStyle によって変換されたページ (->オリジナル) /