Skip to content
Snippets Groups Projects
Commit dc051c28 authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

remove legacy solver examples

parent 1f1c7695
No related branches found
No related tags found
No related merge requests found
Showing
with 0 additions and 1874 deletions
// This is a dummy C++ 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 "GmshSocket.h"
typedef enum { send_options, run_code } action;
int main(int argc, char *argv[])
{
action what_to_do = run_code;
char *name = 0, *option = 0, *socket = 0;
// 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();
}
Solver.Name1 = "My C++ Solver";
Solver.Executable1 = "./solver.exe";
Solver.InputName1 = "dummy";
Solver.OptionCommand1 = "-options";
Solver.FirstOption1 = "My options";
Solver.FirstButton1 = "Run !";
Solver.FirstButtonCommand1 = "-run %s";
Solver.ClientServer1 = 1;
Solver.MergeViews1 = 1;
Solver.PopupMessages1 = 1;
/*
* Copyright (C) 1997-2013 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 the public mailing list <gmsh@geuz.org>.
*
* Contributor(s):
* Christopher Stott
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if defined(_AIX)
#include <strings.h>
#endif
#if !defined(WIN32) || defined(__CYGWIN__)
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/un.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <netdb.h>
#else
#include <winsock.h>
#include <process.h>
#endif
/* private functions */
static void Socket_SendData(int socket, const void *buffer, int bytes)
{
ssize_t len;
int sofar, remaining;
const char *buf;
buf = (const char *)buffer;
sofar = 0;
remaining = bytes;
do {
len = send(socket, buf + sofar, remaining, 0);
sofar += len;
remaining -= len;
} while(remaining > 0);
}
static void Socket_Sleep(int ms)
{
#if !defined(WIN32) || defined(__CYGWIN__)
usleep(1000 * ms);
#else
Sleep(ms);
#endif
}
static void Socket_Close(int s)
{
#if !defined(WIN32) || defined(__CYGWIN__)
close(s);
#else
closesocket(s);
#endif
}
/* public interface */
int Gmsh_Connect(const char *sockname)
{
#if !defined(WIN32) || defined(__CYGWIN__)
struct sockaddr_un addr_un;
#else
WSADATA wsaData;
int iResult;
#endif
struct sockaddr_in addr_in;
int sock;
int tries;
struct hostent *server;
int portno, remotelen;
char remote[256], *port;
#if defined(WIN32) && !defined(__CYGWIN__)
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
if(iResult != NO_ERROR)
return -4; /* Error: Couldn't initialize Windows sockets */
#endif
/* slight delay to be sure that the socket is bound by the
server before we attempt to connect to it... */
Socket_Sleep(100);
if(strstr(sockname, "/") || strstr(sockname, "\\") || !strstr(sockname, ":")){
/* UNIX socket (testing ":" is not enough with Windows paths) */
#if !defined(WIN32) || defined(__CYGWIN__)
sock = socket(PF_UNIX, SOCK_STREAM, 0);
if(sock < 0)
return -1; /* Error: Couldn't create socket */
/* try to connect socket to given name */
memset((char *) &addr_un, 0, sizeof(addr_un));
addr_un.sun_family = AF_UNIX;
strcpy(addr_un.sun_path, sockname);
for(tries = 0; tries < 5; tries++) {
if(connect(sock, (struct sockaddr *)&addr_un, sizeof(addr_un)) >= 0)
return sock;
Socket_Sleep(100);
}
#else
/* Unix sockets are not available on Windows without Cygwin */
return -1;
#endif
}
else{
/* TCP/IP socket */
sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock < 0)
return -1; /* Error: Couldn't create socket */
port = strstr(sockname, ":");
portno = atoi(port+1);
remotelen = strlen(sockname) - strlen(port);
if(remotelen > 0)
strncpy(remote, sockname, remotelen);
remote[remotelen] = '\0';
if(!(server = gethostbyname(remote))){
Socket_Close(sock);
return -3; /* Error: No such host */
}
/* try to connect socket to given name */
memset((char *) &addr_in, 0, sizeof(addr_in));
addr_in.sin_family = AF_INET;
memcpy((char *)&addr_in.sin_addr.s_addr, (char *)server->h_addr, server->h_length);
addr_in.sin_port = htons(portno);
for(tries = 0; tries < 5; tries++) {
if(connect(sock, (struct sockaddr *)&addr_in, sizeof(addr_in)) >= 0)
return sock;
Socket_Sleep(100);
}
}
Socket_Close(sock);
return -2; /* Error: Couldn't connect */
}
void Gmsh_SendString(int socket, int type, const char *str)
{
int len = strlen(str);
Socket_SendData(socket, &type, sizeof(int));
Socket_SendData(socket, &len, sizeof(int));
Socket_SendData(socket, str, len);
}
void Gmsh_Disconnect(int sock)
{
Socket_Close(sock);
#if defined(WIN32) && !defined(__CYGWIN__)
WSACleanup();
#endif
}
/*
* Copyright (C) 1997-2013 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 the public mailing list <gmsh@geuz.org>.
*/
#ifndef _GMSH_CLIENT_H_
#define _GMSH_CLIENT_H_
#define GMSH_CLIENT_START 1
#define GMSH_CLIENT_STOP 2
#define GMSH_CLIENT_INFO 10
#define GMSH_CLIENT_WARNING 11
#define GMSH_CLIENT_ERROR 12
#define GMSH_CLIENT_PROGRESS 13
#define GMSH_CLIENT_MERGE_FILE 20
#define GMSH_CLIENT_PARSE_STRING 21
#define GMSH_CLIENT_VERTEX_ARRAY 22
#define GMSH_CLIENT_SPEED_TEST 30
#define GMSH_CLIENT_OPTION 100
#define GMSH_CLIENT_OPTION_1 (GMSH_CLIENT_OPTION+0)
#define GMSH_CLIENT_OPTION_2 (GMSH_CLIENT_OPTION+1)
#define GMSH_CLIENT_OPTION_3 (GMSH_CLIENT_OPTION+2)
#define GMSH_CLIENT_OPTION_4 (GMSH_CLIENT_OPTION+3)
#define GMSH_CLIENT_OPTION_5 (GMSH_CLIENT_OPTION+4)
int Gmsh_Connect(const char *sockname);
void Gmsh_SendString(int socket, int type, const char *str);
void Gmsh_Disconnect(int sock);
#endif
/*
* 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 the public mailing list <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:
gcc -o solver.exe solver.c GmshClient.c
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 <stdlib.h>
#include <stdio.h>
#include <string.h>
#if !defined(WIN32) || defined(__CYGWIN__)
#include <unistd.h>
#endif
#include "GmshClient.h"
typedef enum { options, run } action;
int main(int argc, char *argv[])
{
action what = run;
int i = 0, s;
char *name = NULL, *option = NULL, *socket = NULL, tmp[256];
FILE *file;
/* 1. Loop through the command line arguments, remember the action
the solver has to perform (what) and store the socket name, the
option name and the problem name. */
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 = options;
}
else if(!strcmp(argv[i] + 1, "run")) {
i++;
what = run;
if(argv[i])
option = argv[i++];
}
else{
i++;
}
}
else
name = argv[i++];
}
/* 2. If the '-socket' option was not given, we cannot connect to
Gmsh... */
if(!socket) {
printf("No socket specified: running non-interactively...\n");
exit(1);
}
/* 3. Try to connect to the socket given by the '-socket' command
line option: */
s = Gmsh_Connect(socket);
if(s < 0) {
printf("Couldn't connect to socket %s\n", socket);
exit(1);
}
/* 4. Send the GMSH_CLIENT_START command (together with the process
ID of the solver), check if a problem name was specified, and
decide what to do according to the 'what' variable: */
sprintf(tmp, "%d", getpid());
Gmsh_SendString(s, GMSH_CLIENT_START, tmp);
if(!name) {
Gmsh_SendString(s, GMSH_CLIENT_ERROR, "Missing file name");
Gmsh_Disconnect(s);
exit(1);
}
switch (what) {
/* 4.1. If what==options, the solver sends the valid options (here
for the first option): */
case options:
Gmsh_SendString(s, GMSH_CLIENT_OPTION_1, "Val1");
Gmsh_SendString(s, GMSH_CLIENT_OPTION_1, "Val2");
Gmsh_SendString(s, GMSH_CLIENT_OPTION_1, "Val3");
break;
/* 4.2. If what==run, the solver runs the chosen option, updates
the progress message, issues some information data, produces a
post-processing map and asks Gmsh to merge it: */
case run:
sprintf(tmp, "Running %s with option %s...", name, option);
Gmsh_SendString(s, GMSH_CLIENT_INFO, tmp);
for(i = 0; i < 10; i++) {
sprintf(tmp, "%d %% complete", 10 * i);
Gmsh_SendString(s, GMSH_CLIENT_PROGRESS, tmp);
/* Fake some cpu-intensive calculation during 100ms: */
#if !defined(WIN32) || defined(__CYGWIN__)
usleep(100 * 1000);
#else
Sleep(100);
#endif
}
sprintf(tmp, "Done with %s!", name);
Gmsh_SendString(s, GMSH_CLIENT_INFO, tmp);
file = fopen("solver.pos", "wb");
if(!file) {
Gmsh_SendString(s, GMSH_CLIENT_ERROR, "Unable to open output file");
}
else {
fprintf(file, "View \"%s\"{\n", option);
fprintf(file, "ST(0,0,0,1,0,0,0,1,0){0,1,2};\n");
fprintf(file, "};\n");
fclose(file);
Gmsh_SendString(s, GMSH_CLIENT_MERGE_FILE, "solver.pos");
}
break;
}
/* 5. We can now disconnect the solver from Gmsh: */
Gmsh_SendString(s, GMSH_CLIENT_STOP, "Goodbye!");
Gmsh_Disconnect(s);
return 0;
}
// These options define 'solver.exe' as the second solver in Gmsh's
// solver module, under the name 'My C Solver'.
Solver.Name1 = "My C solver";
Solver.Help1 = "A simple example of the client/server
solver implementation in Gmsh...";
Solver.Executable1 = "./solver.exe";
Solver.InputName1 = "dummy";
Solver.SocketCommand1 = "-socket %s";
Solver.NameCommand1 = "%s";
Solver.OptionCommand1 = "-options";
Solver.FirstOption1 = "Option";
Solver.FirstButton1 = "Run";
Solver.FirstButtonCommand1 = "-run %s";
Solver.ClientServer1 = 1;
Solver.MergeViews1 = 1;
Solver.PopupMessages1 = 1;
# Copyright (c) 2002 Laurent CHAMPANEY <laurent.champaney@meca.uvsq.fr>.
# All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
package GMSH_CLIENT;
use Socket;
$START = 1;
$STOP = 2;
$INFO = 10;
$WARNING = 11;
$ERROR = 12;
$PROGRESS = 13;
$MERGE_FILE = 20;
$PARSE_STRING = 21;
$OPTION = 100;
$OPTION_1 = ($OPTION+0);
$OPTION_2 = ($OPTION+1);
$OPTION_3 = ($OPTION+2);
$OPTION_4 = ($OPTION+3);
$OPTION_5 = ($OPTION+4);
sub SocketSendData (*$;$$) {
my ($socket, $buffer, $bytes) = @_;
$lng = $bytes;
$decalage = 0;
while ($lng) {
$ecrit = syswrite $socket, $buffer, $lng, $decalage;
$decalage += $ecrit;
$lng -= $ecrit;
}
return;
};
sub SendString (*$;$$) {
my ($socket, $type, $str) = @_;
$type1 = pack("V", $type);
my $len2 = length($type1);
SocketSendData($socket, $type1, $len2);
my $len = length($str);
$len1 = pack("V", $len);
$len2 = length($len1);
SocketSendData($socket, $len1, $len2);
SocketSendData($socket, $str, $len);
return;
};
sub Disconnect (*) {
$socket = @_;
close $socket;
return;
};
sub Connect (*$;$$) {
my ($socket, $socket_file) = @_;
socket($socket, AF_UNIX, SOCK_STREAM, 0)
or die "Can't create socket : $!";
connect($socket, sockaddr_un($socket_file))
or die "Can't connect to $socket_file: $!";
return;
};
1;
// These options define 'solver.pl' as the second solver in
// Gmsh's solver module, under the name'My Perl Solver'.
Solver.Name1 = "My Perl solver";
Solver.Help1 = "A simple perl example of the client/server
solver implementation in Gmsh...";
Solver.Executable1 = "./solver.pl";
Solver.InputName1 = "dummy";
Solver.SocketCommand1 = "-socket %s";
Solver.NameCommand1 = "%s";
Solver.OptionCommand1 = "-options";
Solver.FirstOption1 = "Option";
Solver.FirstButton1 = "Run";
Solver.FirstButtonCommand1 = "-run %s";
Solver.ClientServer1 = 1;
Solver.MergeViews1 = 1;
Solver.PopupMessages1 = 1;
#!/usr/bin/perl
#
# $Id: solver.pl,v 1.4 2007-09-04 13:47:08 remacle Exp $
#
# Copyright (c) 2002 Laurent CHAMPANEY <laurent.champaney@meca.uvsq.fr>.
#
# This file contains a dummy perl client solver for Gmsh. It does not
# solve anything, but shows how to program your own perl solver
# to interact with the Gmsh solver module.
#
# To test this solver, copy the solver.opt file into your default
# Gmsh option file, or launch Gmsh with the command:
#
# gmsh -option solver.opt
#
#
use Getopt::Long;
#
# Let's include the Gmsh client interface definitions. At the time of
# this writing, the client interface contains only three functions:
# GMSH_CLIENT::Connect, GMSH_CLIENT::SendString and
# GMSH_CLIENT::Disconnect. This example shows how to use these
# functions in order to program some simple interactions between a
# solver and Gmsh.
#
require 'GMSH_CLIENT.pm';
#
# 1. Loop through the command line arguments, remember the action
# the solver has to perform and store the socket name, the
# option name and the problem name.
#
@knownoptions = ("options",
"run=s",
"mesh=s",
"socket=s");
GetOptions(@knownoptions) || exit;
#
# 2. If the '-socket' option was not given, we cannot connect to Gmsh...
#
$socket_file = $opt_socket or die "No socket file";
#
$problem = $ARGV[0];
#
# 3. Try to connect to the socket given by the '-socket' command
# line option:
#
# 3.1. If the socket is down, issue an error...
#
GMSH_CLIENT::Connect(CLIENT, $socket_file);
#
# 3.2. ...otherwise, send the GMSH_CLIENT_START command (together
# with the process ID of the solver), check if a problem name was
# specified, and decide what to do
#
my $mysolver_pid = $$;
GMSH_CLIENT::SendString(CLIENT, $GMSH_CLIENT::START, "$mysolver_pid");
#
# 3.2.1. If options, the solver sends the valid options
# (here for the first option):
#
if ($opt_options) {
GMSH_CLIENT::SendString(CLIENT, $GMSH_CLIENT::OPTION_1, "VAL1");
GMSH_CLIENT::SendString(CLIENT, $GMSH_CLIENT::OPTION_1, "VAL2");
GMSH_CLIENT::SendString(CLIENT, $GMSH_CLIENT::OPTION_1, "VAL3");
};
#
# 3.2.2. If run, the solver runs the chosen option, updates the progress
# message, issues some information data, produces a post-processing
# map and asks Gmsh to merge it:
#
if ($opt_run) {
#
if (!$problem) {
GMSH_CLIENT::SendString(CLIENT,$GMSH_CLIENT::ERROR,"Missing File Name");
GMSH_CLIENT::Disconnect(CLIENT);
exit;
};
$mess = "Running $problem with option $opt_run";
GMSH_CLIENT::SendString(CLIENT, $GMSH_CLIENT::INFO, $mess);
for (my $i=0 ; $i < 10; $i++) {
my $j = 10 * $i;
$mess = "$j% Complete";
GMSH_CLIENT::SendString(CLIENT, $GMSH_CLIENT::PROGRESS, $mess);
work();
};
$mess = "Done with $problem!";
GMSH_CLIENT::SendString(CLIENT, $GMSH_CLIENT::INFO, $mess);
#
open (POSFIC, ">solver.pos")
or die "Unable to open output file";
print POSFIC ("View \"$opt_run\"{\n");
print POSFIC "ST(0,0,0,1,0,0,0,1,0){0,1,2};\n";
print POSFIC "};\n";
close POSFIC;
GMSH_CLIENT::SendString(CLIENT, $GMSH_CLIENT::MERGE_FILE, "solver.pos");
};
#
# 3.3. We can now disconnect the solver from Gmsh:
#
GMSH_CLIENT::SendString(CLIENT, $GMSH_CLIENT::STOP, "Goodbye!");
GMSH_CLIENT::Disconnect(CLIENT);
#
# 4. That's it!
#
exit;
sub work {
sleep 1;
};
#!/usr/bin/env python
"""Gmsh.py - Python module for interacting with the Gmsh pre/post processor.
Module functions:
getopt() -- Parse command line options
send() -- Send a string to the Gmsh socket if open
Included classes:
Client -- A class for maintaining socket communication with Gmsh.
Mesh -- A class for storing nodes and elements.
Typical use:
import sys
import Gmsh
opt = Gmsh.getopt(sys.argv[1:])
if opt.has_key('--socket'):
c = Gmsh.Client(opt['--socket'])
Gmsh.send('Testing testing', Gmsh.INFO)
Carl Osterwisch <osterwischc@asme.org>, January 2005
"""
import socket
import struct
import time
import os
import sys
START = 1
STOP = 2
INFO = 10
WARNING = 11
ERROR = 12
PROGRESS = 13
MERGE_FILE = 20
PARSE_STRING = 21
OPTION = 100
OPTION_1 = OPTION + 0
OPTION_2 = OPTION + 1
OPTION_3 = OPTION + 2
OPTION_4 = OPTION + 3
OPTION_5 = OPTION + 4
# Module variable used to store the open communication socket with Gmsh
sock = None
def getopt(opts):
"""Parse the given list (usually sys.argv) into a dict.
This is a very crude function which scans for options of the form
['-option=value'] and returns a dict of the form {'-option':'value'}.
"""
options = {}
for o in opts:
s = o.split('=', 1)
if len(s) < 2:
if s[0].startswith('-'):
# Option with no value given.
options[s[0].lower()] = None
else:
# Value with no option given.
options[None] = s[0]
else:
# Assign the given value to the option.
options[s[0].lower()] = s[1]
return options
def send(message, type=INFO):
"""Send information to Gmsh using the open socket.
Keyword arguments:
message -- the string message to send
type -- the type of message being sent (default INFO)
As of Gmsh version 2.0, type should be one of:
START STOP INFO WARNING ERROR PROGRESS MERGE_FILE PARSE_FILE
OPTION OPTION_1 OPTION_2 OPTION_3 OPTION_4 OPTION_5
If no socket has been opened (using a Gmsh.Client instance) then print the
string sys.stderr.
"""
if sock:
sock.sendall(struct.pack('II', type, len(message)))
sock.sendall(message)
elif type is not PROGRESS:
print >>sys.stderr, message
class Client:
"""Initiate and maintain connection with Gmsh socket.
Instance this class to open and initiate socket communication with Gmsh.
Communication will be automatically and gracefully terminated when the
instance is destroyed. Only one instance should exist at a time.
"""
def __init__(self, filename):
"""Open and initiate connection to Gmsh socket.
Keyword arguments:
filename -- the name of the Unix socket given by Gmsh
Assigns the new socket to the module variable sock and sends the
process id to Gmsh to initiate the communication.
"""
self.initialized = 0
global sock
if not sock:
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
time.sleep(0.1)
sock.connect(filename)
send(str(os.getpid()), START)
self.initialized = 1
else:
send('Gmsh.sock already exists as'+sock.getsockname(), ERROR)
def __del__(self):
"""Gracefully close communications upon destruction.
Sends the STOP signal to Gmsh and closes the socket.
"""
global sock
if self.initialized:
send('Done.', STOP)
sock.close()
sock = None
class Mesh:
"""This is a class for storing nodes and elements.
Members:
nodes -- A dict of the form { nodeID: [ xcoord, ycoord, zcoord] }
elements -- A dict of the form { elemID: (type, [tags], [nodeIDs]) }
Methods:
read(file) -- Parse a Gmsh version 1.0 or 2.0 mesh file
write(file) -- Output a Gmsh version 2.0 mesh file
"""
def __init__(self):
self.nodes = {}
self.elements = {}
def read(self, mshfile):
"""Read a Gmsh .msh file.
Reads Gmsh format 1.0 and 2.0 mesh files, storing the nodes and
elements in the appropriate dicts.
"""
readmode = 0
send('Reading %s'%mshfile.name)
for line in mshfile:
line = line.strip()
if line.startswith('$'):
if line == '$NOD' or line == '$Nodes':
readmode = 1
elif line == '$ELM':
readmode = 2
elif line == '$Elements':
readmode = 3
else:
readmode = 0
elif readmode:
columns = line.split()
if readmode == 1 and len(columns) == 4:
# Version 1.0 or 2.0 Nodes
try:
self.nodes[int(columns[0])] = map(float, columns[1:])
except ValueError:
send('Node format error: '+line, ERROR)
readmode = 0
elif readmode > 1 and len(columns) > 5:
# Version 1.0 or 2.0 Elements
try:
columns = map(int, columns)
except ValueError:
send('Element format error: '+line, ERROR)
readmode = 0
else:
(id, type) = columns[0:2]
if readmode == 2:
# Version 1.0 Elements
tags = columns[2:4]
nodes = columns[5:]
else:
# Version 2.0 Elements
ntags = columns[2]
tags = columns[3:3+ntags]
nodes = columns[3+ntags:]
self.elements[id] = (type, tags, nodes)
send(' %d Nodes'%len(self.nodes))
send(' %d Elements'%len(self.elements))
def write(self, file):
"""Dump the mesh out to a Gmsh 2.0 msh file."""
print >>file, '$MeshFormat\n2.0 0 8\n$EndMeshFormat'
print >>file, '$Nodes\n%d'%len(self.nodes)
for (id, coord) in self.nodes.items():
print >>file, id, ' '.join(map(str, coord))
print >>file, '$EndNodes'
print >>file, '$Elements\n%d'%len(self.elements)
for (id, elem) in self.elements.items():
(type, tags, nodes) = elem
print >>file, id, type, len(tags),
print >>file, ' '.join(map(str, tags)),
print >>file, ' '.join(map(str, nodes))
print >>file, '$EndElements'
if __name__ == '__main__':
print __doc__
// These options define 'postcsv.py' as the second solver in Gmsh's
// solver module, under the name 'PostCSV'.
Solver.Name1 = "PostCSV";
Solver.Help1 = "A filter to read node or element
indexed, comma-separated-value results into Gmsh.
Carl Osterwisch <osterwischc@asme.org>
January 2005";
Solver.Executable1 = "./postcsv.py";
Solver.InputName1 = "dummy";
Solver.Extension1 = ".csv";
Solver.MeshName1 = "";
Solver.MeshCommand1 = "--mesh=%s";
Solver.SocketCommand1 = "--socket=%s";
Solver.NameCommand1 = "--results=%s";
Solver.OptionCommand1 = "--options";
Solver.FirstOption1 = "Option";
Solver.FirstButton1 = "Import";
Solver.FirstButtonCommand1 = "%s";
Solver.ClientServer1 = 1;
Solver.MergeViews1 = 1;
Solver.PopupMessages1 = 1;
#!/usr/bin/env python
"""Convert csv finite element data into Gmsh pos format.
Usage:
postcsv.py --mesh=gmshfile.msh --results=csvfile.csv [--average]
If --average is specified, the data for each node ID and each element ID is
averaged, otherwise repeated IDs are assumed to be new time steps.
csvfile.csv is in the following format:
# comments start with #
# time step 1 nodal scalar and vector data
node, heading1, heading2
1, 132.5, .0032 .0012 .0011
2, 100.2, .0030 .0004 -.0120
3, 98.3, .0021 .0032 .0002
# time step 1 elemental scalar data
element, heading3
1, 32.63
2, 30.34
3, 21.32
# time step 2 nodal scalar and vector data
node, heading1, heading2
1, 232.5, .0022 .0022 .0031
2, 200.2, .0020 .0014 .0110
3, 68.3, .0011 .0022 .0012
Carl Osterwisch <osterwischc@asme.org>, January 2005
"""
import Gmsh
import os, sys, re
class PostMesh(Gmsh.Mesh):
"""Store and convert FE results into Gmsh pos format.
Extends the Gmsh.Mesh class by adding the following attributes:
Members:
dataTypes -- dict to convert data length into type (scalar, vector, ...)
elemTypes -- dict to convert mesh element type into pos element type
posTypes -- list in pos defined order of pos object types
nodalData -- dict of nodal results
elementData -- dict of element centroid results
Methods:
csvparse(csvfile): Read a comma-separated-value file of nodal results
makeviews(file): Write all the data out to a Gmsh pos file
saveview(posfile): Called by makeviews to output the data for one view
"""
# dataTypes is used to translate the length of a vector into its
# corresponding Gmsh type.
dataTypes = {1:'S', 3:'V', 9:'T'}
# elemTypes is used to convert from Gmsh mesh element type to Gmsh
# post-processing object type.
elemTypes = {1:'L', 2:'T', 3:'Q', 4:'S', 5:'H', 6:'I', 7:'Y'}
# postTypes lists the valid Gmsh post-processing objects (dataType-elemType
# combinations) in the order they are defined in the pos output file
# format.
postTypes = ['SP', 'VP', 'TP',
'SL', 'VL', 'TL',
'ST', 'VT', 'TT',
'SQ', 'VQ', 'TQ',
'SS', 'VS', 'TS',
'SH', 'VH', 'TH',
'SI', 'VI', 'TI',
'SY', 'VY', 'TY',
'T2', 'T2C', 'T3', 'T3C']
def __init__(self):
Gmsh.Mesh.__init__(self)
self.nodalData = {}
#{ viewName: { nodeID: [ [time1data], [time2data] ] } }
self.elementData = {}
#{ viewName: { elemID: [ [time1data], [time2data] ] } }
# Delimiter between columns in the data file
self.separator = '[,;]'
def csvparse(self, csvfile):
"""Parse ascii file of results into elementData and nodeData.
The file should be comma separated columns with matching column
headings at the top. The first column is assumed to be the node or
element number. Each unique heading will generate a new view within
Gmsh. Repeated headings will generate time steps for that view.
"""
csv = re.compile('\s*' + self.separator + '\s*')
elem = re.compile('el', re.I)
datatype = self.nodalData
Gmsh.send('Parsing results from %s'%csvfile.name)
headings = []
for line in csvfile:
columns = csv.split(line.strip())
if len(columns) > 1:
# There are at least two columns.
linedata = []
try:
id = int(columns[0])
linedata = [map(float, column.split()) for column in columns[1:]]
except ValueError:
# Assume this is a heading.
headings = columns
if elem.match(headings[0]):
datatype = self.elementData
else:
datatype = self.nodalData
else:
for viewName, viewData in zip(headings[1:], linedata):
if not datatype.has_key(viewName):
datatype[viewName] = {}
if not datatype[viewName].has_key(id):
datatype[viewName][id] = [ viewData ]
else:
datatype[viewName][id].append(viewData)
for (viewName, nodes) in self.nodalData.items():
Gmsh.send(' %s %d Nodal Results'%(viewName, len(nodes)))
for (viewName, elems) in self.elementData.items():
Gmsh.send(' %s %d Elemental Results'%(viewName, len(elems)))
def saveview(self, posfile, viewName=None, viewData=[]):
"""Store the given viewData to the posfile.
If viewName is None it will output a header line to the file.
"""
if not viewName:
print >>posfile, '$PostFormat\n1.2 0 8\n$EndPostFormat'
elif len(viewData):
Gmsh.send(' View '+viewName)
nts = len(viewData.values()[0][0][1][0])
print >>posfile, '$View\n%s %d'%(viewName, nts)
# Print section lengths.
for type in self.postTypes:
if viewData.has_key(type):
print >>posfile, len(viewData[type]),
Gmsh.send(' %s %d'%(type, len(viewData[type])))
else:
print >>posfile, 0,
# Print dummy time-step values.
print >>posfile, '\n', ' '.join([str(i) for i in range(nts)])
# Print data.
for type in self.postTypes:
if viewData.has_key(type):
for object in viewData[type]:
for x in range(3):
# Print the coordinates in the appropriate order.
print >>posfile, ' '.join([str(i[x]) for i in object[0]])
for timestep in range(nts):
for nodalResult in object[1]:
# Print the results.
try:
print >>posfile, ' '.join([str(i)
for i in nodalResult[timestep]])
except IndexError:
Gmsh.send(' Insufficient time steps for all locations.',
Gmsh.ERROR)
Gmsh.send(' Consider using --average if this is one time step.',
Gmsh.ERROR)
print >>posfile, '$EndView'
def makeviews(self, file):
"""Generate post-processing views for the results.
1. Loop through all defined elements and generate corresponding
post-processor objects for elements with nodalData.
2. Loop through all elementData and generate corresponding
post-processor objects.
"""
self.saveview(file) # This just prints the header information
if len(self.nodalData):
Gmsh.send('Saving nodal results to '+file.name)
for viewName in self.nodalData.keys():
viewData = {}
for elem in self.elements.values():
# Iterate over all defined elements.
coord = []
result = []
for nid in elem[2]:
# Gather node coordinates and results for this element.
try:
coord.append(self.nodes[nid])
except KeyError:
Gmsh.send(' Mesh is missing node %d'%nid,
Gmsh.ERROR)
try:
result.append(self.nodalData[viewName][nid])
except KeyError:
pass
if len(result) == len(coord) and \
self.elemTypes.has_key(elem[0]):
# There was data available at every node for this
# element and this element has a corresponding
# post-processing object.
if self.dataTypes.has_key(len(result[0][0])):
postType = self.dataTypes[len(result[0][0])] + \
self.elemTypes[elem[0]]
if not viewData.has_key(postType):
viewData[postType] = []
viewData[postType].append( (coord, result) )
else:
Gmsh.send(" No data type for "+repr(result[0]),
Gmsh.ERROR)
self.saveview(file, viewName, viewData)
if len(self.elementData):
Gmsh.send('Saving elemental results to %s'%file.name)
for (viewName, data) in self.elementData.items():
viewData = {}
for (eid, edata) in data.items():
try:
elem = self.elements[eid]
except KeyError:
Gmsh.send(' Mesh is missing element %d'%eid,
Gmsh.ERROR)
else:
coord = []
for nid in elem[2]:
# Gather node coordinates and results for this
# element.
try:
coord.append(self.nodes[nid])
except KeyError:
Gmsh.send(' Mesh is missing node %d'%nid,
Gmsh.ERROR)
if len(elem[2]) == len(coord) and \
self.elemTypes.has_key(elem[0]):
# There was data available at every node for this
# element and this element has a corresponding
# post-processing object.
result = [edata]*len(coord)
if self.dataTypes.has_key(len(result[0][0])):
postType = (self.dataTypes[len(result[0][0])]
+ self.elemTypes[elem[0]])
if not viewData.has_key(postType):
viewData[postType] = []
viewData[postType].append( (coord, result) )
else:
Gmsh.send(" No data type for "+repr(result[0]),
Gmsh.ERROR)
self.saveview(file, viewName, viewData)
###############################################################################
# Main program begins here
###############################################################################
cmdline = Gmsh.getopt(sys.argv[1:])
if cmdline.has_key('--socket'):
connection = Gmsh.Client(cmdline['--socket'])
if cmdline.has_key('--help') or cmdline.has_key('-h'):
print __doc__
elif cmdline.has_key('--options'):
Gmsh.send('--noaverage', Gmsh.OPTION)
Gmsh.send('--average', Gmsh.OPTION)
else:
if not cmdline.has_key('--results'):
Gmsh.send("No results specified.", Gmsh.ERROR)
sys.exit(1)
if not cmdline.has_key('--mesh'):
mshname = cmdline['--results'].split('.')[0] + '.msh'
else:
mshname = cmdline['--mesh']
try:
mshfile = open(mshname)
csvfile = open(cmdline['--results'])
except:
Gmsh.send(str(sys.exc_info()[1]), Gmsh.ERROR)
else:
pmesh = PostMesh()
pmesh.read(mshfile)
mshfile.close()
pmesh.csvparse(csvfile)
csvfile.close()
if cmdline.has_key('--average'):
Gmsh.send('Averaging data to one time step.')
for result in [ pmesh.nodalData, pmesh.elementData ]:
for view in result.keys():
for (id, data) in result[view].items():
nts = len(data)
averaged = []
for col in range(min(map(len, data))):
sum = 0.0
for d in data:
sum += d[col]
averaged.append(sum/nts)
result[view][id] = [averaged]
try:
posfile = open(os.path.splitext(csvfile.name)[0]+'.pos', 'w')
except:
Gmsh.send(str(sys.exc_info()[1]), Gmsh.ERROR)
else:
pmesh.makeviews(posfile)
posfile.close()
Gmsh.send(posfile.name, Gmsh.MERGE_FILE)
1
ABAQUS VERSION 6.4-4 DATE 18-Jan-2005 TIME 17:42:16 PAGE 1
AAAAAA BBBBBBBBB AAAAAA QQQQQQQQ U U SSSSSSSS
A A B B A A Q Q U U S
A A B B A A Q Q U U S
A A B B A A Q Q U U S
AAAAAAAAAA BBBBBBBBB AAAAAAAAAA Q Q U U SSSSSSSS
A A B B A A Q Q Q U U S
A A B B A A Q Q Q U U S
A A B B A A Q Q Q U U S
A A BBBBBBBBB A A QQQQQQQQ UUUUUUUU SSSSSSSS
This program has been developed by
ABAQUS, Inc.
1080 Main Street
Pawtucket, R.I. 02860
P R O B L E M S I Z E
NUMBER OF ELEMENTS IS 218
NUMBER OF NODES IS 131
NUMBER OF NODES DEFINED BY THE USER 131
TOTAL NUMBER OF VARIABLES IN THE MODEL 262
(DEGREES OF FREEDOM PLUS ANY LAGRANGE MULTIPLIER VARIABLES)
END OF USER INPUT PROCESSING
S T E P 1 S T A T I C A N A L Y S I S
INCREMENT 1 SUMMARY
TIME INCREMENT COMPLETED 1.00 , FRACTION OF STEP COMPLETED 1.00
STEP TIME COMPLETED 1.00 , TOTAL TIME COMPLETED 1.00
E L E M E N T O U T P U T
THE FOLLOWING TABLE IS PRINTED FOR ALL ELEMENTS WITH TYPE CPE3 AVERAGED AT THE NODES
node, temperature, displacement, stress
2, 69.86, 8.4194E-04 0.000 0, -31.56 13.43 0 13.43 -329.1 0 0 0 -251.5
3, 39.96, 3.0836E-03 0.000 0, -1.491 -3.133 0 -3.133 -44.68 0 0 0 -97.55
4, 11.16, 1.9388E-03 0.000 0, 11.99 -10.21 0 -10.21 -116.0 0 0 0 -64.08
5, 13.47, 0.000 0.000 0, 37.40 1.292 0 1.292 -73.75 0 0 0 -49.52
6, 67.60, 0.000 -6.6056E-04 0, -21.23 6.614 0 6.614 -8.562 0 0 0 -148.1
7, 69.83, 8.3356E-04 -6.7009E-05 0, -21.90 33.08 0 33.08 -337.4 0 0 0 -251.5
8, 69.76, 8.0950E-04 -1.4135E-04 0, -23.03 62.61 0 62.61 -345.2 0 0 0 -254.9
9, 69.62, 7.9671E-04 -2.0956E-04 0, -40.32 70.09 0 70.09 -285.4 0 0 0 -240.2
10, 69.48, 7.5652E-04 -2.7698E-04 0, -54.81 86.73 0 86.73 -249.9 0 0 0 -234.0
11, 69.28, 7.0955E-04 -3.3576E-04 0, -63.35 94.38 0 94.38 -210.6 0 0 0 -224.6
12, 69.07, 6.6124E-04 -3.9676E-04 0, -74.58 95.83 0 95.83 -172.0 0 0 0 -216.2
13, 68.82, 6.0588E-04 -4.4704E-04 0, -74.75 84.32 0 84.32 -129.5 0 0 0 -202.5
14, 68.59, 5.3983E-04 -4.9435E-04 0, -72.84 72.02 0 72.02 -97.01 0 0 0 -191.8
15, 68.35, 4.7004E-04 -5.3725E-04 0, -70.10 59.18 0 59.18 -70.98 0 0 0 -182.3
16, 68.14, 3.9512E-04 -5.7221E-04 0, -59.27 44.19 0 44.19 -43.37 0 0 0 -170.3
17, 67.96, 3.2004E-04 -6.0584E-04 0, -53.38 33.76 0 33.76 -26.85 0 0 0 -164.6
18, 67.80, 2.4153E-04 -6.2869E-04 0, -45.07 24.73 0 24.73 -17.33 0 0 0 -157.7
19, 67.67, 1.6298E-04 -6.4554E-04 0, -35.73 16.37 0 16.37 -11.90 0 0 0 -151.8
20, 67.61, 8.2122E-05 -6.5673E-04 0, -28.73 6.691 0 6.691 -8.362 0 0 0 -148.7
21, 66.81, 9.8446E-04 0.000 0, -29.35 6.504 0 6.504 -289.6 0 0 0 -235.8
22, 63.73, 1.1361E-03 0.000 0, -40.65 5.472 0 5.472 -257.8 0 0 0 -224.4
23, 60.65, 1.2821E-03 0.000 0, -49.06 1.671 0 1.671 -208.1 0 0 0 -204.7
24, 57.54, 1.4246E-03 0.000 0, -50.58 -0.6161 0 -0.6161 -173.6 0 0 0 -187.8
25, 54.50, 1.5756E-03 0.000 0, -47.33 -1.646 0 -1.646 -152.7 0 0 0 -174.7
26, 51.55, 1.7358E-03 0.000 0, -42.15 -3.541 0 -3.541 -133.9 0 0 0 -161.3
27, 48.72, 1.9085E-03 0.000 0, -34.37 -4.128 0 -4.128 -117.9 0 0 0 -148.1
28, 46.10, 2.0976E-03 0.000 0, -28.24 -4.892 0 -4.892 -105.2 0 0 0 -137.1
29, 43.78, 2.3081E-03 0.000 0, -19.19 -5.296 0 -5.296 -89.82 0 0 0 -123.8
30, 41.81, 2.5322E-03 0.000 0, -13.39 -3.509 0 -3.509 -76.96 0 0 0 -114.7
31, 40.45, 2.7922E-03 0.000 0, -5.308 -3.571 0 -3.571 -63.00 0 0 0 -105.7
32, 39.12, 3.0185E-03 2.2115E-04 0, -2.576 -5.276 0 -5.276 -47.55 0 0 0 -96.55
33, 36.19, 2.8256E-03 4.1759E-04 0, -2.044 -9.147 0 -9.147 -65.46 0 0 0 -96.16
34, 30.51, 2.5157E-03 4.8788E-04 0, -0.7721 -14.20 0 -14.20 -90.33 0 0 0 -92.70
35, 22.25, 2.1581E-03 3.8111E-04 0, 2.853 -11.24 0 -11.24 -114.0 0 0 0 -80.06
36, 11.69, 1.3632E-03 0.000 0, 20.52 -7.606 0 -7.606 -92.20 0 0 0 -56.02
37, 12.84, 7.0866E-04 0.000 0, 37.23 -2.644 0 -2.644 -79.34 0 0 0 -47.26
38, 26.51, 0.000 1.1136E-04 0, 18.80 2.425 0 2.425 -73.57 0 0 0 -71.25
39, 36.98, 0.000 5.4140E-05 0, -1.709 3.663 0 3.663 -69.27 0 0 0 -96.91
40, 45.62, 0.000 -8.1302E-05 0, -18.69 6.841 0 6.841 -61.46 0 0 0 -118.2
41, 52.82, 0.000 -2.4234E-04 0, -31.92 9.526 0 9.526 -41.54 0 0 0 -131.9
42, 58.77, 0.000 -4.0527E-04 0, -41.24 9.057 0 9.057 -26.89 0 0 0 -143.7
43, 63.66, 0.000 -5.4837E-04 0, -33.13 7.239 0 7.239 -10.12 0 0 0 -147.6
44, 39.11, 1.4706E-03 2.1356E-04 0, -2.215 -16.24 0 -16.24 -107.1 0 0 0 -115.4
45, 51.64, 1.3526E-03 9.5846E-05 0, -22.39 -6.105 0 -6.105 -141.9 0 0 0 -157.7
46, 47.75, 5.5026E-04 -1.9718E-05 0, -12.23 17.50 0 17.50 -88.57 0 0 0 -130.3
47, 60.44, 1.2091E-03 -7.5841E-06 0, -44.20 8.877 0 8.877 -194.6 0 0 0 -197.9
48, 58.57, 2.2758E-04 -3.4992E-04 0, -35.73 26.28 0 26.28 -39.02 0 0 0 -146.2
49, 53.82, 8.5472E-04 -1.6590E-05 0, -14.35 18.67 0 18.67 -126.4 0 0 0 -154.2
50, 59.09, 1.0037E-03 -4.4003E-05 0, -31.44 22.41 0 22.41 -168.6 0 0 0 -184.0
51, 42.40, 2.0545E-03 1.6521E-04 0, -13.94 -17.69 0 -17.69 -98.98 0 0 0 -122.4
52, 29.42, 7.8391E-04 1.7522E-04 0, 11.99 -3.246 0 -3.246 -86.77 0 0 0 -85.40
53, 53.34, 1.5467E-03 5.7672E-05 0, -40.47 -7.413 0 -7.413 -148.0 0 0 0 -168.6
54, 61.16, 7.3601E-04 -1.7843E-04 0, -36.58 46.11 0 46.11 -139.8 0 0 0 -182.0
55, 64.37, 1.0845E-03 -3.5633E-05 0, -44.93 17.37 0 17.37 -250.6 0 0 0 -223.5
56, 58.10, 4.9318E-04 -2.3073E-04 0, -28.35 39.79 0 39.79 -86.64 0 0 0 -156.9
57, 33.97, 2.1313E-03 2.8372E-04 0, -2.154 -17.92 0 -17.92 -90.18 0 0 0 -98.58
58, 43.42, 1.0689E-03 1.4500E-04 0, -3.284 -3.999 0 -3.999 -112.8 0 0 0 -126.0
59, 62.17, 1.1621E-04 -4.9096E-04 0, -38.48 14.31 0 14.31 -19.57 0 0 0 -148.0
60, 63.27, 9.8677E-04 -9.1671E-05 0, -41.88 39.07 0 39.07 -213.4 0 0 0 -209.8
61, 47.33, 1.8777E-03 9.3115E-05 0, -28.91 -12.50 0 -12.50 -117.6 0 0 0 -143.9
62, 24.09, 1.4647E-03 2.1595E-04 0, 9.910 -12.59 0 -12.59 -94.44 0 0 0 -74.41
63, 43.83, 1.6560E-03 1.7798E-04 0, -12.67 -17.58 0 -17.58 -113.9 0 0 0 -129.5
64, 39.96, 2.5284E-03 1.6466E-04 0, -7.909 -12.34 0 -12.34 -77.77 0 0 0 -109.8
65, 63.48, 8.1289E-04 -1.8230E-04 0, -43.51 54.68 0 54.68 -168.6 0 0 0 -197.0
66, 55.78, 1.2850E-03 4.3255E-05 0, -32.66 -1.098 0 -1.098 -159.4 0 0 0 -174.1
67, 48.37, 1.1958E-03 1.1577E-04 0, -10.63 -4.579 0 -4.579 -128.9 0 0 0 -143.2
68, 36.16, 4.7265E-04 1.0862E-04 0, 0.7402 4.679 0 4.679 -82.59 0 0 0 -100.9
69, 56.96, 1.4146E-03 2.3575E-05 0, -46.39 -1.231 0 -1.231 -171.6 0 0 0 -185.1
70, 61.98, 5.6338E-04 -2.8586E-04 0, -38.12 51.00 0 51.00 -104.0 0 0 0 -172.5
71, 65.16, 9.8242E-04 -9.3900E-05 0, -37.02 43.60 0 43.60 -237.8 0 0 0 -219.4
72, 53.17, 1.0946E-03 4.9133E-05 0, -17.30 6.233 0 6.233 -141.0 0 0 0 -158.6
73, 48.36, 2.4764E-04 -1.1023E-04 0, -21.28 13.88 0 13.88 -63.61 0 0 0 -126.9
74, 42.44, 2.3173E-03 1.0627E-04 0, -14.60 -11.03 0 -11.03 -89.29 0 0 0 -120.0
75, 35.01, 1.1293E-03 2.0386E-04 0, 4.220 -9.489 0 -9.489 -99.26 0 0 0 -102.5
76, 64.86, 6.2305E-04 -3.2075E-04 0, -54.70 67.14 0 67.14 -112.6 0 0 0 -187.0
77, 50.21, 1.7736E-03 5.1510E-05 0, -37.30 -7.163 0 -7.163 -127.9 0 0 0 -155.1
78, 47.98, 1.6505E-03 1.2818E-04 0, -23.30 -13.91 0 -13.91 -125.9 0 0 0 -146.0
79, 60.89, 1.2466E-03 -5.0573E-06 0, -48.24 6.321 0 6.321 -208.8 0 0 0 -205.2
80, 38.36, 1.8932E-03 2.2949E-04 0, -5.402 -20.85 0 -20.85 -99.62 0 0 0 -112.0
81, 48.10, 8.1422E-04 5.0337E-05 0, -7.133 11.99 0 11.99 -109.7 0 0 0 -135.8
82, 60.72, 3.3586E-04 -3.6942E-04 0, -38.51 35.77 0 35.77 -53.49 0 0 0 -154.7
83, 39.97, 7.4362E-04 1.2307E-04 0, 0.1859 3.982 0 3.982 -94.25 0 0 0 -112.7
84, 65.54, 8.4336E-04 -1.9118E-04 0, -43.71 68.36 0 68.36 -201.5 0 0 0 -211.5
85, 32.16, 1.6376E-03 2.5023E-04 0, 2.514 -18.72 0 -18.72 -96.50 0 0 0 -95.80
86, 57.42, 6.8273E-04 -1.3380E-04 0, -22.90 35.16 0 35.16 -119.5 0 0 0 -163.4
87, 22.02, 4.5206E-04 1.1849E-04 0, 27.57 -0.5780 0 -0.5780 -78.37 0 0 0 -61.70
88, 27.06, 1.9435E-03 3.0431E-04 0, 2.174 -15.48 0 -15.48 -98.32 0 0 0 -85.54
89, 57.29, 9.1126E-04 -4.6903E-05 0, -24.34 23.77 0 23.77 -147.5 0 0 0 -171.9
90, 20.35, 1.0270E-03 1.4077E-04 0, 23.95 -6.210 0 -6.210 -86.24 0 0 0 -62.78
91, 53.78, 3.7698E-04 -1.8593E-04 0, -25.62 27.49 0 27.49 -69.66 0 0 0 -142.6
92, 53.39, 1.6126E-03 3.0206E-05 0, -45.13 -3.757 0 -3.757 -146.9 0 0 0 -170.3
93, 65.62, 7.0106E-04 -2.9006E-04 0, -55.91 74.27 0 74.27 -144.5 0 0 0 -198.0
94, 38.27, 2.2964E-03 2.2631E-04 0, -6.964 -17.67 0 -17.67 -86.84 0 0 0 -108.7
95, 66.38, 8.8448E-04 -1.6366E-04 0, -42.42 66.73 0 66.73 -239.6 0 0 0 -224.3
96, 59.54, 1.1434E-03 -1.0713E-05 0, -37.34 14.42 0 14.42 -183.4 0 0 0 -191.1
97, 45.13, 2.1104E-03 7.5866E-05 0, -23.85 -10.18 0 -10.18 -103.1 0 0 0 -132.7
98, 63.31, 2.2765E-04 -4.8975E-04 0, -41.71 25.96 0 25.96 -22.51 0 0 0 -152.7
99, 52.78, 6.2969E-04 -7.5140E-05 0, -15.72 26.76 0 26.76 -103.1 0 0 0 -147.0
100, 43.88, 1.3641E-03 1.6792E-04 0, -7.276 -12.54 0 -12.54 -119.0 0 0 0 -130.8
101, 47.33, 1.4363E-03 1.4140E-04 0, -14.20 -12.38 0 -12.38 -127.2 0 0 0 -141.6
102, 56.84, 1.3404E-03 3.2032E-05 0, -40.35 -0.8910 0 -0.8910 -168.0 0 0 0 -181.3
103, 63.68, 4.2738E-04 -4.0621E-04 0, -49.22 48.06 0 48.06 -64.35 0 0 0 -168.2
104, 50.09, 1.6750E-03 8.8554E-05 0, -33.07 -11.61 0 -11.61 -131.7 0 0 0 -154.9
105, 18.82, 1.7143E-03 1.8591E-04 0, 8.110 -9.748 0 -9.748 -106.3 0 0 0 -69.59
106, 66.56, 9.9793E-04 -3.3011E-05 0, -31.92 15.61 0 15.61 -288.6 0 0 0 -235.6
107, 40.03, 2.3416E-04 3.0424E-05 0, -8.431 6.413 0 6.413 -72.11 0 0 0 -108.2
108, 66.84, 9.5633E-04 -8.8428E-05 0, -30.30 42.13 0 42.13 -290.6 0 0 0 -236.8
109, 55.88, 1.1496E-03 2.8041E-05 0, -27.72 7.216 0 7.216 -160.8 0 0 0 -174.2
110, 47.46, 1.9630E-03 4.6760E-05 0, -30.85 -6.555 0 -6.555 -112.4 0 0 0 -142.7
111, 27.87, 1.1867E-03 2.0507E-04 0, 10.06 -11.70 0 -11.70 -92.79 0 0 0 -83.81
112, 65.42, 5.3018E-04 -3.9857E-04 0, -58.41 62.36 0 62.36 -84.20 0 0 0 -180.3
113, 55.60, 1.3108E-04 -3.0201E-04 0, -35.26 16.36 0 16.36 -41.02 0 0 0 -139.8
114, 39.83, 2.8067E-03 1.2332E-04 0, -3.517 -5.677 0 -5.677 -57.45 0 0 0 -101.9
115, 52.72, 1.4654E-03 7.8496E-05 0, -32.42 -8.561 0 -8.561 -145.4 0 0 0 -163.9
116, 42.43, 4.4960E-04 3.6423E-05 0, -7.868 10.95 0 10.95 -79.02 0 0 0 -115.2
117, 66.50, 7.5078E-04 -2.7189E-04 0, -54.98 83.04 0 83.04 -176.9 0 0 0 -209.3
118, 41.24, 2.5562E-03 7.5637E-05 0, -10.34 -5.624 0 -5.624 -75.38 0 0 0 -112.5
119, 60.45, 8.7062E-04 -1.1044E-04 0, -35.49 34.88 0 34.88 -164.6 0 0 0 -187.2
120, 61.95, 9.4380E-04 -9.8688E-05 0, -38.04 36.30 0 36.30 -183.3 0 0 0 -196.4
121, 35.48, 2.4940E-03 3.2925E-04 0, -2.175 -13.00 0 -13.00 -77.42 0 0 0 -98.28
122, 49.70, 9.8927E-04 6.7429E-05 0, -10.44 5.383 0 5.383 -126.0 0 0 0 -144.8
123, 63.08, 1.1594E-03 -1.3116E-05 0, -43.33 7.414 0 7.414 -234.5 0 0 0 -216.0
124, 56.01, 1.4914E-03 1.3061E-05 0, -49.84 -1.514 0 -1.514 -164.5 0 0 0 -182.1
125, 30.47, 3.0653E-04 1.2008E-04 0, 8.389 2.497 0 2.497 -76.10 0 0 0 -86.24
126, 58.42, 1.3757E-03 8.2717E-06 0, -49.91 0.3047 0 0.3047 -182.9 0 0 0 -192.5
127, 64.90, 3.0955E-04 -5.0667E-04 0, -50.18 35.88 0 35.88 -32.63 0 0 0 -161.6
128, 62.35, 1.0849E-03 -4.8287E-05 0, -40.94 22.78 0 22.78 -211.7 0 0 0 -206.7
129, 40.75, 2.2941E-03 1.6746E-04 0, -10.97 -16.67 0 -16.67 -89.00 0 0 0 -115.6
130, 38.08, 2.7138E-03 2.5436E-04 0, -3.250 -10.01 0 -10.01 -64.39 0 0 0 -100.3
131, 45.32, 1.8808E-03 1.3680E-04 0, -21.81 -16.15 0 -16.15 -112.0 0 0 0 -135.3
132, 63.26, 1.1019E-03 -4.0239E-05 0, -42.03 20.67 0 20.67 -226.9 0 0 0 -213.6
Point(1) = {0, 0, 0, 0.1};
Point(2) = {1, 0, 0, 0.1};
Point(3) = {4, 0, 0, 0.5};
Point(4) = {4, 4, 0, 1.0};
Point(5) = {0, 4, 0, 1.0};
Point(6) = {0, 1, 0, 0.1};
Circle(1) = {2,1,6};
Line(2) = {2,3};
Line(3) = {3,4};
Line(4) = {4,5};
Line(5) = {5,6};
Line Loop(6) = {1,-5,-4,-3,-2};
Plane Surface(7) = {6};
Physical Line(101) = {5};
Physical Line(102) = {2};
Physical Line(112) = {4};
Physical Line(200) = {1};
Physical Surface(11) = {-7};
$MeshFormat
2 0 8
$EndMeshFormat
$Nodes
131
2 1 0 0
3 4 0 0
4 4 4 0
5 0 4 0
6 0 1 0
7 0.9945218953682734 0.104528463267653 0
8 0.9781476007338058 0.2079116908177585 0
9 0.951056516295154 0.3090169943749462 0
10 0.9135454576426018 0.4067366430757982 0
11 0.8660254037844408 0.4999999999999963 0
12 0.8090169943749513 0.5877852522924678 0
13 0.7431448254774 0.6691306063588518 0
14 0.6691306063588659 0.7431448254773874 0
15 0.5877852522924825 0.8090169943749406 0
16 0.5000000000000111 0.8660254037844323 0
17 0.4067366430758131 0.9135454576425951 0
18 0.3090169943749584 0.95105651629515 0
19 0.2079116908177668 0.978147600733804 0
20 0.1045284632676574 0.994521895368273 0
21 1.107660966482431 0 0
22 1.230764829752582 0 0
23 1.371542876294749 0 0
24 1.532522866946499 0 0
25 1.71659942352474 0 0
26 1.927090777472968 0 0
27 2.167782956522458 0 0
28 2.443096045924229 0 0
29 2.757877025314089 0 0
30 3.117761880505327 0 0
31 3.529324854187504 0 0
32 4 0.5949066135025001 0
33 4 1.278145619573775 0
34 4 2.063201578232027 0
35 4 2.964633608956098 0
36 2.666666666666685 4 0
37 1.33333333333337 4 0
38 0 3.065647789360017 0
39 0 2.393288956030129 0
40 0 1.909232044233197 0
41 0 1.560915832167684 0
42 0 1.310258795174613 0
43 0 1.129841025580155 0
44 2.072632706027311 1.69598688973258 0
45 1.613773926086385 0.8500227436870333 0
46 0.8294669788088875 1.658857826312972 0
47 1.32513596375101 0.3476839123937975 0
48 0.3521126881546655 1.277363555436711 0
49 1.12466853437021 1.153418043518669 0
50 1.192696518113869 0.7306415166144991 0
51 2.576053729862485 0.9053498230115412 0
52 1.340126667186485 2.734096405958066 0
53 1.726422310283826 0.4059954321843577 0
54 0.9353736948832166 0.8715848956617313 0
55 1.18615207058655 0.1857246235325533 0
56 0.7052561075612429 1.175916841150846 0
57 3.128587449887757 1.766432616500146 0
58 1.502973959682794 1.639173253302476 0
59 0.1759133514351944 1.169780059600397 0
60 1.126589503584839 0.4922655384184934 0
61 2.196140328827049 0.5068889305674 0
62 2.612345788958327 2.921450948015479 0
63 2.112581290158194 1.167800481700336 0
64 3.237383018383969 0.7234638462140814 0
65 0.9840394726232626 0.6906803311775085 0
66 1.468485632956789 0.6195916609164185 0
67 1.543585212840636 1.22337304019121 0
68 0.7847572529703151 2.373911411047601 0
69 1.536612492066048 0.2546061344524544 0
70 0.7563814323183446 0.9674850965584817 0
71 1.106950139898796 0.3511105542101679 0
72 1.35889190895776 0.9986524025805176 0
73 0.3959273532525635 1.738325897497147 0
74 2.844593724249942 0.5138633427199154 0
75 1.754062226045712 2.193549370361175 0
76 0.7938495145246145 0.8047643924259087 0
77 2.001875040491023 0.2863548721871211 0
78 1.970700830475661 0.7993756598722095 0
79 1.34411212289718 0.1825137374421063 0
80 2.591371751876443 1.47181123899766 0
81 1.145266577772124 1.501068978824429 0
82 0.4941440667927327 1.148854074736235 0
83 1.149429186474111 2.031817360579769 0
84 0.9939713247765112 0.5426636213837798 0
85 2.53934709873342 2.170371417857803 0
86 0.9170333339922072 1.089415598156251 0
87 0.8299773866185869 3.344838685871387 0
88 3.289379674794993 2.516276442461847 0
89 1.137453345295398 0.9199637046208775 0
90 1.882033197768151 3.350776213150626 0
91 0.5747040540405435 1.429957302128625 0
92 1.775313987913787 0.1942086133302341 0
93 0.8643434939808741 0.7017184961964265 0
94 3.072389280032639 1.182610643612223 0
95 1.025398445390052 0.425064443790196 0
96 1.291599018349766 0.5379400141021424 0
97 2.500950996588131 0.3796311220360604 0
98 0.329249276924329 1.100214750608649 0
99 0.894324716202368 1.353915876710289 0
100 1.813941250117164 1.40844809571916 0
101 1.794878469096937 1.088460304995382 0
102 1.486769023536358 0.4427525772291758 0
103 0.5900512883039151 0.9886452832900361 0
104 1.926700328468347 0.5373153173291814 0
105 3.279545588397917 3.324720918759852 0
106 1.111952245445099 0.09914654476876072 0
107 0.387323186063824 2.191864376335631 0
108 1.078521106254799 0.230024464668231 0
109 1.35920433836455 0.7749771722215344 0
110 2.265435202084209 0.2409669473795033 0
111 2.013801144774503 2.711101094307226 0
112 0.6907699614193001 0.8590816528292089 0
113 0.2143922726422754 1.42492042583774 0
114 3.598069662403972 0.4358901037284767 0
115 1.680368656509361 0.6158390637855682 0
116 0.7133557167561021 1.999543410730382 0
117 0.9072102561528353 0.6052161494598445 0
118 3.178430153760137 0.3236365929559723 0
119 1.063899507509137 0.7888937937290703 0
120 1.1075300813509 0.6309016457330627 0
121 3.544094384876648 1.445283348829069 0
122 1.313711830501423 1.292934084685645 0
123 1.253184469019452 0.1023441938573933 0
124 1.616253868583924 0.119775562455931 0
125 0.5355241979412432 2.779799497471038 0
126 1.478800932191749 0.1185154109768451 0
127 0.4286494767521648 1.012418382992747 0
128 1.208825921620229 0.4088813796481784 0
129 2.923716641100324 0.8451929254086457 0
130 3.629773810408995 0.9401286651846473 0
131 2.278190977419342 0.7701736465013063 0
132 1.209925918352208 0.2871708528743117 0
$EndNodes
$Elements
255
1 1 2 101 5 5 38
2 1 2 101 5 38 39
3 1 2 101 5 39 40
4 1 2 101 5 40 41
5 1 2 101 5 41 42
6 1 2 101 5 42 43
7 1 2 101 5 43 6
8 1 2 102 2 2 21
9 1 2 102 2 21 22
10 1 2 102 2 22 23
11 1 2 102 2 23 24
12 1 2 102 2 24 25
13 1 2 102 2 25 26
14 1 2 102 2 26 27
15 1 2 102 2 27 28
16 1 2 102 2 28 29
17 1 2 102 2 29 30
18 1 2 102 2 30 31
19 1 2 102 2 31 3
20 1 2 112 4 4 36
21 1 2 112 4 36 37
22 1 2 112 4 37 5
23 1 2 200 1 2 7
24 1 2 200 1 7 8
25 1 2 200 1 8 9
26 1 2 200 1 9 10
27 1 2 200 1 10 11
28 1 2 200 1 11 12
29 1 2 200 1 12 13
30 1 2 200 1 13 14
31 1 2 200 1 14 15
32 1 2 200 1 15 16
33 1 2 200 1 16 17
34 1 2 200 1 17 18
35 1 2 200 1 18 19
36 1 2 200 1 19 20
37 1 2 200 1 20 6
38 2 2 11 7 75 58 44
39 2 2 11 7 80 63 51
40 2 2 11 7 59 43 20
41 2 2 11 7 72 45 67
42 2 2 11 7 101 67 45
43 2 2 11 7 80 44 63
44 2 2 11 7 59 20 19
45 2 2 11 7 85 75 44
46 2 2 11 7 131 97 51
47 2 2 11 7 83 46 81
48 2 2 11 7 83 81 58
49 2 2 11 7 98 59 19
50 2 2 11 7 83 58 75
51 2 2 11 7 43 6 20
52 2 2 11 7 100 44 58
53 2 2 11 7 97 74 51
54 2 2 11 7 79 69 47
55 2 2 11 7 93 65 54
56 2 2 11 7 89 86 54
57 2 2 11 7 111 75 85
58 2 2 11 7 95 9 71
59 2 2 11 7 89 49 86
60 2 2 11 7 113 91 73
61 2 2 11 7 113 48 91
62 2 2 11 7 108 71 9
63 2 2 11 7 84 11 10
64 2 2 11 7 102 47 69
65 2 2 11 7 118 74 29
66 2 2 11 7 108 7 106
67 2 2 11 7 108 8 7
68 2 2 11 7 91 82 56
69 2 2 11 7 88 57 34
70 2 2 11 7 118 29 30
71 2 2 11 7 131 61 97
72 2 2 11 7 91 48 82
73 2 2 11 7 86 70 54
74 2 2 11 7 95 84 10
75 2 2 11 7 127 16 103
76 2 2 11 7 127 17 16
77 2 2 11 7 76 14 13
78 2 2 11 7 121 34 57
79 2 2 11 7 98 19 18
80 2 2 11 7 93 54 76
81 2 2 11 7 109 50 96
82 2 2 11 7 113 42 59
83 2 2 11 7 90 87 52
84 2 2 11 7 99 49 81
85 2 2 11 7 83 75 52
86 2 2 11 7 76 54 70
87 2 2 11 7 73 40 41
88 2 2 11 7 115 78 45
89 2 2 11 7 85 44 80
90 2 2 11 7 59 42 43
91 2 2 11 7 77 26 27
92 2 2 11 7 119 54 65
93 2 2 11 7 131 51 63
94 2 2 11 7 112 103 15
95 2 2 11 7 120 96 50
96 2 2 11 7 83 52 68
97 2 2 11 7 109 89 50
98 2 2 11 7 90 37 87
99 2 2 11 7 109 72 89
100 2 2 11 7 115 104 78
101 2 2 11 7 99 86 49
102 2 2 11 7 123 106 22
103 2 2 11 7 113 73 41
104 2 2 11 7 94 80 51
105 2 2 11 7 92 53 69
106 2 2 11 7 109 96 66
107 2 2 11 7 97 29 74
108 2 2 11 7 90 62 36
109 2 2 11 7 106 7 2
110 2 2 11 7 93 76 13
111 2 2 11 7 125 68 52
112 2 2 11 7 106 2 21
113 2 2 11 7 122 49 72
114 2 2 11 7 103 16 15
115 2 2 11 7 108 9 8
116 2 2 11 7 95 10 9
117 2 2 11 7 122 81 49
118 2 2 11 7 106 21 22
119 2 2 11 7 101 45 78
120 2 2 11 7 105 36 62
121 2 2 11 7 120 60 96
122 2 2 11 7 113 59 48
123 2 2 11 7 100 63 44
124 2 2 11 7 112 14 76
125 2 2 11 7 87 37 5
126 2 2 11 7 85 80 57
127 2 2 11 7 132 55 79
128 2 2 11 7 115 102 53
129 2 2 11 7 125 52 87
130 2 2 11 7 88 85 57
131 2 2 11 7 110 77 27
132 2 2 11 7 92 26 77
133 2 2 11 7 124 92 69
134 2 2 11 7 89 72 49
135 2 2 11 7 102 69 53
136 2 2 11 7 125 39 107
137 2 2 11 7 122 72 67
138 2 2 11 7 100 58 67
139 2 2 11 7 129 94 51
140 2 2 11 7 109 66 45
141 2 2 11 7 123 79 55
142 2 2 11 7 99 91 56
143 2 2 11 7 122 67 58
144 2 2 11 7 115 66 102
145 2 2 11 7 86 56 70
146 2 2 11 7 111 85 62
147 2 2 11 7 104 53 77
148 2 2 11 7 116 46 83
149 2 2 11 7 97 28 29
150 2 2 11 7 87 5 38
151 2 2 11 7 116 73 46
152 2 2 11 7 125 107 68
153 2 2 11 7 92 77 53
154 2 2 11 7 91 46 73
155 2 2 11 7 115 45 66
156 2 2 11 7 107 40 73
157 2 2 11 7 132 79 47
158 2 2 11 7 99 56 86
159 2 2 11 7 93 13 12
160 2 2 11 7 109 45 72
161 2 2 11 7 130 94 64
162 2 2 11 7 103 70 56
163 2 2 11 7 131 63 78
164 2 2 11 7 127 98 18
165 2 2 11 7 117 11 84
166 2 2 11 7 130 121 94
167 2 2 11 7 123 55 106
168 2 2 11 7 92 25 26
169 2 2 11 7 88 62 85
170 2 2 11 7 95 71 60
171 2 2 11 7 122 58 81
172 2 2 11 7 112 70 103
173 2 2 11 7 102 96 47
174 2 2 11 7 114 3 32
175 2 2 11 7 123 23 79
176 2 2 11 7 101 78 63
177 2 2 11 7 114 31 3
178 2 2 11 7 128 60 71
179 2 2 11 7 101 100 67
180 2 2 11 7 125 38 39
181 2 2 11 7 126 79 23
182 2 2 11 7 129 51 74
183 2 2 11 7 112 76 70
184 2 2 11 7 121 33 34
185 2 2 11 7 118 30 31
186 2 2 11 7 103 56 82
187 2 2 11 7 88 34 35
188 2 2 11 7 105 35 4
189 2 2 11 7 126 69 79
190 2 2 11 7 127 18 17
191 2 2 11 7 105 62 88
192 2 2 11 7 98 48 59
193 2 2 11 7 104 61 78
194 2 2 11 7 118 31 114
195 2 2 11 7 115 53 104
196 2 2 11 7 94 57 80
197 2 2 11 7 120 119 65
198 2 2 11 7 111 90 52
199 2 2 11 7 108 106 55
200 2 2 11 7 101 63 100
201 2 2 11 7 117 12 11
202 2 2 11 7 131 78 61
203 2 2 11 7 123 22 23
204 2 2 11 7 111 52 75
205 2 2 11 7 120 50 119
206 2 2 11 7 107 39 40
207 2 2 11 7 104 77 61
208 2 2 11 7 110 27 28
209 2 2 11 7 102 66 96
210 2 2 11 7 99 46 91
211 2 2 11 7 113 41 42
212 2 2 11 7 110 28 97
213 2 2 11 7 112 15 14
214 2 2 11 7 105 88 35
215 2 2 11 7 95 60 84
216 2 2 11 7 117 93 12
217 2 2 11 7 99 81 46
218 2 2 11 7 116 107 73
219 2 2 11 7 110 61 77
220 2 2 11 7 111 62 90
221 2 2 11 7 119 89 54
222 2 2 11 7 132 71 108
223 2 2 11 7 132 108 55
224 2 2 11 7 118 64 74
225 2 2 11 7 98 82 48
226 2 2 11 7 124 25 92
227 2 2 11 7 120 65 84
228 2 2 11 7 129 74 64
229 2 2 11 7 126 23 24
230 2 2 11 7 128 96 60
231 2 2 11 7 120 84 60
232 2 2 11 7 119 50 89
233 2 2 11 7 125 87 38
234 2 2 11 7 128 47 96
235 2 2 11 7 110 97 61
236 2 2 11 7 117 84 65
237 2 2 11 7 116 83 68
238 2 2 11 7 121 57 94
239 2 2 11 7 124 24 25
240 2 2 11 7 130 64 114
241 2 2 11 7 127 103 82
242 2 2 11 7 129 64 94
243 2 2 11 7 117 65 93
244 2 2 11 7 130 114 32
245 2 2 11 7 132 128 71
246 2 2 11 7 118 114 64
247 2 2 11 7 126 24 124
248 2 2 11 7 130 33 121
249 2 2 11 7 116 68 107
250 2 2 11 7 126 124 69
251 2 2 11 7 132 47 128
252 2 2 11 7 127 82 98
253 2 2 11 7 90 36 37
254 2 2 11 7 105 4 36
255 2 2 11 7 130 32 33
$EndElements
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment