"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "Interface/ProData.cpp" between
getdp-3.4.0-source.tgz and getdp-3.5.0-source.tgz

About: GetDP is a general finite element solver using mixed elements to discretize de Rham-type complexes in one, two and three dimensions.

ProData.cpp  (getdp-3.4.0-source.tgz):ProData.cpp  (getdp-3.5.0-source.tgz)
// GetDP - Copyright (C) 1997-2021 P. Dular and C. Geuzaine, University of Liege // GetDP - Copyright (C) 1997-2022 P. Dular and C. Geuzaine, University of Liege
// //
// See the LICENSE.txt file for license information. Please report all // See the LICENSE.txt file for license information. Please report all
// issues on https://gitlab.onelab.info/getdp/getdp/issues. // issues on https://gitlab.onelab.info/getdp/getdp/issues.
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <string> #include <string>
#include <set> #include <set>
#include "GetDPConfig.h" #include "GetDPConfig.h"
#include "ProData.h" #include "ProData.h"
skipping to change at line 35 skipping to change at line 35
struct Problem Problem_S; struct Problem Problem_S;
// Global run-time current data: this is the only current data // Global run-time current data: this is the only current data
// structure that is instantiated // structure that is instantiated
struct CurrentData Current; struct CurrentData Current;
// Sorting functions // Sorting functions
int fcmp_Integer(const void *a, const void *b) int fcmp_Integer(const void *a, const void *b)
{ {
return(*(int*)a - *(int*)b ); return (*(int *)a - *(int *)b);
} }
int fcmp_Integer2(const void *a, const void *b) int fcmp_Integer2(const void *a, const void *b)
{ {
static int result ; static int result;
if ( ( result = (*(int*)a - *(int*)b ) ) != 0 ) return result ; if((result = (*(int *)a - *(int *)b)) != 0) return result;
return (*((int*)a+1) - *((int*)b+1) ); return (*((int *)a + 1) - *((int *)b + 1));
} }
int fcmp_Constant (const void *a, const void *b) int fcmp_Constant(const void *a, const void *b)
{ {
return ( strcmp(((struct Constant *)a)->Name, ((struct Constant *)b)->Name)); return (strcmp(((struct Constant *)a)->Name, ((struct Constant *)b)->Name));
} }
int fcmp_Expression_Name(const void *a, const void *b) int fcmp_Expression_Name(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct Expression *)b)->Name ) ); return (strcmp((char *)a, ((struct Expression *)b)->Name));
} }
int fcmp_Group_Name(const void *a, const void *b) int fcmp_Group_Name(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct Group *)b)->Name ) ); return (strcmp((char *)a, ((struct Group *)b)->Name));
} }
int fcmp_Constraint_Name(const void *a, const void *b) int fcmp_Constraint_Name(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct Constraint *)b)->Name ) ); return (strcmp((char *)a, ((struct Constraint *)b)->Name));
} }
int fcmp_JacobianMethod_Name(const void *a, const void *b) int fcmp_JacobianMethod_Name(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct JacobianMethod *)b)->Name ) ); return (strcmp((char *)a, ((struct JacobianMethod *)b)->Name));
} }
int fcmp_IntegrationMethod_Name(const void *a, const void *b) int fcmp_IntegrationMethod_Name(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct IntegrationMethod *)b)->Name ) ); return (strcmp((char *)a, ((struct IntegrationMethod *)b)->Name));
} }
int fcmp_BasisFunction_Name(const void *a, const void *b) int fcmp_BasisFunction_Name(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct BasisFunction *)b)->Name ) ); return (strcmp((char *)a, ((struct BasisFunction *)b)->Name));
} }
int fcmp_FunctionSpace_Name(const void *a, const void *b) int fcmp_FunctionSpace_Name(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct FunctionSpace *)b)->Name ) ); return (strcmp((char *)a, ((struct FunctionSpace *)b)->Name));
} }
int fcmp_BasisFunction_NameOfCoef(const void *a, const void *b) int fcmp_BasisFunction_NameOfCoef(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct BasisFunction *)b)->NameOfCoef ) ); return (strcmp((char *)a, ((struct BasisFunction *)b)->NameOfCoef));
} }
int fcmp_SubSpace_Name(const void *a, const void *b) int fcmp_SubSpace_Name(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct SubSpace *)b)->Name ) ); return (strcmp((char *)a, ((struct SubSpace *)b)->Name));
} }
int fcmp_GlobalQuantity_Name(const void *a, const void *b) int fcmp_GlobalQuantity_Name(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct GlobalQuantity *)b)->Name ) ); return (strcmp((char *)a, ((struct GlobalQuantity *)b)->Name));
} }
int fcmp_Formulation_Name(const void *a, const void *b) int fcmp_Formulation_Name(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct Formulation *)b)->Name ) ); return (strcmp((char *)a, ((struct Formulation *)b)->Name));
} }
int fcmp_DefineQuantity_Name(const void *a, const void *b) int fcmp_DefineQuantity_Name(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct DefineQuantity *)b)->Name ) ); return (strcmp((char *)a, ((struct DefineQuantity *)b)->Name));
} }
int fcmp_DefineSystem_Name(const void *a, const void *b) int fcmp_DefineSystem_Name(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct DefineSystem *)b)->Name ) ); return (strcmp((char *)a, ((struct DefineSystem *)b)->Name));
} }
int fcmp_Resolution_Name(const void *a, const void *b) int fcmp_Resolution_Name(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct Resolution *)b)->Name ) ); return (strcmp((char *)a, ((struct Resolution *)b)->Name));
} }
int fcmp_PostProcessing_Name(const void *a, const void *b) int fcmp_PostProcessing_Name(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct PostProcessing *)b)->Name ) ); return (strcmp((char *)a, ((struct PostProcessing *)b)->Name));
} }
int fcmp_PostQuantity_Name(const void *a, const void *b) int fcmp_PostQuantity_Name(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct PostQuantity *)b)->Name ) ); return (strcmp((char *)a, ((struct PostQuantity *)b)->Name));
} }
int fcmp_PostOperation_Name(const void *a, const void *b) int fcmp_PostOperation_Name(const void *a, const void *b)
{ {
return ( strcmp((char *)a, ((struct PostOperation *)b)->Name ) ); return (strcmp((char *)a, ((struct PostOperation *)b)->Name));
} }
// I/O routines // I/O routines
void Init_ProblemStructure() void Init_ProblemStructure()
{ {
Problem_S.Group = NULL ; Problem_S.Group = NULL;
Problem_S.Expression = NULL ; Problem_S.Expression = NULL;
Problem_S.FunctionSpace = NULL ; Problem_S.FunctionSpace = NULL;
Problem_S.Constraint = NULL ; Problem_S.Constraint = NULL;
Problem_S.Formulation = NULL ; Problem_S.Formulation = NULL;
Problem_S.JacobianMethod = NULL ; Problem_S.JacobianMethod = NULL;
Problem_S.IntegrationMethod = NULL ; Problem_S.IntegrationMethod = NULL;
Problem_S.Resolution = NULL ; Problem_S.Resolution = NULL;
Problem_S.PostProcessing = NULL ; Problem_S.PostProcessing = NULL;
Problem_S.PostOperation = NULL ; Problem_S.PostOperation = NULL;
Current.Name = NULL; Current.Name = NULL;
Current.NbrSystem = 0; Current.NbrSystem = 0;
Current.DefineSystem_P = NULL ; Current.DefineSystem_P = NULL;
Current.DofData_P0 = NULL; Current.DofData_P0 = NULL;
Current.DofData = NULL; Current.DofData = NULL;
Current.GeoData = NULL; Current.GeoData = NULL;
Current.PostOpData_L = NULL; Current.PostOpData_L = NULL;
Current.PostOpDataIndex = 0; Current.PostOpDataIndex = 0;
Current.NbrHar = 0; Current.NbrHar = 0;
Current.Region = 0; Current.Region = 0;
Current.SubRegion = 0; Current.SubRegion = 0;
Current.NumEntity = 0; Current.NumEntity = 0;
Current.NumEntityInElement = 0; Current.NumEntityInElement = 0;
skipping to change at line 227 skipping to change at line 227
Current.RelaxFac = 0.0; //+++ Current.RelaxFac = 0.0; //+++
Current.NbrTestedFac = 0.0; //+++ Current.NbrTestedFac = 0.0; //+++
Current.SolveJacAdaptFailed = 0.0; //+++ Current.SolveJacAdaptFailed = 0.0; //+++
Current.KSPIterations = 0.0; Current.KSPIterations = 0.0;
Current.KSPIteration = 0.0; Current.KSPIteration = 0.0;
Current.KSPResidual = 0.0; Current.KSPResidual = 0.0;
Current.KSPSystemSize = 0.0; Current.KSPSystemSize = 0.0;
} }
// FIXME: TODO to remove parser memory leaks! // FIXME: TODO to remove parser memory leaks!
void Free_Group(struct Group* a) void Free_Group(struct Group *a)
{ {
// we should convert all the structs into classes and add a default // we should convert all the structs into classes and add a default
// constructor with proper initializations ; cleanup the parser to make sure // constructor with proper initializations ; cleanup the parser to make sure
// who owns what, so we can safely delete // who owns what, so we can safely delete
// //
// List_Delete(a->ExtendedList); List_Delete(a->ExtendedSuppList); // List_Delete(a->ExtendedList); List_Delete(a->ExtendedSuppList);
} }
void Free_Expression(struct Expression* a){} void Free_Expression(struct Expression *a) {}
void Free_FunctinSpace(struct FunctionSpace* a){} void Free_FunctinSpace(struct FunctionSpace *a) {}
void Free_Constraint(struct Constraint* a){} void Free_Constraint(struct Constraint *a) {}
void Free_Formulation(struct Formuation* a){} void Free_Formulation(struct Formuation *a) {}
void Free_JacobianMethod(struct JacobianMethod* a){} void Free_JacobianMethod(struct JacobianMethod *a) {}
void Free_IntegrationMethod(struct IntegrationMethod* a){} void Free_IntegrationMethod(struct IntegrationMethod *a) {}
void Free_Resolution(struct Resolution* a){} void Free_Resolution(struct Resolution *a) {}
void Free_PostProcessing(struct PostProcessing* a){} void Free_PostProcessing(struct PostProcessing *a) {}
void Free_PostOperation(struct PostOperation* a){} void Free_PostOperation(struct PostOperation *a) {}
void Free_ProblemStructure() void Free_ProblemStructure()
{ {
if(Problem_S.Group){ if(Problem_S.Group) {
for(int i = 0; i < List_Nbr(Problem_S.Group); i++) for(int i = 0; i < List_Nbr(Problem_S.Group); i++)
Free_Group((Group*)List_Pointer(Problem_S.Group, i)); Free_Group((Group *)List_Pointer(Problem_S.Group, i));
List_Delete(Problem_S.Group); List_Delete(Problem_S.Group);
} }
if(Problem_S.Expression){ if(Problem_S.Expression) {
for(int i = 0; i < List_Nbr(Problem_S.Expression); i++) for(int i = 0; i < List_Nbr(Problem_S.Expression); i++)
Free_Expression((Expression*)List_Pointer(Problem_S.Expression, i)); Free_Expression((Expression *)List_Pointer(Problem_S.Expression, i));
List_Delete(Problem_S.Expression); List_Delete(Problem_S.Expression);
} }
if(Problem_S.FunctionSpace){ if(Problem_S.FunctionSpace) {
for(int i = 0; i < List_Nbr(Problem_S.FunctionSpace); i++) for(int i = 0; i < List_Nbr(Problem_S.FunctionSpace); i++)
Free_FunctinSpace((FunctionSpace*)List_Pointer(Problem_S.FunctionSpace, i) Free_FunctinSpace(
); (FunctionSpace *)List_Pointer(Problem_S.FunctionSpace, i));
List_Delete(Problem_S.FunctionSpace); List_Delete(Problem_S.FunctionSpace);
} }
if(Problem_S.Constraint){ if(Problem_S.Constraint) {
for(int i = 0; i < List_Nbr(Problem_S.Constraint); i++) for(int i = 0; i < List_Nbr(Problem_S.Constraint); i++)
Free_Constraint((Constraint*)List_Pointer(Problem_S.Constraint, i)); Free_Constraint((Constraint *)List_Pointer(Problem_S.Constraint, i));
List_Delete(Problem_S.Constraint); List_Delete(Problem_S.Constraint);
} }
if(Problem_S.Formulation){ if(Problem_S.Formulation) {
for(int i = 0; i < List_Nbr(Problem_S.Formulation); i++) for(int i = 0; i < List_Nbr(Problem_S.Formulation); i++)
Free_Formulation((Formuation*)List_Pointer(Problem_S.Formulation, i)); Free_Formulation((Formuation *)List_Pointer(Problem_S.Formulation, i));
List_Delete(Problem_S.Formulation); List_Delete(Problem_S.Formulation);
} }
if(Problem_S.JacobianMethod){ if(Problem_S.JacobianMethod) {
for(int i = 0; i < List_Nbr(Problem_S.JacobianMethod); i++) for(int i = 0; i < List_Nbr(Problem_S.JacobianMethod); i++)
Free_JacobianMethod((JacobianMethod*)List_Pointer(Problem_S.JacobianMethod Free_JacobianMethod(
, i)); (JacobianMethod *)List_Pointer(Problem_S.JacobianMethod, i));
List_Delete(Problem_S.JacobianMethod); List_Delete(Problem_S.JacobianMethod);
} }
if(Problem_S.IntegrationMethod){ if(Problem_S.IntegrationMethod) {
for(int i = 0; i < List_Nbr(Problem_S.IntegrationMethod); i++) for(int i = 0; i < List_Nbr(Problem_S.IntegrationMethod); i++)
Free_IntegrationMethod((IntegrationMethod*)List_Pointer(Problem_S.Integrat Free_IntegrationMethod(
ionMethod, i)); (IntegrationMethod *)List_Pointer(Problem_S.IntegrationMethod, i));
List_Delete(Problem_S.IntegrationMethod); List_Delete(Problem_S.IntegrationMethod);
} }
if(Problem_S.Resolution){ if(Problem_S.Resolution) {
for(int i = 0; i < List_Nbr(Problem_S.Resolution); i++) for(int i = 0; i < List_Nbr(Problem_S.Resolution); i++)
Free_Resolution((Resolution*)List_Pointer(Problem_S.Resolution, i)); Free_Resolution((Resolution *)List_Pointer(Problem_S.Resolution, i));
List_Delete(Problem_S.Resolution); List_Delete(Problem_S.Resolution);
} }
if(Problem_S.PostProcessing){ if(Problem_S.PostProcessing) {
for(int i = 0; i < List_Nbr(Problem_S.PostProcessing); i++) for(int i = 0; i < List_Nbr(Problem_S.PostProcessing); i++)
Free_PostProcessing((PostProcessing*)List_Pointer(Problem_S.PostProcessing Free_PostProcessing(
, i)); (PostProcessing *)List_Pointer(Problem_S.PostProcessing, i));
List_Delete(Problem_S.PostProcessing); List_Delete(Problem_S.PostProcessing);
} }
if(Problem_S.PostOperation){ if(Problem_S.PostOperation) {
for(int i = 0; i < List_Nbr(Problem_S.PostOperation); i++) for(int i = 0; i < List_Nbr(Problem_S.PostOperation); i++)
Free_PostOperation((PostOperation*)List_Pointer(Problem_S.PostOperation, i Free_PostOperation(
)); (PostOperation *)List_Pointer(Problem_S.PostOperation, i));
List_Delete(Problem_S.PostOperation); List_Delete(Problem_S.PostOperation);
} }
Init_ProblemStructure(); Init_ProblemStructure();
} }
std::string Fix_RelativePath(const char *name, const char *reference) std::string Fix_RelativePath(const char *name, const char *reference)
{ {
if(!name || !strlen(name)) return ""; if(!name || !strlen(name)) return "";
std::string in(name); std::string in(name);
if(in[0] == '/' || in[0] == '\\' || if(in[0] == '/' || in[0] == '\\' ||
(in.size() > 3 && in[1] == ':' && (in[2] == '/' || in[2] == '\\'))){ (in.size() > 3 && in[1] == ':' && (in[2] == '/' || in[2] == '\\'))) {
// do nothing: 'in' is an absolute path // do nothing: 'in' is an absolute path
return in; return in;
} }
else{ else {
char AbsPath[2048]; char AbsPath[2048];
strcpy(AbsPath, reference ? reference : getdp_yyname.c_str()); strcpy(AbsPath, reference ? reference : getdp_yyname.c_str());
int i = strlen(AbsPath) - 1; int i = strlen(AbsPath) - 1;
while(i >= 0 && AbsPath[i] != '/' && AbsPath[i] != '\\') i--; while(i >= 0 && AbsPath[i] != '/' && AbsPath[i] != '\\') i--;
AbsPath[i+1] = '\0'; AbsPath[i + 1] = '\0';
return std::string(AbsPath) + in; return std::string(AbsPath) + in;
} }
} }
#if !defined(HAVE_NX) #if !defined(HAVE_NX)
void Read_ProblemPreamble() void Read_ProblemPreamble()
{ {
// no-op ; could be used to fill getdp_yystring in order to parse some // no-op ; could be used to fill getdp_yystring in order to parse some
// definitions before the actuel .pro file processing starts. // definitions before the actuel .pro file processing starts.
} }
#endif #endif
static std::vector<FILE*> openFiles; static std::vector<FILE *> openFiles;
void Read_ProblemStructure(const char *name) void Read_ProblemStructure(const char *name)
{ {
int Last_yylinenum = getdp_yylinenum; int Last_yylinenum = getdp_yylinenum;
std::string Last_yyname = getdp_yyname; std::string Last_yyname = getdp_yyname;
int Last_ErrorLevel = getdp_yyerrorlevel; int Last_ErrorLevel = getdp_yyerrorlevel;
int Last_yyincludenum = getdp_yyincludenum; int Last_yyincludenum = getdp_yyincludenum;
char AbsPath[4096]; char AbsPath[4096];
int i; int i;
bool absolute = false; bool absolute = false;
if((strlen(name) > 0 && (name[0] == '/' || name[0] == '\\')) || if((strlen(name) > 0 && (name[0] == '/' || name[0] == '\\')) ||
(strlen(name) > 3 && name[1] == ':' && (name[2] == '\\' || name[2] == '/')) (strlen(name) > 3 && name[1] == ':' &&
){ (name[2] == '\\' || name[2] == '/'))) {
// name is an absolute path // name is an absolute path
absolute = true; absolute = true;
strcpy(AbsPath, name); strcpy(AbsPath, name);
} }
else{ else {
strcpy(AbsPath, getdp_yyname.c_str()); strcpy(AbsPath, getdp_yyname.c_str());
i = getdp_yyname.size() - 1; i = getdp_yyname.size() - 1;
while(i >= 0 && getdp_yyname[i] != '/' && getdp_yyname[i] != '\\') i--; while(i >= 0 && getdp_yyname[i] != '/' && getdp_yyname[i] != '\\') i--;
AbsPath[i+1] = '\0'; AbsPath[i + 1] = '\0';
strcat(AbsPath, name); strcat(AbsPath, name);
} }
Message::Info("Loading problem definition '%s'", AbsPath); Message::Info("Loading problem definition '%s'", AbsPath);
Message::AddOnelabStringChoice(Message::GetOnelabClientName() + "/{Input files Message::AddOnelabStringChoice(Message::GetOnelabClientName() +
", "/{Input files",
"file", AbsPath, true, true); "file", AbsPath, true, true);
// opening the file in text mode messes up the loops (they use // opening the file in text mode messes up the loops (they use
// fsetpos/fgetpos) on Windows without Cygwin; not sure why, but // fsetpos/fgetpos) on Windows without Cygwin; not sure why, but
// opening the file in binary mode fixes the problem // opening the file in binary mode fixes the problem
if(!(getdp_yyin = FOpen(AbsPath, "rb"))){ if(!(getdp_yyin = FOpen(AbsPath, "rb"))) {
if(getdp_yyincludenum > 0 && !absolute){ if(getdp_yyincludenum > 0 && !absolute) {
// try to find included files in a standard directory // try to find included files in a standard directory
Message::Info("File `%s' not found, looking in $GETDP_TEMPLATES", AbsPath) Message::Info("File `%s' not found, looking in $GETDP_TEMPLATES",
; AbsPath);
const char* template_dir = getenv("GETDP_TEMPLATES"); const char *template_dir = getenv("GETDP_TEMPLATES");
if(template_dir){ if(template_dir) {
strcpy(AbsPath, template_dir); strcpy(AbsPath, template_dir);
strcat(AbsPath, "/"); strcat(AbsPath, "/");
strcat(AbsPath, name); strcat(AbsPath, name);
printf("trying to open %s\n", AbsPath); printf("trying to open %s\n", AbsPath);
if(!(getdp_yyin = FOpen(AbsPath, "rb"))){ if(!(getdp_yyin = FOpen(AbsPath, "rb"))) {
Message::Error("Unable to open file '%s'", AbsPath); Message::Error("Unable to open file '%s'", AbsPath);
return; return;
} }
} }
else{ else {
Message::Error("No template directory defined"); Message::Error("No template directory defined");
return; return;
} }
} }
else{ else {
Message::Error("Unable to open file '%s'", AbsPath); Message::Error("Unable to open file '%s'", AbsPath);
return; return;
} }
} }
getdp_yyerrorlevel = 0; getdp_yylinenum = 1; getdp_yyincludenum = 0; getdp_yyerrorlevel = 0;
getdp_yylinenum = 1;
getdp_yyincludenum = 0;
getdp_yyname = std::string(AbsPath); getdp_yyname = std::string(AbsPath);
getdp_yyrestart(getdp_yyin); getdp_yyparse(); getdp_yyrestart(getdp_yyin);
getdp_yyparse();
// don't close the file here: we'll need it if there is a Macro in it: // don't close the file here: we'll need it if there is a Macro in it:
//fclose(getdp_yyin); // fclose(getdp_yyin);
openFiles.push_back(getdp_yyin); openFiles.push_back(getdp_yyin);
if(getdp_yyerrorlevel) return; if(getdp_yyerrorlevel) return;
while(getdp_yyincludenum > 0){ while(getdp_yyincludenum > 0) {
Read_ProblemStructure(getdp_yyincludename); Read_ProblemStructure(getdp_yyincludename);
getdp_yyin = FOpen(getdp_yyname.c_str(), "rb"); // same comment as above getdp_yyin = FOpen(getdp_yyname.c_str(), "rb"); // same comment as above
getdp_yyrestart(getdp_yyin); getdp_yyrestart(getdp_yyin);
for(i = 0; i < getdp_yylinenum; i++){ for(i = 0; i < getdp_yylinenum; i++) {
if(!fgets(AbsPath, sizeof(AbsPath), getdp_yyin)) if(!fgets(AbsPath, sizeof(AbsPath), getdp_yyin))
Message::Warning("Could not read line %d", getdp_yylinenum); Message::Warning("Could not read line %d", getdp_yylinenum);
} }
getdp_yylinenum++; getdp_yylinenum++;
getdp_yyparse(); getdp_yyparse();
// don't close the file here: we'll need it if there is a Macro in it: // don't close the file here: we'll need it if there is a Macro in it:
//fclose(getdp_yyin); // fclose(getdp_yyin);
openFiles.push_back(getdp_yyin); openFiles.push_back(getdp_yyin);
if(getdp_yyerrorlevel) return; if(getdp_yyerrorlevel) return;
} }
level_include--; level_include--;
getdp_yylinenum = Last_yylinenum; getdp_yylinenum = Last_yylinenum;
getdp_yyname = Last_yyname; getdp_yyname = Last_yyname;
getdp_yyerrorlevel = Last_ErrorLevel; getdp_yyerrorlevel = Last_ErrorLevel;
getdp_yyincludenum = Last_yyincludenum; getdp_yyincludenum = Last_yyincludenum;
} }
void Finalize_ProblemStructure() void Finalize_ProblemStructure()
{ {
for(unsigned int i = 0; i < openFiles.size(); i++) for(unsigned int i = 0; i < openFiles.size(); i++) fclose(openFiles[i]);
fclose(openFiles[i]);
openFiles.clear(); openFiles.clear();
MacroManager::Instance()->clear(); MacroManager::Instance()->clear();
} }
char *Get_ExpressionName(int Index) char *Get_ExpressionName(int Index)
{ {
return(((struct Expression *)List_Pointer(Problem_S.Expression, Index))->Name) return (
; ((struct Expression *)List_Pointer(Problem_S.Expression, Index))->Name);
} }
void Print_WholeQuantity(List_T *WholeQuantity, List_T *DQ_L) void Print_WholeQuantity(List_T *WholeQuantity, List_T *DQ_L)
{ {
int j, k; int j, k;
struct WholeQuantity *WQ; struct WholeQuantity *WQ;
WQ = (struct WholeQuantity*)List_Pointer(WholeQuantity, 0); WQ = (struct WholeQuantity *)List_Pointer(WholeQuantity, 0);
for (k = 0; k < List_Nbr(WholeQuantity); k++) {
switch ((WQ+k)->Type) {
case WQ_OPERATORANDQUANTITY :
Message::Check(" {%s %s}",
Get_StringForDefine
(Operator_Type, (WQ+k)->Case.OperatorAndQuantity.TypeOperat
or),
((struct DefineQuantity *)
List_Pointer(DQ_L, (WQ+k)->Case.OperatorAndQuantity.Index)
)
->Name);
break;
case WQ_OPERATORANDQUANTITYEVAL : for(k = 0; k < List_Nbr(WholeQuantity); k++) {
Message::Check(" {%s %s} ExplicitEvaluation", switch((WQ + k)->Type) {
Get_StringForDefine case WQ_OPERATORANDQUANTITY:
(Operator_Type, (WQ+k)->Case.OperatorAndQuantity.TypeOperat Message::Check(
or), " {%s %s}",
((struct DefineQuantity *) Get_StringForDefine(Operator_Type,
List_Pointer(DQ_L, (WQ+k)->Case.OperatorAndQuantity.Index) (WQ + k)->Case.OperatorAndQuantity.TypeOperator),
) ((struct DefineQuantity *)List_Pointer(
->Name); DQ_L, (WQ + k)->Case.OperatorAndQuantity.Index))
->Name);
break;
case WQ_OPERATORANDQUANTITYEVAL:
Message::Check(
" {%s %s} ExplicitEvaluation",
Get_StringForDefine(Operator_Type,
(WQ + k)->Case.OperatorAndQuantity.TypeOperator),
((struct DefineQuantity *)List_Pointer(
DQ_L, (WQ + k)->Case.OperatorAndQuantity.Index))
->Name);
break;
case WQ_BINARYOPERATOR:
switch((WQ + k)->Case.Operator.TypeOperator) {
case OP_PLUS: Message::Check(" +"); break;
case OP_MINUS: Message::Check(" -"); break;
case OP_TIME: Message::Check(" *"); break;
case OP_DIVIDE: Message::Check(" /"); break;
case OP_MODULO: Message::Check(" %%"); break;
case OP_POWER: Message::Check(" ^"); break;
case OP_CROSSPRODUCT: Message::Check(" x"); break;
case OP_LESS: Message::Check(" <"); break;
case OP_GREATER: Message::Check(" >"); break;
case OP_LESSOREQUAL: Message::Check(" <="); break;
case OP_GREATEROREQUAL: Message::Check(" >="); break;
case OP_EQUAL: Message::Check(" =="); break;
case OP_NOTEQUAL: Message::Check(" !="); break;
case OP_APPROXEQUAL: Message::Check(" ~="); break;
case OP_AND: Message::Check(" &&"); break;
case OP_OR: Message::Check(" ||"); break;
default: Message::Check(" UnknownBinaryOperator[]"); break;
}
break; break;
case WQ_BINARYOPERATOR : case WQ_UNARYOPERATOR:
switch ((WQ+k)->Case.Operator.TypeOperator) { switch((WQ + k)->Case.Operator.TypeOperator) {
case OP_PLUS : Message::Check(" +"); break; case OP_NEG: Message::Check(" -(unary)"); break;
case OP_MINUS : Message::Check(" -"); break; case OP_NOT: Message::Check(" !"); break;
case OP_TIME : Message::Check(" *"); break; default: Message::Check(" UnknownUnaryOperator[]"); break;
case OP_DIVIDE : Message::Check(" /"); break;
case OP_MODULO : Message::Check(" %%"); break;
case OP_POWER : Message::Check(" ^"); break;
case OP_CROSSPRODUCT : Message::Check(" x"); break;
case OP_LESS : Message::Check(" <"); break;
case OP_GREATER : Message::Check(" >"); break;
case OP_LESSOREQUAL : Message::Check(" <="); break;
case OP_GREATEROREQUAL : Message::Check(" >="); break;
case OP_EQUAL : Message::Check(" =="); break;
case OP_NOTEQUAL : Message::Check(" !="); break;
case OP_APPROXEQUAL : Message::Check(" ~="); break;
case OP_AND : Message::Check(" &&"); break;
case OP_OR : Message::Check(" ||"); break;
default : Message::Check(" UnknownBinaryOperator[]"); brea
k;
} }
break; break;
case WQ_UNARYOPERATOR : case WQ_EXPRESSION:
switch ((WQ+k)->Case.Operator.TypeOperator) { Message::Check(" %s[]",
case OP_NEG : Message::Check(" -(unary)"); break; ((struct Expression *)List_Pointer(
case OP_NOT : Message::Check(" !"); break; Problem_S.Expression, (WQ + k)->Case.Expression.Index))
default : Message::Check(" UnknownUnaryOperator[]"); break ->Name);
;
}
break; break;
case WQ_EXPRESSION : case WQ_BUILTINFUNCTION:
Message::Check(" %s[]", ((struct Expression *) case WQ_EXTERNBUILTINFUNCTION:
List_Pointer(Problem_S.Expression, Message::Check(" %s", Get_StringForFunction2Nbr(
(WQ+k)->Case.Expression.Index))->Nam F_Function, (WQ + k)->Case.Function.Fct));
e); if((WQ + k)->Type == WQ_EXTERNBUILTINFUNCTION) Message::Check("[.]");
break; if((WQ + k)->Type == WQ_BUILTINFUNCTION) Message::Check("[]");
if((WQ + k)->Case.Function.NbrParameters) {
case WQ_BUILTINFUNCTION : Message::Check("{");
case WQ_EXTERNBUILTINFUNCTION : for(j = 0; j < (WQ + k)->Case.Function.NbrParameters; j++) {
Message::Check(" %s", Get_StringForFunction2Nbr(F_Function, if(j) Message::Check(",");
(WQ+k)->Case.Function.Fct) Message::Check(" %.10g", (WQ + k)->Case.Function.Para[j]);
); }
if ((WQ+k)->Type == WQ_EXTERNBUILTINFUNCTION) Message::Check("[.]"); Message::Check(" }");
if ((WQ+k)->Type == WQ_BUILTINFUNCTION) Message::Check("[]");
if ((WQ+k)->Case.Function.NbrParameters) {
Message::Check("{");
for (j = 0; j < (WQ+k)->Case.Function.NbrParameters; j++) {
if (j) Message::Check(",");
Message::Check(" %.10g", (WQ+k)->Case.Function.Para[j]);
} Message::Check(" }");
} }
break; break;
case WQ_CONSTANT : case WQ_CONSTANT: Message::Check(" %.8g", (WQ + k)->Case.Constant); break;
Message::Check(" %.8g", (WQ+k)->Case.Constant);
break;
case WQ_MHTRANSFORM : case WQ_MHTRANSFORM:
Message::Check(" MHTransform[ "); Message::Check(" MHTransform[ ");
Message::Check("%s", Get_ExpressionName((WQ+k)->Case.MHTransform.Index)); Message::Check("%s",
Get_ExpressionName((WQ + k)->Case.MHTransform.Index));
Message::Check("["); Message::Check("[");
for(int i = 0; i < List_Nbr((WQ+k)->Case.MHTransform.WholeQuantity_L); i++ for(int i = 0; i < List_Nbr((WQ + k)->Case.MHTransform.WholeQuantity_L);
){ i++) {
List_T *wq; List_Read((WQ+k)->Case.MHTransform.WholeQuantity_L, i, &wq); List_T *wq;
List_Read((WQ + k)->Case.MHTransform.WholeQuantity_L, i, &wq);
Print_WholeQuantity(wq, DQ_L); Print_WholeQuantity(wq, DQ_L);
} }
Message::Check(" ] ]{ %d }", (WQ+k)->Case.MHTransform.NbrPoints); Message::Check(" ] ]{ %d }", (WQ + k)->Case.MHTransform.NbrPoints);
break; break;
case WQ_MHBILINEAR : case WQ_MHBILINEAR:
Message::Check(" MHBilinear[ "); Message::Check(" MHBilinear[ ");
Message::Check("%s", Message::Check("%s", Get_ExpressionName((WQ + k)->Case.MHBilinear.Index));
Get_ExpressionName((WQ+k)->Case.MHBilinear.Index)); Message::Check("]{ %d, %d}", (WQ + k)->Case.MHBilinear.NbrPoints,
Message::Check("]{ %d, %d}", (WQ+k)->Case.MHBilinear.NbrPoints, (WQ+k)->Ca (WQ + k)->Case.MHBilinear.FreqOffSet);
se.MHBilinear.FreqOffSet);
break; break;
case WQ_TIMEDERIVATIVE : case WQ_TIMEDERIVATIVE:
Message::Check(" Dt["); Message::Check(" Dt[");
Print_WholeQuantity((WQ+k)->Case.TimeDerivative.WholeQuantity, DQ_L); Print_WholeQuantity((WQ + k)->Case.TimeDerivative.WholeQuantity, DQ_L);
Message::Check(" ]"); Message::Check(" ]");
break; break;
case WQ_TRACE : case WQ_TRACE:
Message::Check(" Trace["); Message::Check(" Trace[");
Print_WholeQuantity((WQ+k)->Case.Trace.WholeQuantity, DQ_L); Print_WholeQuantity((WQ + k)->Case.Trace.WholeQuantity, DQ_L);
Message::Check(" , %s ]", ((struct Group*) Message::Check(
List_Pointer(Problem_S.Group, " , %s ]", ((struct Group *)List_Pointer(Problem_S.Group,
(WQ+k)->Case.Trace.InIndex))->Name (WQ + k)->Case.Trace.InIndex))
); ->Name);
break; break;
case WQ_CAST : case WQ_CAST:
if(!(WQ+k)->Case.Cast.NbrHar) if(!(WQ + k)->Case.Cast.NbrHar)
Message::Check(" <%s>[", Message::Check(" <%s>[",
((struct FunctionSpace *) ((struct FunctionSpace *)List_Pointer(
List_Pointer(Problem_S.FunctionSpace, Problem_S.FunctionSpace,
(WQ+k)->Case.Cast.FunctionSpaceIndexForType (WQ + k)->Case.Cast.FunctionSpaceIndexForType))
))->Name); ->Name);
else else
Message::Check(" <Real>["); Message::Check(" <Real>[");
Print_WholeQuantity((WQ+k)->Case.Cast.WholeQuantity, DQ_L); Print_WholeQuantity((WQ + k)->Case.Cast.WholeQuantity, DQ_L);
Message::Check(" ]"); Message::Check(" ]");
break; break;
case WQ_CURRENTVALUE : case WQ_CURRENTVALUE:
Message::Check(" $%s", Message::Check(
Get_StringForPointer(Current_Value, " $%s", Get_StringForPointer(
(void *)((WQ+k)->Case.CurrentValue.Val Current_Value, (void *)((WQ + k)->Case.CurrentValue.Value)));
ue)));
break; break;
case WQ_ARGUMENT : case WQ_ARGUMENT:
Message::Check(" $%d", (WQ+k)->Case.Argument.Index); Message::Check(" $%d", (WQ + k)->Case.Argument.Index);
break; break;
case WQ_TEST : case WQ_TEST:
Message::Check(" ?"); Message::Check(" ?");
Print_WholeQuantity((WQ+k)->Case.Test.WholeQuantity_True , DQ_L); Print_WholeQuantity((WQ + k)->Case.Test.WholeQuantity_True, DQ_L);
Message::Check(" :"); Message::Check(" :");
Print_WholeQuantity((WQ+k)->Case.Test.WholeQuantity_False, DQ_L); Print_WholeQuantity((WQ + k)->Case.Test.WholeQuantity_False, DQ_L);
break; break;
case WQ_SAVEVALUE : case WQ_SAVEVALUE:
Message::Check(" ->#%d", (WQ+k)->Case.SaveValue.Index + 1); Message::Check(" ->#%d", (WQ + k)->Case.SaveValue.Index + 1);
break; break;
case WQ_VALUESAVED : case WQ_VALUESAVED:
Message::Check(" #%d", (WQ+k)->Case.ValueSaved.Index + 1); Message::Check(" #%d", (WQ + k)->Case.ValueSaved.Index + 1);
break; break;
case WQ_SAVENAMEDVALUE : case WQ_SAVENAMEDVALUE:
Message::Check(" ->$%s", (WQ+k)->Case.NamedValue.Name); Message::Check(" ->$%s", (WQ + k)->Case.NamedValue.Name);
break ; break;
case WQ_NAMEDVALUESAVED :
Message::Check(" $%s", (WQ+k)->Case.NamedValue.Name);
break ;
case WQ_SHOWVALUE : case WQ_NAMEDVALUESAVED:
Message::Check(" ->show with prefix #%d", (WQ+k)->Case.ShowValue.Index + 1 Message::Check(" $%s", (WQ + k)->Case.NamedValue.Name);
);
break; break;
default : case WQ_SHOWVALUE:
Message::Check(" ???"); Message::Check(" ->show with prefix #%d",
(WQ + k)->Case.ShowValue.Index + 1);
break; break;
default: Message::Check(" ???"); break;
} }
} }
} }
void Print_Group() void Print_Group()
{ {
int i, Nbr, j; int i, Nbr, j;
struct Group *GR; struct Group *GR;
Nbr = List_Nbr(Problem_S.Group); Nbr = List_Nbr(Problem_S.Group);
Message::Check("Group { /* nbr = %d */\n", Nbr); Message::Check("Group { /* nbr = %d */\n", Nbr);
Message::Check("\n"); Message::Check("\n");
for (i = 0; i < Nbr; i++) { for(i = 0; i < Nbr; i++) {
GR = (struct Group *)List_Pointer(Problem_S.Group, i);
GR = (struct Group*)List_Pointer(Problem_S.Group, i); Message::Check(
" %s = %s [", GR->Name,
Get_StringForDefine(FunctionForGroup_Type, GR->FunctionType));
Message::Check(" %s = %s [", GR->Name, if(GR->InitialList != NULL) {
Get_StringForDefine(FunctionForGroup_Type, GR->FunctionType))
;
if (GR->InitialList != NULL) {
Message::Check(" {"); Message::Check(" {");
for (j = 0; j < List_Nbr(GR->InitialList); j++) for(j = 0; j < List_Nbr(GR->InitialList); j++)
Message::Check(" %d", *((int *)List_Pointer(GR->InitialList, j)) ); Message::Check(" %d", *((int *)List_Pointer(GR->InitialList, j)));
Message::Check(" }"); Message::Check(" }");
} }
else Message::Check(" All"); else
Message::Check(" All");
if (GR->InitialSuppList != NULL) { if(GR->InitialSuppList != NULL) {
if (GR->SuppListType != SUPPLIST_INSUPPORT) { if(GR->SuppListType != SUPPLIST_INSUPPORT) {
Message::Check(", %s {", Message::Check(", %s {", Get_StringForDefine(FunctionForGroup_SuppList,
Get_StringForDefine(FunctionForGroup_SuppList, GR->SuppLi GR->SuppListType));
stType)); for(j = 0; j < List_Nbr(GR->InitialSuppList); j++)
for (j = 0; j < List_Nbr(GR->InitialSuppList); j++) Message::Check(" %d", *((int *)List_Pointer(GR->InitialSuppList, j)));
Message::Check(" %d", *((int *)List_Pointer(GR->InitialSuppList, j)) ); Message::Check(" }");
Message::Check(" }");
} }
else { else {
Message::Check(", %s", Message::Check(", %s", Get_StringForDefine(FunctionForGroup_SuppList,
Get_StringForDefine(FunctionForGroup_SuppList, GR->SuppLi GR->SuppListType));
stType)); Message::Check(
Message::Check(" %s", " %s",
((struct Group *) ((struct Group *)List_Pointer(
List_Pointer(Problem_S.Group, Problem_S.Group, *((int *)List_Pointer(GR->InitialSuppList, 0))))
*((int *)List_Pointer(GR->InitialSuppList, ->Name);
0))))
->Name);
} }
} }
if (GR->InitialSuppList2 != NULL) { if(GR->InitialSuppList2 != NULL) {
if (GR->SuppListType2 != SUPPLIST_INSUPPORT) { if(GR->SuppListType2 != SUPPLIST_INSUPPORT) {
Message::Check(", %s {", Message::Check(", %s {", Get_StringForDefine(FunctionForGroup_SuppList,
Get_StringForDefine(FunctionForGroup_SuppList, GR->SuppLi GR->SuppListType2));
stType2)); for(j = 0; j < List_Nbr(GR->InitialSuppList2); j++)
for (j = 0; j < List_Nbr(GR->InitialSuppList2); j++) Message::Check(" %d",
Message::Check(" %d", *((int *)List_Pointer(GR->InitialSuppList2, j)) ) *((int *)List_Pointer(GR->InitialSuppList2, j)));
; Message::Check(" }");
Message::Check(" }");
} }
else { else {
Message::Check(", %s", Message::Check(", %s", Get_StringForDefine(FunctionForGroup_SuppList,
Get_StringForDefine(FunctionForGroup_SuppList, GR->SuppLi GR->SuppListType2));
stType2)); Message::Check(
Message::Check(" %s", " %s",
((struct Group *) ((struct Group *)List_Pointer(
List_Pointer(Problem_S.Group, Problem_S.Group, *((int *)List_Pointer(GR->InitialSuppList2, 0))))
*((int *)List_Pointer(GR->InitialSuppList2, ->Name);
0))))
->Name);
} }
} }
Message::Check(" ]"); Message::Check(" ]");
if (GR->Type == MOVINGBAND2D) { if(GR->Type == MOVINGBAND2D) {
Message::Check(" = MovingBand2D [ {"); Message::Check(" = MovingBand2D [ {");
for (j = 0; j < List_Nbr(GR->MovingBand2D->InitialList1); j++) for(j = 0; j < List_Nbr(GR->MovingBand2D->InitialList1); j++)
Message::Check(" %d", *((int *)List_Pointer(GR->MovingBand2D->InitialList Message::Check(
1, j)) ); " %d", *((int *)List_Pointer(GR->MovingBand2D->InitialList1, j)));
Message::Check(" } , {"); Message::Check(" } , {");
for (j = 0; j < List_Nbr(GR->MovingBand2D->InitialList2); j++) for(j = 0; j < List_Nbr(GR->MovingBand2D->InitialList2); j++)
Message::Check(" %d", *((int *)List_Pointer(GR->MovingBand2D->InitialList Message::Check(
2, j)) ); " %d", *((int *)List_Pointer(GR->MovingBand2D->InitialList2, j)));
Message::Check(" } ]"); Message::Check(" } ]");
} }
Message::Check("; /* Num %d */\n", i); Message::Check("; /* Num %d */\n", i);
} }
Message::Check("\n"); Message::Check("\n");
Message::Check("}\n"); Message::Check("}\n");
} }
void Print_Expression() void Print_Expression()
{ {
int i, Nbr, j; int i, Nbr, j;
struct Expression *EX; struct Expression *EX;
struct ExpressionPerRegion *EXPR; struct ExpressionPerRegion *EXPR;
Nbr = List_Nbr(Problem_S.Expression); Nbr = List_Nbr(Problem_S.Expression);
Message::Check("Function { /* nbr = %d */\n", Nbr); Message::Check("Function { /* nbr = %d */\n", Nbr);
Message::Check("\n"); Message::Check("\n");
for (i = 0; i < Nbr; i++) { for(i = 0; i < Nbr; i++) {
EX = (struct Expression*)List_Pointer(Problem_S.Expression, i); EX = (struct Expression *)List_Pointer(Problem_S.Expression, i);
switch (EX->Type) { switch(EX->Type) {
case CONSTANT : case CONSTANT:
Message::Check(" %s[] = %.10g;\n", EX->Name, EX->Case.Constant); Message::Check(" %s[] = %.10g;\n", EX->Name, EX->Case.Constant);
break; break;
case WHOLEQUANTITY : case WHOLEQUANTITY:
Message::Check(" %s[] = ", EX->Name); Message::Check(" %s[] = ", EX->Name);
Print_WholeQuantity(EX->Case.WholeQuantity, NULL); Print_WholeQuantity(EX->Case.WholeQuantity, NULL);
Message::Check(";\n"); Message::Check(";\n");
break; break;
case PIECEWISEFUNCTION : case PIECEWISEFUNCTION:
for (j = 0; for(j = 0; j < List_Nbr(EX->Case.PieceWiseFunction.ExpressionPerRegion);
j < List_Nbr(EX->Case.PieceWiseFunction.ExpressionPerRegion); j++) { j++) {
EXPR = (struct ExpressionPerRegion*) EXPR = (struct ExpressionPerRegion *)List_Pointer(
List_Pointer(EX->Case.PieceWiseFunction.ExpressionPerRegion, j); EX->Case.PieceWiseFunction.ExpressionPerRegion, j);
Message::Check(" %s[%d] = Exp[%s];\n", Message::Check(" %s[%d] = Exp[%s];\n", EX->Name, EXPR->RegionIndex,
EX->Name, EXPR->RegionIndex,
Get_ExpressionName(EXPR->ExpressionIndex)); Get_ExpressionName(EXPR->ExpressionIndex));
} }
if (EX->Case.PieceWiseFunction.ExpressionIndex_Default >= 0) { if(EX->Case.PieceWiseFunction.ExpressionIndex_Default >= 0) {
Message:: Message::Check(" %s[All] = Exp[%s];\n", EX->Name,
Check(" %s[All] = Exp[%s];\n", Get_ExpressionName(
EX->Name, EX->Case.PieceWiseFunction.ExpressionIndex_Default));
Get_ExpressionName(EX->Case.PieceWiseFunction.ExpressionIndex_De }
fault)); if(!List_Nbr(EX->Case.PieceWiseFunction.ExpressionPerRegion) &&
} EX->Case.PieceWiseFunction.ExpressionIndex_Default < 0)
if (!List_Nbr(EX->Case.PieceWiseFunction.ExpressionPerRegion) && Message::Check(" DefineFunction[ %s ];\n", EX->Name);
EX->Case.PieceWiseFunction.ExpressionIndex_Default < 0)
Message::Check(" DefineFunction[ %s ];\n", EX->Name);
break; break;
case PIECEWISEFUNCTION2 : case PIECEWISEFUNCTION2:
for (j = 0; for(j = 0; j < List_Nbr(EX->Case.PieceWiseFunction2.ExpressionPerRegion);
j < List_Nbr(EX->Case.PieceWiseFunction2.ExpressionPerRegion); j++) { j++) {
struct ExpressionPerRegion2 *EXPR; struct ExpressionPerRegion2 *EXPR;
EXPR = (struct ExpressionPerRegion2*) EXPR = (struct ExpressionPerRegion2 *)List_Pointer(
List_Pointer(EX->Case.PieceWiseFunction2.ExpressionPerRegion, j); EX->Case.PieceWiseFunction2.ExpressionPerRegion, j);
Message::Check(" %s[%d,%d] = Exp[%s];\n", Message::Check(" %s[%d,%d] = Exp[%s];\n", EX->Name,
EX->Name, EXPR->RegionIndex[0], EXPR->RegionIndex[1], EXPR->RegionIndex[0], EXPR->RegionIndex[1],
Get_ExpressionName(EXPR->ExpressionIndex)); Get_ExpressionName(EXPR->ExpressionIndex));
} }
if (EX->Case.PieceWiseFunction2.ExpressionIndex_Default >= 0) { if(EX->Case.PieceWiseFunction2.ExpressionIndex_Default >= 0) {
Message:: Message::Check(" %s[All,All] = Exp[%s];\n", EX->Name,
Check(" %s[All,All] = Exp[%s];\n", Get_ExpressionName(
EX->Name, EX->Case.PieceWiseFunction.ExpressionIndex_Default));
Get_ExpressionName(EX->Case.PieceWiseFunction.ExpressionIndex_De }
fault)); if(!List_Nbr(EX->Case.PieceWiseFunction2.ExpressionPerRegion) &&
} EX->Case.PieceWiseFunction2.ExpressionIndex_Default < 0)
if (!List_Nbr(EX->Case.PieceWiseFunction2.ExpressionPerRegion) && Message::Check(" DefineFunction[ %s ];\n", EX->Name);
EX->Case.PieceWiseFunction2.ExpressionIndex_Default < 0)
Message::Check(" DefineFunction[ %s ];\n", EX->Name);
break; break;
case UNDEFINED_EXP : case UNDEFINED_EXP:
Message::Check(" DefineFunction[ %s ];\n", EX->Name); Message::Check(" DefineFunction[ %s ];\n", EX->Name);
break; break;
default : default: Message::Check("???;\n"); break;
Message::Check("???;\n");
break;
} }
} }
Message::Check("\n"); Message::Check("\n");
Message::Check("}\n"); Message::Check("}\n");
} }
void Print_Network(struct MultiConstraintPerRegion *MCPR_P) void Print_Network(struct MultiConstraintPerRegion *MCPR_P)
{ {
int i, j; int i, j;
struct ConstraintActive *CA; struct ConstraintActive *CA;
CA = MCPR_P->Active; CA = MCPR_P->Active;
Message::Check("NbrNode = %d, NbrBranch = %d\n", Message::Check("NbrNode = %d, NbrBranch = %d\n", CA->Case.Network.NbrNode,
CA->Case.Network.NbrNode, CA->Case.Network.NbrBranch); CA->Case.Network.NbrBranch);
Message::Check("\n"); Message::Check("\n");
Message::Check("MatNode (NbrNode x NbrBranch):\n"); Message::Check("MatNode (NbrNode x NbrBranch):\n");
for (i = 0; i < CA->Case.Network.NbrNode; i++) { for(i = 0; i < CA->Case.Network.NbrNode; i++) {
for (j = 0; j < CA->Case.Network.NbrBranch; j++) { for(j = 0; j < CA->Case.Network.NbrBranch; j++) {
Message::Check("%2d ", CA->Case.Network.MatNode[i][j]); Message::Check("%2d ", CA->Case.Network.MatNode[i][j]);
} }
Message::Check("\n"); Message::Check("\n");
} }
Message::Check("\n"); Message::Check("\n");
Message::Check("MatLoop (NbrLoop x NbrBranch):\n"); Message::Check("MatLoop (NbrLoop x NbrBranch):\n");
for (i = 0; i < CA->Case.Network.NbrLoop; i++) { for(i = 0; i < CA->Case.Network.NbrLoop; i++) {
for (j = 0; j < CA->Case.Network.NbrBranch; j++) { for(j = 0; j < CA->Case.Network.NbrBranch; j++) {
Message::Check("%2d ", CA->Case.Network.MatLoop[i][j]); Message::Check("%2d ", CA->Case.Network.MatLoop[i][j]);
} }
Message::Check("\n"); Message::Check("\n");
} }
} }
void Print_Constraint() void Print_Constraint()
{ {
int i, Nbr, j, Nbrj, k, Nbrk, index, index2; int i, Nbr, j, Nbrj, k, Nbrk, index, index2;
struct Constraint *CO; struct Constraint *CO;
struct ConstraintPerRegion *CPR; struct ConstraintPerRegion *CPR;
struct MultiConstraintPerRegion MCPR_S; struct MultiConstraintPerRegion MCPR_S;
Nbr = List_Nbr(Problem_S.Constraint); Nbr = List_Nbr(Problem_S.Constraint);
Message::Check("Constraint { /* nbr = %d */\n", Nbr); Message::Check("Constraint { /* nbr = %d */\n", Nbr);
Message::Check("\n"); Message::Check("\n");
for (i = 0; i < Nbr; i++) { for(i = 0; i < Nbr; i++) {
Message::Check(" /* Num : %d */\n", i); Message::Check(" /* Num : %d */\n", i);
CO = (struct Constraint*)List_Pointer(Problem_S.Constraint, i); CO = (struct Constraint *)List_Pointer(Problem_S.Constraint, i);
Message::Check(" { Name %s; Type %s;\n", CO->Name, Message::Check(" { Name %s; Type %s;\n", CO->Name,
Get_StringForDefine(Constraint_Type, CO->Type)); Get_StringForDefine(Constraint_Type, CO->Type));
if (CO->Type == NETWORK){ if(CO->Type == NETWORK) {
Nbrk = List_Nbr(CO->MultiConstraintPerRegion); Nbrk = List_Nbr(CO->MultiConstraintPerRegion);
for (k = 0; k < Nbrk; k++) { for(k = 0; k < Nbrk; k++) {
List_Read(CO->MultiConstraintPerRegion, k, &MCPR_S); List_Read(CO->MultiConstraintPerRegion, k, &MCPR_S);
Message::Check(" Case %s {\n", MCPR_S.Name); Message::Check(" Case %s {\n", MCPR_S.Name);
Nbrj = List_Nbr(MCPR_S.ConstraintPerRegion); Nbrj = List_Nbr(MCPR_S.ConstraintPerRegion);
for (j = 0; j < Nbrj; j++) { for(j = 0; j < Nbrj; j++) {
CPR = (struct ConstraintPerRegion*) CPR = (struct ConstraintPerRegion *)List_Pointer(
List_Pointer(MCPR_S.ConstraintPerRegion, j); MCPR_S.ConstraintPerRegion, j);
Message::Check(" { Region %s;", Message::Check(
((struct Group *) " { Region %s;",
List_Pointer(Problem_S.Group, CPR->RegionIndex))->Name ((struct Group *)List_Pointer(Problem_S.Group, CPR->RegionIndex))
); ->Name);
Message::Check(" Branch { %d, %d };", Message::Check(" Branch { %d, %d };", CPR->Case.Network.Node1,
CPR->Case.Network.Node1, CPR->Case.Network.Node2); CPR->Case.Network.Node2);
Message::Check(" }\n"); Message::Check(" }\n");
} }
#if defined(HAVE_KERNEL) #if defined(HAVE_KERNEL)
if (!MCPR_S.Active) if(!MCPR_S.Active)
MCPR_S.Active = Generate_Network(MCPR_S.Name, MCPR_S.ConstraintPerRegio MCPR_S.Active =
n); Generate_Network(MCPR_S.Name, MCPR_S.ConstraintPerRegion);
#endif #endif
Print_Network(&MCPR_S); Print_Network(&MCPR_S);
} }
} }
else { else {
Message::Check(" Case {\n"); Message::Check(" Case {\n");
Nbrj = List_Nbr(CO->ConstraintPerRegion); Nbrj = List_Nbr(CO->ConstraintPerRegion);
for (j = 0; j < Nbrj; j++) { for(j = 0; j < Nbrj; j++) {
CPR = (struct ConstraintPerRegion*)List_Pointer(CO->ConstraintPerRegion, CPR = (struct ConstraintPerRegion *)List_Pointer(
j); CO->ConstraintPerRegion, j);
Message::Check(" { Region %s;", Message::Check(
((struct Group *) " { Region %s;",
List_Pointer(Problem_S.Group, CPR->RegionIndex))->Name); ((struct Group *)List_Pointer(Problem_S.Group, CPR->RegionIndex))
if (CPR->SubRegionIndex >= 0) ->Name);
Message::Check(" SubRegion %s;", if(CPR->SubRegionIndex >= 0)
((struct Group *) Message::Check(
List_Pointer(Problem_S.Group, CPR->SubRegionIndex))->N " SubRegion %s;",
ame); ((struct Group *)List_Pointer(Problem_S.Group, CPR->SubRegionIndex))
if (CPR->Type != CO->Type) ->Name);
Message::Check(" Type %s;", Get_StringForDefine(Constraint_Type, CPR->T if(CPR->Type != CO->Type)
ype)); Message::Check(" Type %s;",
Get_StringForDefine(Constraint_Type, CPR->Type));
switch (CPR->Type) {
case ASSIGN : switch(CPR->Type) {
case INIT : case ASSIGN:
Message::Check(" Value Exp[%s];", case INIT:
Message::Check(" Value Exp[%s];",
Get_ExpressionName(CPR->Case.Fixed.ExpressionIndex)); Get_ExpressionName(CPR->Case.Fixed.ExpressionIndex));
break; break;
case ASSIGNFROMRESOLUTION : case ASSIGNFROMRESOLUTION:
case INITFROMRESOLUTION : case INITFROMRESOLUTION:
Message::Check(" NameOfResolution %s;", CPR->Case.Solve.ResolutionName) Message::Check(" NameOfResolution %s;",
; CPR->Case.Solve.ResolutionName);
break; break;
case CST_LINK : case CST_LINK:
case CST_LINKCPLX : case CST_LINKCPLX:
if ( (index = CPR->Case.Link.RegionRefIndex) >= 0) if((index = CPR->Case.Link.RegionRefIndex) >= 0)
Message::Check(" RegionRef %s;", Message::Check(
((struct Group *) " RegionRef %s;",
List_Pointer(Problem_S.Group, index))->Name); ((struct Group *)List_Pointer(Problem_S.Group, index))->Name);
if ( (index = CPR->Case.Link.SubRegionRefIndex) >= 0) if((index = CPR->Case.Link.SubRegionRefIndex) >= 0)
Message::Check(" SubRegionRef %s;", Message::Check(
((struct Group *) " SubRegionRef %s;",
List_Pointer(Problem_S.Group, index))->Name); ((struct Group *)List_Pointer(Problem_S.Group, index))->Name);
if ( (index = CPR->Case.Link.FilterIndex) >= 0) { if((index = CPR->Case.Link.FilterIndex) >= 0) {
if ( (index2 = CPR->Case.Link.FilterIndex2) < 0) if((index2 = CPR->Case.Link.FilterIndex2) < 0)
Message::Check(" Filter Exp[%s];", Get_ExpressionName(index)); Message::Check(" Filter Exp[%s];", Get_ExpressionName(index));
else else
Message::Check(" Filter [ Exp[%s], Exp[%s] ];", Message::Check(" Filter [ Exp[%s], Exp[%s] ];",
Get_ExpressionName(index), Get_ExpressionName(index Get_ExpressionName(index),
2)); Get_ExpressionName(index2));
} }
if ( (index = CPR->Case.Link.FunctionIndex) >= 0) { if((index = CPR->Case.Link.FunctionIndex) >= 0) {
if ( (index2 = CPR->Case.Link.FunctionIndex2) < 0) if((index2 = CPR->Case.Link.FunctionIndex2) < 0)
Message::Check(" Function Exp[%s];", Get_ExpressionName(index)); Message::Check(" Function Exp[%s];", Get_ExpressionName(index));
else else
Message::Check(" Function [ Exp[%s], Exp[%s] ];", Message::Check(" Function [ Exp[%s], Exp[%s] ];",
Get_ExpressionName(index), Get_ExpressionName(index Get_ExpressionName(index),
2)); Get_ExpressionName(index2));
} }
if ( (index = CPR->Case.Link.CoefIndex) >= 0) { if((index = CPR->Case.Link.CoefIndex) >= 0) {
if ( (index2 = CPR->Case.Link.CoefIndex2) < 0) if((index2 = CPR->Case.Link.CoefIndex2) < 0)
Message::Check(" Coefficient Exp[%s];", Get_ExpressionName(index)) Message::Check(" Coefficient Exp[%s];",
; Get_ExpressionName(index));
else else
Message::Check(" Coefficient [ Exp[%s], Exp[%s] ];", Message::Check(" Coefficient [ Exp[%s], Exp[%s] ];",
Get_ExpressionName(index), Get_ExpressionName(index Get_ExpressionName(index),
2)); Get_ExpressionName(index2));
} }
Message::Check(" ToleranceFactor %g;", Message::Check(" ToleranceFactor %g;",
CPR->Case.Link.ToleranceFactor); CPR->Case.Link.ToleranceFactor);
break; break;
} }
if (CPR->TimeFunctionIndex >= 0) if(CPR->TimeFunctionIndex >= 0)
Message::Check(" TimeFunction Exp[%s];", Message::Check(" TimeFunction Exp[%s];",
Get_ExpressionName(CPR->TimeFunctionIndex)); Get_ExpressionName(CPR->TimeFunctionIndex));
Message::Check(" }\n"); Message::Check(" }\n");
} }
} }
Message::Check(" }\n"); Message::Check(" }\n");
Message::Check(" }\n"); Message::Check(" }\n");
} }
Message::Check("\n"); Message::Check("\n");
Message::Check("}\n"); Message::Check("}\n");
} }
void Print_Jacobian() void Print_Jacobian()
{ {
int i, Nbr, j, Nbrj, k; int i, Nbr, j, Nbrj, k;
struct JacobianMethod *JM; struct JacobianMethod *JM;
struct JacobianCase *JC; struct JacobianCase *JC;
Nbr = List_Nbr(Problem_S.JacobianMethod); Nbr = List_Nbr(Problem_S.JacobianMethod);
Message::Check("Jacobian { /* nbr = %d */\n", Nbr); Message::Check("Jacobian { /* nbr = %d */\n", Nbr);
Message::Check("\n"); Message::Check("\n");
for (i = 0; i < Nbr; i++) { for(i = 0; i < Nbr; i++) {
Message::Check(" /* Num : %d */\n", i); Message::Check(" /* Num : %d */\n", i);
JM = (struct JacobianMethod*)List_Pointer(Problem_S.JacobianMethod, i); JM = (struct JacobianMethod *)List_Pointer(Problem_S.JacobianMethod, i);
Message::Check(" { Name %s;\n", JM->Name); Message::Check(" { Name %s;\n", JM->Name);
Message::Check(" Case {\n"); Message::Check(" Case {\n");
Nbrj = List_Nbr(JM->JacobianCase); Nbrj = List_Nbr(JM->JacobianCase);
for (j = 0; j < Nbrj; j++) { for(j = 0; j < Nbrj; j++) {
JC = (struct JacobianCase*)List_Pointer(JM->JacobianCase, j); JC = (struct JacobianCase *)List_Pointer(JM->JacobianCase, j);
Message::Check(" { Region "); Message::Check(" { Region ");
if (JC->RegionIndex >= 0) if(JC->RegionIndex >= 0)
Message::Check("%s;", ((struct Group *) Message::Check("%s;", ((struct Group *)List_Pointer(Problem_S.Group,
List_Pointer(Problem_S.Group, JC->RegionIndex))-> JC->RegionIndex))
Name); ->Name);
else Message::Check("All;"); else
Message::Check("All;");
Message::Check(" Jacobian %s", Message::Check(" Jacobian %s",
Get_StringForDefine1Nbr(Jacobian_Type, JC->TypeJacobian)); Get_StringForDefine1Nbr(Jacobian_Type, JC->TypeJacobian));
if (JC->NbrParameters) { if(JC->NbrParameters) {
for (k = 0; k < JC->NbrParameters; k++) { for(k = 0; k < JC->NbrParameters; k++) {
if (k) Message::Check(","); else Message::Check(" {"); if(k)
Message::Check(" %.10g", JC->Para[k]); Message::Check(",");
} Message::Check(" }"); else
Message::Check(" {");
Message::Check(" %.10g", JC->Para[k]);
}
Message::Check(" }");
} }
Message::Check(";"); Message::Check(";");
if (JC->CoefficientIndex >= 0) if(JC->CoefficientIndex >= 0)
Message::Check(" Coefficient Exp[%s];", Message::Check(" Coefficient Exp[%s];",
Get_ExpressionName(JC->CoefficientIndex)); Get_ExpressionName(JC->CoefficientIndex));
Message::Check(" }\n"); Message::Check(" }\n");
} }
Message::Check(" }\n"); Message::Check(" }\n");
Message::Check(" }\n"); Message::Check(" }\n");
} }
Message::Check("\n"); Message::Check("\n");
Message::Check("}\n"); Message::Check("}\n");
} }
void Print_Integration() void Print_Integration()
{ {
int i, j, k, Nbrm, Nbrc, Nbrq; int i, j, k, Nbrm, Nbrc, Nbrq;
struct IntegrationMethod *IM; struct IntegrationMethod *IM;
struct IntegrationCase *IC; struct IntegrationCase *IC;
struct Quadrature *Q; struct Quadrature *Q;
Nbrm = List_Nbr(Problem_S.IntegrationMethod); Nbrm = List_Nbr(Problem_S.IntegrationMethod);
Message::Check("Integration { /* nbr = %d */\n", Nbrm); Message::Check("Integration { /* nbr = %d */\n", Nbrm);
Message::Check("\n"); Message::Check("\n");
for (i = 0; i < Nbrm; i++) { for(i = 0; i < Nbrm; i++) {
Message::Check(" /* Num : %d */\n", i); Message::Check(" /* Num : %d */\n", i);
IM = (struct IntegrationMethod*)List_Pointer(Problem_S.IntegrationMethod, i) IM =
; (struct IntegrationMethod *)List_Pointer(Problem_S.IntegrationMethod, i);
Message::Check(" { Name %s; \n", IM->Name); Message::Check(" { Name %s; \n", IM->Name);
if(IM->CriterionIndex>=0) if(IM->CriterionIndex >= 0)
Message::Check(" Criterion Exp[%s]; \n", Message::Check(" Criterion Exp[%s]; \n",
Get_ExpressionName(IM->CriterionIndex)); Get_ExpressionName(IM->CriterionIndex));
Nbrc = List_Nbr(IM->IntegrationCase); Nbrc = List_Nbr(IM->IntegrationCase);
Message::Check(" Case {"); Message::Check(" Case {");
Message::Check(" /* nbr = %d */\n", Nbrc); Message::Check(" /* nbr = %d */\n", Nbrc);
for (j = 0; j < Nbrc; j++) { for(j = 0; j < Nbrc; j++) {
IC = (struct IntegrationCase*)List_Pointer(IM->IntegrationCase, j); IC = (struct IntegrationCase *)List_Pointer(IM->IntegrationCase, j);
Message::Check(" { Type %s;", Message::Check(" { Type %s;",
Get_StringForDefine(Integration_Type, IC->Type)); Get_StringForDefine(Integration_Type, IC->Type));
switch (IC->Type) { switch(IC->Type) {
case GAUSS : case GAUSS:
Message::Check("\n"); Message::Check("\n");
Message::Check(" Case {\n"); Message::Check(" Case {\n");
Nbrq = List_Nbr(IC->Case); Nbrq = List_Nbr(IC->Case);
for (k = 0; k < Nbrq; k++) { for(k = 0; k < Nbrq; k++) {
Q = (struct Quadrature*)List_Pointer(IC->Case, k); Q = (struct Quadrature *)List_Pointer(IC->Case, k);
Message::Check(" { GeoElement %s; NumberOfPoints %d; }\n", Message::Check(" { GeoElement %s; NumberOfPoints %d; }\n",
Get_StringForDefine(Element_Type, Q->ElementType), Get_StringForDefine(Element_Type, Q->ElementType),
Q->NumberOfPoints); Q->NumberOfPoints);
} }
Message::Check(" }\n"); Message::Check(" }\n");
Message::Check(" }\n"); break; Message::Check(" }\n");
break;
default : default: Message::Check(" }\n"); break;
Message::Check(" }\n"); break;
} }
} }
Message::Check(" }\n"); Message::Check(" }\n");
Message::Check(" }\n"); Message::Check(" }\n");
} }
Message::Check("\n"); Message::Check("\n");
Message::Check("}\n"); Message::Check("}\n");
} }
void Print_FunctionSpace() void Print_FunctionSpace()
{ {
struct FunctionSpace *FS; struct FunctionSpace *FS;
struct BasisFunction *BF; struct BasisFunction *BF;
struct SubSpace *SS; struct SubSpace *SS;
struct GlobalQuantity *GQ; struct GlobalQuantity *GQ;
struct ConstraintInFS *CO; struct ConstraintInFS *CO;
List_T *BF_L, *SS_L, *GQ_L, *CO_L; List_T *BF_L, *SS_L, *GQ_L, *CO_L;
int i0, i, Nbr0, Nbr, j, Nbrj; int i0, i, Nbr0, Nbr, j, Nbrj;
Nbr0 = List_Nbr(Problem_S.FunctionSpace); Nbr0 = List_Nbr(Problem_S.FunctionSpace);
Message::Check("FunctionSpace { /* nbr = %d */\n", Nbr0); Message::Check("FunctionSpace { /* nbr = %d */\n", Nbr0);
Message::Check("\n"); Message::Check("\n");
for (i0=0; i0<Nbr0; i0++) { for(i0 = 0; i0 < Nbr0; i0++) {
Message::Check(" /* Num : %d */\n", i0); Message::Check(" /* Num : %d */\n", i0);
FS = (struct FunctionSpace*)List_Pointer(Problem_S.FunctionSpace, i0); FS = (struct FunctionSpace *)List_Pointer(Problem_S.FunctionSpace, i0);
BF_L = FS->BasisFunction; SS_L = FS->SubSpace; BF_L = FS->BasisFunction;
GQ_L = FS->GlobalQuantity; CO_L = FS->Constraint; SS_L = FS->SubSpace;
GQ_L = FS->GlobalQuantity;
CO_L = FS->Constraint;
Message::Check(" { Name %s; Type %s;", Message::Check(" { Name %s; Type %s;", FS->Name,
FS->Name, Get_StringForDefine(Field_Type, FS->Type)); Get_StringForDefine(Field_Type, FS->Type));
Message::Check("\n"); Message::Check("\n");
Nbr = List_Nbr(BF_L); Nbr = List_Nbr(BF_L);
if (Nbr > 0) { if(Nbr > 0) {
Message::Check(" BasisFunction {\n"); Message::Check(" BasisFunction {\n");
BF = (struct BasisFunction*)List_Pointer(BF_L, 0); BF = (struct BasisFunction *)List_Pointer(BF_L, 0);
for (i=0; i<Nbr; i++) { for(i = 0; i < Nbr; i++) {
Message::Check(" /* GlobalNum : %d */\n", BF->Num); Message::Check(" /* GlobalNum : %d */\n", BF->Num);
Message::Check(" Name %s; NameOfCoef %s; Function %s;\n", Message::Check(" Name %s; NameOfCoef %s; Function %s;\n", BF->Name,
BF->Name, BF->NameOfCoef, BF->NameOfCoef,
Get_StringFor3Function3Nbr(BF_Function, BF->Function)); Get_StringFor3Function3Nbr(BF_Function, BF->Function));
if (BF->SubFunction) { if(BF->SubFunction) {
Message::Check(" SubFunction {"); Message::Check(" SubFunction {");
Nbrj = List_Nbr(BF->SubFunction); Nbrj = List_Nbr(BF->SubFunction);
for (j=0; j<Nbrj; j++) for(j = 0; j < Nbrj; j++)
Message::Check(" %s", Message::Check(" %s",
((struct Expression *) ((struct Expression *)List_Pointer(
List_Pointer(Problem_S.Expression, Problem_S.Expression,
*((int *)List_Pointer(BF->SubFunction, *((int *)List_Pointer(BF->SubFunction, j))))
j))))->Name); ->Name);
Message::Check(" };\n"); Message::Check(" };\n");
} }
if (BF->SubdFunction) { if(BF->SubdFunction) {
Message::Check(" SubdFunction {"); Message::Check(" SubdFunction {");
Nbrj = List_Nbr(BF->SubdFunction); Nbrj = List_Nbr(BF->SubdFunction);
for (j=0; j<Nbrj; j++) for(j = 0; j < Nbrj; j++)
Message::Check(" %s", Message::Check(" %s",
((struct Expression *) ((struct Expression *)List_Pointer(
List_Pointer(Problem_S.Expression, Problem_S.Expression,
*((int *)List_Pointer(BF->SubdFunction, *((int *)List_Pointer(BF->SubdFunction, j))))
j))))->Name); ->Name);
Message::Check(" };\n"); Message::Check(" };\n");
} }
Message::Check(" Support %s;",
(BF->SupportIndex >=0)?
((struct Group *)List_Pointer(Problem_S.Group, BF->Suppor
tIndex))
->Name : "?");
Message::Check(" Entity %s;\n",
(BF->EntityIndex >=0)?
((struct Group *)List_Pointer(Problem_S.Group, BF->Entity
Index))
->Name : "?");
BF += 1; Message::Check(
" Support %s;",
(BF->SupportIndex >= 0) ?
((struct Group *)List_Pointer(Problem_S.Group, BF->SupportIndex))
->Name :
"?");
Message::Check(" Entity %s;\n", (BF->EntityIndex >= 0) ?
((struct Group *)List_Pointer(
Problem_S.Group, BF->EntityIndex))
->Name :
"?");
BF += 1;
} }
Message::Check(" }\n"); Message::Check(" }\n");
} }
BF = (Nbr>0)? (struct BasisFunction*)List_Pointer(BF_L, 0) : NULL; BF = (Nbr > 0) ? (struct BasisFunction *)List_Pointer(BF_L, 0) : NULL;
Nbr = List_Nbr(SS_L); Nbr = List_Nbr(SS_L);
if (Nbr > 0) { if(Nbr > 0) {
Message::Check(" SubSpace {\n"); Message::Check(" SubSpace {\n");
SS = (struct SubSpace*)List_Pointer(SS_L, 0); SS = (struct SubSpace *)List_Pointer(SS_L, 0);
for (i=0; i<Nbr; i++) { for(i = 0; i < Nbr; i++) {
Message::Check(" Name %s; NameOfBasisFunction {", SS->Name); Message::Check(" Name %s; NameOfBasisFunction {", SS->Name);
Nbrj = List_Nbr(SS->BasisFunction); Nbrj = List_Nbr(SS->BasisFunction);
for (j=0; j<Nbrj; j++) for(j = 0; j < Nbrj; j++)
Message::Check(" %s /* n%d */", Message::Check(" %s /* n%d */",
((struct BasisFunction *) ((struct BasisFunction *)List_Pointer(
List_Pointer(BF_L, *((int *)List_Pointer(SS->BasisFunc BF_L, *((int *)List_Pointer(SS->BasisFunction, j))))
tion, j)))) ->Name,
->Name, *((int *)List_Pointer(SS->BasisFunction, j))); *((int *)List_Pointer(SS->BasisFunction, j)));
Message::Check(" };\n"); Message::Check(" };\n");
SS += 1; SS += 1;
} }
Message::Check(" }\n"); Message::Check(" }\n");
} }
Nbr = List_Nbr(GQ_L); Nbr = List_Nbr(GQ_L);
if (Nbr > 0) { if(Nbr > 0) {
Message::Check(" GlobalQuantity {\n"); Message::Check(" GlobalQuantity {\n");
GQ = (struct GlobalQuantity*)List_Pointer(GQ_L, 0); GQ = (struct GlobalQuantity *)List_Pointer(GQ_L, 0);
for (i=0; i<Nbr; i++) { for(i = 0; i < Nbr; i++) {
Message::Check(" /* GlobalNum : %d */\n", GQ->Num); Message::Check(" /* GlobalNum : %d */\n", GQ->Num);
Message::Check(" Name %s; Type %s;", Message::Check(" Name %s; Type %s;", GQ->Name,
GQ->Name,
Get_StringForDefine(GlobalQuantity_Type, GQ->Type)); Get_StringForDefine(GlobalQuantity_Type, GQ->Type));
Message::Check(" NameOfCoef %s;\n", Message::Check(
((struct BasisFunction *) " NameOfCoef %s;\n",
List_Pointer(BF_L, GQ->ReferenceIndex))->NameOfCoef); ((struct BasisFunction *)List_Pointer(BF_L, GQ->ReferenceIndex))
GQ += 1; ->NameOfCoef);
GQ += 1;
} }
Message::Check(" }\n"); Message::Check(" }\n");
} }
Nbr = List_Nbr(CO_L); Nbr = List_Nbr(CO_L);
if (Nbr > 0) { if(Nbr > 0) {
Message::Check(" Constraint {\n"); Message::Check(" Constraint {\n");
CO = (struct ConstraintInFS*)List_Pointer(CO_L, 0); CO = (struct ConstraintInFS *)List_Pointer(CO_L, 0);
for (i=0; i<Nbr; i++) { for(i = 0; i < Nbr; i++) {
Message::Check(" NameOfCoef "); Message::Check(" NameOfCoef ");
if (CO->QuantityType == LOCALQUANTITY) if(CO->QuantityType == LOCALQUANTITY)
Message::Check("%s;", ((struct BasisFunction *) Message::Check("%s;", ((struct BasisFunction *)List_Pointer(
List_Pointer(BF_L, CO->ReferenceIndex))->NameOf BF_L, CO->ReferenceIndex))
Coef); ->NameOfCoef);
else if (CO->QuantityType == GLOBALQUANTITY) else if(CO->QuantityType == GLOBALQUANTITY)
Message::Check("%s;", ((struct GlobalQuantity *) Message::Check("%s;", ((struct GlobalQuantity *)List_Pointer(
List_Pointer(GQ_L, CO->ReferenceIndex))->Name); GQ_L, CO->ReferenceIndex))
else Message::Check("?;"); ->Name);
else
Message::Check(" // Entity %s;\n", Message::Check("?;");
((struct Group *)List_Pointer(Problem_S.Group, CO->Entity
Index)) Message::Check(" // Entity %s;\n", ((struct Group *)List_Pointer(
->Name ); Problem_S.Group, CO->EntityIndex))
->Name);
switch(CO->ConstraintPerRegion->Type) {
case INIT : switch(CO->ConstraintPerRegion->Type) {
Message::Check(" // Type Init;"); case INIT: Message::Check(" // Type Init;");
case ASSIGN : case ASSIGN:
Message::Check(" // Value Exp[%s];", Get_ExpressionName Message::Check(
(CO->ConstraintPerRegion->Case.Fixed.ExpressionIndex)); " // Value Exp[%s];",
break; Get_ExpressionName(
case ASSIGNFROMRESOLUTION : CO->ConstraintPerRegion->Case.Fixed.ExpressionIndex));
case INITFROMRESOLUTION : break;
Message::Check(" // Resolution %s;", case ASSIGNFROMRESOLUTION:
case INITFROMRESOLUTION:
Message::Check(" // Resolution %s;",
CO->ConstraintPerRegion->Case.Solve.ResolutionName); CO->ConstraintPerRegion->Case.Solve.ResolutionName);
break; break;
} }
if (CO->ConstraintPerRegion->TimeFunctionIndex >= 0) if(CO->ConstraintPerRegion->TimeFunctionIndex >= 0)
Message::Check(" TimeFunction Exp[%s];", Message::Check(
Get_ExpressionName(CO->ConstraintPerRegion->TimeFunctio " TimeFunction Exp[%s];",
nIndex)); Get_ExpressionName(CO->ConstraintPerRegion->TimeFunctionIndex));
Message::Check("\n"); Message::Check("\n");
CO += 1; CO += 1;
} }
Message::Check(" }\n"); Message::Check(" }\n");
} }
Message::Check(" }\n"); Message::Check(" }\n");
} }
Message::Check("\n"); Message::Check("\n");
Message::Check("}\n"); Message::Check("}\n");
} }
void Print_Formulation() void Print_Formulation()
{ {
struct Formulation *FO; struct Formulation *FO;
struct DefineQuantity *DQ; struct DefineQuantity *DQ;
struct EquationTerm *FE; struct EquationTerm *FE;
struct GlobalEquationTerm *GET; struct GlobalEquationTerm *GET;
List_T *DQ_L, *FE_L; List_T *DQ_L, *FE_L;
int i, Nbr, j, Nbrj, k, Nbrk; int i, Nbr, j, Nbrj, k, Nbrk;
Nbr = List_Nbr(Problem_S.Formulation); Nbr = List_Nbr(Problem_S.Formulation);
Message::Check("Formulation { /* nbr = %d */\n", Nbr); Message::Check("Formulation { /* nbr = %d */\n", Nbr);
Message::Check("\n"); Message::Check("\n");
for (i = 0; i < Nbr; i++) { for(i = 0; i < Nbr; i++) {
Message::Check(" /* Num : %d */\n", i); Message::Check(" /* Num : %d */\n", i);
FO = (struct Formulation*)List_Pointer(Problem_S.Formulation, i); FO = (struct Formulation *)List_Pointer(Problem_S.Formulation, i);
Message::Check(" { Name %s; Type %s;\n", FO->Name, Message::Check(" { Name %s; Type %s;\n", FO->Name,
Get_StringForDefine(Formulation_Type, FO->Type)); Get_StringForDefine(Formulation_Type, FO->Type));
DQ_L = FO->DefineQuantity; FE_L = FO->Equation; DQ_L = FO->DefineQuantity;
FE_L = FO->Equation;
Message::Check(" Quantity {\n"); Message::Check(" Quantity {\n");
Nbrj = List_Nbr(DQ_L); Nbrj = List_Nbr(DQ_L);
for (j=0; j<Nbrj; j++) { for(j = 0; j < Nbrj; j++) {
DQ = (struct DefineQuantity*)List_Pointer(DQ_L, j); DQ = (struct DefineQuantity *)List_Pointer(DQ_L, j);
Message::Check(" { Name %s; Type %s; NameOfSpace %s", Message::Check(" { Name %s; Type %s; NameOfSpace %s", DQ->Name,
DQ->Name,
Get_StringForDefine(DefineQuantity_Type, DQ->Type), Get_StringForDefine(DefineQuantity_Type, DQ->Type),
(DQ->FunctionSpaceIndex < 0) ? "?" : (DQ->FunctionSpaceIndex < 0) ?
((struct FunctionSpace *) "?" :
List_Pointer(Problem_S.FunctionSpace, DQ->FunctionSpaceInd ((struct FunctionSpace *)List_Pointer(
ex))->Name); Problem_S.FunctionSpace, DQ->FunctionSpaceIndex))
if (DQ->IndexInFunctionSpace) { ->Name);
if (DQ->Type == GLOBALQUANTITY) if(DQ->IndexInFunctionSpace) {
Message::Check("[%s]", if(DQ->Type == GLOBALQUANTITY)
((struct GlobalQuantity *) Message::Check(
List_Pointer "[%s]", ((struct GlobalQuantity *)List_Pointer(
(((struct FunctionSpace *) ((struct FunctionSpace *)List_Pointer(
List_Pointer(Problem_S.FunctionSpace, DQ->FunctionSp Problem_S.FunctionSpace, DQ->FunctionSpaceIndex))
aceIndex)) ->GlobalQuantity,
->GlobalQuantity, *((int *)List_Pointer(DQ->IndexInFunctionSpace, 0))))
*((int *)List_Pointer(DQ->IndexInFunctionSpace, 0)))) ->Name);
->Name); else if(DQ->Type == LOCALQUANTITY) {
else if (DQ->Type == LOCALQUANTITY) { Message::Check("[");
Message::Check("["); Nbrk = List_Nbr(DQ->IndexInFunctionSpace);
Nbrk = List_Nbr(DQ->IndexInFunctionSpace); for(k = 0; k < Nbrk; k++)
for (k=0; k<Nbrk; k++) Message::Check(" %d",
Message::Check(" %d", *((int *)List_Pointer(DQ->IndexInFunctionSpace, *((int *)List_Pointer(DQ->IndexInFunctionSpace, k)));
k))); Message::Check("]");
Message::Check("]"); }
}
} }
Message::Check(";"); Message::Check(";");
if (DQ->Type == INTEGRALQUANTITY) { if(DQ->Type == INTEGRALQUANTITY) {
Message::Check("\n"); Message::Check("\n");
Message::Check(" Integration %s;\n", Message::Check(" Integration %s;\n",
((struct IntegrationMethod *) ((struct IntegrationMethod *)List_Pointer(
List_Pointer(Problem_S.IntegrationMethod, Problem_S.IntegrationMethod,
DQ->IntegralQuantity.IntegrationMethodIndex DQ->IntegralQuantity.IntegrationMethodIndex))
))->Name); ->Name);
Message::Check(" Jacobian %s;", Message::Check(" Jacobian %s;",
((struct JacobianMethod *) ((struct JacobianMethod *)List_Pointer(
List_Pointer(Problem_S.JacobianMethod, Problem_S.JacobianMethod,
DQ->IntegralQuantity.JacobianMethodIndex))- DQ->IntegralQuantity.JacobianMethodIndex))
>Name); ->Name);
} }
Message::Check(" }\n"); Message::Check(" }\n");
} }
Message::Check(" }\n"); Message::Check(" }\n");
Message::Check(" Equation {\n"); Message::Check(" Equation {\n");
Nbrj = List_Nbr(FE_L); Nbrj = List_Nbr(FE_L);
for (j=0; j<Nbrj; j++) { for(j = 0; j < Nbrj; j++) {
FE = (struct EquationTerm*)List_Pointer(FE_L, j); FE = (struct EquationTerm *)List_Pointer(FE_L, j);
if (FE->Type == GALERKIN || FE->Type == DERHAM) { if(FE->Type == GALERKIN || FE->Type == DERHAM) {
if(FE->Type == GALERKIN) Message::Check(" Galerkin { Density [ ... ] if(FE->Type == GALERKIN)
;\n"); Message::Check(" Galerkin { Density [ ... ];\n");
if(FE->Type == DERHAM) Message::Check(" deRham { Density [ ... ] if(FE->Type == DERHAM)
;\n"); Message::Check(" deRham { Density [ ... ];\n");
Message::Check(" In %s;\n", Message::Check(" In %s;\n",
((struct Group *) ((struct Group *)List_Pointer(
List_Pointer(Problem_S.Group, FE->Case.LocalTerm.InIndex Problem_S.Group, FE->Case.LocalTerm.InIndex))
))->Name ); ->Name);
Message::Check(" Jacobian %s; \n", Message::Check(
((struct JacobianMethod *) " Jacobian %s; \n",
List_Pointer(Problem_S.JacobianMethod, ((struct JacobianMethod *)List_Pointer(
FE->Case.LocalTerm.JacobianMethodIndex))->N Problem_S.JacobianMethod, FE->Case.LocalTerm.JacobianMethodIndex))
ame ); ->Name);
Message::Check(" Integration %s; }\n", Message::Check(" Integration %s; }\n",
((struct IntegrationMethod *) ((struct IntegrationMethod *)List_Pointer(
List_Pointer(Problem_S.IntegrationMethod, Problem_S.IntegrationMethod,
FE->Case.LocalTerm.IntegrationMethodIndex)) FE->Case.LocalTerm.IntegrationMethodIndex))
->Name ); ->Name);
Message::Check(" /* Inventaire des DQ (%d) [%d] :", Message::Check(" /* Inventaire des DQ (%d) [%d] :",
FE->Case.LocalTerm.Term.NbrQuantityIndex, FE->Case.LocalTerm.Term.NbrQuantityIndex,
FE->Case.LocalTerm.Term.QuantityIndexPost); FE->Case.LocalTerm.Term.QuantityIndexPost);
for (k = 0; k < FE->Case.LocalTerm.Term.NbrQuantityIndex; k++) for(k = 0; k < FE->Case.LocalTerm.Term.NbrQuantityIndex; k++)
Message::Check(" {%s}", Message::Check(
((struct DefineQuantity *) " {%s}", ((struct DefineQuantity *)List_Pointer(
List_Pointer DQ_L, FE->Case.LocalTerm.Term.QuantityIndexTable[k]))
(DQ_L, FE->Case.LocalTerm.Term.QuantityIndexTable[k])) ->Name);
->Name); Message::Check(" */\n");
Message::Check(" */\n");
Message::Check(" /* WholeQuantity (%d) :", Message::Check(" /* WholeQuantity (%d) :",
List_Nbr(FE->Case.LocalTerm.Term.WholeQuantity)); List_Nbr(FE->Case.LocalTerm.Term.WholeQuantity));
Print_WholeQuantity(FE->Case.LocalTerm.Term.WholeQuantity, DQ_L); Print_WholeQuantity(FE->Case.LocalTerm.Term.WholeQuantity, DQ_L);
Message::Check(" */\n"); Message::Check(" */\n");
} }
else if (FE->Type == GLOBALTERM ) { else if(FE->Type == GLOBALTERM) {
Message::Check(" GlobalTerm { [ ... ];\n"); Message::Check(" GlobalTerm { [ ... ];\n");
Message::Check(" In %s;\n", Message::Check(" In %s;\n",
((struct Group *) ((struct Group *)List_Pointer(
List_Pointer(Problem_S.Group, FE->Case.GlobalTerm.InInde Problem_S.Group, FE->Case.GlobalTerm.InIndex))
x))->Name ); ->Name);
if(FE->Case.GlobalTerm.SubType != EQ_ST_SELF)
Message::Check(
" SubType %s;\n",
Get_StringForDefine(Equation_SubType, FE->Case.GlobalTerm.SubType));
if (FE->Case.GlobalTerm.SubType != EQ_ST_SELF) Message::Check(" /* Inventaire des DQ (%d) [%d,%d] :",
Message::Check(" SubType %s;\n",
Get_StringForDefine(Equation_SubType, FE->Case.GlobalTe
rm.SubType));
Message::Check(" /* Inventaire des DQ (%d) [%d,%d] :",
FE->Case.GlobalTerm.Term.NbrQuantityIndex, FE->Case.GlobalTerm.Term.NbrQuantityIndex,
FE->Case.GlobalTerm.Term.DefineQuantityIndexDof, FE->Case.GlobalTerm.Term.DefineQuantityIndexDof,
FE->Case.GlobalTerm.Term.DefineQuantityIndexEqu); FE->Case.GlobalTerm.Term.DefineQuantityIndexEqu);
for (k = 0; k < FE->Case.GlobalTerm.Term.NbrQuantityIndex; k++) for(k = 0; k < FE->Case.GlobalTerm.Term.NbrQuantityIndex; k++)
Message::Check(" {%s}", Message::Check(
((struct DefineQuantity *) " {%s}", ((struct DefineQuantity *)List_Pointer(
List_Pointer DQ_L, FE->Case.GlobalTerm.Term.QuantityIndexTable[k]))
(DQ_L, FE->Case.GlobalTerm.Term.QuantityIndexTable[k]) ->Name);
)->Name); Message::Check(" */\n");
Message::Check(" */\n");
Message::Check(" /* WholeQuantity (%d) :", Message::Check(" /* WholeQuantity (%d) :",
List_Nbr(FE->Case.GlobalTerm.Term.WholeQuantity)); List_Nbr(FE->Case.GlobalTerm.Term.WholeQuantity));
Print_WholeQuantity(FE->Case.GlobalTerm.Term.WholeQuantity, DQ_L); Print_WholeQuantity(FE->Case.GlobalTerm.Term.WholeQuantity, DQ_L);
Message::Check(" */\n"); Message::Check(" */\n");
} }
else if (FE->Type == GLOBALEQUATION) { else if(FE->Type == GLOBALEQUATION) {
Message::Check(" GlobalEquation { Type %s; UsingConstraint %s;\n", Message::Check(
Get_StringForDefine(Constraint_Type, FE->Case.GlobalEquat " GlobalEquation { Type %s; UsingConstraint %s;\n",
ion.Type), Get_StringForDefine(Constraint_Type, FE->Case.GlobalEquation.Type),
(FE->Case.GlobalEquation.ConstraintIndex >= 0)? (FE->Case.GlobalEquation.ConstraintIndex >= 0) ?
((struct Constraint *) ((struct Constraint *)List_Pointer(
List_Pointer(Problem_S.Constraint, Problem_S.Constraint, FE->Case.GlobalEquation.ConstraintIndex))
FE->Case.GlobalEquation.ConstraintIndex))-> ->Name :
Name "undefined_constraint");
: Nbrk = List_Nbr(FE->Case.GlobalEquation.GlobalEquationTerm);
"undefined_constraint" for(k = 0; k < Nbrk; k++) {
); GET = (struct GlobalEquationTerm *)List_Pointer(
Nbrk = List_Nbr(FE->Case.GlobalEquation.GlobalEquationTerm); FE->Case.GlobalEquation.GlobalEquationTerm, k);
for (k = 0; k < Nbrk; k++) { Message::Check(" { Node {%s}; Loop {%s}; Equation {%s};",
GET = (struct GlobalEquationTerm*) ((struct DefineQuantity *)List_Pointer(
List_Pointer(FE->Case.GlobalEquation.GlobalEquationTerm, k); DQ_L, GET->DefineQuantityIndexNode))
Message::Check(" { Node {%s}; Loop {%s}; Equation {%s};", ->Name,
((struct DefineQuantity *) ((struct DefineQuantity *)List_Pointer(
List_Pointer(DQ_L, GET->DefineQuantityIndexNode))->Nam DQ_L, GET->DefineQuantityIndexLoop))
e, ->Name,
((struct DefineQuantity *) ((struct DefineQuantity *)List_Pointer(
List_Pointer(DQ_L, GET->DefineQuantityIndexLoop))->Nam DQ_L, GET->DefineQuantityIndexEqu))
e, ->Name);
((struct DefineQuantity *) Message::Check(" In %s; }\n", ((struct Group *)List_Pointer(
List_Pointer(DQ_L, GET->DefineQuantityIndexEqu))->Name Problem_S.Group, GET->InIndex))
); ->Name);
Message::Check(" In %s; }\n", }
((struct Group *)
List_Pointer(Problem_S.Group, GET->InIndex))->Name);
}
} }
} }
Message::Check(" }\n"); Message::Check(" }\n");
Message::Check(" }\n"); Message::Check(" }\n");
} }
Message::Check("\n"); Message::Check("\n");
Message::Check("}\n"); Message::Check("}\n");
} }
void Print_Operation(struct Resolution *RE, List_T *Operation_L) void Print_Operation(struct Resolution *RE, List_T *Operation_L)
{ {
struct Operation *OPE; struct Operation *OPE;
int i, j, Nbrj; int i, j, Nbrj;
static int NbrBlk = -1; static int NbrBlk = -1;
NbrBlk++; NbrBlk++;
Nbrj = List_Nbr(Operation_L); Nbrj = List_Nbr(Operation_L);
for (j=0; j<Nbrj; j++) { for(j = 0; j < Nbrj; j++) {
OPE = (struct Operation*)List_Pointer(Operation_L, j); OPE = (struct Operation *)List_Pointer(Operation_L, j);
switch (OPE->Type) {
case OPERATION_GENERATE : switch(OPE->Type) {
case OPERATION_GENERATEONLY : case OPERATION_GENERATE:
case OPERATION_SOLVE : case OPERATION_GENERATEONLY:
case OPERATION_GENERATEJAC : case OPERATION_SOLVE:
case OPERATION_SOLVEJAC : case OPERATION_GENERATEJAC:
case OPERATION_SOLVENL : case OPERATION_SOLVEJAC:
case OPERATION_GENERATESEPARATE : case OPERATION_SOLVENL:
case OPERATION_INITSOLUTION : case OPERATION_GENERATESEPARATE:
case OPERATION_SAVESOLUTION : case OPERATION_INITSOLUTION:
case OPERATION_SAVESOLUTIONS : case OPERATION_SAVESOLUTION:
case OPERATION_READSOLUTION : case OPERATION_SAVESOLUTIONS:
case OPERATION_TRANSFERSOLUTION : case OPERATION_READSOLUTION:
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); case OPERATION_TRANSFERSOLUTION:
for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" %s [%s];\n", Message::Check(" %s [%s];\n",
Get_StringForDefine(Operation_Type, OPE->Type), Get_StringForDefine(Operation_Type, OPE->Type),
((struct DefineSystem *) ((struct DefineSystem *)List_Pointer(
List_Pointer(RE->DefineSystem, OPE->DefineSystemIndex))->N RE->DefineSystem, OPE->DefineSystemIndex))
ame); ->Name);
break; break;
case OPERATION_UPDATE : case OPERATION_UPDATE:
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" Update [ %s, Exp[%s] ];\n", Message::Check(" Update [ %s, Exp[%s] ];\n",
((struct DefineSystem *) ((struct DefineSystem *)List_Pointer(
List_Pointer(RE->DefineSystem, OPE->DefineSystemIndex))->N RE->DefineSystem, OPE->DefineSystemIndex))
ame, ->Name,
Get_ExpressionName(OPE->Case.Update.ExpressionIndex)); Get_ExpressionName(OPE->Case.Update.ExpressionIndex));
break; break;
case OPERATION_SELECTCORRECTION : case OPERATION_SELECTCORRECTION:
for (i=0 ; i<2*NbrBlk ; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" SelectCorrection [ %s, %d ] ;\n", Message::Check(" SelectCorrection [ %s, %d ] ;\n",
((struct DefineSystem *) ((struct DefineSystem *)List_Pointer(
List_Pointer(RE->DefineSystem, OPE->DefineSystemIndex))->N RE->DefineSystem, OPE->DefineSystemIndex))
ame, ->Name,
OPE->Case.SelectCorrection.Iteration) ; OPE->Case.SelectCorrection.Iteration);
break ; break;
case OPERATION_ADDCORRECTION : case OPERATION_ADDCORRECTION:
for (i=0 ; i<2*NbrBlk ; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" AddCorrection [ %s, %g ] ;\n", Message::Check(" AddCorrection [ %s, %g ] ;\n",
((struct DefineSystem *) ((struct DefineSystem *)List_Pointer(
List_Pointer(RE->DefineSystem, OPE->DefineSystemIndex))->N RE->DefineSystem, OPE->DefineSystemIndex))
ame, ->Name,
OPE->Case.AddCorrection.Alpha) ; OPE->Case.AddCorrection.Alpha);
break ; break;
case OPERATION_UPDATECONSTRAINT : case OPERATION_UPDATECONSTRAINT:
for (i=0 ; i<2*NbrBlk ; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" UpdateConstraint [ %s ] ;\n", Message::Check(" UpdateConstraint [ %s ] ;\n",
((struct DefineSystem *) ((struct DefineSystem *)List_Pointer(
List_Pointer(RE->DefineSystem, OPE->DefineSystemIndex))->N RE->DefineSystem, OPE->DefineSystemIndex))
ame) ; ->Name);
break ; break;
case OPERATION_FOURIERTRANSFORM : case OPERATION_FOURIERTRANSFORM:
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" FourierTransform [ %s, %s, {...} ];\n", Message::Check(
((struct DefineSystem *) " FourierTransform [ %s, %s, {...} ];\n",
List_Pointer(RE->DefineSystem, ((struct DefineSystem *)List_Pointer(
OPE->Case.FourierTransform.DefineSystemIndex[ RE->DefineSystem, OPE->Case.FourierTransform.DefineSystemIndex[0]))
0]))->Name, ->Name,
((struct DefineSystem *) ((struct DefineSystem *)List_Pointer(
List_Pointer(RE->DefineSystem, RE->DefineSystem, OPE->Case.FourierTransform.DefineSystemIndex[1]))
OPE->Case.FourierTransform.DefineSystemIndex[ ->Name);
1]))->Name); break;
break;
case OPERATION_TIMELOOPTHETA:
case OPERATION_TIMELOOPTHETA : for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); Message::Check(
Message::Check(" TimeLoopTheta [ %.10g, %.10g, Exp[%s], Exp[%s] ] {\n " TimeLoopTheta [ %.10g, %.10g, Exp[%s], Exp[%s] ] {\n",
", OPE->Case.TimeLoopTheta.Time0, OPE->Case.TimeLoopTheta.TimeMax,
OPE->Case.TimeLoopTheta.Time0, OPE->Case.TimeLoopTheta.Time Get_ExpressionName(OPE->Case.TimeLoopTheta.DTimeIndex),
Max, Get_ExpressionName(OPE->Case.TimeLoopTheta.ThetaIndex));
Get_ExpressionName(OPE->Case.TimeLoopTheta.DTimeIndex),
Get_ExpressionName(OPE->Case.TimeLoopTheta.ThetaIndex));
Print_Operation(RE, OPE->Case.TimeLoopTheta.Operation); Print_Operation(RE, OPE->Case.TimeLoopTheta.Operation);
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" }\n"); Message::Check(" }\n");
break; break;
case OPERATION_TIMELOOPNEWMARK : case OPERATION_TIMELOOPNEWMARK:
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" TimeLoopNewmark [ %.10g, %.10g, Exp[%s], %.10g, %.10 Message::Check(
g ] {\n", " TimeLoopNewmark [ %.10g, %.10g, Exp[%s], %.10g, %.10g ] {\n",
OPE->Case.TimeLoopNewmark.Time0, OPE->Case.TimeLoopNewmark. OPE->Case.TimeLoopNewmark.Time0, OPE->Case.TimeLoopNewmark.TimeMax,
TimeMax, Get_ExpressionName(OPE->Case.TimeLoopNewmark.DTimeIndex),
Get_ExpressionName(OPE->Case.TimeLoopNewmark.DTimeIndex), OPE->Case.TimeLoopNewmark.Beta, OPE->Case.TimeLoopNewmark.Gamma);
OPE->Case.TimeLoopNewmark.Beta, OPE->Case.TimeLoopNewmark.G
amma);
Print_Operation(RE, OPE->Case.TimeLoopNewmark.Operation); Print_Operation(RE, OPE->Case.TimeLoopNewmark.Operation);
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" }\n"); Message::Check(" }\n");
break; break;
case OPERATION_ITERATIVELOOP : case OPERATION_ITERATIVELOOP:
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" IterativeLoop [ %d, %.10g, Exp[%s] ] {\n", Message::Check(
OPE->Case.IterativeLoop.NbrMaxIteration, " IterativeLoop [ %d, %.10g, Exp[%s] ] {\n",
OPE->Case.IterativeLoop.Criterion, OPE->Case.IterativeLoop.NbrMaxIteration,
Get_ExpressionName(OPE->Case.IterativeLoop.RelaxationFactor OPE->Case.IterativeLoop.Criterion,
Index)); Get_ExpressionName(OPE->Case.IterativeLoop.RelaxationFactorIndex));
Print_Operation(RE, OPE->Case.IterativeLoop.Operation); Print_Operation(RE, OPE->Case.IterativeLoop.Operation);
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" }\n"); Message::Check(" }\n");
break; break;
case OPERATION_LANCZOS : case OPERATION_LANCZOS:
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" Lanczos [ %s, %d, { ... } , %.10g ];\n", Message::Check(" Lanczos [ %s, %d, { ... } , %.10g ];\n",
((struct DefineSystem *) ((struct DefineSystem *)List_Pointer(
List_Pointer(RE->DefineSystem, OPE->DefineSystemIndex))->N RE->DefineSystem, OPE->DefineSystemIndex))
ame, ->Name,
OPE->Case.Lanczos.Size, OPE->Case.Lanczos.Size, OPE->Case.Lanczos.Shift);
OPE->Case.Lanczos.Shift);
break; break;
case OPERATION_EIGENSOLVE : case OPERATION_EIGENSOLVE:
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" EigenSolve [ %s, %d, %.10g , %.10g ];\n", Message::Check(" EigenSolve [ %s, %d, %.10g , %.10g ];\n",
((struct DefineSystem *) ((struct DefineSystem *)List_Pointer(
List_Pointer(RE->DefineSystem, OPE->DefineSystemIndex))->N RE->DefineSystem, OPE->DefineSystemIndex))
ame, ->Name,
OPE->Case.EigenSolve.NumEigenvalues, OPE->Case.EigenSolve.NumEigenvalues,
OPE->Case.EigenSolve.Shift_r, OPE->Case.EigenSolve.Shift_i) OPE->Case.EigenSolve.Shift_r,
; OPE->Case.EigenSolve.Shift_i);
break; break;
case OPERATION_POSTOPERATION : case OPERATION_POSTOPERATION:
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" PostOperation [ ... ];\n"); Message::Check(" PostOperation [ ... ];\n");
break; break;
case OPERATION_EVALUATE : case OPERATION_EVALUATE:
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" Evaluate [ ... ];\n"); Message::Check(" Evaluate [ ... ];\n");
break; break;
case OPERATION_SETTIME : case OPERATION_SETTIME:
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" SetTime [ Exp[%s] ];\n", Message::Check(" SetTime [ Exp[%s] ];\n",
Get_ExpressionName(OPE->Case.SetTime.ExpressionIndex)); Get_ExpressionName(OPE->Case.SetTime.ExpressionIndex));
break; break;
case OPERATION_SETFREQUENCY : case OPERATION_SETFREQUENCY:
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" SetFrequency [ %s, Exp[%s] ];\n", Message::Check(
((struct DefineSystem *) " SetFrequency [ %s, Exp[%s] ];\n",
List_Pointer(RE->DefineSystem, OPE->DefineSystemIndex))->N ((struct DefineSystem *)List_Pointer(RE->DefineSystem,
ame, OPE->DefineSystemIndex))
Get_ExpressionName(OPE->Case.SetFrequency.ExpressionIndex)) ->Name,
; Get_ExpressionName(OPE->Case.SetFrequency.ExpressionIndex));
break; break;
case OPERATION_BREAK : case OPERATION_BREAK:
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" Break;\n"); Message::Check(" Break;\n");
break; break;
case OPERATION_SYSTEMCOMMAND : case OPERATION_SYSTEMCOMMAND:
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" SystemCommand \" %s \";\n", Message::Check(" SystemCommand \" %s \";\n",
OPE->Case.SystemCommand.String); OPE->Case.SystemCommand.String);
break; break;
case OPERATION_TEST : case OPERATION_TEST:
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" If [ Exp[%s] ] {\n", Message::Check(" If [ Exp[%s] ] {\n",
Get_ExpressionName(OPE->Case.Test.ExpressionIndex)); Get_ExpressionName(OPE->Case.Test.ExpressionIndex));
Print_Operation(RE, OPE->Case.Test.Operation_True); Print_Operation(RE, OPE->Case.Test.Operation_True);
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" }\n"); Message::Check(" }\n");
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
if(OPE->Case.Test.Operation_False){ if(OPE->Case.Test.Operation_False) {
Message::Check(" Else {\n"); Message::Check(" Else {\n");
Print_Operation(RE, OPE->Case.Test.Operation_False); Print_Operation(RE, OPE->Case.Test.Operation_False);
Message::Check(" }\n"); Message::Check(" }\n");
} }
break; break;
case OPERATION_CHANGEOFCOORDINATES : case OPERATION_CHANGEOFCOORDINATES:
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" ChangeOfCoordinates [ %s, Exp[%s] ];\n", Message::Check(
((struct Group *) " ChangeOfCoordinates [ %s, Exp[%s] ];\n",
List_Pointer(Problem_S.Group, ((struct Group *)List_Pointer(Problem_S.Group,
OPE->Case.ChangeOfCoordinates.GroupIndex))->N OPE->Case.ChangeOfCoordinates.GroupIndex))
ame, ->Name,
Get_ExpressionName(OPE->Case.ChangeOfCoordinates.Expression Get_ExpressionName(OPE->Case.ChangeOfCoordinates.ExpressionIndex));
Index)); break;
break;
case OPERATION_INIT_MOVINGBAND2D:
case OPERATION_INIT_MOVINGBAND2D : for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); Message::Check(
Message::Check(" Init_MovingBand2D [ %s ];\n", " Init_MovingBand2D [ %s ];\n",
((struct Group *) ((struct Group *)List_Pointer(Problem_S.Group,
List_Pointer(Problem_S.Group, OPE->Case.Init_MovingBand2D.GroupIndex))
OPE->Case.Init_MovingBand2D.GroupIndex))->Nam ->Name);
e); break;
break;
case OPERATION_MESH_MOVINGBAND2D:
case OPERATION_MESH_MOVINGBAND2D : for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); Message::Check(
Message::Check(" Mesh_MovingBand2D [ %s ];\n", " Mesh_MovingBand2D [ %s ];\n",
((struct Group *) ((struct Group *)List_Pointer(Problem_S.Group,
List_Pointer(Problem_S.Group, OPE->Case.Mesh_MovingBand2D.GroupIndex))
OPE->Case.Mesh_MovingBand2D.GroupIndex))->Nam ->Name);
e); break;
break; case OPERATION_GENERATE_MH_MOVING:
case OPERATION_GENERATE_MH_MOVING : for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); Message::Check(
Message::Check(" GenerateMHMoving [ %s, %s, %g, %d ];\n", " GenerateMHMoving [ %s, %s, %g, %d ];\n",
((struct DefineSystem *) ((struct DefineSystem *)List_Pointer(RE->DefineSystem,
List_Pointer(RE->DefineSystem, OPE->DefineSystemIndex))->N OPE->DefineSystemIndex))
ame, ->Name,
((struct Group *) ((struct Group *)List_Pointer(Problem_S.Group,
List_Pointer(Problem_S.Group, OPE->Case.Generate_MH_Moving.GroupIndex))
OPE->Case.Generate_MH_Moving.GroupIndex))->Na ->Name,
me, OPE->Case.Generate_MH_Moving.Period,
OPE->Case.Generate_MH_Moving.Period, OPE->Case.Generate_MH_Moving.NbrStep);
OPE->Case.Generate_MH_Moving.NbrStep); break;
break; case OPERATION_GENERATE_MH_MOVING_S:
case OPERATION_GENERATE_MH_MOVING_S : for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); Message::Check(
Message::Check(" GenerateMHMovingSeparate [ %s, %s, %g, %d ];\n", " GenerateMHMovingSeparate [ %s, %s, %g, %d ];\n",
((struct DefineSystem *) ((struct DefineSystem *)List_Pointer(RE->DefineSystem,
List_Pointer(RE->DefineSystem, OPE->DefineSystemIndex))->N OPE->DefineSystemIndex))
ame, ->Name,
((struct Group *) ((struct Group *)List_Pointer(
List_Pointer(Problem_S.Group, Problem_S.Group, OPE->Case.Generate_MH_Moving_S.GroupIndex))
OPE->Case.Generate_MH_Moving_S.GroupIndex))-> ->Name,
Name, OPE->Case.Generate_MH_Moving_S.Period,
OPE->Case.Generate_MH_Moving_S.Period, OPE->Case.Generate_MH_Moving_S.NbrStep);
OPE->Case.Generate_MH_Moving_S.NbrStep);
break; break;
case OPERATION_ADDMHMOVING : case OPERATION_ADDMHMOVING:
for (i=0; i<2*NbrBlk; i++) Message::Check(" "); for(i = 0; i < 2 * NbrBlk; i++) Message::Check(" ");
Message::Check(" AddMHMoving [%s];\n", Message::Check(" AddMHMoving [%s];\n",
((struct DefineSystem *) ((struct DefineSystem *)List_Pointer(
List_Pointer(RE->DefineSystem, OPE->DefineSystemIndex))->N RE->DefineSystem, OPE->DefineSystemIndex))
ame); ->Name);
break; break;
case OPERATION_DEFORMMESH : case OPERATION_DEFORMMESH:
if(OPE->Case.DeformMesh.Quantity && OPE->Case.DeformMesh.Quantity2 && if(OPE->Case.DeformMesh.Quantity && OPE->Case.DeformMesh.Quantity2 &&
OPE->Case.DeformMesh.Quantity3) OPE->Case.DeformMesh.Quantity3)
Message::Check(" DeformMesh [%s, {%s, %s, %s}, '%s']; \n", Message::Check(
((struct DefineSystem *) " DeformMesh [%s, {%s, %s, %s}, '%s']; \n",
List_Pointer(RE->DefineSystem, OPE->DefineSystemIndex))- ((struct DefineSystem *)List_Pointer(RE->DefineSystem,
>Name, OPE->DefineSystemIndex))
OPE->Case.DeformMesh.Quantity, OPE->Case.DeformMesh.Quant ->Name,
ity2, OPE->Case.DeformMesh.Quantity, OPE->Case.DeformMesh.Quantity2,
OPE->Case.DeformMesh.Quantity3, OPE->Case.DeformMesh.Name OPE->Case.DeformMesh.Quantity3, OPE->Case.DeformMesh.Name_MshFile);
_MshFile);
else else
Message::Check(" DeformMesh [%s, %s, '%s']; \n", Message::Check(" DeformMesh [%s, %s, '%s']; \n",
((struct DefineSystem *) ((struct DefineSystem *)List_Pointer(
List_Pointer(RE->DefineSystem, OPE->DefineSystemIndex))- RE->DefineSystem, OPE->DefineSystemIndex))
>Name, ->Name,
OPE->Case.DeformMesh.Quantity, OPE->Case.DeformMesh.Quantity,
OPE->Case.DeformMesh.Name_MshFile); OPE->Case.DeformMesh.Name_MshFile);
break; break;
case OPERATION_GMSHREAD : case OPERATION_GMSHREAD:
Message::Check(" GmshRead [%s]; \n", OPE->Case.GmshRead.FileName); Message::Check(" GmshRead [%s]; \n", OPE->Case.GmshRead.FileName);
break; break;
case OPERATION_GMSHMERGE : case OPERATION_GMSHMERGE:
Message::Check(" GmshMerge [%s]; \n", OPE->Case.GmshRead.FileName); Message::Check(" GmshMerge [%s]; \n", OPE->Case.GmshRead.FileName);
break; break;
case OPERATION_GMSHOPEN : case OPERATION_GMSHOPEN:
Message::Check(" GmshOpen [%s]; \n", OPE->Case.GmshRead.FileName); Message::Check(" GmshOpen [%s]; \n", OPE->Case.GmshRead.FileName);
break; break;
case OPERATION_GMSHWRITE : case OPERATION_GMSHWRITE:
Message::Check(" GmshWrite [%s]; \n", OPE->Case.GmshRead.FileName); Message::Check(" GmshWrite [%s]; \n", OPE->Case.GmshRead.FileName);
break; break;
case OPERATION_GMSHCLEARALL : case OPERATION_GMSHCLEARALL:
Message::Check(" GmshClearAll; \n"); Message::Check(" GmshClearAll; \n");
break; break;
case OPERATION_DELETEFILE: case OPERATION_DELETEFILE:
Message::Check(" DeleteFile [%s]; \n", OPE->Case.DeleteFile.FileName) Message::Check(" DeleteFile [%s]; \n",
; OPE->Case.DeleteFile.FileName);
break; break;
case OPERATION_RENAMEFILE: case OPERATION_RENAMEFILE:
Message::Check(" RenameFile [%s, %s]; \n", Message::Check(" RenameFile [%s, %s]; \n",
OPE->Case.RenameFile.OldFileName, OPE->Case.RenameFile.OldFileName,
OPE->Case.RenameFile.NewFileName); OPE->Case.RenameFile.NewFileName);
break; break;
case OPERATION_CREATEDIR: case OPERATION_CREATEDIR:
Message::Check(" CreateDir [%s]; \n", Message::Check(" CreateDir [%s]; \n", OPE->Case.CreateDir.DirName);
OPE->Case.CreateDir.DirName);
break; break;
default : default: Message::Check(" ???;\n"); break;
Message::Check(" ???;\n");
break;
} }
} }
NbrBlk--; NbrBlk--;
} }
void Print_Resolution() void Print_Resolution()
{ {
struct Resolution *RE; struct Resolution *RE;
struct DefineSystem *DS; struct DefineSystem *DS;
List_T *DS_L; List_T *DS_L;
int i, Nbr, j, Nbrj, k; int i, Nbr, j, Nbrj, k;
Nbr = List_Nbr(Problem_S.Resolution); Nbr = List_Nbr(Problem_S.Resolution);
Message::Check("Resolution { /* nbr = %d */\n", Nbr); Message::Check("Resolution { /* nbr = %d */\n", Nbr);
Message::Check("\n"); Message::Check("\n");
for (i = 0; i < Nbr; i++) { for(i = 0; i < Nbr; i++) {
Message::Check(" /* Num : %d */\n", i); Message::Check(" /* Num : %d */\n", i);
RE = (struct Resolution*)List_Pointer(Problem_S.Resolution, i); RE = (struct Resolution *)List_Pointer(Problem_S.Resolution, i);
Message::Check(" { Name %s\n", RE->Name); Message::Check(" { Name %s\n", RE->Name);
DS_L = RE->DefineSystem; DS_L = RE->DefineSystem;
Message::Check(" System {\n"); Message::Check(" System {\n");
Nbrj = List_Nbr(DS_L); Nbrj = List_Nbr(DS_L);
for (j=0; j<Nbrj; j++) { for(j = 0; j < Nbrj; j++) {
DS = (struct DefineSystem*)List_Pointer(DS_L, j); DS = (struct DefineSystem *)List_Pointer(DS_L, j);
Message::Check(" { Name %s; Type %s; ", Message::Check(" { Name %s; Type %s; ", DS->Name,
DS->Name,
Get_StringForDefine(DefineSystem_Type, DS->Type)); Get_StringForDefine(DefineSystem_Type, DS->Type));
Message::Check("NameOfFormulation {"); Message::Check("NameOfFormulation {");
for (k = 0; k < List_Nbr(DS->FormulationIndex); k++) for(k = 0; k < List_Nbr(DS->FormulationIndex); k++)
Message::Check(" %s", Message::Check(" %s",
((struct Formulation *) ((struct Formulation *)List_Pointer(
List_Pointer(Problem_S.Formulation, Problem_S.Formulation,
*((int *)List_Pointer(DS->FormulationIndex, *((int *)List_Pointer(DS->FormulationIndex, k))))
k))))->Name); ->Name);
Message::Check(" }; "); Message::Check(" }; ");
if(DS->MeshName) if(DS->MeshName) Message::Check("NameOfMesh %s; ", DS->MeshName);
Message::Check("NameOfMesh %s; ", DS->MeshName);
if(DS->OriginSystemIndex) { if(DS->OriginSystemIndex) {
Message::Check("OriginSystem {") ; Message::Check("OriginSystem {");
for(k = 0; k < List_Nbr(DS->OriginSystemIndex); k++) {
if(k) Message::Check(",");
Message::Check(" %d",
*((int *)List_Pointer(DS->OriginSystemIndex, k)));
}
Message::Check(" } ;");
}
for (k = 0 ; k < List_Nbr(DS->OriginSystemIndex) ; k++) { if(DS->Type == VAL_COMPLEX) {
if (k) Message::Check(",") ; Message::Check("Frequency {");
Message::Check(" %d", *((int *)List_Pointer(DS->OriginSystemIndex, k)))
; for(k = 0; k < List_Nbr(DS->FrequencyValue); k++) {
} if(k) Message::Check(",");
Message::Check(" } ;") ; Message::Check(" %.10g",
} *((double *)List_Pointer(DS->FrequencyValue, k)));
}
if (DS->Type == VAL_COMPLEX) { Message::Check(" };");
Message::Check("Frequency {");
for (k = 0; k < List_Nbr(DS->FrequencyValue); k++) {
if (k) Message::Check(",");
Message::Check(" %.10g", *((double *)List_Pointer(DS->FrequencyValue, k
)));
}
Message::Check(" };");
} }
Message::Check(" }\n"); Message::Check(" }\n");
} }
Message::Check(" }\n"); Message::Check(" }\n");
Message::Check(" Operation {\n"); Message::Check(" Operation {\n");
Print_Operation(RE, RE->Operation); Print_Operation(RE, RE->Operation);
Message::Check(" }\n"); Message::Check(" }\n");
Message::Check(" }\n"); Message::Check(" }\n");
} }
Message::Check("\n"); Message::Check("\n");
Message::Check("}\n"); Message::Check("}\n");
} }
void Print_PostProcessing() void Print_PostProcessing()
{ {
struct PostProcessing *PP; struct PostProcessing *PP;
struct PostQuantity *PQ; struct PostQuantity *PQ;
struct PostQuantityTerm *PQT; struct PostQuantityTerm *PQT;
int i, Nbr, j, Nbrj, k, Nbrk; int i, Nbr, j, Nbrj, k, Nbrk;
Nbr = List_Nbr(Problem_S.PostProcessing); Nbr = List_Nbr(Problem_S.PostProcessing);
Message::Check("PostProcessing { /* nbr = %d */\n", Nbr); Message::Check("PostProcessing { /* nbr = %d */\n", Nbr);
Message::Check("\n"); Message::Check("\n");
for (i = 0; i < Nbr; i++) { for(i = 0; i < Nbr; i++) {
Message::Check(" /* Num : %d */\n", i); Message::Check(" /* Num : %d */\n", i);
PP = (struct PostProcessing*)List_Pointer(Problem_S.PostProcessing, i); PP = (struct PostProcessing *)List_Pointer(Problem_S.PostProcessing, i);
Message::Check(" { Name %s; NameOfFormulation %s; \n", PP->Name, Message::Check(" { Name %s; NameOfFormulation %s; \n", PP->Name,
((struct Formulation *) ((struct Formulation *)List_Pointer(Problem_S.Formulation,
List_Pointer(Problem_S.Formulation, PP->FormulationIndex))-> PP->FormulationIndex))
Name); ->Name);
if(PP->NameOfSystem) if(PP->NameOfSystem) Message::Check("NameOfSystem %s;", PP->NameOfSystem);
Message::Check("NameOfSystem %s;", PP->NameOfSystem);
Nbrj = List_Nbr(PP->PostQuantity); Nbrj = List_Nbr(PP->PostQuantity);
if (Nbrj > 0) { if(Nbrj > 0) {
Message::Check(" Quantity {\n"); Message::Check(" Quantity {\n");
for (j = 0; j < Nbrj; j++) { for(j = 0; j < Nbrj; j++) {
PQ = (struct PostQuantity*)List_Pointer(PP->PostQuantity, j); PQ = (struct PostQuantity *)List_Pointer(PP->PostQuantity, j);
Message::Check(" { Name %s;\n", PQ->Name); Message::Check(" { Name %s;\n", PQ->Name);
Message::Check(" Value {\n"); Message::Check(" Value {\n");
Nbrk = List_Nbr(PQ->PostQuantityTerm); Nbrk = List_Nbr(PQ->PostQuantityTerm);
for (k = 0; k < Nbrk; k++) { for(k = 0; k < Nbrk; k++) {
PQT = (struct PostQuantityTerm*)List_Pointer(PQ->PostQuantityTerm, k); PQT =
Message::Check(" { %s { ['", (struct PostQuantityTerm *)List_Pointer(PQ->PostQuantityTerm, k);
Message::Check(" { %s { ['",
Get_StringForDefine(PostQuantityTerm_EvaluationType, Get_StringForDefine(PostQuantityTerm_EvaluationType,
PQT->EvaluationType)); PQT->EvaluationType));
Print_WholeQuantity Print_WholeQuantity(PQT->WholeQuantity,
(PQT->WholeQuantity, ((struct Formulation *)List_Pointer(
((struct Formulation *) Problem_S.Formulation, PP->FormulationIndex))
List_Pointer(Problem_S.Formulation, PP->FormulationIndex)) ->DefineQuantity);
->DefineQuantity); Message::Check(" ']; /* DefineQuantityType %s */\n",
Message::Check(" ']; /* DefineQuantityType %s */\n",
Get_StringForDefine(DefineQuantity_Type, PQT->Type)); Get_StringForDefine(DefineQuantity_Type, PQT->Type));
if(PQT->InIndex > 0) if(PQT->InIndex > 0)
Message::Check(" In %s;\n", Message::Check(
((struct Group *)List_Pointer(Problem_S.Group, PQT->I " In %s;\n",
nIndex))->Name); ((struct Group *)List_Pointer(Problem_S.Group, PQT->InIndex))
if(PQT->IntegrationMethodIndex > 0) ->Name);
Message::Check(" Integration %s;\n", if(PQT->IntegrationMethodIndex > 0)
((struct IntegrationMethod *) Message::Check(
List_Pointer(Problem_S.IntegrationMethod, " Integration %s;\n",
PQT->IntegrationMethodIndex))->Name); ((struct IntegrationMethod *)List_Pointer(
if(PQT->JacobianMethodIndex > 0) Problem_S.IntegrationMethod, PQT->IntegrationMethodIndex))
Message::Check(" Jacobian %s;\n", ->Name);
((struct JacobianMethod *) if(PQT->JacobianMethodIndex > 0)
List_Pointer(Problem_S.JacobianMethod, Message::Check(
PQT->JacobianMethodIndex))->Name); " Jacobian %s;\n",
((struct JacobianMethod *)List_Pointer(Problem_S.JacobianMethod,
} PQT->JacobianMethodIndex))
Message::Check(" } } }\n"); Message::Check(" }\n"); ->Name);
}
Message::Check(" } } }\n");
Message::Check(" }\n");
} }
Message::Check(" }\n"); Message::Check(" }\n");
} }
Message::Check(" }\n"); Message::Check(" }\n");
} }
Message::Check("\n}"); Message::Check("\n}");
Message::Check("\n"); Message::Check("\n");
} }
void Print_PostOperation() void Print_PostOperation()
{ {
struct PostProcessing *PP; struct PostProcessing *PP;
struct PostOperation *PO; struct PostOperation *PO;
struct PostSubOperation *PSO; struct PostSubOperation *PSO;
int i, Nbr, k, Nbrk; int i, Nbr, k, Nbrk;
Nbr = List_Nbr(Problem_S.PostOperation); Nbr = List_Nbr(Problem_S.PostOperation);
Message::Check("PostOperation { /* nbr = %d */\n", Nbr); Message::Check("PostOperation { /* nbr = %d */\n", Nbr);
Message::Check("\n"); Message::Check("\n");
for (i = 0; i < Nbr; i++) { for(i = 0; i < Nbr; i++) {
PO = (struct PostOperation*)List_Pointer(Problem_S.PostOperation, i); PO = (struct PostOperation *)List_Pointer(Problem_S.PostOperation, i);
PP = (struct PostProcessing*)List_Pointer(Problem_S.PostProcessing, PP = (struct PostProcessing *)List_Pointer(Problem_S.PostProcessing,
PO->PostProcessingIndex); PO->PostProcessingIndex);
Message::Check(" { Name %s; NameOfPostProcessing %s;\n", PO->Name, PP->Name Message::Check(" { Name %s; NameOfPostProcessing %s;\n", PO->Name,
); PP->Name);
Message::Check(" Operation {\n"); Message::Check(" Operation {\n");
Nbrk = List_Nbr(PO->PostSubOperation); Nbrk = List_Nbr(PO->PostSubOperation);
for (k = 0; k < Nbrk; k++) { for(k = 0; k < Nbrk; k++) {
PSO = (struct PostSubOperation*)List_Pointer(PO->PostSubOperation, k); PSO = (struct PostSubOperation *)List_Pointer(PO->PostSubOperation, k);
switch (PSO->Type) { switch(PSO->Type) {
case POP_PRINT : case POP_PRINT:
Message::Check(" Print[%s", Message::Check(" Print[%s",
((struct PostQuantity *) ((struct PostQuantity *)List_Pointer(
List_Pointer(PP->PostQuantity, PSO->PostQuantityIndex[0] PP->PostQuantity, PSO->PostQuantityIndex[0]))
))->Name); ->Name);
if(PSO->PostQuantitySupport[0] >= 0) if(PSO->PostQuantitySupport[0] >= 0)
Message::Check(" [%s]", Message::Check(
((struct Group *) " [%s]", ((struct Group *)List_Pointer(Problem_S.Group,
List_Pointer(Problem_S.Group, PSO->PostQuantitySupport PSO->PostQuantitySupport[0]))
[0]))->Name); ->Name);
if(PSO->PostQuantityIndex[1] >= 0) { if(PSO->PostQuantityIndex[1] >= 0) {
Message::Check(" %s %s", Message::Check(" %s %s",
Get_StringForDefine(PostSubOperation_CombinationType, Get_StringForDefine(PostSubOperation_CombinationType,
PSO->CombinationType), PSO->CombinationType),
((struct PostQuantity *) ((struct PostQuantity *)List_Pointer(
List_Pointer(PP->PostQuantity, PSO->PostQuantityIndex[ PP->PostQuantity, PSO->PostQuantityIndex[1]))
1]))->Name); ->Name);
if(PSO->PostQuantitySupport[1] >= 0) if(PSO->PostQuantitySupport[1] >= 0)
Message::Check(" [%s]", Message::Check(" [%s]",
((struct Group *) ((struct Group *)List_Pointer(
List_Pointer(Problem_S.Group, PSO->PostQuantitySuppo Problem_S.Group, PSO->PostQuantitySupport[1]))
rt[1]))->Name); ->Name);
} }
switch (PSO->SubType) { switch(PSO->SubType) {
case PRINT_ONREGION : case PRINT_ONREGION:
if (PSO->Case.OnRegion.RegionIndex >=0) if(PSO->Case.OnRegion.RegionIndex >= 0)
Message::Check(", OnRegion %s", Message::Check(", OnRegion %s",
((struct Group *) ((struct Group *)List_Pointer(
List_Pointer(Problem_S.Group, Problem_S.Group, PSO->Case.OnRegion.RegionIndex))
PSO->Case.OnRegion.RegionIndex))->Name ->Name);
); else
else Message::Check(", OnGlobal");
Message::Check(", OnGlobal"); break;
break; case PRINT_ONELEMENTSOF:
case PRINT_ONELEMENTSOF : Message::Check(", OnElementsOf %s",
Message::Check(", OnElementsOf %s", ((struct Group *)List_Pointer(
((struct Group *) Problem_S.Group, PSO->Case.OnRegion.RegionIndex))
List_Pointer(Problem_S.Group, ->Name);
PSO->Case.OnRegion.RegionIndex))->Name ); break;
break; case PRINT_ONGRID:
case PRINT_ONGRID : Message::Check(", OnGrid %s",
Message::Check(", OnGrid %s", ((struct Group *)List_Pointer(
((struct Group *) Problem_S.Group, PSO->Case.OnRegion.RegionIndex))
List_Pointer(Problem_S.Group, ->Name);
PSO->Case.OnRegion.RegionIndex))->Name ); break;
break; case PRINT_ONGRID_0D:
case PRINT_ONGRID_0D : Message::Check(", OnPoint {%.10g,%.10g,%.10g}", PSO->Case.OnGrid.x[0],
Message::Check(", OnPoint {%.10g,%.10g,%.10g}", PSO->Case.OnGrid.y[0], PSO->Case.OnGrid.z[0]);
PSO->Case.OnGrid.x[0], PSO->Case.OnGrid.y[0], break;
PSO->Case.OnGrid.z[0]); case PRINT_ONGRID_1D:
break; Message::Check(
case PRINT_ONGRID_1D : ", OnLine {{%.10g,%.10g,%.10g}{%.10g,%.10g,%.10g}} {%d}",
Message::Check(", OnLine {{%.10g,%.10g,%.10g}{%.10g,%.10g,%.10g}} {%d}" PSO->Case.OnGrid.x[0], PSO->Case.OnGrid.y[0], PSO->Case.OnGrid.z[0],
, PSO->Case.OnGrid.x[1], PSO->Case.OnGrid.y[1], PSO->Case.OnGrid.z[1],
PSO->Case.OnGrid.x[0], PSO->Case.OnGrid.y[0], PSO->Case.OnGrid.n[0]);
PSO->Case.OnGrid.z[0], break;
PSO->Case.OnGrid.x[1], PSO->Case.OnGrid.y[1], case PRINT_ONGRID_2D:
PSO->Case.OnGrid.z[1], PSO->Case.OnGrid.n[0]); Message::Check(
break; ", OnPlane {{%.10g,%.10g,%.10g}{%.10g,%.10g,%.10g}"
case PRINT_ONGRID_2D : "{%.10g,%.10g,%.10g}} {%d,%d}",
Message::Check(", OnPlane {{%.10g,%.10g,%.10g}{%.10g,%.10g,%.10g}" PSO->Case.OnGrid.x[0], PSO->Case.OnGrid.y[0], PSO->Case.OnGrid.z[0],
"{%.10g,%.10g,%.10g}} {%d,%d}", PSO->Case.OnGrid.x[1], PSO->Case.OnGrid.y[1], PSO->Case.OnGrid.z[1],
PSO->Case.OnGrid.x[0], PSO->Case.OnGrid.y[0], PSO->Case.OnGrid.x[2], PSO->Case.OnGrid.y[2], PSO->Case.OnGrid.z[2],
PSO->Case.OnGrid.z[0], PSO->Case.OnGrid.n[0], PSO->Case.OnGrid.n[1]);
PSO->Case.OnGrid.x[1], PSO->Case.OnGrid.y[1], break;
PSO->Case.OnGrid.z[1], default: /* parametric grid, ... */ break;
PSO->Case.OnGrid.x[2], PSO->Case.OnGrid.y[2], }
PSO->Case.OnGrid.z[2], break;
PSO->Case.OnGrid.n[0], PSO->Case.OnGrid.n[1]); default: /* POP_EXPRESSION, POP_GROUP, etc. */ break;
break; }
default : /* parametric grid, ... */
break;
}
break;
default : /* POP_EXPRESSION, POP_GROUP, etc. */
break;
}
if(PSO->Depth != 1)
Message::Check(", Depth %d", PSO->Depth);
if(PSO->Skin) if(PSO->Depth != 1) Message::Check(", Depth %d", PSO->Depth);
Message::Check(", Skin");
if(PSO->NoNewLine) if(PSO->Skin) Message::Check(", Skin");
Message::Check(", NoNewLine");
if(PSO->Smoothing) if(PSO->NoNewLine) Message::Check(", NoNewLine");
Message::Check(", Smoothing %d", PSO->Smoothing);
if(PSO->Smoothing) Message::Check(", Smoothing %d", PSO->Smoothing);
if(PSO->Dimension != DIM_ALL) if(PSO->Dimension != DIM_ALL)
Message::Check(", Dimension %d", PSO->Dimension); Message::Check(", Dimension %d", PSO->Dimension);
if(PSO->HarmonicToTime > 1) if(PSO->HarmonicToTime > 1)
Message::Check(", HarmonicToTime %d", PSO->HarmonicToTime); Message::Check(", HarmonicToTime %d", PSO->HarmonicToTime);
if(PSO->TimeToHarmonic) if(PSO->TimeToHarmonic)
Message::Check(", TimeToHarmonic %d", PSO->TimeToHarmonic); Message::Check(", TimeToHarmonic %d", PSO->TimeToHarmonic);
if(PSO->FourierTransform == 1) if(PSO->FourierTransform == 1) Message::Check(", FourierTransform");
Message::Check(", FourierTransform"); if(PSO->FourierTransform == 2) Message::Check(", CosineTransform");
if(PSO->FourierTransform == 2)
Message::Check(", CosineTransform");
if(PSO->TimeInterval_Flag) if(PSO->TimeInterval_Flag)
Message::Check(", TimeInterval {%g, %g}", Message::Check(", TimeInterval {%g, %g}", PSO->TimeInterval[0],
PSO->TimeInterval[0], PSO->TimeInterval[1]); PSO->TimeInterval[1]);
if(PSO->Sort) if(PSO->Sort)
Message::Check(", Sort %s", Message::Check(", Sort %s", Get_StringForDefine(
Get_StringForDefine(PostSubOperation_SortType, PSO->Adapt PostSubOperation_SortType, PSO->Adapt));
));
if(PSO->Adapt) if(PSO->Adapt)
Message::Check(", Adapt %s", Message::Check(
Get_StringForDefine(PostSubOperation_AdaptationType, PSO- ", Adapt %s",
>Adapt)); Get_StringForDefine(PostSubOperation_AdaptationType, PSO->Adapt));
if(PSO->Target >= 0) if(PSO->Target >= 0) Message::Check(", Target %g", PSO->Target);
Message::Check(", Target %g", PSO->Target);
if(PSO->Iso) {
if(PSO->Iso){ if(PSO->Iso < 0) {
if(PSO->Iso < 0){ Message::Check(", Iso {");
Message::Check(", Iso {"); for(i = 0; i < List_Nbr(PSO->Iso_L); i++) {
for(i=0; i<List_Nbr(PSO->Iso_L); i++){ if(i != List_Nbr(PSO->Iso_L) - 1)
if(i!=List_Nbr(PSO->Iso_L)-1) Message::Check("%g,", *(double *)List_Pointer(PSO->Iso_L, i));
Message::Check("%g,", *(double*)List_Pointer(PSO->Iso_L,i)); else
else Message::Check("%g}", *(double *)List_Pointer(PSO->Iso_L, i));
Message::Check("%g}", *(double*)List_Pointer(PSO->Iso_L,i)); }
} }
} else {
else{ Message::Check(", Iso %d", PSO->Iso);
Message::Check(", Iso %d", PSO->Iso); }
}
} }
/* todo: time steps, frequencies, values, changeofcoord, ... */ /* todo: time steps, frequencies, values, changeofcoord, ... */
Message::Check(", Format %s", Message::Check(", Format %s",
Get_StringForDefine(PostSubOperation_Format, PSO->Format)); Get_StringForDefine(PostSubOperation_Format, PSO->Format));
if(PSO->FileOut){ if(PSO->FileOut) {
Message::Check(", File %s\"%s\"", Message::Check(", File %s\"%s\"",
(PSO->CatFile==2)?">> ":(PSO->CatFile==1)?"> ":"", PSO->F (PSO->CatFile == 2) ? ">> " :
ileOut); (PSO->CatFile == 1) ? "> " :
"",
PSO->FileOut);
} }
Message::Check("];\n"); Message::Check("];\n");
} }
Message::Check(" }\n "); Message::Check(" }\n ");
Message::Check(" }\n"); Message::Check(" }\n");
} }
Message::Check("\n"); Message::Check("\n");
Message::Check("}\n"); Message::Check("}\n");
} }
int Print_Object(int ichoice) int Print_Object(int ichoice)
{ {
switch (ichoice) { switch(ichoice) {
case 0 : Print_Constants (); break; case 0: Print_Constants(); break;
case 1 : Print_Group (); break; case 1: Print_Group(); break;
case 2 : Print_Expression (); break; case 2: Print_Expression(); break;
case 3 : Print_Constraint (); break; case 3: Print_Constraint(); break;
case 4 : Print_Jacobian (); break; case 4: Print_Jacobian(); break;
case 5 : Print_Integration (); break; case 5: Print_Integration(); break;
case 6 : Print_FunctionSpace (); break; case 6: Print_FunctionSpace(); break;
case 7 : Print_Formulation (); break; case 7: Print_Formulation(); break;
case 8 : Print_Resolution (); break; case 8: Print_Resolution(); break;
case 9 : Print_PostProcessing(); break; case 9: Print_PostProcessing(); break;
case 10 : Print_PostOperation (); break; case 10: Print_PostOperation(); break;
default : return 1; default: return 1;
} }
return 0; return 0;
} }
void Print_ProblemStructure() void Print_ProblemStructure()
{ {
char buff[128]; char buff[128];
int ichoice; int ichoice;
while (1) { while(1) {
Message::Info("Checking"); Message::Info("Checking");
Message::Direct("(1) Constants (2) Groups (3) Functions"); Message::Direct("(1) Constants (2) Groups (3) Functions");
Message::Direct("(4) Constraints (5) Jacobians (6) Integrations") Message::Direct(
; "(4) Constraints (5) Jacobians (6) Integrations");
Message::Direct("(7) FunctionSpaces (8) Formulations (9) Resolutions"); Message::Direct("(7) FunctionSpaces (8) Formulations (9) Resolutions");
Message::Direct("(10) PostProcessings (11) PostOperations (other) Quit"); Message::Direct("(10) PostProcessings (11) PostOperations (other) Quit");
Message::Check("Choice: "); Message::Check("Choice: ");
if(!fgets(buff, 128, stdin)) if(!fgets(buff, 128, stdin)) break;
break;
ichoice = atoi(buff); ichoice = atoi(buff);
if(Print_Object(ichoice ? ichoice - 1 : -1)){ if(Print_Object(ichoice ? ichoice - 1 : -1)) {
Message::Check("E n d C h e c k i n g\n"); Message::Check("E n d C h e c k i n g\n");
return; return;
} }
} }
} }
void Print_ListResolution(int choose, int Flag_LRES, char **name) void Print_ListResolution(int choose, int Flag_LRES, char **name)
{ {
struct Resolution *RE; struct Resolution *RE;
int ichoice = 0; int ichoice = 0;
char buff[128]; char buff[128];
bool print = (!choose || (!Message::UseSocket() && !Message::UseOnelab())); bool print = (!choose || (!Message::UseSocket() && !Message::UseOnelab()));
std::vector<std::string> choices; std::vector<std::string> choices;
for (int i = 0; i < List_Nbr(Problem_S.Resolution); i++) { for(int i = 0; i < List_Nbr(Problem_S.Resolution); i++) {
RE = (struct Resolution*)List_Pointer(Problem_S.Resolution, i); RE = (struct Resolution *)List_Pointer(Problem_S.Resolution, i);
if(!RE->Hidden) choices.push_back(RE->Name); if(!RE->Hidden) choices.push_back(RE->Name);
} }
if(choices.size()){ if(choices.size()) {
if(Flag_LRES < 0){ if(Flag_LRES < 0) { ichoice = -Flag_LRES; }
ichoice = - Flag_LRES; else {
}
else{
if(print) Message::Info("Available Resolutions"); if(print) Message::Info("Available Resolutions");
for (unsigned i = 0; i < choices.size(); i++) { for(unsigned i = 0; i < choices.size(); i++) {
if(print) Message::Direct("(%d) %s", i + 1, choices[i].c_str()); if(print) Message::Direct("(%d) %s", i + 1, choices[i].c_str());
if(Message::UseSocket()) Message::SendOptionOnSocket(1, choices[i].c_str if(Message::UseSocket())
()); Message::SendOptionOnSocket(1, choices[i].c_str());
} }
if(Message::UseOnelab() && choices.size()){ if(Message::UseOnelab() && choices.size()) {
Constant c; Constant c;
c.Name = (char*)"ResolutionChoices"; c.Name = (char *)"ResolutionChoices";
c.Type = VAR_CHAR; c.Type = VAR_CHAR;
c.Value.Char = strSave(choices[0].c_str()); c.Value.Char = strSave(choices[0].c_str());
std::map<std::string, std::vector<double> > floatOptions; std::map<std::string, std::vector<double> > floatOptions;
// force *not* read-only here, in case the parameter already exists *as // force *not* read-only here, in case the parameter already exists *as
// read-only* in the DB, in which case we do want to keep the value // read-only* in the DB, in which case we do want to keep the value
// from the server // from the server
floatOptions["ReadOnly"].push_back(0); floatOptions["ReadOnly"].push_back(0);
std::map<std::string, std::vector<std::string> > charOptions; std::map<std::string, std::vector<std::string> > charOptions;
charOptions["Choices"] = choices; charOptions["Choices"] = choices;
charOptions["Name"].push_back(Message::GetOnelabClientName() + "/1Resolu charOptions["Name"].push_back(Message::GetOnelabClientName() +
tionChoices"); "/1ResolutionChoices");
charOptions["Label"].push_back("Resolution"); charOptions["Label"].push_back("Resolution");
Message::ExchangeOnelabParameter(&c, floatOptions, charOptions); Message::ExchangeOnelabParameter(&c, floatOptions, charOptions);
if(choose){ if(choose) {
*name = c.Value.Char; *name = c.Value.Char;
return; return;
} }
} }
if(choose){ if(choose) {
Message::Check("Choice: "); Message::Check("Choice: ");
if(fgets(buff, 128, stdin)) if(fgets(buff, 128, stdin)) ichoice = atoi(buff);
ichoice = atoi(buff);
} }
} }
if(ichoice > 0 && ichoice < (int)choices.size() + 1){ if(ichoice > 0 && ichoice < (int)choices.size() + 1) {
*name = strSave(choices[ichoice - 1].c_str()); *name = strSave(choices[ichoice - 1].c_str());
return; return;
} }
else if(choose) else if(choose)
Message::Error("Unknown Resolution"); Message::Error("Unknown Resolution");
} }
else else
Message::Info("No Resolution available"); Message::Info("No Resolution available");
} }
skipping to change at line 2062 skipping to change at line 2138
{ {
std::string::size_type beg = s.find_first_not_of(' '); std::string::size_type beg = s.find_first_not_of(' ');
std::string::size_type end = s.find_last_not_of(' '); std::string::size_type end = s.find_last_not_of(' ');
if(beg == std::string::npos || end == std::string::npos) return ""; if(beg == std::string::npos || end == std::string::npos) return "";
return s.substr(beg, end + 1 - beg); return s.substr(beg, end + 1 - beg);
} }
void Print_ListPostOperation(int choose, int Flag_LPOS, char *name[NBR_MAX_POS]) void Print_ListPostOperation(int choose, int Flag_LPOS, char *name[NBR_MAX_POS])
{ {
struct PostOperation *PO; struct PostOperation *PO;
int ichoice = 0; int ichoice = 0;
char buff[128]; char buff[128];
bool print = (!choose || (!Message::UseSocket() && !Message::UseOnelab())); bool print = (!choose || (!Message::UseSocket() && !Message::UseOnelab()));
std::vector<std::string> choices; std::vector<std::string> choices;
for (int i = 0; i < List_Nbr(Problem_S.PostOperation); i++) { for(int i = 0; i < List_Nbr(Problem_S.PostOperation); i++) {
PO = (struct PostOperation*)List_Pointer(Problem_S.PostOperation, i); PO = (struct PostOperation *)List_Pointer(Problem_S.PostOperation, i);
if(!PO->Hidden) choices.push_back(PO->Name); if(!PO->Hidden) choices.push_back(PO->Name);
} }
if(choices.size()){ if(choices.size()) {
if(Flag_LPOS < 0){ if(Flag_LPOS < 0) { ichoice = -Flag_LPOS; }
ichoice = - Flag_LPOS; else {
}
else{
if(print) Message::Info("Available PostOperations"); if(print) Message::Info("Available PostOperations");
for (unsigned i = 0; i < choices.size(); i++) { for(unsigned i = 0; i < choices.size(); i++) {
if(print) Message::Direct("(%d) %s", i + 1, choices[i].c_str()); if(print) Message::Direct("(%d) %s", i + 1, choices[i].c_str());
if(Message::UseSocket()) Message::SendOptionOnSocket(2, choices[i].c_str( if(Message::UseSocket())
)); Message::SendOptionOnSocket(2, choices[i].c_str());
} }
if(Message::UseOnelab() && choices.size()){ if(Message::UseOnelab() && choices.size()) {
Constant c; Constant c;
c.Name = (char*)"PostOperationChoices"; c.Name = (char *)"PostOperationChoices";
c.Type = VAR_CHAR; c.Type = VAR_CHAR;
c.Value.Char = strSave(choices[0].c_str()); c.Value.Char = strSave(choices[0].c_str());
std::map<std::string, std::vector<double> > floatOptions; std::map<std::string, std::vector<double> > floatOptions;
// force *not* read-only here, in case the parameter already exists *as // force *not* read-only here, in case the parameter already exists *as
// read-only* in the DB, in which case we do want to keep the value // read-only* in the DB, in which case we do want to keep the value
// from the server // from the server
floatOptions["ReadOnly"].push_back(0); floatOptions["ReadOnly"].push_back(0);
std::map<std::string, std::vector<std::string> > charOptions; std::map<std::string, std::vector<std::string> > charOptions;
charOptions["Choices"] = choices; charOptions["Choices"] = choices;
charOptions["Name"].push_back(Message::GetOnelabClientName() + "/2PostOp charOptions["Name"].push_back(Message::GetOnelabClientName() +
erationChoices"); "/2PostOperationChoices");
charOptions["Label"].push_back("Post-processing"); charOptions["Label"].push_back("Post-processing");
charOptions["MultipleSelection"].push_back("0"); charOptions["MultipleSelection"].push_back("0");
Message::ExchangeOnelabParameter(&c, floatOptions, charOptions); Message::ExchangeOnelabParameter(&c, floatOptions, charOptions);
if(choose){ if(choose) {
std::string str(c.Value.Char); std::string str(c.Value.Char);
int i = 0; int i = 0;
std::string::size_type first = 0; std::string::size_type first = 0;
while(1){ while(1) {
std::string::size_type last = str.find_first_of(",", first); std::string::size_type last = str.find_first_of(",", first);
std::string next = str.substr(first, last - first); std::string next = str.substr(first, last - first);
name[i++] = strSave(removeWhiteSpace(next).c_str()); name[i++] = strSave(removeWhiteSpace(next).c_str());
if(last == std::string::npos) break; if(last == std::string::npos) break;
first = last + 1; first = last + 1;
if(i == NBR_MAX_POS - 1) break; if(i == NBR_MAX_POS - 1) break;
} }
name[i] = NULL; name[i] = NULL;
return; return;
} }
} }
if(choose){ if(choose) {
Message::Check("Choice: "); Message::Check("Choice: ");
if(fgets(buff, 128, stdin)) if(fgets(buff, 128, stdin)) ichoice = atoi(buff);
ichoice = atoi(buff);
} }
} }
if(ichoice > 0 && ichoice < (int)choices.size() + 1){ if(ichoice > 0 && ichoice < (int)choices.size() + 1) {
name[0] = strSave(choices[ichoice - 1].c_str()); name[0] = strSave(choices[ichoice - 1].c_str());
name[1] = NULL; name[1] = NULL;
return; return;
} }
else if(choose) else if(choose)
Message::Error("Unknown PostOperation"); Message::Error("Unknown PostOperation");
} }
else else
Message::Info("No PostOperation available"); Message::Info("No PostOperation available");
} }
 End of changes. 310 change blocks. 
1175 lines changed or deleted 1123 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)