Newer
Older
// Warning: we *don't* close included files. If you need to
// include many files, use "Merge" instead: some OSes limit
// the number of files a process can open simultaneously (500
// for OS X)
else if(!strcmp(yyvsp[-2].c, "Print")){
FixRelativePath(yyvsp[-1].c, tmpstring);
CreateOutputFile(tmpstring, CTX.print.format);
}
FixRelativePath(yyvsp[-1].c, tmpstring);
CreateOutputFile(tmpstring, CTX.mesh.format);
else if(!strcmp(yyvsp[-2].c, "Merge") || !strcmp(yyvsp[-2].c, "MergeWithBoundingBox")){
// MergeWithBoundingBox is deprecated
}
else if(!strcmp(yyvsp[-2].c, "System")){

Christophe Geuzaine
committed
SystemCall(yyvsp[-1].c);

Christophe Geuzaine
committed
yymsg(GERROR, "Unknown command '%s'", yyvsp[-2].c);
{
if(!strcmp(yyvsp[-6].c, "Save") && !strcmp(yyvsp[-5].c, "View")){
Post_View *v = (Post_View *)List_Pointer_Test(CTX.post.list, (int)yyvsp[-3].d);
if(v){
}
}
else{
yymsg(GERROR, "Unknown command '%s'", yyvsp[-6].c);
}
;
break;}
if(GetTime() - sleep_time > (long)(yyvsp[-1].d*1.e6)) break;
}
}
else if(!strcmp(yyvsp[-2].c, "Mesh")){

Christophe Geuzaine
committed
yymsg(GERROR, "Mesh directives are not (yet) allowed in scripts");

Christophe Geuzaine
committed
yymsg(GERROR, "Unknown command '%s'", yyvsp[-2].c);
try {
GMSH_PluginManager::instance()->action(yyvsp[-4].c, yyvsp[-1].c, 0);
}
yymsg(WARNING, "Unknown action '%s' or plugin '%s'", yyvsp[-1].c, yyvsp[-4].c);
}
CombineViews(1, 0);
else if(!strcmp(yyvsp[-1].c, "TimeSteps"))
CombineViews_Time(2, 0);
LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d;
LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d;
LoopControlVariablesTab[ImbricatedLoop][2] = 1.0;
LoopControlVariablesNameTab[ImbricatedLoop] = "";
yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno;
ImbricatedLoop++;
if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
yymsg(GERROR, "Reached maximum number of imbricated loops");
ImbricatedLoop = MAX_RECUR_LOOPS-1;
}
LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d;
LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d;
LoopControlVariablesTab[ImbricatedLoop][2] = yyvsp[-1].d;
LoopControlVariablesNameTab[ImbricatedLoop] = "";
yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno;
ImbricatedLoop++;
if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
yymsg(GERROR, "Reached maximum number of imbricated loops");
ImbricatedLoop = MAX_RECUR_LOOPS-1;
}
LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d;
LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d;
LoopControlVariablesTab[ImbricatedLoop][2] = 1.0;
LoopControlVariablesNameTab[ImbricatedLoop] = yyvsp[-6].c;
Symbol TheSymbol;
if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
TheSymbol.val = List_Create(1, 1, sizeof(double));
List_Put(TheSymbol.val, 0, &yyvsp[-3].d);
}
else{
List_Write(pSymbol->val, 0, &yyvsp[-3].d);
}
yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno;
ImbricatedLoop++;
if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
yymsg(GERROR, "Reached maximum number of imbricated loops");
ImbricatedLoop = MAX_RECUR_LOOPS-1;
}
LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d;
LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d;
LoopControlVariablesTab[ImbricatedLoop][2] = yyvsp[-1].d;
LoopControlVariablesNameTab[ImbricatedLoop] = yyvsp[-8].c;
Symbol TheSymbol;
if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol))){
TheSymbol.val = List_Create(1, 1, sizeof(double));
List_Put(TheSymbol.val, 0, &yyvsp[-5].d);
}
else{
List_Write(pSymbol->val, 0, &yyvsp[-5].d);
}
yylinenoImbricatedLoopsTab[ImbricatedLoop] = yylineno;
ImbricatedLoop++;
if(ImbricatedLoop > MAX_RECUR_LOOPS-1){
yymsg(GERROR, "Reached maximum number of imbricated loops");
ImbricatedLoop = MAX_RECUR_LOOPS-1;
}
if(LoopControlVariablesTab[ImbricatedLoop-1][1] >
LoopControlVariablesTab[ImbricatedLoop-1][0]){
LoopControlVariablesTab[ImbricatedLoop-1][0] +=
LoopControlVariablesTab[ImbricatedLoop-1][2];
if(strlen(LoopControlVariablesNameTab[ImbricatedLoop-1])){
TheSymbol.Name = LoopControlVariablesNameTab[ImbricatedLoop-1];
Symbol *pSymbol;
if(!(pSymbol = (Symbol*)Tree_PQuery(Symbol_T, &TheSymbol)))
yymsg(GERROR, "Unknown loop variable");
else
*(double*)List_Pointer_Fast(pSymbol->val, 0) +=
LoopControlVariablesTab[ImbricatedLoop-1][2];
yylineno = yylinenoImbricatedLoopsTab[ImbricatedLoop-1];
ImbricatedLoop--;
if(ImbricatedLoop < 0){
yymsg(GERROR, "Problem with imbricated loops");
ImbricatedLoop = 0;
}
if(!FunctionManager::Instance()->createFunction(yyvsp[0].c, yyin, yyname, yylineno))
yymsg(GERROR, "Redefinition of function %s", yyvsp[0].c);
if(!FunctionManager::Instance()->leaveFunction(&yyin, yyname, yylineno))

Christophe Geuzaine
committed
yymsg(GERROR, "Error while exiting function");
if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c, &yyin, yyname, yylineno))
yymsg(GERROR, "Unknown function %s", yyvsp[-1].c);
TheShape.Num = Extrude_ProtudePoint(TRANSLATE, (int)yyvsp[-4].d, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2],
0., 0., 0., 0., 0., 0., 0.,
&pc, &prc, 1, NULL);
TheShape.Type = MSH_POINT;
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
TheShape.Num = Extrude_ProtudePoint(ROTATE, (int)yyvsp[-8].d, 0., 0., 0.,
yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d,
&pc, &prc, 1, NULL);
TheShape.Type = MSH_POINT;
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
TheShape.Num = Extrude_ProtudePoint(TRANSLATE_ROTATE, (int)yyvsp[-10].d, yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2],
yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d,
&pc, &prc, 1, NULL);
TheShape.Type = MSH_POINT;
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
TheShape.Num = Extrude_ProtudePoint(TRANSLATE, (int)yyvsp[-8].d, yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2],
0., 0., 0., 0., 0., 0., 0.,
&pc, &prc, 1, &extr);
TheShape.Type = MSH_POINT;
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
TheShape.Num = Extrude_ProtudePoint(ROTATE, (int)yyvsp[-12].d, 0., 0., 0.,
yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d,
&pc, &prc, 1, &extr);
TheShape.Type = MSH_POINT;
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
TheShape.Num = Extrude_ProtudePoint(TRANSLATE_ROTATE, (int)yyvsp[-14].d, yyvsp[-12].v[0], yyvsp[-12].v[1], yyvsp[-12].v[2],
yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d,
&pc, &prc, 1, &extr);
TheShape.Type = MSH_POINT;
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
TheShape.Num = Extrude_ProtudeCurve(TRANSLATE, (int)yyvsp[-4].d, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2],
0., 0., 0., 0., 0., 0., 0.,
&ps, 1, NULL);
Curve *c = FindCurve(TheShape.Num, THEM);
if(!c){
TheShape.Type = 0;
}
else{
TheShape.Type = c->Typ;
}
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
TheShape.Num = Extrude_ProtudeCurve(ROTATE, (int)yyvsp[-8].d, 0., 0., 0.,
yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d,
&ps, 1, NULL);
Curve *c = FindCurve(TheShape.Num, THEM);
if(!c){
TheShape.Type = 0;
}
else{
TheShape.Type = c->Typ;
}
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
TheShape.Num = Extrude_ProtudeCurve(TRANSLATE_ROTATE, (int)yyvsp[-10].d, yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2],
yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d,
&ps, 1, NULL);
Curve *c = FindCurve(TheShape.Num, THEM);
if(!c){
TheShape.Type = 0;
}
else{
TheShape.Type = c->Typ;
}
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
extr.mesh.ExtrudeMesh = false;
extr.mesh.Recombine = false;
TheShape.Num = Extrude_ProtudeCurve(TRANSLATE, (int)yyvsp[-8].d, yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2],
0., 0., 0., 0., 0., 0., 0.,
&ps, 1, &extr);
Curve *c = FindCurve(TheShape.Num, THEM);
if(!c){
TheShape.Type = 0;
}
else{
TheShape.Type = c->Typ;
}
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
extr.mesh.ExtrudeMesh = false;
extr.mesh.Recombine = false;
TheShape.Num = Extrude_ProtudeCurve(ROTATE, (int)yyvsp[-12].d, 0., 0., 0.,
yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d,
&ps, 1, &extr);
Curve *c = FindCurve(TheShape.Num, THEM);
if(!c){
TheShape.Type = 0;
}
else{
TheShape.Type = c->Typ;
}
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
extr.mesh.ExtrudeMesh = false;
extr.mesh.Recombine = false;
TheShape.Num = Extrude_ProtudeCurve(TRANSLATE_ROTATE, (int)yyvsp[-14].d, yyvsp[-12].v[0], yyvsp[-12].v[1], yyvsp[-12].v[2],
yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d,
&ps, 1, &extr);
Curve *c = FindCurve(TheShape.Num, THEM);
if(!c){
TheShape.Type = 0;
}
else{
TheShape.Type = c->Typ;
}
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
TheShape.Num = Extrude_ProtudeSurface(TRANSLATE, (int)yyvsp[-4].d, yyvsp[-2].v[0], yyvsp[-2].v[1], yyvsp[-2].v[2],
0., 0., 0., 0., 0., 0., 0.,
0, NULL);
Surface *s = FindSurface(TheShape.Num, THEM);
if(!s){
TheShape.Type = 0;
}
else{
TheShape.Type = s->Typ;
}
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
TheShape.Num = Extrude_ProtudeSurface(ROTATE, (int)yyvsp[-8].d, 0., 0., 0.,
yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d,
0, NULL);
Surface *s = FindSurface(TheShape.Num, THEM);
if(!s){
TheShape.Type = 0;
}
else{
TheShape.Type = s->Typ;
}
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
TheShape.Num = Extrude_ProtudeSurface(TRANSLATE_ROTATE, (int)yyvsp[-10].d, yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2],
yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2], yyvsp[-4].v[0], yyvsp[-4].v[1], yyvsp[-4].v[2], yyvsp[-2].d,
0, NULL);
Surface *s = FindSurface(TheShape.Num, THEM);
if(!s){
TheShape.Type = 0;
}
else{
TheShape.Type = s->Typ;
}
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
extr.mesh.ExtrudeMesh = false;
extr.mesh.Recombine = false;
TheShape.Num = Extrude_ProtudeSurface(TRANSLATE, (int)yyvsp[-8].d, yyvsp[-6].v[0], yyvsp[-6].v[1], yyvsp[-6].v[2],
0., 0., 0., 0., 0., 0., 0.,
TheShape.Type = 0;
}
else{
TheShape.Type = s->Typ;
}
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
extr.mesh.ExtrudeMesh = false;
extr.mesh.Recombine = false;
TheShape.Num = Extrude_ProtudeSurface(ROTATE, (int)yyvsp[-12].d, 0., 0., 0.,
yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d,
TheShape.Type = 0;
}
else{
TheShape.Type = s->Typ;
}
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
extr.mesh.ExtrudeMesh = false;
extr.mesh.Recombine = false;
TheShape.Num = Extrude_ProtudeSurface(TRANSLATE_ROTATE, (int)yyvsp[-14].d, yyvsp[-12].v[0], yyvsp[-12].v[1], yyvsp[-12].v[2],
yyvsp[-10].v[0], yyvsp[-10].v[1], yyvsp[-10].v[2], yyvsp[-8].v[0], yyvsp[-8].v[1], yyvsp[-8].v[2], yyvsp[-6].d,
TheShape.Type = 0;
}
else{
TheShape.Type = s->Typ;
}
yyval.l = List_Create(1, 1, sizeof(Shape));
List_Add(yyval.l, &TheShape);
double d;
extr.mesh.ExtrudeMesh = true;
extr.mesh.NbLayer = List_Nbr(yyvsp[-6].l);
if(List_Nbr(yyvsp[-6].l) == List_Nbr(yyvsp[-4].l) && List_Nbr(yyvsp[-6].l) == List_Nbr(yyvsp[-2].l)){
extr.mesh.NbElmLayer = (int*)Malloc(extr.mesh.NbLayer*sizeof(int));
extr.mesh.ZonLayer = (int*)Malloc(extr.mesh.NbLayer*sizeof(int));
extr.mesh.hLayer = (double*)Malloc(extr.mesh.NbLayer*sizeof(double));
for(int i = 0; i < List_Nbr(yyvsp[-6].l); i++){
List_Read(yyvsp[-6].l, i, &d);
extr.mesh.NbElmLayer[i] = (d>0)?(int)d:1;
extr.mesh.ZonLayer[i] = (int)d;
extr.mesh.hLayer[i] = d;
}
}
else{

Christophe Geuzaine
committed
yymsg(GERROR, "Wrong layer definition {%d, %d, %d}",
List_Nbr(yyvsp[-6].l), List_Nbr(yyvsp[-4].l), List_Nbr(yyvsp[-2].l));
List_Delete(yyvsp[-6].l);
List_Delete(yyvsp[-4].l);
List_Delete(yyvsp[-2].l);
double d;
extr.mesh.ExtrudeMesh = true;
extr.mesh.NbLayer = List_Nbr(yyvsp[-4].l);
if(List_Nbr(yyvsp[-4].l) == List_Nbr(yyvsp[-2].l)){
extr.mesh.NbElmLayer = (int*)Malloc(extr.mesh.NbLayer*sizeof(int));
extr.mesh.ZonLayer = (int*)Malloc(extr.mesh.NbLayer*sizeof(int));
extr.mesh.hLayer = (double*)Malloc(extr.mesh.NbLayer*sizeof(double));
for(int i = 0; i < List_Nbr(yyvsp[-4].l); i++){
List_Read(yyvsp[-4].l, i, &d);
extr.mesh.NbElmLayer[i] = (d>0)?(int)d:1;
extr.mesh.hLayer[i] = d;
}
}
else{

Christophe Geuzaine
committed
yymsg(GERROR, "Wrong layer definition {%d, %d}",
List_Nbr(yyvsp[-4].l), List_Nbr(yyvsp[-2].l));
}
List_Delete(yyvsp[-4].l);
List_Delete(yyvsp[-2].l);

Christophe Geuzaine
committed
yymsg(WARNING, "Unknown Curve %d", j);
c->Method = TRANSFINI;
c->ipar[0] = (yyvsp[-1].d>2)?(int)yyvsp[-1].d:2;
c->ipar[1] = sign(d);
c->dpar[0] = 1.0;

Christophe Geuzaine
committed
yymsg(WARNING, "Unknown Curve %d", j);
c->Method = TRANSFINI;
c->ipar[0] = (yyvsp[-4].d>2)?(int)yyvsp[-4].d:2;
c->ipar[1] = sign(d); /* Progresion : code 1 ou -1 */
c->dpar[0] = fabs(yyvsp[-1].d);

Christophe Geuzaine
committed
yymsg(WARNING, "Unknown Curve %d", j);
c->Method = TRANSFINI;
c->ipar[0] = (yyvsp[-4].d>2)?(int)yyvsp[-4].d:2;
c->ipar[1] = 2*sign(d); /* Bump : code 2 ou -2 */
c->dpar[0] = fabs(yyvsp[-1].d);

Christophe Geuzaine
committed
yymsg(WARNING, "Unknown Surface %d", (int)yyvsp[-4].d);
s->Method = TRANSFINI;

Christophe Geuzaine
committed
yymsg(GERROR, "Wrong definition of Transfinite Surface %d: "
Vertex *v = FindPoint(j, THEM);
if(!v)
yymsg(WARNING, "Unknown Point %d", j);
else
List_Add(s->TrsfPoints, &v);

Christophe Geuzaine
committed
yymsg(WARNING, "Unknown Surface %d", (int)yyvsp[-4].d);
s->Method = ELLIPTIC;

Christophe Geuzaine
committed
yymsg(GERROR, "Wrong definition of Elliptic Surface %d: "
Vertex *v = FindPoint(j, THEM);
if(!v)
yymsg(WARNING, "Unknown Point %d", j);
else
List_Add(s->TrsfPoints, &v);

Christophe Geuzaine
committed
yymsg(WARNING, "Unknown Volume %d", (int)yyvsp[-4].d);
v->Method = TRANSFINI;

Christophe Geuzaine
committed
yymsg(GERROR, "Wrong definition of Transfinite Volume %d: "
Vertex *vert = FindPoint(j, THEM);
if(!vert)
yymsg(WARNING, "Unknown Point %d", j);
else
List_Add(v->TrsfPoints, &vert);
s->Recombine = 1;
s->RecombineAngle = (yyvsp[-1].d > 0 && yyvsp[-1].d < 90) ? yyvsp[-1].d : 90;
s->Recombine = 1;
}
#line 3276 "Gmsh.y"
{ yyval.d = yyvsp[-2].d * yyvsp[0].d; ;
break;}
case 355:
#line 3278 "Gmsh.y"
{
if(!yyvsp[0].d)
yymsg(GERROR, "Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d);
else
yyval.d = yyvsp[-2].d / yyvsp[0].d;
;
#line 3284 "Gmsh.y"
{ yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d; ;
#line 3285 "Gmsh.y"
{ yyval.d = pow(yyvsp[-2].d, yyvsp[0].d); ;
#line 3288 "Gmsh.y"
{ yyval.d = yyvsp[-2].d <= yyvsp[0].d; ;
#line 3289 "Gmsh.y"
{ yyval.d = yyvsp[-2].d >= yyvsp[0].d; ;
#line 3290 "Gmsh.y"
{ yyval.d = yyvsp[-2].d == yyvsp[0].d; ;
#line 3291 "Gmsh.y"
{ yyval.d = yyvsp[-2].d != yyvsp[0].d; ;
#line 3292 "Gmsh.y"
{ yyval.d = yyvsp[-2].d && yyvsp[0].d; ;
#line 3293 "Gmsh.y"
{ yyval.d = yyvsp[-2].d || yyvsp[0].d; ;