35 #include <sys/types.h> 
   36 #include <sys/socket.h> 
   37 #include <netinet/in.h> 
   42 #include <sys/socket.h> 
   43 #include <netinet/in.h> 
   45 #include <arpa/inet.h> 
   93                 int             save_errno = errno;
 
   94                 const char      *err_msg = strerror(save_errno);
 
   96                 silent_cerr(
"recv(" << s2s.
sock << 
",\"" << s2s.
buf << 
"\") " 
   97                         "failed (" << save_errno << 
": " << err_msg << 
")" 
  106                 if ((
unsigned)len < 
sizeof(
double)*s2s.
nChannels) {
 
  107                         silent_cerr(
"recv(" << s2s.
sock << 
" \"" << s2s.
buf << 
"\") " 
  108                                 "returned only partial results" 
  127         return len/
sizeof(double);
 
  133         for (
int i = 0; i < s2s.
nChannels; i++) {
 
  134                 std::cin >> s2s.
dbuf[i];
 
  149         static const char       *sep = 
" ";
 
  151         for (
int i = 0; i < s2s.
nChannels - 1; i++) {
 
  152                 std::cout << s2s.
dbuf[i] << sep;
 
  168         IO(
int argc, 
char *argv[]);
 
  174         int Parse(
int argc, 
char *argv[]);
 
  175         int Setup(
int argc, 
char *argv[]);
 
  185 : measures(stream_basic_IO), controls(stream_basic_IO)
 
  187         if (
Setup(argc, argv) == EXIT_FAILURE) {
 
  196                 int     opt = 
getopt(argc, argv, 
"c:f:H:m:");
 
  205                         if (strncasecmp(
optarg, 
"measures:", 
STRLENOF(
"measures:")) == 0) {
 
  209                         } 
else if (strncasecmp(
optarg, 
"controls:", 
STRLENOF(
"controls:")) == 0) {
 
  214                                 silent_cerr(
"unknown value \"" << 
optarg << 
"\" for -H switch" << std::endl);
 
  222                         } 
else if (strncasecmp(
optarg, 
"path:", 
STRLENOF(
"path:")) == 0) {
 
  226                         } 
else if (strcasecmp(
optarg, 
"stdin") == 0) {
 
  228                                         silent_cerr(
"invalid value \"" << 
optarg << 
"\" for -H switch" << std::endl);
 
  233                         } 
else if (strcasecmp(
optarg, 
"stdout") == 0) {
 
  235                                         silent_cerr(
"invalid value \"" << 
optarg << 
"\" for -H switch" << std::endl);
 
  241                                 silent_cerr(
"unknown value \"" << 
optarg << 
"\" for -H switch" << std::endl);
 
  252                         if (next == NULL || next[0] != 
'\0') {
 
  253                                 silent_cerr(
"invalid value \"" << 
optarg << 
"\" for -c switch" << std::endl);
 
  263                         if (next == NULL || next[0] != 
'\0') {
 
  264                                 silent_cerr(
"invalid value \"" << 
optarg << 
"\" for -m switch" << std::endl);
 
  307                         std::getline(std::cin, buf);
 
  309                         std::istringstream str(buf);
 
  331                         silent_cerr(
"number of measures required in socket mode" << std::endl);
 
  346                 silent_cerr(
"number of controls required" << std::endl);
 
  365         virtual bool Check(
const std::vector<double> &measures) = 0;
 
  379         bool Check(
const std::vector<double> &measures);
 
  397         for (
unsigned i = 0; i < measures.size(); i++) {
 
  404                 prevMeasures[i] = measures[i];
 
  425         int FuncEval(std::vector<double> &X, std::vector<double> &F, 
int nSteps, 
int maxSteps);
 
  435         std::vector<double>     Xref(X.size());
 
  436         std::vector<double>     deltaX(X.size());
 
  438         for (
unsigned int i = 0; i < X.size(); i++) {
 
  440                 deltaX[i] = X[i] - Xref[i];
 
  444         for (currStep = 0; currStep < nSteps; currStep++) {
 
  445                 for (
unsigned int i = 0; i < X.size(); i++) {
 
  446                         io.
Controls()[i] = Xref[i] + (deltaX[i]*currStep)/nSteps;
 
  453         for (; currStep < maxSteps; currStep++) {
 
  474         int DoTrim(
const std::vector<double> expectedMeasures,
 
  475                         const std::vector<double> incrControls,
 
  476                         std::vector<double> controls);
 
  488                 const std::vector<double> incrControls,
 
  489                 std::vector<double> controls)
 
  492         std::vector<double>     Xref(incrControls.size()),
 
  493                                 X(incrControls.size());
 
  494         std::vector<double>     Fref(expectedMeasures.size()),
 
  495                                 F(expectedMeasures.size(), 0.);
 
  502         if (expectedMeasures.size() != incrControls.size()) {
 
  506         for (
unsigned int i = 0; i < incrControls.size(); i++) {
 
  510         for (
unsigned int i = 0; i < expectedMeasures.size(); i++) {
 
  514         for (
unsigned int c = 0; 
c < incrControls.size(); 
c++) {
 
  515                 for (
unsigned int i = 0; i < incrControls.size(); i++) {
 
  518                 X[
c] += incrControls[
c];
 
  522                 for (
unsigned int i = 0; i < expectedMeasures.size(); i++) {
 
  523                         pM->
PutCoef(i + 1, 
c + 1, F[i] - Fref[i]);
 
  528                 for (
unsigned int i = 0; i < expectedMeasures.size(); i++) {
 
  529                         pR->
PutCoef(i + 1, expectedMeasures[i] - Fref[i]);
 
  534                 for (
unsigned int i = 0; i < incrControls.size(); i++) {
 
  535                         X[i] = Xref[i] + pX->operator()(i + 1);
 
  541                 for (
unsigned int i = 0; i < expectedMeasures.size(); i++) {
 
  554                 silent_cerr(
"need 4 controls" << std::endl);
 
  558         NRTrim                  trim(io, 4, 1.e-6);
 
  560         std::vector<double>     F(4, 0.);
 
  561         std::vector<double>     I(4, 0.);
 
  562         std::vector<double>     X(4, 0.);
 
virtual VectorHandler * pResHdl(void) const =0
NRTrim(IO &io, int n, double t)
virtual bool Check(const std::vector< double > &measures)=0
int nControls(void) const 
TrimEval(IO &io, ConvergenceCheck &cc)
int Parse(int argc, char *argv[])
SolutionManager *const GetSolutionManager(integer iNLD, integer iLWS=0) const 
~FFDConvergenceCheck(void)
int Setup(int argc, char *argv[])
int SendControls(s2s_t &s2s)
int DoTrim(const std::vector< double > expectedMeasures, const std::vector< double > incrControls, std::vector< double > controls)
std::vector< double > prevDiff
int nMeasures(void) const 
virtual ~ConvergenceCheck(void)
int SendControls(s2s_t &s2s)
const std::vector< double > & Measures(void) const 
int ReadMeasures(s2s_t &s2s)
static StreamBasicIO stream_basic_IO
virtual MatrixHandler * pMatHdl(void) const =0
std::vector< double > dbuf
virtual void PutCoef(integer iRow, integer iCol, const doublereal &dCoef)
virtual void Solve(void)=0
int ReadMeasures(s2s_t &s2s)
int main(int argc, char *argv[])
GradientExpression< UnaryExpr< FuncSqrt, Expr > > sqrt(const GradientExpression< Expr > &u)
virtual void PutCoef(integer iRow, const doublereal &dCoef)=0
static SocketBasicIO socket_basic_IO
std::vector< double > prevMeasures
static std::stack< cleanup * > c
int getopt(int argc, char *const argv[], const char *opts)
virtual int SendControls(s2s_t &s2s)=0
ConvergenceCheck(int n, double t)
std::vector< double > diff
virtual int ReadMeasures(s2s_t &s2s)=0
std::vector< double > & Controls(void)
virtual VectorHandler * pSolHdl(void) const =0
static doublereal buf[BUFSIZE]
FFDConvergenceCheck(int n, double t, double r)
bool Check(const std::vector< double > &measures)
int FuncEval(std::vector< double > &X, std::vector< double > &F, int nSteps, int maxSteps)