1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <FCMangle.h>
4 void
write_hessian(double * hessian,double * gradian,int * nshg)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