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.i().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( grid.paramIncrements[i] >= 0. &&
00066 ( optimize.vparm[0][i] < optimize.varang[i][0] ||
00067 optimize.vparm[0][i] > optimize.varang[i][1] ) )
00068 {
00069 *lgLimOK = false;
00070 lgLimitHit = true;
00071 }
00072 if( grid.paramIncrements[i] < 0. &&
00073 ( optimize.vparm[0][i] > optimize.varang[i][0] ||
00074 optimize.vparm[0][i] < optimize.varang[i][1] ) )
00075 {
00076 *lgLimOK = false;
00077 lgLimitHit = true;
00078 }
00079
00080
00081
00082 if( optimize.nvarxt[i] == 1 )
00083 {
00084
00085 sprintf( input.chCardSav[np], optimize.chVarFmt[i], optimize.vparm[0][i] );
00086 }
00087
00088 else if( optimize.nvarxt[i] == 2 )
00089 {
00090
00091 sprintf( input.chCardSav[np], optimize.chVarFmt[i], optimize.vparm[0][i],
00092 optimize.vparm[1][i] );
00093 }
00094
00095 else if( optimize.nvarxt[i] == 3 )
00096 {
00097
00098 sprintf( input.chCardSav[np], optimize.chVarFmt[i], optimize.vparm[0][i],
00099 optimize.vparm[1][i], optimize.vparm[2][i] );
00100 }
00101
00102 else if( optimize.nvarxt[i] == 4 )
00103 {
00104
00105 sprintf( input.chCardSav[np], optimize.chVarFmt[i], optimize.vparm[0][i],
00106 optimize.vparm[1][i], optimize.vparm[2][i], optimize.vparm[3][i] );
00107 }
00108
00109 else if( optimize.nvarxt[i] == 5 )
00110 {
00111
00112 sprintf( input.chCardSav[np], optimize.chVarFmt[i],
00113 optimize.vparm[0][i], optimize.vparm[1][i], optimize.vparm[2][i],
00114 optimize.vparm[3][i], optimize.vparm[4][i]);
00115 }
00116
00117 else
00118 {
00119 fprintf(ioQQQ,"The number of variable options on this line makes no sense to me5\n");
00120 cdEXIT(EXIT_FAILURE);
00121 }
00122
00123 if( cpu.i().lgMaster() || !grid.lgGrid )
00124 {
00125 fprintf( ioQQQ, " %s\n", input.chCardSav[np] );
00126 if( lgLimitHit )
00127 fprintf( ioQQQ, " >>> Limit to variable exceeded.\n" );
00128 }
00129 }
00130
00131 if( cpu.i().lgMaster() && grid.lgGrid )
00132 {
00133
00134 fstream io;
00135 string fnam = GridPointPrefix(grid_index) + save.chRedirectPrefix + ".in";
00136 open_data( io, fnam.c_str(), mode_w, AS_LOCAL_ONLY );
00137
00138 for( int i=0; i <= input.nSave; ++i )
00139 io << input.chCardSav[i] << endl;
00140 }
00141
00142 return;
00143 }