1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <FCMangle.h> 4 void 5 write_hessian( double* hessian, double* gradian, int* nshg ) { 6 7 FILE* idmap = fopen( "lihessmap.dat","r"); 8 int* map = ( int* )malloc( (*nshg)*sizeof( int ) ); 9 int i,j,k; 10 int x; 11 12 FILE* uhess = fopen( "uhessian.dat", "w" ); 13 FILE* vhess = fopen( "vhessian.dat", "w" ); 14 FILE* whess = fopen( "whessian.dat", "w" ); 15 16 17 /* FILE* ugrad = fopen( "ugradian.dat", "w" ); */ 18 /* FILE* vgrad = fopen( "vgradian.dat", "w" ); */ 19 /* FILE* wgrad = fopen( "wgradian.dat", "w" ); */ 20 21 /* int ug[3] = { 1, 4, 7 }; */ 22 /* int vg[3] = { 2, 5, 8 }; */ 23 /* int wg[3] = { 3, 6, 9 }; */ 24 int u[6] = { 1, 10, 19, 13, 22, 25 }; 25 int v[6] = { 2, 11, 20, 14, 23, 26 }; 26 int w[6] = { 3, 12, 21, 15, 24, 27 }; 27 28 for( x=0; x < *nshg; x++ ) fscanf(idmap,"%d\n", map+x ); 29 fclose( idmap ); 30 31 fprintf( uhess,"%d\n", *nshg ); 32 fprintf( vhess,"%d\n", *nshg ); 33 fprintf( whess,"%d\n", *nshg ); 34 /* fprintf( ugrad,"%d\n", *nshg ); */ 35 /* fprintf( vgrad,"%d\n", *nshg ); */ 36 /* fprintf( wgrad,"%d\n", *nshg ); */ 37 38 for( i=0; i< *nshg; i++ ) { 39 40 k = map[ i ]-1; 41 42 /* for( j=0; j<3; j++ ) { */ 43 /* fprintf( ugrad, "%f ", gradian[i+(ug[j]-1)*(*nshg)] ); */ 44 /* fprintf( vgrad, "%f ", gradian[i+(vg[j]-1)*(*nshg)] ); */ 45 /* fprintf( wgrad, "%f ", gradian[i+(wg[j]-1)*(*nshg)] ); */ 46 /* } */ 47 48 for( j=0; j<6; j++ ) { 49 fprintf( uhess, "%f ", hessian[k+(u[j]-1)*(*nshg)] ); 50 fprintf( vhess, "%f ", hessian[k+(v[j]-1)*(*nshg)] ); 51 fprintf( whess, "%f ", hessian[k+(w[j]-1)*(*nshg)] ); 52 } 53 fprintf( uhess, "\n" ) ; 54 fprintf( vhess, "\n" ) ; 55 fprintf( whess, "\n" ) ; 56 /* fprintf( ugrad, "\n" ) ; */ 57 /* fprintf( vgrad, "\n" ) ; */ 58 /* fprintf( wgrad, "\n" ) ; */ 59 } 60 61 free( map ); 62 fclose( uhess ); 63 fclose( vhess ); 64 fclose( whess ); 65 /* fclose( ugrad ); */ 66 /* fclose( vgrad ); */ 67 /* fclose( wgrad ); */ 68 } 69