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)