00001
00002
00003
00004 #include "cddefines.h"
00005 #include "input.h"
00006 #include "optimize.h"
00007 #include "mpi_utilities.h"
00008 #include "save.h"
00009 #include "grid.h"
00010
00011 void vary_input(bool *lgLimOK,
00012 int grid_index)
00013 {
00014 long int i,
00015 np;
00016
00017 DEBUG_ENTRY( "vary_input()" );
00018
00019
00020
00021 if( grid_index < -1 )
00022 TotalInsanity();
00023
00024
00025
00026
00027
00028
00029
00030
00031 *lgLimOK = true;
00032
00033 if( cpu.lgMaster() || !grid.lgGrid )
00034 fprintf( ioQQQ, " **************************************************\n" );
00035
00036
00037 for( i=0; i < optimize.nvary; i++ )
00038 {
00039 bool lgLimitHit = false;
00040
00041 np = optimize.nvfpnt[i];
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 if( !optimize.lgOptimizeAsLinear[i] )
00053 {
00054 if( !nMatch( " LOG", optimize.chVarFmt[i] ) )
00055 {
00056 fprintf( ioQQQ, " vary_input: internal error - keyword _LOG not found!\n" );
00057 TotalInsanity();
00058 }
00059 }
00060
00061
00062
00063
00064
00065 if( optimize.vparm[0][i] < optimize.varang[i][0] ||
00066 optimize.vparm[0][i] > optimize.varang[i][1] )
00067 {
00068 *lgLimOK = false;
00069 lgLimitHit = true;
00070 }
00071
00072
00073
00074 if( optimize.nvarxt[i] == 1 )
00075 {
00076
00077 sprintf( input.chCardSav[np], optimize.chVarFmt[i], optimize.vparm[0][i] );
00078 }
00079
00080 else if( optimize.nvarxt[i] == 2 )
00081 {
00082
00083 sprintf( input.chCardSav[np], optimize.chVarFmt[i], optimize.vparm[0][i],
00084 optimize.vparm[1][i] );
00085 }
00086
00087 else if( optimize.nvarxt[i] == 3 )
00088 {
00089
00090 sprintf( input.chCardSav[np], optimize.chVarFmt[i], optimize.vparm[0][i],
00091 optimize.vparm[1][i], optimize.vparm[2][i] );
00092 }
00093
00094 else if( optimize.nvarxt[i] == 4 )
00095 {
00096
00097 sprintf( input.chCardSav[np], optimize.chVarFmt[i], optimize.vparm[0][i],
00098 optimize.vparm[1][i], optimize.vparm[2][i], optimize.vparm[3][i] );
00099 }
00100
00101 else if( optimize.nvarxt[i] == 5 )
00102 {
00103
00104 sprintf( input.chCardSav[np], optimize.chVarFmt[i],
00105 optimize.vparm[0][i], optimize.vparm[1][i], optimize.vparm[2][i],
00106 optimize.vparm[3][i], optimize.vparm[4][i]);
00107 }
00108
00109 else
00110 {
00111 fprintf(ioQQQ,"The number of variable options on this line makes no sense to me5\n");
00112 cdEXIT(EXIT_FAILURE);
00113 }
00114
00115 if( cpu.lgMaster() || !grid.lgGrid )
00116 {
00117 fprintf( ioQQQ, " %s\n", input.chCardSav[np] );
00118 if( lgLimitHit )
00119 fprintf( ioQQQ, " >>> Limit to variable exceeded.\n" );
00120 }
00121 }
00122
00123 if( cpu.lgMPI() && cpu.lgMaster() && grid.lgGrid )
00124 {
00125
00126 fstream io;
00127 string fnam = GridPointPrefix(grid_index) + save.chRedirectPrefix + ".in";
00128 open_data( io, fnam.c_str(), mode_w, AS_LOCAL_ONLY );
00129
00130 for( int i=0; i <= input.nSave; ++i )
00131 io << input.chCardSav[i] << endl;
00132 }
00133
00134 return;
00135 }