[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Five external solvers can be interfaced simultaneously with Gmsh.
If you just want to start a solver from the solver module, with no further
interactions between the solver and Gmsh, just edit the options relative to
one of the five available solvers (e.g., Solver.Name0
,
Solver.Executable0
, ...; see 5.1 Solver options), and set the
corresponding "client-server" option to zero
(e.g., Solver.ClientServer0 = 0
). This doesn't require any
modification to be made to the solver.
If you want the solver to interact with Gmsh (for error messages, option
definitions, post-processing, etc.), you need to link your solver with the
`GmshClient.c' file and add the appropriate function calls inside your
program. You can then proceed as in the previous case, but this time you
should set the client-server option to 1 (e.g., Solver.ClientServer0 =
1
), so that Gmsh and the solver can communicate through a Unix socket. See
5.2 Solver example, for an example of how to interface a C++
solver. Bindings for solvers written in other languages (C, Perl and Python)
are available in the source distribution.
5.1 Solver options 5.2 Solver example
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Solver.SocketName
".gmshsock"
General.OptionsFileName
Solver.Name0
"GetDP"
General.OptionsFileName
Solver.Help0
"A General environment for the treatment of
Discrete Problems.
Copyright (C) 1997-2008
Patrick Dular and Christophe Geuzaine.
Visit http://www.geuz.org/getdp/ for more info"
General.OptionsFileName
Solver.Executable0
"getdp"
General.OptionsFileName
Solver.Extension0
".pro"
General.OptionsFileName
Solver.MeshName0
""
General.OptionsFileName
Solver.MeshCommand0
"-msh %s"
General.OptionsFileName
Solver.SocketCommand0
"-socket %s"
General.OptionsFileName
Solver.NameCommand0
"%s"
General.OptionsFileName
Solver.OptionCommand0
""
General.OptionsFileName
Solver.FirstOption0
"Resolution"
General.OptionsFileName
Solver.SecondOption0
"PostOperation"
General.OptionsFileName
Solver.ThirdOption0
""
General.OptionsFileName
Solver.FourthOption0
""
General.OptionsFileName
Solver.FifthOption0
""
General.OptionsFileName
Solver.FirstButton0
"Pre"
General.OptionsFileName
Solver.FirstButtonCommand0
"-pre %s"
General.OptionsFileName
Solver.SecondButton0
"Cal"
General.OptionsFileName
Solver.SecondButtonCommand0
"-cal"
General.OptionsFileName
Solver.ThirdButton0
"Pos"
General.OptionsFileName
Solver.ThirdButtonCommand0
"-pos %s"
General.OptionsFileName
Solver.FourthButton0
""
General.OptionsFileName
Solver.FourthButtonCommand0
""
General.OptionsFileName
Solver.FifthButton0
""
General.OptionsFileName
Solver.FifthButtonCommand0
""
General.OptionsFileName
Solver.Name1
""
General.OptionsFileName
Solver.Help1
""
General.OptionsFileName
Solver.Executable1
""
General.OptionsFileName
Solver.Extension1
""
General.OptionsFileName
Solver.MeshName1
""
General.OptionsFileName
Solver.MeshCommand1
""
General.OptionsFileName
Solver.SocketCommand1
"-socket %s"
General.OptionsFileName
Solver.NameCommand1
"%s"
General.OptionsFileName
Solver.OptionCommand1
""
General.OptionsFileName
Solver.FirstOption1
""
General.OptionsFileName
Solver.SecondOption1
""
General.OptionsFileName
Solver.ThirdOption1
""
General.OptionsFileName
Solver.FourthOption1
""
General.OptionsFileName
Solver.FifthOption1
""
General.OptionsFileName
Solver.FirstButton1
""
General.OptionsFileName
Solver.FirstButtonCommand1
""
General.OptionsFileName
Solver.SecondButton1
""
General.OptionsFileName
Solver.SecondButtonCommand1
""
General.OptionsFileName
Solver.ThirdButton1
""
General.OptionsFileName
Solver.ThirdButtonCommand1
""
General.OptionsFileName
Solver.FourthButton1
""
General.OptionsFileName
Solver.FourthButtonCommand1
""
General.OptionsFileName
Solver.FifthButton1
""
General.OptionsFileName
Solver.FifthButtonCommand1
""
General.OptionsFileName
Solver.Name2
""
General.OptionsFileName
Solver.Help2
""
General.OptionsFileName
Solver.Executable2
""
General.OptionsFileName
Solver.Extension2
""
General.OptionsFileName
Solver.MeshName2
""
General.OptionsFileName
Solver.MeshCommand2
""
General.OptionsFileName
Solver.SocketCommand2
"-socket %s"
General.OptionsFileName
Solver.NameCommand2
"%s"
General.OptionsFileName
Solver.OptionCommand2
""
General.OptionsFileName
Solver.FirstOption2
""
General.OptionsFileName
Solver.SecondOption2
""
General.OptionsFileName
Solver.ThirdOption2
""
General.OptionsFileName
Solver.FourthOption2
""
General.OptionsFileName
Solver.FifthOption2
""
General.OptionsFileName
Solver.FirstButton2
""
General.OptionsFileName
Solver.FirstButtonCommand2
""
General.OptionsFileName
Solver.SecondButton2
""
General.OptionsFileName
Solver.SecondButtonCommand2
""
General.OptionsFileName
Solver.ThirdButton2
""
General.OptionsFileName
Solver.ThirdButtonCommand2
""
General.OptionsFileName
Solver.FourthButton2
""
General.OptionsFileName
Solver.FourthButtonCommand2
""
General.OptionsFileName
Solver.FifthButton2
""
General.OptionsFileName
Solver.FifthButtonCommand2
""
General.OptionsFileName
Solver.Name3
""
General.OptionsFileName
Solver.Help3
""
General.OptionsFileName
Solver.Executable3
""
General.OptionsFileName
Solver.Extension3
""
General.OptionsFileName
Solver.MeshName3
""
General.OptionsFileName
Solver.MeshCommand3
""
General.OptionsFileName
Solver.SocketCommand3
"-socket %s"
General.OptionsFileName
Solver.NameCommand3
"%s"
General.OptionsFileName
Solver.OptionCommand3
""
General.OptionsFileName
Solver.FirstOption3
""
General.OptionsFileName
Solver.SecondOption3
""
General.OptionsFileName
Solver.ThirdOption3
""
General.OptionsFileName
Solver.FourthOption3
""
General.OptionsFileName
Solver.FifthOption3
""
General.OptionsFileName
Solver.FirstButton3
""
General.OptionsFileName
Solver.FirstButtonCommand3
""
General.OptionsFileName
Solver.SecondButton3
""
General.OptionsFileName
Solver.SecondButtonCommand3
""
General.OptionsFileName
Solver.ThirdButton3
""
General.OptionsFileName
Solver.ThirdButtonCommand3
""
General.OptionsFileName
Solver.FourthButton3
""
General.OptionsFileName
Solver.FourthButtonCommand3
""
General.OptionsFileName
Solver.FifthButton3
""
General.OptionsFileName
Solver.FifthButtonCommand3
""
General.OptionsFileName
Solver.Name4
""
General.OptionsFileName
Solver.Help4
""
General.OptionsFileName
Solver.Executable4
""
General.OptionsFileName
Solver.Extension4
""
General.OptionsFileName
Solver.MeshName4
""
General.OptionsFileName
Solver.MeshCommand4
""
General.OptionsFileName
Solver.SocketCommand4
"-socket %s"
General.OptionsFileName
Solver.NameCommand4
"%s"
General.OptionsFileName
Solver.OptionCommand4
""
General.OptionsFileName
Solver.FirstOption4
""
General.OptionsFileName
Solver.SecondOption4
""
General.OptionsFileName
Solver.ThirdOption4
""
General.OptionsFileName
Solver.FourthOption4
""
General.OptionsFileName
Solver.FifthOption4
""
General.OptionsFileName
Solver.FirstButton4
""
General.OptionsFileName
Solver.FirstButtonCommand4
""
General.OptionsFileName
Solver.SecondButton4
""
General.OptionsFileName
Solver.SecondButtonCommand4
""
General.OptionsFileName
Solver.ThirdButton4
""
General.OptionsFileName
Solver.ThirdButtonCommand4
""
General.OptionsFileName
Solver.FourthButton4
""
General.OptionsFileName
Solver.FourthButtonCommand4
""
General.OptionsFileName
Solver.FifthButton4
""
General.OptionsFileName
Solver.FifthButtonCommand4
""
General.OptionsFileName
Solver.AlwaysListen
0
General.OptionsFileName
Solver.ClientServer0
1
General.OptionsFileName
Solver.ClientServer1
0
General.OptionsFileName
Solver.ClientServer2
0
General.OptionsFileName
Solver.ClientServer3
0
General.OptionsFileName
Solver.ClientServer4
0
General.OptionsFileName
Solver.MaximumDelay
4
General.OptionsFileName
Solver.MergeViews0
1
General.OptionsFileName
Solver.MergeViews1
1
General.OptionsFileName
Solver.MergeViews2
1
General.OptionsFileName
Solver.MergeViews3
1
General.OptionsFileName
Solver.MergeViews4
1
General.OptionsFileName
Solver.Plugins
0
General.OptionsFileName
Solver.PopupMessages0
1
General.OptionsFileName
Solver.PopupMessages1
1
General.OptionsFileName
Solver.PopupMessages2
1
General.OptionsFileName
Solver.PopupMessages3
1
General.OptionsFileName
Solver.PopupMessages4
1
General.OptionsFileName
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Here is a small example of how to interface a C++ solver with Gmsh. The following listing reproduces the `utils/solvers/c++/solver.cpp' file from the Gmsh source distribution (C, Perl and Python examples are also available).
// $Id: solver.cpp,v 1.10 2007-09-04 13:47:08 remacle Exp $ // // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation // files (the "Software"), to deal in the Software without // restriction, including without limitation the rights to use, copy, // modify, merge, publish, distribute, and/or sell copies of the // Software, and to permit persons to whom the Software is furnished // to do so, provided that the above copyright notice(s) and this // permission notice appear in all copies of the Software and that // both the above copyright notice(s) and this permission notice // appear in supporting documentation. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE // COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR // ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY // DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, // WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS // ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE // OF THIS SOFTWARE. // // Please report all bugs and problems to <gmsh@geuz.org>. // This file contains a dummy client solver for Gmsh. It does not // solve anything, but shows how to program your own solver to interact // with the Gmsh solver module. // // To compile this solver, type something like: // // g++ solver.cpp -o solver.exe // // To run it, merge the contents of the file solver.opt into your // default Gmsh option file, or launch Gmsh with the command: // // gmsh -option solver.opt // // You will then see a new button labeled "My C++ solver" in Gmsh's // solver menu. #include <math.h> #include "GmshClient.h" typedef enum { send_options, run_code } action; int main(int argc, char *argv[]) { action what_to_do = run_code; char *name = NULL, *option = NULL, *socket = NULL; // parse command line int i = 0; while(i < argc) { if(argv[i][0] == '-') { if(!strcmp(argv[i] + 1, "socket")) { i++; if(argv[i]) socket = argv[i++]; } else if(!strcmp(argv[i] + 1, "options")) { i++; what_to_do = send_options; } else if(!strcmp(argv[i] + 1, "run")) { i++; what_to_do = run_code; if(argv[i]) option = argv[i++]; } } else name = argv[i++]; } if(!socket) { printf("No socket specified: running non-interactively...\n"); exit(1); } // connect to Gmsh GmshClient client; if(client.Connect(socket) < 0){ printf("Unable to connect to Gmsh\n"); exit(1); } client.Start(); if(what_to_do == send_options) { // send the available options for this computation client.Option(1, "FormulationH"); client.Option(1, "ConvTest"); client.Option(1, "Blablabli"); } else if(what_to_do == run_code){ // do the computation and merge some views for(int i = 0; i < 10; i++){ client.Info("Computing curve..."); // fake computation for 500ms: #if !defined(WIN32) || defined(__CYGWIN__) usleep(500 * 1000); #else Sleep(500); #endif client.Info("Done computing curve"); FILE *file = fopen("solver.pos", "w"); if(!file) client.Error("Unable to open output file"); else { fprintf(file, "View.Type = 2;\n"); fprintf(file, "View.Axes = 3;\n"); fprintf(file, "Delete View[0];\n"); fprintf(file, "View \"%s\"{\n", option); for(int j = 0; j < 100; j++) fprintf(file, "SP(%d,0,0){%g};\n", j,sin(j*i*M_PI/10.)); fprintf(file, "};\n"); fclose(file); client.MergeFile("solver.pos"); } } client.Info("Done!"); } client.Stop(); client.Disconnect(); }
To define the above solver as the second external solver in Gmsh, you then
need to define the following options (either merge them in your Gmsh option
file, or use the -option
command-line option--see 8.3 Command-line options):
Solver.Name1 = "My C++ Solver"; Solver.Executable1 = "solver.exe"; Solver.OptionCommand1 = "-options"; Solver.FirstOption1 = "My options"; Solver.FirstButton1 = "Run !"; Solver.FirstButtonCommand1 = "-run %s"; Solver.ClientServer1 = 1; Solver.MergeViews1 = 1; Solver.PopupMessages1 = 1;
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |