├── src ├── README.txt ├── Makefile ├── Matrix.hpp ├── physics.hpp ├── mesh.hpp ├── physicalOptics.cpp ├── Matrix.cpp ├── physics.cpp └── mesh.cpp ├── output └── PO ├── Makefile ├── MATLAB └── surfaceplot.m ├── pocurrentplot.cpp └── mesh ├── cube_low.txt └── sphere_verylow.txt /src/README.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /output/PO: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jdaniel400/computational-electromagnetics/HEAD/output/PO -------------------------------------------------------------------------------- /src/Makefile: -------------------------------------------------------------------------------- 1 | all: po 2 | po: physicalOptics.o physics.o physics.hpp mesh.o mesh.hpp Matrix.o Matrix.hpp 3 | g++ -g physicalOptics.o physics.o mesh.o Matrix.o -o PO 4 | physicalOptics.o: physicalOptics.cpp Matrix.hpp physics.hpp mesh.hpp 5 | g++ -g -c physicalOptics.cpp 6 | physics.o: physics.cpp physics.hpp 7 | g++ -g -c physics.cpp 8 | mesh.o: mesh.cpp mesh.hpp 9 | g++ -g -c mesh.cpp 10 | Matrix.o: Matrix.cpp Matrix.hpp 11 | g++ -g -c Matrix.cpp 12 | clean: 13 | rm physicalOptics.o physics.o mesh.o Matrix.o 14 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | all: po 2 | po: physicalOptics.o physics.o src/physics.hpp mesh.o src/mesh.hpp Matrix.o src/Matrix.hpp 3 | g++ -g physicalOptics.o physics.o mesh.o Matrix.o -o output/PO 4 | physicalOptics.o: src/physicalOptics.cpp src/Matrix.hpp src/physics.hpp src/mesh.hpp 5 | g++ -g -c src/physicalOptics.cpp 6 | physics.o: src/physics.cpp src/physics.hpp 7 | g++ -g -c src/physics.cpp 8 | mesh.o: src/mesh.cpp src/mesh.hpp 9 | g++ -g -c src/mesh.cpp 10 | Matrix.o: src/Matrix.cpp src/Matrix.hpp 11 | g++ -g -c src/Matrix.cpp 12 | clean: 13 | rm physicalOptics.o physics.o mesh.o Matrix.o 14 | -------------------------------------------------------------------------------- /src/Matrix.hpp: -------------------------------------------------------------------------------- 1 | //Matrix.h 2 | #pragma once 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #define MAX_LINES 800000 11 | #define MAX_CHARS_PER_LINE 93 12 | #define PI 3.141592653589793238463 //could use confirmation 13 | using namespace std; 14 | template 15 | class Matrix 16 | { 17 | public: 18 | Matrix (const long num_rows, const long num_columns); 19 | Matrix & cross (Matrix & arg_vect); 20 | T dot (Matrix & arg_vect); 21 | T& operator()(long row, long col) const; 22 | T& operator*=(double c); 23 | long getLength(); 24 | void normalize(); 25 | void print (); 26 | T ** matrix; //Matrix class was templatized to support complex numbers 27 | long number_of_rows; 28 | }; 29 | 30 | -------------------------------------------------------------------------------- /src/physics.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | physics.h 3 | All the methods that implement the physical optics approximation calculations 4 | */ 5 | 6 | #ifndef __PHYSICS_H_INCLUDED__ 7 | #define __PHYSICS_H_INCLUDED__ 8 | 9 | #include 10 | #include 11 | #include 12 | #include "Matrix.hpp" 13 | #define PI 3.141592653589793238463 //could use confirmation 14 | using namespace std; 15 | 16 | 17 | Matrix * calculateIlluminatedTriangles (Matrix & torch, Matrix & normals); 18 | 19 | Matrix > * generateEFieldIncident (Matrix * illuminated, Matrix & polarizing_vector, Matrix & torch, Matrix * centroids, int lambda); 20 | 21 | Matrix >* generateHFieldIncident (Matrix & torch, complex impedance, Matrix >* E_field_inc); 22 | 23 | Matrix >* calcSurfaceCurrents_PHYSICAL_OPTICS (Matrix * normals, Matrix > * H_field_inc); 24 | 25 | Matrix *calcMagJPO (Matrix > *Jpo); 26 | #endif 27 | -------------------------------------------------------------------------------- /src/mesh.hpp: -------------------------------------------------------------------------------- 1 | //mesh.h 2 | /*All the functions necessary to build the mesh from the .unv file */ 3 | #ifndef __MESH_H_INCLUDED__ 4 | #define __MESH_H_INCLUDED__ 5 | 6 | 7 | #include 8 | #include 9 | #include 10 | #include "Matrix.hpp" 11 | #define PI 3.141592653589793238463 //could use confirmation 12 | 13 | using namespace std; 14 | 15 | 16 | 17 | class Mesh 18 | { 19 | private: 20 | 21 | long start_of_node_field, start_of_triangle_field, end_of_triangle_field; //markers filled in as part of the parsing process 22 | double * data; //array to hold parsed file data 23 | void getNewSubstring (char *& result, char * charArray, int start_index_inclusive, int end_index_exclusive); 24 | Matrix *nodes; 25 | Matrix *triangles; 26 | public: 27 | Mesh (); 28 | 29 | Matrix *centroids; 30 | Matrix *normals; 31 | 32 | void calculate_Centroids_and_Normals (); 33 | 34 | Matrix * build_nodes (); 35 | 36 | Matrix * build_triangles (); 37 | 38 | double * parseAndBuildData (const char *file_name); 39 | 40 | void importEMF (const char *file_name, Matrix &direction_of_propagation, Matrix &polarizing_vector, complex &impedance, int &lambda); 41 | }; 42 | 43 | #endif 44 | -------------------------------------------------------------------------------- /src/physicalOptics.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include "Matrix.hpp" 8 | #include "mesh.hpp" 9 | #include "physics.hpp" 10 | #include "Matrix.cpp" 11 | using namespace std; 12 | int main () 13 | { 14 | 15 | 16 | 17 | Mesh *mesh = new Mesh (); //create the mesh, constructor will parse file and build 18 | Matrix torch = *new Matrix (1, 3); //direction vector of incident E-field 19 | //torch (0, 0) = 2; torch (0, 1) = 5; torch (0, 2) = 1; //completely arbitrary direction of the incident Electromagnetic field 20 | 21 | Matrix *illuminated = calculateIlluminatedTriangles (torch, *(mesh->normals)); //build the illuminated vector, binary representation of illuminated triangle/shadowed triangle for each triangle in the mesh 22 | 23 | Matrix polarizing_vector = *new Matrix (1, 3); 24 | polarizing_vector = *new Matrix (1,3); 25 | //polarizing_vector (0,0) = 1; polarizing_vector (0,1) = 0; polarizing_vector (0, 2) = 0; 26 | 27 | //Matrix >* precalc_exponentials = new Matrix >(normals->getLength(), 3); 28 | 29 | int lambda; //frequency of the inc EMF 30 | Matrix >* EFinc = generateEFieldIncident (illuminated, polarizing_vector, torch, mesh->centroids, lambda); 31 | 32 | complex impedance;// = 120 / PI; 33 | mesh->importEMF ("IncidentEField.txt", torch, polarizing_vector, impedance, lambda); 34 | Matrix >* HFinc = generateHFieldIncident (torch, impedance, EFinc); 35 | 36 | Matrix >* JPO = calcSurfaceCurrents_PHYSICAL_OPTICS (mesh->normals, HFinc); 37 | 38 | Matrix * MagJPO = calcMagJPO (JPO); 39 | 40 | /* for (int i = nodes->getLength() - 401; i < nodes->getLength(); i++) 41 | cout << "nodes" << i << ": " << (*nodes) (i, 0) << " " << (*nodes) (i, 1) << " " << (*nodes) (i, 2) << endl; 42 | */ 43 | //for (long i = triangles->getLength() - 31; i < triangles->getLength(); i++) 44 | // cout << "normal " << i << ": " << (*normals)(i, 0) << " " << (*normals)(i, 1) << " " << (*normals)(i, 2) << endl; 45 | 46 | for (int i = EFinc->getLength() - 310; i < EFinc->getLength(); i++) 47 | cout << "E field inc " << i << ": " << (*JPO) (i, 0).real() << " + " << (*EFinc) (i, 0).imag() << "i " << (*EFinc) (i, 1).real() << " + " << (*EFinc) (i, 1).imag() << "i " << (*EFinc) (i, 2).real() << " + " << (*EFinc) (i, 2).imag() << "i " << endl; 48 | MagJPO->print(); 49 | /*for (int i = centroids->getLength() - 250; i < centroids->getLength(); i++) 50 | cout << "centroid " << i << ": " << (*illuminated)(i, 0) << endl ; //" " << (*centroids)(i, 1) << " " << (*centroids)(i, 2) << endl; 51 | */ 52 | 53 | return 0; 54 | } 55 | 56 | -------------------------------------------------------------------------------- /src/Matrix.cpp: -------------------------------------------------------------------------------- 1 | #include "Matrix.hpp" 2 | 3 | template 4 | Matrix::Matrix (const long num_rows, const long num_columns) 5 | { 6 | //Matrix class constructor 7 | matrix = new T*[num_columns]; 8 | 9 | for (long i = 0; i < num_columns; i++) 10 | matrix[i] = new T [num_rows]; 11 | 12 | for (long j = 0; j < num_columns; j++) 13 | for (long i = 0; i < num_rows; i++) 14 | matrix[j][i] = 0; //implemented this just because original MATLAB code called for zeros. 15 | number_of_rows = num_rows; 16 | } 17 | 18 | 19 | template 20 | T& Matrix::operator()(long row, long col) const 21 | { 22 | //note that it is ROW (Y) and then COL (X). MATLAB CONVENTION FORMAT 23 | return matrix[col][row]; //will return reference to cell entry, but can be modified 24 | } 25 | 26 | template 27 | T& Matrix::operator*=(double c) 28 | { 29 | for (int i = 0; i < getLength(); i++) { 30 | matrix[0][i] = matrix[0][i] * c; 31 | matrix[1][i] = matrix[1][i] * c; 32 | matrix[2][i] = matrix[2][i] * c; 33 | } 34 | } 35 | 36 | template 37 | long Matrix::getLength() 38 | { 39 | return number_of_rows; 40 | } 41 | 42 | template 43 | Matrix & Matrix::cross (Matrix & arg_vect) 44 | {https://github.com/jdaniel400/computational-electromagnetics.git 45 | /*Cross product implementation, iteratively for each row of the matrices 46 | assumes that template type supports * operator */ 47 | Matrix *result = new Matrix (getLength(), 3); 48 | //This is the formula for cross product, implemented iteratively for each row of the matrices 49 | //Cross product for single vector argument (1 x 3) 50 | if (arg_vect.getLength() == 1) { 51 | for (long i = 0; i < getLength(); i++) { 52 | (*result)(i,0) = matrix[1][i] * arg_vect(0,2) - matrix[2][i] * arg_vect(0,1); //note that matrix[][] convention is the opposite of (*matrix) (,) convetion 53 | (*result)(i,1) = matrix[2][i] * arg_vect(0,0) - matrix[0][i] * arg_vect(0,2); //it seemed more natural to create the matrices in this way 54 | (*result)(i,2) = matrix[0][i] * arg_vect(0,1) - matrix[1][i] * arg_vect(0,0); //and the to flip in the (,) overload 55 | } 56 | return *result; 57 | } 58 | //Cross product for matrix of vectors argument (n x 3) 59 | for (long i = 0; i < getLength(); i++) 60 | { 61 | (*result)(i,0) = matrix[1][i] * arg_vect(i,2) - matrix[2][i] * arg_vect(i,1); //note that matrix[][] convention is the opposite of (*matrix) (,) convetion 62 | (*result)(i,1) = matrix[2][i] * arg_vect(i,0) - matrix[0][i] * arg_vect(i,2); //it seemed more natural to create the matrices in this way 63 | (*result)(i,2) = matrix[0][i] * arg_vect(i,1) - matrix[1][i] * arg_vect(i,0); //and the to flip in the (,) overload 64 | } 65 | return *result; 66 | } 67 | 68 | 69 | template 70 | T Matrix::dot (Matrix & arg_vect) 71 | { 72 | /*Function takes on a Matrix assumed to be a 1 x 3 vector. arg_vect must be 1 x 3, no other size will be acceptable. 73 | * Update: This function assumes that this Matrix is a 1 x 3 vector. 74 | Returns result as a double floating point*/ 75 | return matrix[0][0] * arg_vect (0, 0) + matrix[1][0] * arg_vect (0, 1) + matrix[2][0] * arg_vect (0, 2); 76 | } 77 | template 78 | void Matrix::normalize () 79 | { 80 | /* Assumes that normalize will only be called on a Matrix of type double */ 81 | for (long i = 0; i < getLength(); i++) 82 | { 83 | double length = sqrt(matrix[0][i] * matrix[0][i] + matrix[1][i] * matrix[1][i] + matrix[2][i] * matrix[2][i]); 84 | matrix[0][i] = matrix[0][i] / length; 85 | matrix[1][i] = matrix[1][i] / length; 86 | matrix[2][i] = matrix[2][i] / length; 87 | } 88 | 89 | } 90 | 91 | template 92 | void Matrix::print() 93 | { 94 | //Print the contents of the matrix in row major order to a file named matrix_output.txt 95 | //Currently only supports VECTORS (N X 1) 96 | ofstream output; 97 | output.open ("matrix_output.txt"); 98 | for (long i = 0; i < getLength(); i++) 99 | output << std::scientific << matrix[0][i] << endl; 100 | output.close(); 101 | } 102 | -------------------------------------------------------------------------------- /src/physics.cpp: -------------------------------------------------------------------------------- 1 | #include "physics.hpp" 2 | #include "Matrix.cpp" 3 | Matrix * calculateIlluminatedTriangles (Matrix & torch, Matrix & normals) 4 | { 5 | /* Takes on torch vector and normal matrix. Torch vector is assumed to be a 1 x 3 vector, incidicates direction of incident E-field 6 | * normals represents normal vector of each triangle in the mesh. Assumed to be n x 3. 7 | * Function will take cross product of every row of normals with torch vector, return a n x 1 matrix consisting of 1's and zeroes. 8 | * The returned matrix data can be interpreted as : 1 - Corresponding triangle is illuminated by torch. 0 - Corresponding triangle is not illuminated by torch. 9 | * Function will allocate memory for return matrix, and must be freed by the caller. */ 10 | /* Notes: I decided to switch to this implementation, where the row is extracted seperately from the normals matrix and passed into a dot product method that 11 | returns the result of a single operation, because it would be the most efficient way while maintaining a generalized dot product method */ 12 | 13 | Matrix *illuminated = new Matrix (normals.getLength(), 1); //allocate new matrix to return 14 | for (long i = 0; i < normals.getLength(); i++) { //iterate through all normal vectors 15 | Matrix *current_normals_vector = new Matrix (1, 3); //create a new vector to store the current row 16 | (*current_normals_vector) (0, 0) = normals (i, 0); //concatenate normals x y z entries into one vector 17 | (*current_normals_vector) (0, 1) = normals (i, 1); 18 | (*current_normals_vector) (0, 2) = normals (i, 2); 19 | (*illuminated) (i, 0) = (*current_normals_vector).dot(torch); // (torch, normals (i, current_normals_vector)); //take dot product of current normals row with the torch and store in return value array 20 | if ((*illuminated) (i, 0) < -.00000000000001) //arbitrary threshold around 0 to determine 1/0 cutoff 21 | (*illuminated) (i, 0) = 1; //illuminated 22 | else 23 | (*illuminated)(i, 0) = 0; //not illuminated 24 | delete current_normals_vector; //Must delete the allocated vector, avoid a memory leak 25 | } 26 | return illuminated; 27 | } 28 | 29 | Matrix > * generateEFieldIncident (Matrix * illuminated, Matrix & polarizing_vector, Matrix & torch, Matrix * centroids, int lambda) 30 | { 31 | //Q: The result of this function is one dimensional. Is this correct? 32 | /* This function will generate an incident E field according to Electromagnetic wave equations 33 | illuminated points to matrix incidicating binary indicator that E field is incidient on triangle or not 34 | polarizing vector is a property of the E field, arbitrary 35 | torch: direction of propgation of the incident field 36 | centroids : matrix containing x y z coordinates of the centroids of the triangles in the mesh 37 | INSERT LAMBDA CONSTRAINTS HERE 38 | */ 39 | 40 | //USE 138 FOR LAMBDA //need to verify that this is, in fact, lambda 41 | Matrix > * IncidentElectricField = new Matrix > (centroids->getLength(), 3); //incident E field 42 | for (long j = 0; j < centroids->getLength(); j++) { 43 | std::complex complex_number (0,0); //complex number placeholder 44 | std::complex i(0, 1); //the complex variable i 45 | Matrix * cur_centroid = new Matrix (1, 3); //dot product precalculation 46 | (*cur_centroid)(0, 0) = (*centroids) (j, 0); //set equal to the current centroid in the matrix 47 | (*cur_centroid)(0, 1) = (*centroids) (j, 1); 48 | (*cur_centroid)(0, 2) = (*centroids) (j, 2); 49 | complex_number = exp (i *(lambda * PI) * torch.dot(*cur_centroid)); //wave Eqn 50 | (*IncidentElectricField) (j, 0) = (*illuminated) (j, 0) * polarizing_vector(0, 0) * complex_number; //implemented vector multiplication manually 51 | (*IncidentElectricField) (j, 1) = (*illuminated) (j, 0) * polarizing_vector(0, 1) * complex_number; //no need to transpose polarizing vector 52 | (*IncidentElectricField) (j, 2) = (*illuminated) (j, 0) * polarizing_vector(0, 2) * complex_number; 53 | } 54 | return IncidentElectricField; 55 | } 56 | 57 | 58 | Matrix >* generateHFieldIncident (Matrix & torch, complex impedance, Matrix >* E_field_inc) 59 | { 60 | Matrix > scaled_torch = *(new Matrix > (1, 3)); //copy constructor??? memory leak??? 61 | scaled_torch (0,0) = torch (0,0) / impedance; scaled_torch (0,1) = torch (0,1) / impedance; scaled_torch (0,2) = torch (0,2) / impedance; 62 | Matrix > * H_field = &E_field_inc->cross (scaled_torch); 63 | return H_field; 64 | } 65 | 66 | Matrix >* calcSurfaceCurrents_PHYSICAL_OPTICS (Matrix * normals, Matrix > * H_field_inc) 67 | { 68 | 69 | Matrix > complex_normals = *new Matrix > (normals->getLength(), 3); 70 | for (long i = 0; i < normals->getLength(); i++) { 71 | complex_normals (i, 0) = (*normals) (i, 0); complex_normals (i, 1) = (*normals) (i, 1); complex_normals (i, 2) = (*normals) (i, 2); 72 | } 73 | 74 | Matrix > * unscaledPOCurrent = &H_field_inc->cross (complex_normals); 75 | (*unscaledPOCurrent) *= 2; //scale by factor of 2 76 | return unscaledPOCurrent; 77 | } 78 | 79 | Matrix *calcMagJPO (Matrix > *Jpo) 80 | { 81 | long l = Jpo->getLength(); 82 | Matrix *magJPO = new Matrix (l, 1); 83 | for (long i = 0; i < l; i++) { 84 | (*magJPO) (i, 0) = sqrt((*Jpo)(i, 0).real() * (*Jpo)(i, 0).real() + (*Jpo)(i, 1).real() * (*Jpo)(i, 1).real() + (*Jpo)(i, 2).real() * (*Jpo)(i, 2).real()); 85 | } 86 | return magJPO; 87 | } 88 | -------------------------------------------------------------------------------- /src/mesh.cpp: -------------------------------------------------------------------------------- 1 | #include "mesh.hpp" 2 | #include "Matrix.cpp" 3 | 4 | Mesh::Mesh () 5 | { 6 | data = parseAndBuildData ("mesh/sphere_veryhigh.txt"); 7 | 8 | nodes = build_nodes (); //yes, start_of_triangle_field is right here 9 | triangles = build_triangles (); 10 | normals = new Matrix (triangles->getLength(), 3); 11 | centroids = new Matrix (triangles->getLength(), 3); 12 | calculate_Centroids_and_Normals (); 13 | } 14 | void Mesh::calculate_Centroids_and_Normals () 15 | { 16 | long num_triangles = triangles->getLength(); 17 | Matrix pts_A = *new Matrix (num_triangles, 3); //RESOLVE: Possible memory leaks?????? Derefencing new object, calling copy constructor, then moving on? 18 | Matrix pts_B = *new Matrix (num_triangles, 3); 19 | Matrix pts_C = *new Matrix (num_triangles, 3); 20 | Matrix vect1 = *new Matrix (num_triangles, 3); 21 | Matrix vect2 = *new Matrix (num_triangles, 3); 22 | 23 | for (long i = 0; i < num_triangles; i++) { 24 | long nodeA = (*triangles)(i,0); //triangles will always contain integers (in floating point format) 25 | long nodeB = (*triangles)(i,1); 26 | long nodeC = (*triangles)(i,2); 27 | for (int j = 0; j < 3; j++) 28 | pts_A (i, j) = (*nodes) (nodeA, j); 29 | for (int j = 0; j < 3; j++) 30 | pts_B (i, j) = (*nodes) (nodeB, j); 31 | for (int j = 0; j < 3; j++) 32 | pts_C (i, j) = (*nodes) (nodeC, j); 33 | for (int j = 0; j < 3; j++) 34 | vect1(i, j) = (*nodes) (nodeA, j) - (*nodes)(nodeB, j); 35 | for (int j = 0; j < 3; j++) 36 | vect2(i, j) = (*nodes) (nodeA, j) - (*nodes)(nodeC, j); 37 | 38 | //cout << "pts_A " << i << " " << pts_A (i, 0) << " " << pts_A (i, 1) << " " << pts_A (i, 2) << endl; 39 | //cout << "pts_B " << pts_B (i, 0) << " "<< pts_B (i, 1) << " " << pts_B (i, 2) << endl; 40 | //cout << "pts_C " << pts_C (i, 0) << " "<< pts_C (i, 1) << " " << pts_C (i, 2) << endl; 41 | 42 | (*centroids) (i, 0) = (pts_A(i, 0) + pts_B(i, 0) + pts_C(i, 0)) / 3; 43 | (*centroids) (i, 1) = (pts_A(i, 1) + pts_B(i, 1) + pts_C(i, 1)) / 3; 44 | (*centroids) (i, 2) = (pts_A(i, 2) + pts_B(i, 2) + pts_C(i, 2)) / 3; 45 | 46 | } 47 | 48 | normals = &(vect1.cross(vect2)); 49 | normals->normalize(); 50 | 51 | } 52 | 53 | Matrix * Mesh::build_nodes () 54 | 55 | { 56 | long prealloc_length = ((start_of_triangle_field - 3 - start_of_node_field) / 7) + 1; // added + 1 because originally MATLAB called for ceil 57 | Matrix *tmp = new Matrix (prealloc_length, 3); 58 | long i = start_of_node_field; // start i at 7 59 | int vals_taken = 0; 60 | long c = 0; 61 | long r = 0; 62 | while (i < start_of_triangle_field - 3) //if we opt for + 6 in main, this should change to - 8 63 | { 64 | if (c == 3) { 65 | c = 0; 66 | r++; 67 | i += 4; //skip ahead by 4, taken 3 coordinates.next 4 entires are irrelevant. Note that i is already pointing to an irrelevant entry, that's why it is 4 and not 5 68 | } 69 | (*tmp)(r, c) = data[i]; 70 | //cout << "row " << r << " column " << c << "entry " << data[i] << endl; 71 | c ++; 72 | i ++; 73 | } 74 | return tmp; 75 | } 76 | 77 | 78 | Matrix * Mesh::build_triangles () 79 | { 80 | //NOTE: Start of the triangle field has been designated as the first node number (with the code + 1) as of 6-29-16 81 | long prealloc_length = (end_of_triangle_field - (start_of_triangle_field + 6))/9 + 1; 82 | Matrix *tmp = new Matrix ((prealloc_length), 3); 83 | long i = start_of_triangle_field + 6; //begin at the first node (this is dependent on the parsing process) 84 | int vals_taken = 0; 85 | long c = 0; 86 | long r = 0; 87 | while (i < end_of_triangle_field) 88 | { 89 | if (c == 3) 90 | { 91 | c = 0; 92 | r++; 93 | i += 6; 94 | } 95 | (*tmp)(r, c) = data[i] - 1; //IMPORTANT: SUBTRACT 1. ALL ENTRIES IN TRIANGLE MATRIX REFER TO A OFFSET 1 TRIANGLE, NOT OFFSET 0 (THIS IS THE FILE CONVENTION) 96 | c ++; 97 | i ++; 98 | 99 | } 100 | return tmp; 101 | } 102 | 103 | void Mesh::getNewSubstring (char *& result, char * charArray, int start_index_inclusive, int end_index_exclusive) 104 | { 105 | if (result != NULL) { 106 | delete[] result; 107 | // result == NULL; 108 | } 109 | result = new char [end_index_exclusive - start_index_inclusive + 1]; //+ 1 for null terminating char 110 | for (int x = start_index_inclusive; x < end_index_exclusive; x++) 111 | result[x - start_index_inclusive] = charArray[x]; 112 | result[end_index_exclusive - start_index_inclusive] = '\0'; 113 | } 114 | 115 | void Mesh::importEMF (const char *file_name, Matrix &direction_of_propagation, Matrix &polarizing_vector, complex &impedance, int &lambda) 116 | { 117 | //reads and imports data from file to construct incident electric field 118 | //File stored in format 119 | // X_PROP_DIRECTION Y_PROP_DIRECTION Z_PROP_DIRECTION 120 | // X_THETA Y_THETA Z_THETA 121 | // IMPEDANCE 122 | // LAMBDA 123 | 124 | ifstream emf; 125 | emf.open(file_name); 126 | emf >> direction_of_propagation (0, 0); 127 | emf >> direction_of_propagation (0, 1); 128 | emf >> direction_of_propagation (0, 2); 129 | emf >> polarizing_vector (0,0); 130 | emf >> polarizing_vector (0,1); 131 | emf >> polarizing_vector (0,2); 132 | emf >> impedance; 133 | emf >> lambda; 134 | emf.close(); 135 | } 136 | double * Mesh::parseAndBuildData (const char *file_name) 137 | { 138 | ifstream mesh; 139 | mesh.open(file_name); 140 | long line_count = 0; //self explanatory, used in parsing file 141 | char *current_line = new char [MAX_CHARS_PER_LINE](); //the () is absolutely necessary to intialize the string to white space. Otherwise will be leftover values. 142 | long prev, cur; //WHAT IS CUR???? 143 | double *current = new double [MAX_LINES]; //size of current is arbitrary 144 | bool SUBSTRING_EXISTS = false; 145 | long idx_for_current = 0; 146 | 147 | 148 | 149 | for (int i = 0; i < 185; i++) 150 | mesh.getline(current_line, MAX_CHARS_PER_LINE); // grab a few redundant characters. This isn't really necessary 151 | 152 | char * temp_ch_ar = NULL; //character array that holds the result of the number substring of a current line (eg "12e-3") 153 | 154 | while (mesh.getline(current_line, MAX_CHARS_PER_LINE)) 155 | { 156 | // cout << line_count << endl; 157 | int start_idx = 0; 158 | for (int i = 0; i < MAX_CHARS_PER_LINE; i++) 159 | { 160 | 161 | //I think that all the \0 s can go because every line ends with \r 162 | if (current_line[i] != ' ' && current_line[i] != '\r'&& current_line[i] != '\0') 163 | SUBSTRING_EXISTS = true; //flag true so that we can grab a substring next time a space comes up 164 | if (current_line[i] == 'D') 165 | current_line[i] = 'E'; //atoi recognizes E for floating point numbers, while text file contains D 166 | if ((current_line[i] == ' ' || current_line[i] == '\r' || current_line[i] == '\0') && SUBSTRING_EXISTS) { 167 | getNewSubstring(temp_ch_ar, current_line, start_idx, i); 168 | double tmp = atof(temp_ch_ar); 169 | //if (!(current_line[start_idx] == '0' && i == start_idx + 1) && tmp == 0) //basically check if atof returned 0 for an array other than '0'. This means it was an invalid number 170 | // current[idx_for_current++] = -9999; //INVALID CHARACTER 171 | // else 172 | current[idx_for_current++] = tmp; 173 | SUBSTRING_EXISTS = false; //reset flag to false 174 | start_idx = i + 1; 175 | } 176 | if (current_line[i] == '\r') 177 | break; 178 | else if (current_line[i] == ' ' ) //&& start_idx == i - 1) 179 | start_idx = i + 1; 180 | } 181 | 182 | 183 | line_count++; 184 | delete [] current_line; 185 | current_line = new char [MAX_CHARS_PER_LINE](); //must initialize, get rid of whatever is before 186 | 187 | } 188 | // if (line_count == 2000) { 189 | //for (int i = 67300; i < 67395; i++) 190 | // cout << "double " << i << " is: " << current[i] << endl; 191 | 192 | 193 | 194 | 195 | prev = current[0]; //prev variable used in detecting start field markers, initialize to first element 196 | for (long i = 0; i < idx_for_current; i++) 197 | { 198 | if (current[i] == 2411 && prev == -1) { 199 | start_of_node_field = i + 5; 200 | cout << "set at " << start_of_node_field << endl; } 201 | if (current[i] == 2412 && prev == -1) 202 | start_of_triangle_field = i + 1; 203 | if (current[i] == 2420 && prev == -1) 204 | end_of_triangle_field = i - 2; 205 | 206 | prev = current[i]; 207 | } 208 | cout << "start of node field " << current[start_of_node_field] << "(" << start_of_node_field << ")" << endl; 209 | cout << "start of triangle field " << current[start_of_triangle_field] << "(" << start_of_triangle_field << ")" << endl; 210 | cout << "end of triangle field " << current[end_of_triangle_field] << "(" << end_of_triangle_field << ")" << endl; 211 | mesh.close(); 212 | return current; 213 | } 214 | -------------------------------------------------------------------------------- /MATLAB/surfaceplot.m: -------------------------------------------------------------------------------- 1 | clear all 2 | close all 3 | clc 4 | 5 | A = textread('shape.txt', '%s'); 6 | B = strrep(A, 'D', 'e'); 7 | 8 | C = str2double(B); 9 | 10 | len = length(C); 11 | %expand the second number for larger matrixes; 10 may not be sufficient 12 | %find returns vector of all matches. Result may be a vector if multiple 13 | node_index = find(C==2411,10); %search file to find the marker '2411' indicating begining of node field 14 | triangle_index = find(C==2412,10); %search file to find the marker '2412' indicating begining of triangle field 15 | lastfield_index = find(C==2420,10); %search file to find the marker '2420' indicating end of triangle field 16 | 17 | %this block of code goes through each instance of 2412 found, and checks if 18 | %the value before it is -1. If so, then the 2412 signifies the start of the 19 | %triangles field. Note that this does not check the first instance of 2412, 20 | %so there must be more than 2412 triangles 21 | 22 | r = 1; c= 1; vals_taken = 0; 23 | start_of_triangle_field = 0; 24 | 25 | for i = 1:length(node_index) 26 | if C(node_index(i)-1) == -1 27 | start_of_node_field = node_index(i) + 5; 28 | end 29 | end 30 | 31 | for i = 1:length(triangle_index) 32 | if C(triangle_index(i)-1) == -1 33 | start_of_triangle_field = triangle_index(i) + 1; 34 | end 35 | end 36 | 37 | for i = 1:length(lastfield_index) 38 | if C(lastfield_index(i)-1) == -1 39 | end_of_triangle_field = lastfield_index(i) - 2; 40 | end 41 | end 42 | 43 | %if C(index(1)-1) == -1 %this is for small meshes, just in case less than 2412 44 | % start_of_triangle_field = index(1) + 1; 45 | %end 46 | 47 | %nodes = zeros(numnodes,3) 48 | 49 | i = start_of_node_field; % start i at 7 50 | prealloc_length = ceil((start_of_triangle_field - 2 - start_of_node_field)/7); %algorithm to calc # nodes 51 | nodes = zeros(prealloc_length,3); % preallocate matrix for speed 52 | while (i < start_of_triangle_field - 2) % build node matrix 53 | 54 | if c == 4 55 | c = 1; 56 | r = r + 1; 57 | end 58 | nodes(r,c) = C(i); %change between C and D, C currently will not show 59 | c = c + 1; 60 | vals_taken = vals_taken + 1; 61 | i = i + 1; 62 | if vals_taken == 3 63 | i = i + 4; % skip ahead by 4, taken 3 values (vertexes) already. Don't care about the next 3 or 4?? entries 64 | vals_taken = 0; 65 | end 66 | end 67 | 68 | r = 1; c = 1; vals_taken = 0; 69 | i = start_of_triangle_field + 6; % this is the first node in the triangle field 70 | prealloc_length = ceil((end_of_triangle_field - (start_of_triangle_field + 6))/9); 71 | triangles = zeros(prealloc_length,3); % preallocate matrix for speed 72 | while (i < end_of_triangle_field) % build the triangle matrix 73 | 74 | if c == 4 75 | c = 1; 76 | r = r + 1; 77 | end 78 | 79 | triangles(r,c) = C(i); 80 | 81 | c = c + 1; 82 | vals_taken = vals_taken + 1; 83 | i = i + 1; 84 | if vals_taken == 3 85 | i = i + 6; % skip ahead by 7, taken 3 values (nodes) already. Don't care about the next 6 entries 86 | vals_taken = 0; 87 | end 88 | end 89 | %x = nodes(:,1); %just as before, no need for this if not using trimesh here 90 | %y = nodes(:, 2); %this code is duplicated later, so its commented out here now 91 | %z = nodes(:, 3); 92 | 93 | %trimesh (triangles, x, y, z); 94 | 95 | 96 | pts_A = zeros(length(triangles),3); %preallocate size for speed 97 | pts_B = zeros(length(triangles),3); %preallocate size for speed 98 | pts_C = zeros(length(triangles),3); %preallocate size for speed 99 | vect1 = zeros(length(triangles),3); %preallocate size for speed 100 | vect2 = zeros(length(triangles),3); %preallocate size for speed 101 | 102 | for i = 1:length(triangles) 103 | nodeA = triangles(i,1); 104 | nodeB = triangles(i,2); 105 | nodeC = triangles(i,3); 106 | pts_A(i,:) = nodes(nodeA,:); 107 | pts_B(i,:) = nodes(nodeB,:); 108 | pts_C(i,:) = nodes(nodeC,:); 109 | vect1(i,:) = (nodes(nodeA,:) - nodes(nodeB,:)); 110 | nodeA = triangles(i,1); 111 | vect2(i,:) = nodes(nodeA,:) - nodes(nodeC,:); 112 | 113 | 114 | end 115 | 116 | %calculate a matrix of centroids, in order to fit the normal vectors to 117 | triangle_coords_x = horzcat(pts_A(:,1), pts_B(:,1), pts_C(:,1)); %cocatenate the first column (x coords) of each node matrix 118 | triangle_coords_y = horzcat(pts_A(:,2), pts_B(:,2), pts_C(:,2)); %cocatenate the second column (y coords) of each node matrix 119 | triangle_coords_z = horzcat(pts_A(:,3), pts_B(:,3), pts_C(:,3)); %cocatenate the third column (z coords) of each node matrix 120 | centroids = horzcat(mean(triangle_coords_x, 2), mean(triangle_coords_y, 2), mean(triangle_coords_z, 2)); 121 | 122 | 123 | normals = cross(vect1,vect2); 124 | normals = normr(normals); 125 | 126 | %x = normals(:,1); this code was only here for ploting with quiver 127 | %y = normals(:, 2); if the normals dont need to be plotted 128 | %z = normals(:, 3); then no need to break them up into x,y,z here 129 | 130 | u = centroids(:,1); 131 | v = centroids(:, 2); 132 | q = centroids(:, 3); 133 | 134 | %quiver3( u, v, q, x,y,z, 2); 135 | axis equal; 136 | xlabel('X'); 137 | ylabel('Y'); 138 | zlabel('Z'); 139 | 140 | %illuminate the sphere 141 | torch = [0 0 -1]'; %completely arbitrary, this is the direction of the uniform vector field 142 | torch = normr(torch); 143 | 144 | illuminated = zeros(length(triangles),1); %preallocate size for speed 145 | for i = 1:length(triangles) 146 | illuminated(i,:) = dot(torch, normals(i,:)); 147 | if (illuminated(i, :) < -1e-14) 148 | illuminated(i,1) = 1; 149 | 150 | 151 | else 152 | illuminated(i, :) = 0; 153 | end 154 | end 155 | 156 | x = nodes(:,1); 157 | y = nodes(:, 2); 158 | z = nodes(:, 3); 159 | 160 | %trisurf (triangles, x, y, z, illuminated); %use trisurf if you want to color faces 161 | 162 | polarizing_vector = [1 0 0]'; %???? polarized 163 | 164 | precalc_exponentials = zeros(length(normals),3); %preallocate for speed 165 | %some lambdas found: sphere_veryhigh: .02. shape: .001 166 | torch = torch'; % look into maybe not transposing in the first place. It must be like this to dot product with the centroids 167 | for idx = 1:length(normals) 168 | precalc_exponentials(idx,:) = illuminated(idx,:) * polarizing_vector * exp(1i * (138*pi) * dot(torch(1,:), centroids(idx,:))); % 10pi for sphere_veryhigh, 200pi for shape.txt 169 | end 170 | 171 | %E_field_inc = real(precalc_exponentials); 172 | E_field_inc = precalc_exponentials; 173 | 174 | impedance = 120 * pi; 175 | H_field_inc = zeros(length(E_field_inc),3); 176 | for idx =1:length(E_field_inc) 177 | H_field_inc(idx,:) = cross(torch/impedance, E_field_inc(idx,:)); 178 | end 179 | 180 | Jpo = zeros(length(H_field_inc),3); 181 | for idx =1:length(H_field_inc) 182 | Jpo(idx,:) = 2*cross(normals(idx,:), H_field_inc(idx,:)); 183 | end 184 | 185 | u = centroids(:,1); 186 | v = centroids(:, 2); 187 | q = centroids(:, 3); 188 | 189 | %quiver3( u, v, q, x,y,z, 2); 190 | 191 | magJpo = zeros(length(Jpo),1); 192 | for idx =1:length(Jpo) 193 | magJpo(idx,:) = (sqrt(real(Jpo(idx,1))^2+real(Jpo(idx,2))^2 +real(Jpo(idx,3))^2)); 194 | end 195 | 196 | 197 | x = nodes(:,1); 198 | y = nodes(:, 2); 199 | z = nodes(:, 3); 200 | 201 | hold on 202 | 203 | trisurf (triangles, x, y, z, magJpo, 'EdgeColor', 'none'); %use trisurf if you want to color faces 204 | axis equal 205 | 206 | 207 | 208 | 209 | % FOR NOW, K IS A RANDOM PLACEHOLDER FOR A CONSTANT. ANY USE OF K COULD BE 210 | % REFERRING TO A DIFFERENT RANDOM CONSTANT 211 | k = 5* pi; % I just chose a random constant. Figure it out later. k = omega * sqrt (mue * epsilon) 212 | % O(N) 213 | %calculate the g(r, r') at pt 214 | scattering_field_x = zeros ((.025/.001), (.025/.001), (.025/.001)); 215 | scattering_field_y = zeros ((.025/.001), (.025/.001), (.025/.001)); 216 | scattering_field_z = zeros ((.025/.001), (.025/.001), (.025/.001)); 217 | 218 | greens_function = zeros(length(centroids),1); 219 | test_plot_idx = 1; 220 | for x_idx = 1:1:7 221 | for y_idx = 1:1:7 222 | for z_idx = 1:1:7 223 | 224 | pre_scattering_field = [0, 0, 0]; 225 | pt = [(x_idx-1)/200, (y_idx-1)/200, (z_idx-1)/200]; 226 | for idx = 1:length(centroids) 227 | r = cell2mat({centroids(idx,1) - pt(1, 1), centroids(idx,2) - pt(1, 2), centroids(idx,3) - pt(1, 3)}); 228 | distance = sqrt(real(r(1, 1))^2 + real(r(1, 2))^2 + real(r(1, 3))^2); 229 | g = (exp(1i * 2*pi * k * distance) / (4 * pi * distance)); 230 | greens_function = eye(3) * g - (1/k^2) * del2 (g, .0001) ; 231 | pre_scattering_field = pre_scattering_field + dot (greens_function, Jpo (idx, :)); 232 | end 233 | 234 | scattering_field_x (x_idx, y_idx, z_idx) = pre_scattering_field(1,1) * 1i * k; % it shouldn't be k. Replace k with 1i * omega * mue 235 | scattering_field_y (x_idx, y_idx, z_idx) = pre_scattering_field(1,2) * 1i * k; % it shouldn't be k. Replace k with 1i * omega * mue 236 | scattering_field_z (x_idx, y_idx, z_idx) = pre_scattering_field(1,3) * 1i * k; % it shouldn't be k. Replace k with 1i * omega * mue 237 | 238 | scattering_field_for_plot (1, test_plot_idx) = scattering_field_x (x_idx, y_idx, z_idx); 239 | scattering_field_for_plot (2, test_plot_idx) = scattering_field_x (x_idx, y_idx, z_idx); 240 | scattering_field_for_plot (3, test_plot_idx) = scattering_field_x (x_idx, y_idx, z_idx); 241 | 242 | x_for_plot(test_plot_idx) = (x_idx - 1) / 200; 243 | y_for_plot(test_plot_idx) = (y_idx - 1) / 200; 244 | z_for_plot(test_plot_idx) = (z_idx - 1) / 200; 245 | test_plot_idx = test_plot_idx + 1; 246 | 247 | 248 | end 249 | end 250 | end 251 | 252 | hold on 253 | quiver3( x_for_plot, y_for_plot, z_for_plot, real(scattering_field_for_plot (:, 1)), real(scattering_field_for_plot (:, 2)), real(scattering_field_for_plot (:, 3)), 3); 254 | 255 | trisurf (triangles, x, y, z, magJpo, 'EdgeColor', 'none'); %use trisurf if you want to color faces 256 | 257 | 258 | 259 | -------------------------------------------------------------------------------- /pocurrentplot.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #define MAX_LINES 800000 8 | #define MAX_CHARS_PER_LINE 93 9 | #define PI 3.141592653589793238463 //could use confirmation 10 | using namespace std; 11 | template 12 | class Matrix 13 | { 14 | public: 15 | Matrix (const long num_rows, const long num_columns); 16 | Matrix & cross (Matrix & arg_vect); 17 | T dot (Matrix & arg_vect); 18 | T& operator()(long row, long col) const; 19 | long getLength(); 20 | void normalize(); 21 | void calculate_Centroids_and_Normals (Matrix & centroids, Matrix & normals, long num_triangles, Matrix & nodes, Matrix & triangles); 22 | Matrix * build_nodes (long num_columns, long start_of_node_field, long start_of_triangle_field); 23 | Matrix * build_triangles (long num_columns, long start_of_triangle_field, long end_of_triangle_field); 24 | 25 | 26 | 27 | //private: 28 | T ** matrix; //Matrix class was templatized to support complex numbers 29 | long number_of_rows; 30 | }; 31 | 32 | /*const double& Matrix::operator()(int row, int col) const 33 | { 34 | return matrix[row][col]; //will return reference to cell entry, but cannot be modified 35 | } 36 | */ 37 | template 38 | T& Matrix::operator()(long row, long col) const 39 | { 40 | //note that it is ROW (Y) and then COL (X). MATLAB CONVENTION FORMAT 41 | return matrix[col][row]; //will return reference to cell entry, but can be modified 42 | } 43 | 44 | template 45 | long Matrix::getLength() 46 | { 47 | return number_of_rows; //sizeof(matrix)/sizeof(matrix[0]); 48 | } 49 | template 50 | Matrix & Matrix::cross (Matrix & arg_vect) 51 | { 52 | /*Cross product implementation, iteratively for each row of the matrices 53 | assumes that template type supports * operator */ 54 | Matrix *result = new Matrix (getLength(), 3); 55 | //This is the formula for cross product, implemented iteratively for each row of the matrices 56 | for (long i = 0; i < getLength(); i++) 57 | { 58 | (*result)(i,0) = matrix[1][i] * arg_vect(i,2) - matrix[2][i] * arg_vect(i,1); //note that matrix[][] convention is the opposite of (*matrix) (,) convetion 59 | (*result)(i,1) = matrix[2][i] * arg_vect(i,0) - matrix[0][i] * arg_vect(i,2); //it seemed more natural to create the matrices in this way 60 | (*result)(i,2) = matrix[0][i] * arg_vect(i,1) - matrix[1][i] * arg_vect(i,0); //and the to flip in the (,) overload 61 | } 62 | return *result; 63 | } 64 | template 65 | T Matrix::dot (Matrix & arg_vect) 66 | { 67 | /*Function takes on a Matrix assumed to be a 1 x 3 vector. arg_vect must be 1 x 3, no other size will be acceptable. 68 | * Update: This function assumes that this Matrix is a 1 x 3 vector. 69 | * Returns result as a double floating point*/ 70 | 71 | // double * result = new double [getLength()]; 72 | // for (int i = 0; i < getLength(); i++) 73 | return matrix[0][0] * arg_vect (0, 0) + matrix[1][0] * arg_vect (0, 1) + matrix[2][0] * arg_vect (0, 2); 74 | 75 | 76 | } 77 | template 78 | void Matrix::normalize () 79 | { 80 | /* Assumes that normalize will only be called on a Matrix of type double */ 81 | for (long i = 0; i < getLength(); i++) 82 | { 83 | double length = sqrt(matrix[0][i] * matrix[0][i] + matrix[1][i] * matrix[1][i] + matrix[2][i] * matrix[2][i]); 84 | if (length == 0) 85 | cout << "error with 0 at" << i << ", check into " << endl; 86 | matrix[0][i] = matrix[0][i] / length; 87 | matrix[1][i] = matrix[1][i] / length; 88 | matrix[2][i] = matrix[2][i] / length; 89 | } 90 | 91 | } 92 | void calculate_Centroids_and_Normals (Matrix & centroids, Matrix & normals, long num_triangles, Matrix & nodes, Matrix & triangles) 93 | { 94 | Matrix pts_A = *new Matrix (num_triangles, 3); //RESOLVE: Possible memory leaks?????? Derefencing new object, calling copy constructor, then moving on? 95 | Matrix pts_B = *new Matrix (num_triangles, 3); 96 | Matrix pts_C = *new Matrix (num_triangles, 3); 97 | Matrix vect1 = *new Matrix (num_triangles, 3); 98 | Matrix vect2 = *new Matrix (num_triangles, 3); 99 | 100 | for (long i = 0; i < num_triangles; i++) { 101 | long nodeA = triangles(i,0); //triangles will always contain integers (in floating point format) 102 | long nodeB = triangles(i,1); 103 | long nodeC = triangles(i,2); 104 | for (int j = 0; j < 3; j++) 105 | pts_A (i, j) = nodes (nodeA, j); 106 | for (int j = 0; j < 3; j++) 107 | pts_B (i, j) = nodes (nodeB, j); 108 | for (int j = 0; j < 3; j++) 109 | pts_C (i, j) = nodes (nodeC, j); 110 | for (int j = 0; j < 3; j++) 111 | vect1(i, j) = nodes(nodeA, j) - nodes(nodeB, j); 112 | for (int j = 0; j < 3; j++) 113 | vect2(i, j) = nodes(nodeA, j) - nodes(nodeC, j); 114 | 115 | //cout << "pts_A " << i << " " << pts_A (i, 0) << " " << pts_A (i, 1) << " " << pts_A (i, 2) << endl; 116 | //cout << "pts_B " << pts_B (i, 0) << " "<< pts_B (i, 1) << " " << pts_B (i, 2) << endl; 117 | //cout << "pts_C " << pts_C (i, 0) << " "<< pts_C (i, 1) << " " << pts_C (i, 2) << endl; 118 | 119 | centroids (i, 0) = (pts_A(i, 0) + pts_B(i, 0) + pts_C(i, 0)) / 3; 120 | centroids (i, 1) = (pts_A(i, 1) + pts_B(i, 1) + pts_C(i, 1)) / 3; 121 | centroids (i, 2) = (pts_A(i, 2) + pts_B(i, 2) + pts_C(i, 2)) / 3; 122 | 123 | } 124 | 125 | normals = vect1.cross(vect2); 126 | normals.normalize(); 127 | 128 | } 129 | template 130 | Matrix::Matrix (const long num_rows, const long num_columns) 131 | { 132 | matrix = new T*[num_columns]; 133 | 134 | for (long i = 0; i < num_columns; i++) 135 | matrix[i] = new T [num_rows]; 136 | 137 | for (long j = 0; j < num_columns; j++) 138 | for (long i = 0; i < num_rows; i++) 139 | matrix[j][i] = 0; //implemented this just because original MATLAB code called for zeros. 140 | number_of_rows = num_rows; 141 | } 142 | 143 | 144 | Matrix * build_nodes (double * data, long start_of_node_field, long start_of_triangle_field) 145 | 146 | { 147 | long prealloc_length = ((start_of_triangle_field - 3 - start_of_node_field) / 7) + 1; // added + 1 because originally MATLAB called for ceil 148 | Matrix *tmp = new Matrix (prealloc_length, 3); 149 | long i = start_of_node_field; // start i at 7 150 | int vals_taken = 0; 151 | long c = 0; 152 | long r = 0; 153 | while (i < start_of_triangle_field - 3) //if we opt for + 6 in main, this should change to - 8 154 | { 155 | if (c == 3) { 156 | c = 0; 157 | r++; 158 | i += 4; //skip ahead by 4, taken 3 coordinates.next 4 entires are irrelevant. Note that i is already pointing to an irrelevant entry, that's why it is 4 and not 5 159 | } 160 | (*tmp)(r, c) = data[i]; 161 | //cout << "row " << r << " column " << c << "entry " << data[i] << endl; 162 | c ++; 163 | i ++; 164 | } 165 | return tmp; 166 | } 167 | 168 | 169 | Matrix * build_triangles (double * data, long start_of_triangle_field, long end_of_triangle_field) 170 | { 171 | //NOTE: Start of the triangle field has been designated as the first node number (with the code + 1) as of 6-29-16 172 | long prealloc_length = (end_of_triangle_field - (start_of_triangle_field + 6))/9 + 1; 173 | Matrix *tmp = new Matrix ((prealloc_length), 3); 174 | long i = start_of_triangle_field + 6; //begin at the first node (this is dependent on the parsing process) 175 | int vals_taken = 0; 176 | long c = 0; 177 | long r = 0; 178 | while (i < end_of_triangle_field) 179 | { 180 | if (c == 3) 181 | { 182 | c = 0; 183 | r++; 184 | i += 6; 185 | } 186 | (*tmp)(r, c) = data[i] - 1; //IMPORTANT: SUBTRACT 1. ALL ENTRIES IN TRIANGLE MATRIX REFER TO A OFFSET 1 TRIANGLE, NOT OFFSET 0 (THIS IS THE FILE CONVENTION) 187 | c ++; 188 | i ++; 189 | 190 | } 191 | return tmp; 192 | } 193 | 194 | void getNewSubstring (char *& result, char * charArray, int start_index_inclusive, int end_index_exclusive) 195 | { 196 | if (result != NULL) { 197 | delete[] result; 198 | // result == NULL; 199 | } 200 | result = new char [end_index_exclusive - start_index_inclusive + 1]; //+ 1 for null terminating char 201 | for (int x = start_index_inclusive; x < end_index_exclusive; x++) 202 | result[x - start_index_inclusive] = charArray[x]; 203 | result[end_index_exclusive - start_index_inclusive] = '\0'; 204 | } 205 | 206 | double * parseAndBuildData (const char *file_name, long & start_of_node_field, long & start_of_triangle_field, long & end_of_triangle_field) { 207 | ifstream mesh; 208 | mesh.open(file_name); 209 | long line_count = 0; //self explanatory, used in parsing file 210 | char *current_line = new char [MAX_CHARS_PER_LINE](); //the () is absolutely necessary to intialize the string to white space. Otherwise will be leftover values. 211 | long prev, cur; //WHAT IS CUR???? 212 | double *current = new double [MAX_LINES]; //size of current is arbitrary 213 | bool SUBSTRING_EXISTS = false; 214 | long idx_for_current = 0; 215 | 216 | 217 | 218 | for (int i = 0; i < 185; i++) 219 | mesh.getline(current_line, MAX_CHARS_PER_LINE); // grab a few redundant characters. This isn't really necessary 220 | 221 | char * temp_ch_ar = NULL; //character array that holds the result of the number substring of a current line (eg "12e-3") 222 | 223 | while (mesh.getline(current_line, MAX_CHARS_PER_LINE)) 224 | { 225 | // cout << line_count << endl; 226 | int start_idx = 0; 227 | for (int i = 0; i < MAX_CHARS_PER_LINE; i++) 228 | { 229 | 230 | //I think that all the \0 s can go because every line ends with \r 231 | if (current_line[i] != ' ' && current_line[i] != '\r'&& current_line[i] != '\0') 232 | SUBSTRING_EXISTS = true; //flag true so that we can grab a substring next time a space comes up 233 | if (current_line[i] == 'D') 234 | current_line[i] = 'E'; //atoi recognizes E for floating point numbers, while text file contains D 235 | if ((current_line[i] == ' ' || current_line[i] == '\r' || current_line[i] == '\0') && SUBSTRING_EXISTS) { 236 | getNewSubstring(temp_ch_ar, current_line, start_idx, i); 237 | double tmp = atof(temp_ch_ar); 238 | //if (!(current_line[start_idx] == '0' && i == start_idx + 1) && tmp == 0) //basically check if atof returned 0 for an array other than '0'. This means it was an invalid number 239 | // current[idx_for_current++] = -9999; //INVALID CHARACTER 240 | // else 241 | current[idx_for_current++] = tmp; 242 | SUBSTRING_EXISTS = false; //reset flag to false 243 | start_idx = i + 1; 244 | } 245 | if (current_line[i] == '\r') 246 | break; 247 | else if (current_line[i] == ' ' ) //&& start_idx == i - 1) 248 | start_idx = i + 1; 249 | } 250 | 251 | 252 | line_count++; 253 | delete [] current_line; 254 | current_line = new char [MAX_CHARS_PER_LINE](); //must initialize, get rid of whatever is before 255 | 256 | } 257 | // if (line_count == 2000) { 258 | //for (int i = 67300; i < 67395; i++) 259 | // cout << "double " << i << " is: " << current[i] << endl; 260 | 261 | 262 | 263 | 264 | prev = current[0]; //prev variable used in detecting start field markers, initialize to first element 265 | for (long i = 0; i < idx_for_current; i++) 266 | { 267 | if (current[i] == 2411 && prev == -1) { 268 | start_of_node_field = i + 5; 269 | cout << "set at " << start_of_node_field << endl; } 270 | if (current[i] == 2412 && prev == -1) 271 | start_of_triangle_field = i + 1; 272 | if (current[i] == 2420 && prev == -1) 273 | end_of_triangle_field = i - 2; 274 | 275 | prev = current[i]; 276 | } 277 | cout << "start of node field " << current[start_of_node_field] << "(" << start_of_node_field << ")" << endl; 278 | cout << "start of triangle field " << current[start_of_triangle_field] << "(" << start_of_triangle_field << ")" << endl; 279 | cout << "end of triangle field " << current[end_of_triangle_field] << "(" << end_of_triangle_field << ")" << endl; 280 | mesh.close(); 281 | return current; 282 | } 283 | 284 | Matrix * calculateIlluminatedTriangles (Matrix & torch, Matrix & normals) 285 | { 286 | /* Takes on torch vector and normal matrix. Torch vector is assumed to be a 1 x 3 vector, incidicates direction of incident E-field 287 | * normals represents normal vector of each triangle in the mesh. Assumed to be n x 3. 288 | * Function will take cross product of every row of normals with torch vector, return a n x 1 matrix consisting of 1's and zeroes. 289 | * The returned matrix data can be interpreted as : 1 - Corresponding triangle is illuminated by torch. 0 - Corresponding triangle is not illuminated by torch. 290 | * Function will allocate memory for return matrix, and must be freed by the caller. */ 291 | /* Notes: I decided to switch to this implementation, where the row is extracted seperately from the normals matrix and passed into a dot product method that 292 | returns the result of a single operation, because it would be the most efficient way while maintaining a generalized dot product method */ 293 | 294 | Matrix *illuminated = new Matrix (normals.getLength(), 1); //allocate new matrix to return 295 | for (long i = 0; i < normals.getLength(); i++) { //iterate through all normal vectors 296 | Matrix *current_normals_vector = new Matrix (1, 3); //create a new vector to store the current row 297 | (*current_normals_vector) (0, 0) = normals (i, 0); //concatenate normals x y z entries into one vector 298 | (*current_normals_vector) (0, 1) = normals (i, 1); 299 | (*current_normals_vector) (0, 2) = normals (i, 2); 300 | (*illuminated) (i, 0) = (*current_normals_vector).dot(torch); // (torch, normals (i, current_normals_vector)); //take dot product of current normals row with the torch and store in return value array 301 | if ((*illuminated) (i, 0) < -.00000000000001) //arbitrary threshold around 0 to determine 1/0 cutoff 302 | (*illuminated) (i, 0) = 1; //illuminated 303 | else 304 | (*illuminated)(i, 0) = 0; //not illuminated 305 | delete current_normals_vector; //Must delete the allocated vector, avoid a memory leak 306 | } 307 | return illuminated; 308 | } 309 | 310 | Matrix > * generateEFieldIncident (Matrix * illuminated, Matrix & polarizing_vector, Matrix & torch, Matrix * centroids) 311 | { 312 | /* This function will generate an incident E field according to Electromagnetic wave equations 313 | illuminated points to matrix incidicating binary indicator that E field is incidient on triangle or not 314 | polarizing vector is a property of the E field, arbitrary 315 | torch: direction of propgation of the incident field 316 | centroids : matrix containing x y z coordinates of the centroids of the triangles in the mesh 317 | INSERT LAMBDA CONSTRAINTS HERE 318 | */ 319 | 320 | int lambda = 138; //need to verify that this is, in fact, lambda. what 321 | Matrix > * IncidentElectricField = new Matrix > (centroids->getLength(), 3); //incident E field 322 | for (long j = 0; j < centroids->getLength(); j++) { 323 | std::complex complex_number (0,0); //complex number placeholder 324 | std::complex i(0, 1); //the complex variable i 325 | Matrix * cur_centroid = new Matrix (1, 3); //dot product precalculation 326 | (*cur_centroid)(0, 0) = (*centroids) (j, 0); //set equal to the current centroid in the matrix 327 | (*cur_centroid)(0, 1) = (*centroids) (j, 1); 328 | (*cur_centroid)(0, 2) = (*centroids) (j, 2); 329 | complex_number = exp (i *(lambda * PI) * torch.dot(*cur_centroid)); //wave Eqn 330 | (*IncidentElectricField) (j, 0) = (*illuminated) (j, 0) * polarizing_vector(0, 0) * complex_number; //implemented vector multiplication manually 331 | (*IncidentElectricField) (j, 1) = (*illuminated) (j, 0) * polarizing_vector(0, 1) * complex_number; //no need to transpose polarizing vector 332 | (*IncidentElectricField) (j, 2) = (*illuminated) (j, 0) * polarizing_vector(0, 2) * complex_number; 333 | } 334 | return IncidentElectricField; 335 | } 336 | int main () 337 | { 338 | 339 | 340 | 341 | long start_of_node_field, start_of_triangle_field, end_of_triangle_field; //markers filled in as part of the parsing process 342 | double * data = parseAndBuildData ("sphere_veryhigh.txt", start_of_node_field, start_of_triangle_field, end_of_triangle_field); 343 | Matrix *nodes = build_nodes (data, start_of_node_field, start_of_triangle_field); //yes, start_of_triangle_field is right here 344 | Matrix *triangles = build_triangles (data, start_of_triangle_field, end_of_triangle_field); 345 | Matrix *normals = new Matrix (triangles->getLength(), 3); 346 | Matrix *centroids = new Matrix (triangles->getLength(), 3); 347 | calculate_Centroids_and_Normals (*centroids, *normals, triangles->getLength(), *nodes, *triangles); 348 | 349 | Matrix torch = *new Matrix (1, 3); //direction vector of incident E-field 350 | torch (0, 0) = 2; torch (0, 1) = 5; torch (0, 2) = 1; //completely arbitrary direction of the incident Electromagnetic field 351 | 352 | Matrix *illuminated = calculateIlluminatedTriangles (torch, *normals); //build the illuminated vector, binary representation of illuminated triangle/shadowed triangle for each triangle in the mesh 353 | 354 | Matrix polarizing_vector = *new Matrix (1, 3); 355 | polarizing_vector = *new Matrix (1,3); 356 | polarizing_vector (0,0) = 1; polarizing_vector (0,1) = 0; polarizing_vector (0, 2) = 0; 357 | 358 | Matrix >* precalc_exponentials = new Matrix >(normals->getLength(), 3); 359 | 360 | Matrix >* EFinc = generateEFieldIncident (illuminated, polarizing_vector, torch, centroids); 361 | 362 | /* for (int i = nodes->getLength() - 401; i < nodes->getLength(); i++) 363 | cout << "nodes" << i << ": " << (*nodes) (i, 0) << " " << (*nodes) (i, 1) << " " << (*nodes) (i, 2) << endl; 364 | */ 365 | //for (long i = triangles->getLength() - 31; i < triangles->getLength(); i++) 366 | // cout << "normal " << i << ": " << (*normals)(i, 0) << " " << (*normals)(i, 1) << " " << (*normals)(i, 2) << endl; 367 | 368 | for (int i = EFinc->getLength() - 310; i < EFinc->getLength(); i++) 369 | cout << "E field inc " << i << ": " << (*EFinc) (i, 0).real() << " + " << (*EFinc) (i, 0).imag() << "i " << (*EFinc) (i, 1).real() << " + " << (*EFinc) (i, 1).imag() << "i " << (*EFinc) (i, 2).real() << " + " << (*EFinc) (i, 2).imag() << "i " << endl; 370 | 371 | /*for (int i = centroids->getLength() - 250; i < centroids->getLength(); i++) 372 | cout << "centroid " << i << ": " << (*illuminated)(i, 0) << endl ; //" " << (*centroids)(i, 1) << " " << (*centroids)(i, 2) << endl; 373 | */ 374 | 375 | return 0; 376 | } 377 | 378 | -------------------------------------------------------------------------------- /mesh/cube_low.txt: -------------------------------------------------------------------------------- 1 | -1 2 | 151 3 | Unknown 4 | Unknown 5 | NX: Advanced Simulation 6 | Unknown Unknown 0 0 0 7 | Unknown Unknown 8 | NX: Universal Importer/Exporter 9 | 03-Mar-16 21:01:10 0 0 0 0 0 10 | -1 11 | -1 12 | 164 13 | 1Meter (newton) 2 14 | 1.00000000000000000D+00 1.00000000000000000D+00 1.00000000000000000D+00 15 | 2.73149999999999980D+02 16 | -1 17 | -1 18 | 2470 19 | 1 90 80 20 | Thin Shell1 21 | 1 2 4 22 | 1.0000000E-03 1.0000000E-35 1.0000000E-35 1.0000000E-35 23 | 46 2 1 24 | 1.0000000E+00 25 | 47 2 1 26 | 8.3333302E-01 27 | 48 2 1 28 | 1.0000000E-35 29 | 52 2 2 30 | 1.0000000E-35 1.0000000E-35 31 | 82 2 1 32 | 0.0000000E+00 33 | 117 1 12 34 | -999 -999 -999 -999 -999 -999 -999 -999 35 | -999 -999 -999 -999 36 | 263 1 1 37 | 0 38 | 264 1 1 39 | 0 40 | 265 1 1 41 | 0 42 | 266 1 1 43 | 0 44 | 262 3 10 45 | Mindlin 46 | 271 1 1 47 | 9 48 | 272 1 1 49 | 0 50 | 273 1 1 51 | 1 52 | 274 1 1 53 | 1 54 | 275 1 1 55 | 1 56 | 276 1 1 57 | 0 58 | 277 1 1 59 | 0 60 | 278 1 1 61 | 0 62 | 279 2 1 63 | 1.0000000E-35 64 | 88 3 10 65 | 66 | 287 1 1 67 | 0 68 | 297 3 20 69 | PSHELL 70 | 298 3 20 71 | PSHELL 72 | 299 3 20 73 | PSHELL 74 | 300 3 20 75 | PSHELL 76 | 301 3 20 77 | SHELL SECT 78 | 302 3 20 79 | SHELL SECT 80 | 303 3 20 81 | SHELL SECT 82 | 321 2 1 83 | 1.0000000E-35 84 | 322 2 1 85 | 1.0000000E-35 86 | 316 1 1 87 | 1 88 | 317 1 1 89 | -999 90 | 323 3 6 91 | 92 | 309 1 1 93 | 0 94 | 326 2 1 95 | 0.0000000E+00 96 | 327 2 1 97 | 0.0000000E+00 98 | 328 2 1 99 | 0.0000000E+00 100 | 329 2 1 101 | 0.0000000E+00 102 | 330 2 1 103 | 0.0000000E+00 104 | 331 2 1 105 | 0.0000000E+00 106 | 312 1 1 107 | 1 108 | 332 1 1 109 | 0 110 | 333 2 3 111 | 0.0000000E+00 0.0000000E+00 0.0000000E+00 112 | 336 1 1 113 | 0 114 | 337 2 1 115 | 0.0000000E+00 116 | 338 3 8 117 | SIMPSON 118 | 370 1 1 119 | 0 120 | 339 1 3 121 | 3 0 0 122 | 340 1 1 123 | 0 124 | 341 2 1 125 | 0.0000000E+00 126 | 281 1 1 127 | 0 128 | 282 3 96 129 | 130 | 131 | 283 1 1 132 | -999 133 | 284 3 14 134 | 135 | 285 1 1 136 | 0 137 | 296 2 1 138 | 7.8200000E+03 139 | 384 2 1 140 | 1.0000000E-35 141 | 286 1 1 142 | 0 143 | 288 3 80 144 | 145 | 289 3 80 146 | 147 | 343 1 1 148 | 0 149 | 344 3 10 150 | 151 | 345 1 1 152 | 0 153 | 305 3 10 154 | 155 | 800 1 1 156 | 0 157 | 801 3 80 158 | 159 | 802 3 80 160 | 161 | 803 1 6 162 | 0 0 0 0 0 0 163 | 804 2 3 164 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 165 | 805 2 3 166 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 167 | 806 2 3 168 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 169 | 807 2 3 170 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 171 | 118 2 1 172 | 0.0000000E+00 173 | 154 1 1 174 | 1 175 | 260 2 1 176 | 0.0000000E+00 177 | 441 2 1 178 | 0.0000000E+00 179 | 442 2 1 180 | 0.0000000E+00 181 | 443 2 1 182 | 0.0000000E+00 183 | 2 90 80 184 | Thin Shell2 185 | 1 2 4 186 | 1.0000000E-03 1.0000000E-35 1.0000000E-35 1.0000000E-35 187 | 46 2 1 188 | 1.0000000E+00 189 | 47 2 1 190 | 8.3333302E-01 191 | 48 2 1 192 | 1.0000000E-35 193 | 52 2 2 194 | 1.0000000E-35 1.0000000E-35 195 | 82 2 1 196 | 0.0000000E+00 197 | 117 1 12 198 | -999 -999 -999 -999 -999 -999 -999 -999 199 | -999 -999 -999 -999 200 | 263 1 1 201 | 0 202 | 264 1 1 203 | 0 204 | 265 1 1 205 | 0 206 | 266 1 1 207 | 0 208 | 262 3 10 209 | Mindlin 210 | 271 1 1 211 | 9 212 | 272 1 1 213 | 0 214 | 273 1 1 215 | 1 216 | 274 1 1 217 | 1 218 | 275 1 1 219 | 1 220 | 276 1 1 221 | 0 222 | 277 1 1 223 | 0 224 | 278 1 1 225 | 0 226 | 279 2 1 227 | 1.0000000E-35 228 | 88 3 10 229 | 230 | 287 1 1 231 | 0 232 | 297 3 20 233 | PSHELL 234 | 298 3 20 235 | PSHELL 236 | 299 3 20 237 | PSHELL 238 | 300 3 20 239 | PSHELL 240 | 301 3 20 241 | SHELL SECT 242 | 302 3 20 243 | SHELL SECT 244 | 303 3 20 245 | SHELL SECT 246 | 321 2 1 247 | 1.0000000E-35 248 | 322 2 1 249 | 1.0000000E-35 250 | 316 1 1 251 | 1 252 | 317 1 1 253 | -999 254 | 323 3 6 255 | 256 | 309 1 1 257 | 0 258 | 326 2 1 259 | 0.0000000E+00 260 | 327 2 1 261 | 0.0000000E+00 262 | 328 2 1 263 | 0.0000000E+00 264 | 329 2 1 265 | 0.0000000E+00 266 | 330 2 1 267 | 0.0000000E+00 268 | 331 2 1 269 | 0.0000000E+00 270 | 312 1 1 271 | 1 272 | 332 1 1 273 | 0 274 | 333 2 3 275 | 0.0000000E+00 0.0000000E+00 0.0000000E+00 276 | 336 1 1 277 | 0 278 | 337 2 1 279 | 0.0000000E+00 280 | 338 3 8 281 | SIMPSON 282 | 370 1 1 283 | 0 284 | 339 1 3 285 | 3 0 0 286 | 340 1 1 287 | 0 288 | 341 2 1 289 | 0.0000000E+00 290 | 281 1 1 291 | 0 292 | 282 3 96 293 | 294 | 295 | 283 1 1 296 | -999 297 | 284 3 14 298 | 299 | 285 1 1 300 | 0 301 | 296 2 1 302 | 7.8200000E+03 303 | 384 2 1 304 | 1.0000000E-35 305 | 286 1 1 306 | 0 307 | 288 3 80 308 | 309 | 289 3 80 310 | 311 | 343 1 1 312 | 0 313 | 344 3 10 314 | 315 | 345 1 1 316 | 0 317 | 305 3 10 318 | 319 | 800 1 1 320 | 0 321 | 801 3 80 322 | 323 | 802 3 80 324 | 325 | 803 1 6 326 | 0 0 0 0 0 0 327 | 804 2 3 328 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 329 | 805 2 3 330 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 331 | 806 2 3 332 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 333 | 807 2 3 334 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 335 | 118 2 1 336 | 0.0000000E+00 337 | 154 1 1 338 | 1 339 | 260 2 1 340 | 0.0000000E+00 341 | 441 2 1 342 | 0.0000000E+00 343 | 442 2 1 344 | 0.0000000E+00 345 | 443 2 1 346 | 0.0000000E+00 347 | -1 348 | -1 349 | 2400 350 | 13 7 -1 0 351 | Fem1 352 | 353 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 354 | 03-Mar-16 21:01:10 0 0 0 355 | 0 356 | -1 357 | -1 358 | 2411 359 | 1 1 1 11 360 | -8.0000000000000016D-02 2.1666666666666654D-02 5.0000000000000003D-02 361 | 2 1 1 11 362 | -8.0000000000000016D-02 2.1666666666666692D-02 9.9999999999999992D-02 363 | 3 1 1 11 364 | -7.9999999999999988D-02 -2.6666666666666661D-02 4.9999999999999996D-02 365 | 4 1 1 11 366 | -8.0000000000000002D-02 -2.6666666666666637D-02 1.0000000000000002D-01 367 | 5 1 1 11 368 | -2.3333333333333345D-02 -7.4999999999999997D-02 5.0000000000000031D-02 369 | 6 1 1 11 370 | -2.3333333333333348D-02 -7.4999999999999983D-02 9.9999999999999978D-02 371 | 7 1 1 11 372 | 3.3333333333333312D-02 -7.4999999999999997D-02 5.0000000000000003D-02 373 | 8 1 1 11 374 | 3.3333333333333347D-02 -7.4999999999999983D-02 1.0000000000000001D-01 375 | 9 1 1 11 376 | -2.3333333333333317D-02 -2.6666666666666651D-02 0.0000000000000000D+00 377 | 10 1 1 11 378 | 3.3333333333333340D-02 -2.6666666666666672D-02 0.0000000000000000D+00 379 | 11 1 1 11 380 | -2.3333333333333300D-02 2.1666666666666664D-02 0.0000000000000000D+00 381 | 12 1 1 11 382 | 3.3333333333333361D-02 2.1666666666666636D-02 0.0000000000000000D+00 383 | 13 1 1 11 384 | -2.3333333333333310D-02 2.1666666666666678D-02 1.5000000000000002D-01 385 | 14 1 1 11 386 | 3.3333333333333361D-02 2.1666666666666664D-02 1.4999999999999997D-01 387 | 15 1 1 11 388 | -2.3333333333333345D-02 -2.6666666666666630D-02 1.5000000000000002D-01 389 | 16 1 1 11 390 | 3.3333333333333347D-02 -2.6666666666666679D-02 1.4999999999999999D-01 391 | 17 1 1 11 392 | 3.3333333333333347D-02 7.0000000000000021D-02 4.9999999999999996D-02 393 | 18 1 1 11 394 | 3.3333333333333361D-02 7.0000000000000007D-02 1.0000000000000002D-01 395 | 19 1 1 11 396 | -2.3333333333333324D-02 7.0000000000000007D-02 5.0000000000000003D-02 397 | 20 1 1 11 398 | -2.3333333333333307D-02 7.0000000000000034D-02 1.0000000000000005D-01 399 | 21 1 1 11 400 | 9.0000000000000011D-02 -2.6666666666666689D-02 5.0000000000000010D-02 401 | 22 1 1 11 402 | 8.9999999999999997D-02 -2.6666666666666675D-02 9.9999999999999978D-02 403 | 23 1 1 11 404 | 8.9999999999999983D-02 2.1666666666666626D-02 5.0000000000000003D-02 405 | 24 1 1 11 406 | 9.0000000000000038D-02 2.1666666666666654D-02 1.0000000000000005D-01 407 | 25 1 1 11 408 | -8.0000000000000002D-02 -7.4999999999999997D-02 1.0000000000000001D-01 409 | 26 1 1 11 410 | -8.0000000000000002D-02 -7.4999999999999997D-02 5.0000000000000003D-02 411 | 27 1 1 11 412 | -8.0000000000000002D-02 2.1666666666666671D-02 0.0000000000000000D+00 413 | 28 1 1 11 414 | -8.0000000000000002D-02 -2.6666666666666658D-02 0.0000000000000000D+00 415 | 29 1 1 11 416 | -8.0000000000000002D-02 2.1666666666666671D-02 1.4999999999999999D-01 417 | 30 1 1 11 418 | -8.0000000000000002D-02 -2.6666666666666658D-02 1.4999999999999999D-01 419 | 31 1 1 11 420 | -8.0000000000000002D-02 7.0000000000000007D-02 1.0000000000000001D-01 421 | 32 1 1 11 422 | -8.0000000000000002D-02 7.0000000000000007D-02 5.0000000000000003D-02 423 | 33 1 1 11 424 | -2.3333333333333338D-02 -7.4999999999999997D-02 0.0000000000000000D+00 425 | 34 1 1 11 426 | 3.3333333333333326D-02 -7.4999999999999997D-02 0.0000000000000000D+00 427 | 35 1 1 11 428 | -2.3333333333333338D-02 -7.4999999999999997D-02 1.4999999999999999D-01 429 | 36 1 1 11 430 | 3.3333333333333326D-02 -7.4999999999999997D-02 1.4999999999999999D-01 431 | 37 1 1 11 432 | 3.3333333333333340D-02 7.0000000000000007D-02 0.0000000000000000D+00 433 | 38 1 1 11 434 | -2.3333333333333327D-02 7.0000000000000007D-02 0.0000000000000000D+00 435 | 39 1 1 11 436 | 3.3333333333333340D-02 7.0000000000000007D-02 1.4999999999999999D-01 437 | 40 1 1 11 438 | -2.3333333333333327D-02 7.0000000000000007D-02 1.4999999999999999D-01 439 | 41 1 1 11 440 | 8.9999999999999997D-02 -7.4999999999999997D-02 1.0000000000000001D-01 441 | 42 1 1 11 442 | 8.9999999999999997D-02 -7.4999999999999997D-02 5.0000000000000003D-02 443 | 43 1 1 11 444 | 8.9999999999999997D-02 -2.6666666666666672D-02 0.0000000000000000D+00 445 | 44 1 1 11 446 | 8.9999999999999997D-02 2.1666666666666657D-02 0.0000000000000000D+00 447 | 45 1 1 11 448 | 8.9999999999999997D-02 -2.6666666666666672D-02 1.4999999999999999D-01 449 | 46 1 1 11 450 | 8.9999999999999997D-02 2.1666666666666657D-02 1.4999999999999999D-01 451 | 47 1 1 11 452 | 8.9999999999999997D-02 7.0000000000000007D-02 1.0000000000000001D-01 453 | 48 1 1 11 454 | 8.9999999999999997D-02 7.0000000000000007D-02 5.0000000000000003D-02 455 | 49 1 1 11 456 | -8.0000000000000002D-02 -7.4999999999999997D-02 1.4999999999999999D-01 457 | 50 1 1 11 458 | -8.0000000000000002D-02 -7.4999999999999997D-02 0.0000000000000000D+00 459 | 51 1 1 11 460 | -8.0000000000000002D-02 7.0000000000000007D-02 0.0000000000000000D+00 461 | 52 1 1 11 462 | -8.0000000000000002D-02 7.0000000000000007D-02 1.4999999999999999D-01 463 | 53 1 1 11 464 | 8.9999999999999997D-02 -7.4999999999999997D-02 0.0000000000000000D+00 465 | 54 1 1 11 466 | 8.9999999999999997D-02 -7.4999999999999997D-02 1.4999999999999999D-01 467 | 55 1 1 11 468 | 8.9999999999999997D-02 7.0000000000000007D-02 0.0000000000000000D+00 469 | 56 1 1 11 470 | 8.9999999999999997D-02 7.0000000000000007D-02 1.4999999999999999D-01 471 | -1 472 | -1 473 | 2412 474 | 1 74 1 -1 7 3 475 | 1 3 4 476 | 2 74 1 -1 7 3 477 | 1 4 2 478 | 3 74 1 -1 7 3 479 | 51 27 1 480 | 4 74 1 -1 7 3 481 | 51 1 32 482 | 5 74 1 -1 7 3 483 | 27 28 3 484 | 6 74 1 -1 7 3 485 | 27 3 1 486 | 7 74 1 -1 7 3 487 | 28 50 26 488 | 8 74 1 -1 7 3 489 | 28 26 3 490 | 9 74 1 -1 7 3 491 | 3 26 25 492 | 10 74 1 -1 7 3 493 | 3 25 4 494 | 11 74 1 -1 7 3 495 | 4 25 49 496 | 12 74 1 -1 7 3 497 | 4 49 30 498 | 13 74 1 -1 7 3 499 | 2 4 30 500 | 14 74 1 -1 7 3 501 | 2 30 29 502 | 15 74 1 -1 7 3 503 | 31 2 29 504 | 16 74 1 -1 7 3 505 | 31 29 52 506 | 17 74 1 -1 7 3 507 | 32 1 2 508 | 18 74 1 -1 7 3 509 | 32 2 31 510 | 19 74 1 -1 7 3 511 | 5 7 8 512 | 20 74 1 -1 7 3 513 | 5 8 6 514 | 21 74 1 -1 7 3 515 | 50 33 5 516 | 22 74 1 -1 7 3 517 | 50 5 26 518 | 23 74 1 -1 7 3 519 | 33 34 7 520 | 24 74 1 -1 7 3 521 | 33 7 5 522 | 25 74 1 -1 7 3 523 | 34 53 42 524 | 26 74 1 -1 7 3 525 | 34 42 7 526 | 27 74 1 -1 7 3 527 | 7 42 41 528 | 28 74 1 -1 7 3 529 | 7 41 8 530 | 29 74 1 -1 7 3 531 | 8 41 54 532 | 30 74 1 -1 7 3 533 | 8 54 36 534 | 31 74 1 -1 7 3 535 | 6 8 36 536 | 32 74 1 -1 7 3 537 | 6 36 35 538 | 33 74 1 -1 7 3 539 | 25 6 35 540 | 34 74 1 -1 7 3 541 | 25 35 49 542 | 35 74 1 -1 7 3 543 | 26 5 6 544 | 36 74 1 -1 7 3 545 | 26 6 25 546 | 37 74 1 -1 7 3 547 | 9 11 12 548 | 38 74 1 -1 7 3 549 | 9 12 10 550 | 39 74 1 -1 7 3 551 | 50 28 9 552 | 40 74 1 -1 7 3 553 | 50 9 33 554 | 41 74 1 -1 7 3 555 | 28 27 11 556 | 42 74 1 -1 7 3 557 | 28 11 9 558 | 43 74 1 -1 7 3 559 | 27 51 38 560 | 44 74 1 -1 7 3 561 | 27 38 11 562 | 45 74 1 -1 7 3 563 | 11 38 37 564 | 46 74 1 -1 7 3 565 | 11 37 12 566 | 47 74 1 -1 7 3 567 | 12 37 55 568 | 48 74 1 -1 7 3 569 | 12 55 44 570 | 49 74 1 -1 7 3 571 | 10 12 44 572 | 50 74 1 -1 7 3 573 | 10 44 43 574 | 51 74 1 -1 7 3 575 | 34 10 43 576 | 52 74 1 -1 7 3 577 | 34 43 53 578 | 53 74 1 -1 7 3 579 | 33 9 10 580 | 54 74 1 -1 7 3 581 | 33 10 34 582 | 55 74 1 -1 7 3 583 | 13 15 16 584 | 56 74 1 -1 7 3 585 | 13 16 14 586 | 57 74 1 -1 7 3 587 | 52 29 13 588 | 58 74 1 -1 7 3 589 | 52 13 40 590 | 59 74 1 -1 7 3 591 | 29 30 15 592 | 60 74 1 -1 7 3 593 | 29 15 13 594 | 61 74 1 -1 7 3 595 | 30 49 35 596 | 62 74 1 -1 7 3 597 | 30 35 15 598 | 63 74 1 -1 7 3 599 | 15 35 36 600 | 64 74 1 -1 7 3 601 | 15 36 16 602 | 65 74 1 -1 7 3 603 | 16 36 54 604 | 66 74 1 -1 7 3 605 | 16 54 45 606 | 67 74 1 -1 7 3 607 | 14 16 45 608 | 68 74 1 -1 7 3 609 | 14 45 46 610 | 69 74 1 -1 7 3 611 | 39 14 46 612 | 70 74 1 -1 7 3 613 | 39 46 56 614 | 71 74 1 -1 7 3 615 | 40 13 14 616 | 72 74 1 -1 7 3 617 | 40 14 39 618 | 73 74 1 -1 7 3 619 | 17 19 20 620 | 74 74 1 -1 7 3 621 | 17 20 18 622 | 75 74 1 -1 7 3 623 | 55 37 17 624 | 76 74 1 -1 7 3 625 | 55 17 48 626 | 77 74 1 -1 7 3 627 | 37 38 19 628 | 78 74 1 -1 7 3 629 | 37 19 17 630 | 79 74 1 -1 7 3 631 | 38 51 32 632 | 80 74 1 -1 7 3 633 | 38 32 19 634 | 81 74 1 -1 7 3 635 | 19 32 31 636 | 82 74 1 -1 7 3 637 | 19 31 20 638 | 83 74 1 -1 7 3 639 | 20 31 52 640 | 84 74 1 -1 7 3 641 | 20 52 40 642 | 85 74 1 -1 7 3 643 | 18 20 40 644 | 86 74 1 -1 7 3 645 | 18 40 39 646 | 87 74 1 -1 7 3 647 | 47 18 39 648 | 88 74 1 -1 7 3 649 | 47 39 56 650 | 89 74 1 -1 7 3 651 | 48 17 18 652 | 90 74 1 -1 7 3 653 | 48 18 47 654 | 91 74 1 -1 7 3 655 | 21 23 24 656 | 92 74 1 -1 7 3 657 | 21 24 22 658 | 93 74 1 -1 7 3 659 | 53 43 21 660 | 94 74 1 -1 7 3 661 | 53 21 42 662 | 95 74 1 -1 7 3 663 | 43 44 23 664 | 96 74 1 -1 7 3 665 | 43 23 21 666 | 97 74 1 -1 7 3 667 | 44 55 48 668 | 98 74 1 -1 7 3 669 | 44 48 23 670 | 99 74 1 -1 7 3 671 | 23 48 47 672 | 100 74 1 -1 7 3 673 | 23 47 24 674 | 101 74 1 -1 7 3 675 | 24 47 56 676 | 102 74 1 -1 7 3 677 | 24 56 46 678 | 103 74 1 -1 7 3 679 | 22 24 46 680 | 104 74 1 -1 7 3 681 | 22 46 45 682 | 105 74 1 -1 7 3 683 | 41 22 45 684 | 106 74 1 -1 7 3 685 | 41 45 54 686 | 107 74 1 -1 7 3 687 | 42 21 22 688 | 108 74 1 -1 7 3 689 | 42 22 41 690 | -1 691 | -1 692 | 2420 693 | 9 694 | 695 | 1 0 7 696 | CS1 697 | 1.00000000000000000D+00 0.00000000000000000D+00 0.00000000000000000D+00 698 | 0.00000000000000000D+00 1.00000000000000000D+00 0.00000000000000000D+00 699 | 0.00000000000000000D+00 0.00000000000000000D+00 1.00000000000000000D+00 700 | 0.00000000000000000D+00 0.00000000000000000D+00 0.00000000000000000D+00 701 | -1 702 | -------------------------------------------------------------------------------- /mesh/sphere_verylow.txt: -------------------------------------------------------------------------------- 1 | -1 2 | 151 3 | Unknown 4 | Unknown 5 | NX: Advanced Simulation 6 | Unknown Unknown 0 0 0 7 | Unknown Unknown 8 | NX: Universal Importer/Exporter 9 | 03-Mar-16 20:56:46 0 0 0 0 0 10 | -1 11 | -1 12 | 164 13 | 1Meter (newton) 2 14 | 1.00000000000000000D+00 1.00000000000000000D+00 1.00000000000000000D+00 15 | 2.73149999999999980D+02 16 | -1 17 | -1 18 | 2470 19 | 1 90 80 20 | Thin Shell1 21 | 1 2 4 22 | 1.0000000E-03 1.0000000E-35 1.0000000E-35 1.0000000E-35 23 | 46 2 1 24 | 1.0000000E+00 25 | 47 2 1 26 | 8.3333302E-01 27 | 48 2 1 28 | 1.0000000E-35 29 | 52 2 2 30 | 1.0000000E-35 1.0000000E-35 31 | 82 2 1 32 | 0.0000000E+00 33 | 117 1 12 34 | -999 -999 -999 -999 -999 -999 -999 -999 35 | -999 -999 -999 -999 36 | 263 1 1 37 | 0 38 | 264 1 1 39 | 0 40 | 265 1 1 41 | 0 42 | 266 1 1 43 | 0 44 | 262 3 10 45 | Mindlin 46 | 271 1 1 47 | 9 48 | 272 1 1 49 | 0 50 | 273 1 1 51 | 1 52 | 274 1 1 53 | 1 54 | 275 1 1 55 | 1 56 | 276 1 1 57 | 0 58 | 277 1 1 59 | 0 60 | 278 1 1 61 | 0 62 | 279 2 1 63 | 1.0000000E-35 64 | 88 3 10 65 | 66 | 287 1 1 67 | 0 68 | 297 3 20 69 | PSHELL 70 | 298 3 20 71 | PSHELL 72 | 299 3 20 73 | PSHELL 74 | 300 3 20 75 | PSHELL 76 | 301 3 20 77 | SHELL SECT 78 | 302 3 20 79 | SHELL SECT 80 | 303 3 20 81 | SHELL SECT 82 | 321 2 1 83 | 1.0000000E-35 84 | 322 2 1 85 | 1.0000000E-35 86 | 316 1 1 87 | 1 88 | 317 1 1 89 | -999 90 | 323 3 6 91 | 92 | 309 1 1 93 | 0 94 | 326 2 1 95 | 0.0000000E+00 96 | 327 2 1 97 | 0.0000000E+00 98 | 328 2 1 99 | 0.0000000E+00 100 | 329 2 1 101 | 0.0000000E+00 102 | 330 2 1 103 | 0.0000000E+00 104 | 331 2 1 105 | 0.0000000E+00 106 | 312 1 1 107 | 1 108 | 332 1 1 109 | 0 110 | 333 2 3 111 | 0.0000000E+00 0.0000000E+00 0.0000000E+00 112 | 336 1 1 113 | 0 114 | 337 2 1 115 | 0.0000000E+00 116 | 338 3 8 117 | SIMPSON 118 | 370 1 1 119 | 0 120 | 339 1 3 121 | 3 0 0 122 | 340 1 1 123 | 0 124 | 341 2 1 125 | 0.0000000E+00 126 | 281 1 1 127 | 0 128 | 282 3 96 129 | 130 | 131 | 283 1 1 132 | -999 133 | 284 3 14 134 | 135 | 285 1 1 136 | 0 137 | 296 2 1 138 | 7.8200000E+03 139 | 384 2 1 140 | 1.0000000E-35 141 | 286 1 1 142 | 0 143 | 288 3 80 144 | 145 | 289 3 80 146 | 147 | 343 1 1 148 | 0 149 | 344 3 10 150 | 151 | 345 1 1 152 | 0 153 | 305 3 10 154 | 155 | 800 1 1 156 | 0 157 | 801 3 80 158 | 159 | 802 3 80 160 | 161 | 803 1 6 162 | 0 0 0 0 0 0 163 | 804 2 3 164 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 165 | 805 2 3 166 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 167 | 806 2 3 168 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 169 | 807 2 3 170 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 171 | 118 2 1 172 | 0.0000000E+00 173 | 154 1 1 174 | 1 175 | 260 2 1 176 | 0.0000000E+00 177 | 441 2 1 178 | 0.0000000E+00 179 | 442 2 1 180 | 0.0000000E+00 181 | 443 2 1 182 | 0.0000000E+00 183 | 2 90 80 184 | Thin Shell2 185 | 1 2 4 186 | 1.0000000E-03 1.0000000E-35 1.0000000E-35 1.0000000E-35 187 | 46 2 1 188 | 1.0000000E+00 189 | 47 2 1 190 | 8.3333302E-01 191 | 48 2 1 192 | 1.0000000E-35 193 | 52 2 2 194 | 1.0000000E-35 1.0000000E-35 195 | 82 2 1 196 | 0.0000000E+00 197 | 117 1 12 198 | -999 -999 -999 -999 -999 -999 -999 -999 199 | -999 -999 -999 -999 200 | 263 1 1 201 | 0 202 | 264 1 1 203 | 0 204 | 265 1 1 205 | 0 206 | 266 1 1 207 | 0 208 | 262 3 10 209 | Mindlin 210 | 271 1 1 211 | 9 212 | 272 1 1 213 | 0 214 | 273 1 1 215 | 1 216 | 274 1 1 217 | 1 218 | 275 1 1 219 | 1 220 | 276 1 1 221 | 0 222 | 277 1 1 223 | 0 224 | 278 1 1 225 | 0 226 | 279 2 1 227 | 1.0000000E-35 228 | 88 3 10 229 | 230 | 287 1 1 231 | 0 232 | 297 3 20 233 | PSHELL 234 | 298 3 20 235 | PSHELL 236 | 299 3 20 237 | PSHELL 238 | 300 3 20 239 | PSHELL 240 | 301 3 20 241 | SHELL SECT 242 | 302 3 20 243 | SHELL SECT 244 | 303 3 20 245 | SHELL SECT 246 | 321 2 1 247 | 1.0000000E-35 248 | 322 2 1 249 | 1.0000000E-35 250 | 316 1 1 251 | 1 252 | 317 1 1 253 | -999 254 | 323 3 6 255 | 256 | 309 1 1 257 | 0 258 | 326 2 1 259 | 0.0000000E+00 260 | 327 2 1 261 | 0.0000000E+00 262 | 328 2 1 263 | 0.0000000E+00 264 | 329 2 1 265 | 0.0000000E+00 266 | 330 2 1 267 | 0.0000000E+00 268 | 331 2 1 269 | 0.0000000E+00 270 | 312 1 1 271 | 1 272 | 332 1 1 273 | 0 274 | 333 2 3 275 | 0.0000000E+00 0.0000000E+00 0.0000000E+00 276 | 336 1 1 277 | 0 278 | 337 2 1 279 | 0.0000000E+00 280 | 338 3 8 281 | SIMPSON 282 | 370 1 1 283 | 0 284 | 339 1 3 285 | 3 0 0 286 | 340 1 1 287 | 0 288 | 341 2 1 289 | 0.0000000E+00 290 | 281 1 1 291 | 0 292 | 282 3 96 293 | 294 | 295 | 283 1 1 296 | -999 297 | 284 3 14 298 | 299 | 285 1 1 300 | 0 301 | 296 2 1 302 | 7.8200000E+03 303 | 384 2 1 304 | 1.0000000E-35 305 | 286 1 1 306 | 0 307 | 288 3 80 308 | 309 | 289 3 80 310 | 311 | 343 1 1 312 | 0 313 | 344 3 10 314 | 315 | 345 1 1 316 | 0 317 | 305 3 10 318 | 319 | 800 1 1 320 | 0 321 | 801 3 80 322 | 323 | 802 3 80 324 | 325 | 803 1 6 326 | 0 0 0 0 0 0 327 | 804 2 3 328 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 329 | 805 2 3 330 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 331 | 806 2 3 332 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 333 | 807 2 3 334 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 335 | 118 2 1 336 | 0.0000000E+00 337 | 154 1 1 338 | 1 339 | 260 2 1 340 | 0.0000000E+00 341 | 441 2 1 342 | 0.0000000E+00 343 | 442 2 1 344 | 0.0000000E+00 345 | 443 2 1 346 | 0.0000000E+00 347 | 3 90 80 348 | Thin Shell3 349 | 1 2 4 350 | 1.0000000E-03 1.0000000E-35 1.0000000E-35 1.0000000E-35 351 | 46 2 1 352 | 1.0000000E+00 353 | 47 2 1 354 | 8.3333302E-01 355 | 48 2 1 356 | 1.0000000E-35 357 | 52 2 2 358 | 1.0000000E-35 1.0000000E-35 359 | 82 2 1 360 | 0.0000000E+00 361 | 117 1 12 362 | -999 -999 -999 -999 -999 -999 -999 -999 363 | -999 -999 -999 -999 364 | 263 1 1 365 | 0 366 | 264 1 1 367 | 0 368 | 265 1 1 369 | 0 370 | 266 1 1 371 | 0 372 | 262 3 10 373 | Mindlin 374 | 271 1 1 375 | 9 376 | 272 1 1 377 | 0 378 | 273 1 1 379 | 1 380 | 274 1 1 381 | 1 382 | 275 1 1 383 | 1 384 | 276 1 1 385 | 0 386 | 277 1 1 387 | 0 388 | 278 1 1 389 | 0 390 | 279 2 1 391 | 1.0000000E-35 392 | 88 3 10 393 | 394 | 287 1 1 395 | 0 396 | 297 3 20 397 | PSHELL 398 | 298 3 20 399 | PSHELL 400 | 299 3 20 401 | PSHELL 402 | 300 3 20 403 | PSHELL 404 | 301 3 20 405 | SHELL SECT 406 | 302 3 20 407 | SHELL SECT 408 | 303 3 20 409 | SHELL SECT 410 | 321 2 1 411 | 1.0000000E-35 412 | 322 2 1 413 | 1.0000000E-35 414 | 316 1 1 415 | 1 416 | 317 1 1 417 | -999 418 | 323 3 6 419 | 420 | 309 1 1 421 | 0 422 | 326 2 1 423 | 0.0000000E+00 424 | 327 2 1 425 | 0.0000000E+00 426 | 328 2 1 427 | 0.0000000E+00 428 | 329 2 1 429 | 0.0000000E+00 430 | 330 2 1 431 | 0.0000000E+00 432 | 331 2 1 433 | 0.0000000E+00 434 | 312 1 1 435 | 1 436 | 332 1 1 437 | 0 438 | 333 2 3 439 | 0.0000000E+00 0.0000000E+00 0.0000000E+00 440 | 336 1 1 441 | 0 442 | 337 2 1 443 | 0.0000000E+00 444 | 338 3 8 445 | SIMPSON 446 | 370 1 1 447 | 0 448 | 339 1 3 449 | 3 0 0 450 | 340 1 1 451 | 0 452 | 341 2 1 453 | 0.0000000E+00 454 | 281 1 1 455 | 0 456 | 282 3 96 457 | 458 | 459 | 283 1 1 460 | -999 461 | 284 3 14 462 | 463 | 285 1 1 464 | 0 465 | 296 2 1 466 | 7.8200000E+03 467 | 384 2 1 468 | 1.0000000E-35 469 | 286 1 1 470 | 0 471 | 288 3 80 472 | 473 | 289 3 80 474 | 475 | 343 1 1 476 | 0 477 | 344 3 10 478 | 479 | 345 1 1 480 | 0 481 | 305 3 10 482 | 483 | 800 1 1 484 | 0 485 | 801 3 80 486 | 487 | 802 3 80 488 | 489 | 803 1 6 490 | 0 0 0 0 0 0 491 | 804 2 3 492 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 493 | 805 2 3 494 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 495 | 806 2 3 496 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 497 | 807 2 3 498 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 499 | 118 2 1 500 | 0.0000000E+00 501 | 154 1 1 502 | 1 503 | 260 2 1 504 | 0.0000000E+00 505 | 441 2 1 506 | 0.0000000E+00 507 | 442 2 1 508 | 0.0000000E+00 509 | 443 2 1 510 | 0.0000000E+00 511 | 4 90 80 512 | Thin Shell4 513 | 1 2 4 514 | 1.0000000E-03 1.0000000E-35 1.0000000E-35 1.0000000E-35 515 | 46 2 1 516 | 1.0000000E+00 517 | 47 2 1 518 | 8.3333302E-01 519 | 48 2 1 520 | 1.0000000E-35 521 | 52 2 2 522 | 1.0000000E-35 1.0000000E-35 523 | 82 2 1 524 | 0.0000000E+00 525 | 117 1 12 526 | -999 -999 -999 -999 -999 -999 -999 -999 527 | -999 -999 -999 -999 528 | 263 1 1 529 | 0 530 | 264 1 1 531 | 0 532 | 265 1 1 533 | 0 534 | 266 1 1 535 | 0 536 | 262 3 10 537 | Mindlin 538 | 271 1 1 539 | 9 540 | 272 1 1 541 | 0 542 | 273 1 1 543 | 1 544 | 274 1 1 545 | 1 546 | 275 1 1 547 | 1 548 | 276 1 1 549 | 0 550 | 277 1 1 551 | 0 552 | 278 1 1 553 | 0 554 | 279 2 1 555 | 1.0000000E-35 556 | 88 3 10 557 | 558 | 287 1 1 559 | 0 560 | 297 3 20 561 | PSHELL 562 | 298 3 20 563 | PSHELL 564 | 299 3 20 565 | PSHELL 566 | 300 3 20 567 | PSHELL 568 | 301 3 20 569 | SHELL SECT 570 | 302 3 20 571 | SHELL SECT 572 | 303 3 20 573 | SHELL SECT 574 | 321 2 1 575 | 1.0000000E-35 576 | 322 2 1 577 | 1.0000000E-35 578 | 316 1 1 579 | 1 580 | 317 1 1 581 | -999 582 | 323 3 6 583 | 584 | 309 1 1 585 | 0 586 | 326 2 1 587 | 0.0000000E+00 588 | 327 2 1 589 | 0.0000000E+00 590 | 328 2 1 591 | 0.0000000E+00 592 | 329 2 1 593 | 0.0000000E+00 594 | 330 2 1 595 | 0.0000000E+00 596 | 331 2 1 597 | 0.0000000E+00 598 | 312 1 1 599 | 1 600 | 332 1 1 601 | 0 602 | 333 2 3 603 | 0.0000000E+00 0.0000000E+00 0.0000000E+00 604 | 336 1 1 605 | 0 606 | 337 2 1 607 | 0.0000000E+00 608 | 338 3 8 609 | SIMPSON 610 | 370 1 1 611 | 0 612 | 339 1 3 613 | 3 0 0 614 | 340 1 1 615 | 0 616 | 341 2 1 617 | 0.0000000E+00 618 | 281 1 1 619 | 0 620 | 282 3 96 621 | 622 | 623 | 283 1 1 624 | -999 625 | 284 3 14 626 | 627 | 285 1 1 628 | 0 629 | 296 2 1 630 | 7.8200000E+03 631 | 384 2 1 632 | 1.0000000E-35 633 | 286 1 1 634 | 0 635 | 288 3 80 636 | 637 | 289 3 80 638 | 639 | 343 1 1 640 | 0 641 | 344 3 10 642 | 643 | 345 1 1 644 | 0 645 | 305 3 10 646 | 647 | 800 1 1 648 | 0 649 | 801 3 80 650 | 651 | 802 3 80 652 | 653 | 803 1 6 654 | 0 0 0 0 0 0 655 | 804 2 3 656 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 657 | 805 2 3 658 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 659 | 806 2 3 660 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 661 | 807 2 3 662 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 663 | 118 2 1 664 | 0.0000000E+00 665 | 154 1 1 666 | 1 667 | 260 2 1 668 | 0.0000000E+00 669 | 441 2 1 670 | 0.0000000E+00 671 | 442 2 1 672 | 0.0000000E+00 673 | 443 2 1 674 | 0.0000000E+00 675 | 5 90 80 676 | Thin Shell5 677 | 1 2 4 678 | 1.0000000E-03 1.0000000E-35 1.0000000E-35 1.0000000E-35 679 | 46 2 1 680 | 1.0000000E+00 681 | 47 2 1 682 | 8.3333302E-01 683 | 48 2 1 684 | 1.0000000E-35 685 | 52 2 2 686 | 1.0000000E-35 1.0000000E-35 687 | 82 2 1 688 | 0.0000000E+00 689 | 117 1 12 690 | -999 -999 -999 -999 -999 -999 -999 -999 691 | -999 -999 -999 -999 692 | 263 1 1 693 | 0 694 | 264 1 1 695 | 0 696 | 265 1 1 697 | 0 698 | 266 1 1 699 | 0 700 | 262 3 10 701 | Mindlin 702 | 271 1 1 703 | 9 704 | 272 1 1 705 | 0 706 | 273 1 1 707 | 1 708 | 274 1 1 709 | 1 710 | 275 1 1 711 | 1 712 | 276 1 1 713 | 0 714 | 277 1 1 715 | 0 716 | 278 1 1 717 | 0 718 | 279 2 1 719 | 1.0000000E-35 720 | 88 3 10 721 | 722 | 287 1 1 723 | 0 724 | 297 3 20 725 | PSHELL 726 | 298 3 20 727 | PSHELL 728 | 299 3 20 729 | PSHELL 730 | 300 3 20 731 | PSHELL 732 | 301 3 20 733 | SHELL SECT 734 | 302 3 20 735 | SHELL SECT 736 | 303 3 20 737 | SHELL SECT 738 | 321 2 1 739 | 1.0000000E-35 740 | 322 2 1 741 | 1.0000000E-35 742 | 316 1 1 743 | 1 744 | 317 1 1 745 | -999 746 | 323 3 6 747 | 748 | 309 1 1 749 | 0 750 | 326 2 1 751 | 0.0000000E+00 752 | 327 2 1 753 | 0.0000000E+00 754 | 328 2 1 755 | 0.0000000E+00 756 | 329 2 1 757 | 0.0000000E+00 758 | 330 2 1 759 | 0.0000000E+00 760 | 331 2 1 761 | 0.0000000E+00 762 | 312 1 1 763 | 1 764 | 332 1 1 765 | 0 766 | 333 2 3 767 | 0.0000000E+00 0.0000000E+00 0.0000000E+00 768 | 336 1 1 769 | 0 770 | 337 2 1 771 | 0.0000000E+00 772 | 338 3 8 773 | SIMPSON 774 | 370 1 1 775 | 0 776 | 339 1 3 777 | 3 0 0 778 | 340 1 1 779 | 0 780 | 341 2 1 781 | 0.0000000E+00 782 | 281 1 1 783 | 0 784 | 282 3 96 785 | 786 | 787 | 283 1 1 788 | -999 789 | 284 3 14 790 | 791 | 285 1 1 792 | 0 793 | 296 2 1 794 | 7.8200000E+03 795 | 384 2 1 796 | 1.0000000E-35 797 | 286 1 1 798 | 0 799 | 288 3 80 800 | 801 | 289 3 80 802 | 803 | 343 1 1 804 | 0 805 | 344 3 10 806 | 807 | 345 1 1 808 | 0 809 | 305 3 10 810 | 811 | 800 1 1 812 | 0 813 | 801 3 80 814 | 815 | 802 3 80 816 | 817 | 803 1 6 818 | 0 0 0 0 0 0 819 | 804 2 3 820 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 821 | 805 2 3 822 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 823 | 806 2 3 824 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 825 | 807 2 3 826 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 827 | 118 2 1 828 | 0.0000000E+00 829 | 154 1 1 830 | 1 831 | 260 2 1 832 | 0.0000000E+00 833 | 441 2 1 834 | 0.0000000E+00 835 | 442 2 1 836 | 0.0000000E+00 837 | 443 2 1 838 | 0.0000000E+00 839 | 6 90 80 840 | Thin Shell6 841 | 1 2 4 842 | 1.0000000E-03 1.0000000E-35 1.0000000E-35 1.0000000E-35 843 | 46 2 1 844 | 1.0000000E+00 845 | 47 2 1 846 | 8.3333302E-01 847 | 48 2 1 848 | 1.0000000E-35 849 | 52 2 2 850 | 1.0000000E-35 1.0000000E-35 851 | 82 2 1 852 | 0.0000000E+00 853 | 117 1 12 854 | -999 -999 -999 -999 -999 -999 -999 -999 855 | -999 -999 -999 -999 856 | 263 1 1 857 | 0 858 | 264 1 1 859 | 0 860 | 265 1 1 861 | 0 862 | 266 1 1 863 | 0 864 | 262 3 10 865 | Mindlin 866 | 271 1 1 867 | 9 868 | 272 1 1 869 | 0 870 | 273 1 1 871 | 1 872 | 274 1 1 873 | 1 874 | 275 1 1 875 | 1 876 | 276 1 1 877 | 0 878 | 277 1 1 879 | 0 880 | 278 1 1 881 | 0 882 | 279 2 1 883 | 1.0000000E-35 884 | 88 3 10 885 | 886 | 287 1 1 887 | 0 888 | 297 3 20 889 | PSHELL 890 | 298 3 20 891 | PSHELL 892 | 299 3 20 893 | PSHELL 894 | 300 3 20 895 | PSHELL 896 | 301 3 20 897 | SHELL SECT 898 | 302 3 20 899 | SHELL SECT 900 | 303 3 20 901 | SHELL SECT 902 | 321 2 1 903 | 1.0000000E-35 904 | 322 2 1 905 | 1.0000000E-35 906 | 316 1 1 907 | 1 908 | 317 1 1 909 | -999 910 | 323 3 6 911 | 912 | 309 1 1 913 | 0 914 | 326 2 1 915 | 0.0000000E+00 916 | 327 2 1 917 | 0.0000000E+00 918 | 328 2 1 919 | 0.0000000E+00 920 | 329 2 1 921 | 0.0000000E+00 922 | 330 2 1 923 | 0.0000000E+00 924 | 331 2 1 925 | 0.0000000E+00 926 | 312 1 1 927 | 1 928 | 332 1 1 929 | 0 930 | 333 2 3 931 | 0.0000000E+00 0.0000000E+00 0.0000000E+00 932 | 336 1 1 933 | 0 934 | 337 2 1 935 | 0.0000000E+00 936 | 338 3 8 937 | SIMPSON 938 | 370 1 1 939 | 0 940 | 339 1 3 941 | 3 0 0 942 | 340 1 1 943 | 0 944 | 341 2 1 945 | 0.0000000E+00 946 | 281 1 1 947 | 0 948 | 282 3 96 949 | 950 | 951 | 283 1 1 952 | -999 953 | 284 3 14 954 | 955 | 285 1 1 956 | 0 957 | 296 2 1 958 | 7.8200000E+03 959 | 384 2 1 960 | 1.0000000E-35 961 | 286 1 1 962 | 0 963 | 288 3 80 964 | 965 | 289 3 80 966 | 967 | 343 1 1 968 | 0 969 | 344 3 10 970 | 971 | 345 1 1 972 | 0 973 | 305 3 10 974 | 975 | 800 1 1 976 | 0 977 | 801 3 80 978 | 979 | 802 3 80 980 | 981 | 803 1 6 982 | 0 0 0 0 0 0 983 | 804 2 3 984 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 985 | 805 2 3 986 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 987 | 806 2 3 988 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 989 | 807 2 3 990 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 991 | 118 2 1 992 | 0.0000000E+00 993 | 154 1 1 994 | 1 995 | 260 2 1 996 | 0.0000000E+00 997 | 441 2 1 998 | 0.0000000E+00 999 | 442 2 1 1000 | 0.0000000E+00 1001 | 443 2 1 1002 | 0.0000000E+00 1003 | 7 90 80 1004 | Thin Shell7 1005 | 1 2 4 1006 | 1.0000000E-03 1.0000000E-35 1.0000000E-35 1.0000000E-35 1007 | 46 2 1 1008 | 1.0000000E+00 1009 | 47 2 1 1010 | 8.3333302E-01 1011 | 48 2 1 1012 | 1.0000000E-35 1013 | 52 2 2 1014 | 1.0000000E-35 1.0000000E-35 1015 | 82 2 1 1016 | 0.0000000E+00 1017 | 117 1 12 1018 | -999 -999 -999 -999 -999 -999 -999 -999 1019 | -999 -999 -999 -999 1020 | 263 1 1 1021 | 0 1022 | 264 1 1 1023 | 0 1024 | 265 1 1 1025 | 0 1026 | 266 1 1 1027 | 0 1028 | 262 3 10 1029 | Mindlin 1030 | 271 1 1 1031 | 9 1032 | 272 1 1 1033 | 0 1034 | 273 1 1 1035 | 1 1036 | 274 1 1 1037 | 1 1038 | 275 1 1 1039 | 1 1040 | 276 1 1 1041 | 0 1042 | 277 1 1 1043 | 0 1044 | 278 1 1 1045 | 0 1046 | 279 2 1 1047 | 1.0000000E-35 1048 | 88 3 10 1049 | 1050 | 287 1 1 1051 | 0 1052 | 297 3 20 1053 | PSHELL 1054 | 298 3 20 1055 | PSHELL 1056 | 299 3 20 1057 | PSHELL 1058 | 300 3 20 1059 | PSHELL 1060 | 301 3 20 1061 | SHELL SECT 1062 | 302 3 20 1063 | SHELL SECT 1064 | 303 3 20 1065 | SHELL SECT 1066 | 321 2 1 1067 | 1.0000000E-35 1068 | 322 2 1 1069 | 1.0000000E-35 1070 | 316 1 1 1071 | 1 1072 | 317 1 1 1073 | -999 1074 | 323 3 6 1075 | 1076 | 309 1 1 1077 | 0 1078 | 326 2 1 1079 | 0.0000000E+00 1080 | 327 2 1 1081 | 0.0000000E+00 1082 | 328 2 1 1083 | 0.0000000E+00 1084 | 329 2 1 1085 | 0.0000000E+00 1086 | 330 2 1 1087 | 0.0000000E+00 1088 | 331 2 1 1089 | 0.0000000E+00 1090 | 312 1 1 1091 | 1 1092 | 332 1 1 1093 | 0 1094 | 333 2 3 1095 | 0.0000000E+00 0.0000000E+00 0.0000000E+00 1096 | 336 1 1 1097 | 0 1098 | 337 2 1 1099 | 0.0000000E+00 1100 | 338 3 8 1101 | SIMPSON 1102 | 370 1 1 1103 | 0 1104 | 339 1 3 1105 | 3 0 0 1106 | 340 1 1 1107 | 0 1108 | 341 2 1 1109 | 0.0000000E+00 1110 | 281 1 1 1111 | 0 1112 | 282 3 96 1113 | 1114 | 1115 | 283 1 1 1116 | -999 1117 | 284 3 14 1118 | 1119 | 285 1 1 1120 | 0 1121 | 296 2 1 1122 | 7.8200000E+03 1123 | 384 2 1 1124 | 1.0000000E-35 1125 | 286 1 1 1126 | 0 1127 | 288 3 80 1128 | 1129 | 289 3 80 1130 | 1131 | 343 1 1 1132 | 0 1133 | 344 3 10 1134 | 1135 | 345 1 1 1136 | 0 1137 | 305 3 10 1138 | 1139 | 800 1 1 1140 | 0 1141 | 801 3 80 1142 | 1143 | 802 3 80 1144 | 1145 | 803 1 6 1146 | 0 0 0 0 0 0 1147 | 804 2 3 1148 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1149 | 805 2 3 1150 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1151 | 806 2 3 1152 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1153 | 807 2 3 1154 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1155 | 118 2 1 1156 | 0.0000000E+00 1157 | 154 1 1 1158 | 1 1159 | 260 2 1 1160 | 0.0000000E+00 1161 | 441 2 1 1162 | 0.0000000E+00 1163 | 442 2 1 1164 | 0.0000000E+00 1165 | 443 2 1 1166 | 0.0000000E+00 1167 | 8 90 80 1168 | Thin Shell8 1169 | 1 2 4 1170 | 1.0000000E-03 1.0000000E-35 1.0000000E-35 1.0000000E-35 1171 | 46 2 1 1172 | 1.0000000E+00 1173 | 47 2 1 1174 | 8.3333302E-01 1175 | 48 2 1 1176 | 1.0000000E-35 1177 | 52 2 2 1178 | 1.0000000E-35 1.0000000E-35 1179 | 82 2 1 1180 | 0.0000000E+00 1181 | 117 1 12 1182 | -999 -999 -999 -999 -999 -999 -999 -999 1183 | -999 -999 -999 -999 1184 | 263 1 1 1185 | 0 1186 | 264 1 1 1187 | 0 1188 | 265 1 1 1189 | 0 1190 | 266 1 1 1191 | 0 1192 | 262 3 10 1193 | Mindlin 1194 | 271 1 1 1195 | 9 1196 | 272 1 1 1197 | 0 1198 | 273 1 1 1199 | 1 1200 | 274 1 1 1201 | 1 1202 | 275 1 1 1203 | 1 1204 | 276 1 1 1205 | 0 1206 | 277 1 1 1207 | 0 1208 | 278 1 1 1209 | 0 1210 | 279 2 1 1211 | 1.0000000E-35 1212 | 88 3 10 1213 | 1214 | 287 1 1 1215 | 0 1216 | 297 3 20 1217 | PSHELL 1218 | 298 3 20 1219 | PSHELL 1220 | 299 3 20 1221 | PSHELL 1222 | 300 3 20 1223 | PSHELL 1224 | 301 3 20 1225 | SHELL SECT 1226 | 302 3 20 1227 | SHELL SECT 1228 | 303 3 20 1229 | SHELL SECT 1230 | 321 2 1 1231 | 1.0000000E-35 1232 | 322 2 1 1233 | 1.0000000E-35 1234 | 316 1 1 1235 | 1 1236 | 317 1 1 1237 | -999 1238 | 323 3 6 1239 | 1240 | 309 1 1 1241 | 0 1242 | 326 2 1 1243 | 0.0000000E+00 1244 | 327 2 1 1245 | 0.0000000E+00 1246 | 328 2 1 1247 | 0.0000000E+00 1248 | 329 2 1 1249 | 0.0000000E+00 1250 | 330 2 1 1251 | 0.0000000E+00 1252 | 331 2 1 1253 | 0.0000000E+00 1254 | 312 1 1 1255 | 1 1256 | 332 1 1 1257 | 0 1258 | 333 2 3 1259 | 0.0000000E+00 0.0000000E+00 0.0000000E+00 1260 | 336 1 1 1261 | 0 1262 | 337 2 1 1263 | 0.0000000E+00 1264 | 338 3 8 1265 | SIMPSON 1266 | 370 1 1 1267 | 0 1268 | 339 1 3 1269 | 3 0 0 1270 | 340 1 1 1271 | 0 1272 | 341 2 1 1273 | 0.0000000E+00 1274 | 281 1 1 1275 | 0 1276 | 282 3 96 1277 | 1278 | 1279 | 283 1 1 1280 | -999 1281 | 284 3 14 1282 | 1283 | 285 1 1 1284 | 0 1285 | 296 2 1 1286 | 7.8200000E+03 1287 | 384 2 1 1288 | 1.0000000E-35 1289 | 286 1 1 1290 | 0 1291 | 288 3 80 1292 | 1293 | 289 3 80 1294 | 1295 | 343 1 1 1296 | 0 1297 | 344 3 10 1298 | 1299 | 345 1 1 1300 | 0 1301 | 305 3 10 1302 | 1303 | 800 1 1 1304 | 0 1305 | 801 3 80 1306 | 1307 | 802 3 80 1308 | 1309 | 803 1 6 1310 | 0 0 0 0 0 0 1311 | 804 2 3 1312 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1313 | 805 2 3 1314 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1315 | 806 2 3 1316 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1317 | 807 2 3 1318 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1319 | 118 2 1 1320 | 0.0000000E+00 1321 | 154 1 1 1322 | 1 1323 | 260 2 1 1324 | 0.0000000E+00 1325 | 441 2 1 1326 | 0.0000000E+00 1327 | 442 2 1 1328 | 0.0000000E+00 1329 | 443 2 1 1330 | 0.0000000E+00 1331 | 9 90 80 1332 | Thin Shell9 1333 | 1 2 4 1334 | 1.0000000E-03 1.0000000E-35 1.0000000E-35 1.0000000E-35 1335 | 46 2 1 1336 | 1.0000000E+00 1337 | 47 2 1 1338 | 8.3333302E-01 1339 | 48 2 1 1340 | 1.0000000E-35 1341 | 52 2 2 1342 | 1.0000000E-35 1.0000000E-35 1343 | 82 2 1 1344 | 0.0000000E+00 1345 | 117 1 12 1346 | -999 -999 -999 -999 -999 -999 -999 -999 1347 | -999 -999 -999 -999 1348 | 263 1 1 1349 | 0 1350 | 264 1 1 1351 | 0 1352 | 265 1 1 1353 | 0 1354 | 266 1 1 1355 | 0 1356 | 262 3 10 1357 | Mindlin 1358 | 271 1 1 1359 | 9 1360 | 272 1 1 1361 | 0 1362 | 273 1 1 1363 | 1 1364 | 274 1 1 1365 | 1 1366 | 275 1 1 1367 | 1 1368 | 276 1 1 1369 | 0 1370 | 277 1 1 1371 | 0 1372 | 278 1 1 1373 | 0 1374 | 279 2 1 1375 | 1.0000000E-35 1376 | 88 3 10 1377 | 1378 | 287 1 1 1379 | 0 1380 | 297 3 20 1381 | PSHELL 1382 | 298 3 20 1383 | PSHELL 1384 | 299 3 20 1385 | PSHELL 1386 | 300 3 20 1387 | PSHELL 1388 | 301 3 20 1389 | SHELL SECT 1390 | 302 3 20 1391 | SHELL SECT 1392 | 303 3 20 1393 | SHELL SECT 1394 | 321 2 1 1395 | 1.0000000E-35 1396 | 322 2 1 1397 | 1.0000000E-35 1398 | 316 1 1 1399 | 1 1400 | 317 1 1 1401 | -999 1402 | 323 3 6 1403 | 1404 | 309 1 1 1405 | 0 1406 | 326 2 1 1407 | 0.0000000E+00 1408 | 327 2 1 1409 | 0.0000000E+00 1410 | 328 2 1 1411 | 0.0000000E+00 1412 | 329 2 1 1413 | 0.0000000E+00 1414 | 330 2 1 1415 | 0.0000000E+00 1416 | 331 2 1 1417 | 0.0000000E+00 1418 | 312 1 1 1419 | 1 1420 | 332 1 1 1421 | 0 1422 | 333 2 3 1423 | 0.0000000E+00 0.0000000E+00 0.0000000E+00 1424 | 336 1 1 1425 | 0 1426 | 337 2 1 1427 | 0.0000000E+00 1428 | 338 3 8 1429 | SIMPSON 1430 | 370 1 1 1431 | 0 1432 | 339 1 3 1433 | 3 0 0 1434 | 340 1 1 1435 | 0 1436 | 341 2 1 1437 | 0.0000000E+00 1438 | 281 1 1 1439 | 0 1440 | 282 3 96 1441 | 1442 | 1443 | 283 1 1 1444 | -999 1445 | 284 3 14 1446 | 1447 | 285 1 1 1448 | 0 1449 | 296 2 1 1450 | 7.8200000E+03 1451 | 384 2 1 1452 | 1.0000000E-35 1453 | 286 1 1 1454 | 0 1455 | 288 3 80 1456 | 1457 | 289 3 80 1458 | 1459 | 343 1 1 1460 | 0 1461 | 344 3 10 1462 | 1463 | 345 1 1 1464 | 0 1465 | 305 3 10 1466 | 1467 | 800 1 1 1468 | 0 1469 | 801 3 80 1470 | 1471 | 802 3 80 1472 | 1473 | 803 1 6 1474 | 0 0 0 0 0 0 1475 | 804 2 3 1476 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1477 | 805 2 3 1478 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1479 | 806 2 3 1480 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1481 | 807 2 3 1482 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1483 | 118 2 1 1484 | 0.0000000E+00 1485 | 154 1 1 1486 | 1 1487 | 260 2 1 1488 | 0.0000000E+00 1489 | 441 2 1 1490 | 0.0000000E+00 1491 | 442 2 1 1492 | 0.0000000E+00 1493 | 443 2 1 1494 | 0.0000000E+00 1495 | 10 90 80 1496 | Thin Shell10 1497 | 1 2 4 1498 | 1.0000000E-03 1.0000000E-35 1.0000000E-35 1.0000000E-35 1499 | 46 2 1 1500 | 1.0000000E+00 1501 | 47 2 1 1502 | 8.3333302E-01 1503 | 48 2 1 1504 | 1.0000000E-35 1505 | 52 2 2 1506 | 1.0000000E-35 1.0000000E-35 1507 | 82 2 1 1508 | 0.0000000E+00 1509 | 117 1 12 1510 | -999 -999 -999 -999 -999 -999 -999 -999 1511 | -999 -999 -999 -999 1512 | 263 1 1 1513 | 0 1514 | 264 1 1 1515 | 0 1516 | 265 1 1 1517 | 0 1518 | 266 1 1 1519 | 0 1520 | 262 3 10 1521 | Mindlin 1522 | 271 1 1 1523 | 9 1524 | 272 1 1 1525 | 0 1526 | 273 1 1 1527 | 1 1528 | 274 1 1 1529 | 1 1530 | 275 1 1 1531 | 1 1532 | 276 1 1 1533 | 0 1534 | 277 1 1 1535 | 0 1536 | 278 1 1 1537 | 0 1538 | 279 2 1 1539 | 1.0000000E-35 1540 | 88 3 10 1541 | 1542 | 287 1 1 1543 | 0 1544 | 297 3 20 1545 | PSHELL 1546 | 298 3 20 1547 | PSHELL 1548 | 299 3 20 1549 | PSHELL 1550 | 300 3 20 1551 | PSHELL 1552 | 301 3 20 1553 | SHELL SECT 1554 | 302 3 20 1555 | SHELL SECT 1556 | 303 3 20 1557 | SHELL SECT 1558 | 321 2 1 1559 | 1.0000000E-35 1560 | 322 2 1 1561 | 1.0000000E-35 1562 | 316 1 1 1563 | 1 1564 | 317 1 1 1565 | -999 1566 | 323 3 6 1567 | 1568 | 309 1 1 1569 | 0 1570 | 326 2 1 1571 | 0.0000000E+00 1572 | 327 2 1 1573 | 0.0000000E+00 1574 | 328 2 1 1575 | 0.0000000E+00 1576 | 329 2 1 1577 | 0.0000000E+00 1578 | 330 2 1 1579 | 0.0000000E+00 1580 | 331 2 1 1581 | 0.0000000E+00 1582 | 312 1 1 1583 | 1 1584 | 332 1 1 1585 | 0 1586 | 333 2 3 1587 | 0.0000000E+00 0.0000000E+00 0.0000000E+00 1588 | 336 1 1 1589 | 0 1590 | 337 2 1 1591 | 0.0000000E+00 1592 | 338 3 8 1593 | SIMPSON 1594 | 370 1 1 1595 | 0 1596 | 339 1 3 1597 | 3 0 0 1598 | 340 1 1 1599 | 0 1600 | 341 2 1 1601 | 0.0000000E+00 1602 | 281 1 1 1603 | 0 1604 | 282 3 96 1605 | 1606 | 1607 | 283 1 1 1608 | -999 1609 | 284 3 14 1610 | 1611 | 285 1 1 1612 | 0 1613 | 296 2 1 1614 | 7.8200000E+03 1615 | 384 2 1 1616 | 1.0000000E-35 1617 | 286 1 1 1618 | 0 1619 | 288 3 80 1620 | 1621 | 289 3 80 1622 | 1623 | 343 1 1 1624 | 0 1625 | 344 3 10 1626 | 1627 | 345 1 1 1628 | 0 1629 | 305 3 10 1630 | 1631 | 800 1 1 1632 | 0 1633 | 801 3 80 1634 | 1635 | 802 3 80 1636 | 1637 | 803 1 6 1638 | 0 0 0 0 0 0 1639 | 804 2 3 1640 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1641 | 805 2 3 1642 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1643 | 806 2 3 1644 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1645 | 807 2 3 1646 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1647 | 118 2 1 1648 | 0.0000000E+00 1649 | 154 1 1 1650 | 1 1651 | 260 2 1 1652 | 0.0000000E+00 1653 | 441 2 1 1654 | 0.0000000E+00 1655 | 442 2 1 1656 | 0.0000000E+00 1657 | 443 2 1 1658 | 0.0000000E+00 1659 | 11 90 80 1660 | Thin Shell11 1661 | 1 2 4 1662 | 1.0000000E-03 1.0000000E-35 1.0000000E-35 1.0000000E-35 1663 | 46 2 1 1664 | 1.0000000E+00 1665 | 47 2 1 1666 | 8.3333302E-01 1667 | 48 2 1 1668 | 1.0000000E-35 1669 | 52 2 2 1670 | 1.0000000E-35 1.0000000E-35 1671 | 82 2 1 1672 | 0.0000000E+00 1673 | 117 1 12 1674 | -999 -999 -999 -999 -999 -999 -999 -999 1675 | -999 -999 -999 -999 1676 | 263 1 1 1677 | 0 1678 | 264 1 1 1679 | 0 1680 | 265 1 1 1681 | 0 1682 | 266 1 1 1683 | 0 1684 | 262 3 10 1685 | Mindlin 1686 | 271 1 1 1687 | 9 1688 | 272 1 1 1689 | 0 1690 | 273 1 1 1691 | 1 1692 | 274 1 1 1693 | 1 1694 | 275 1 1 1695 | 1 1696 | 276 1 1 1697 | 0 1698 | 277 1 1 1699 | 0 1700 | 278 1 1 1701 | 0 1702 | 279 2 1 1703 | 1.0000000E-35 1704 | 88 3 10 1705 | 1706 | 287 1 1 1707 | 0 1708 | 297 3 20 1709 | PSHELL 1710 | 298 3 20 1711 | PSHELL 1712 | 299 3 20 1713 | PSHELL 1714 | 300 3 20 1715 | PSHELL 1716 | 301 3 20 1717 | SHELL SECT 1718 | 302 3 20 1719 | SHELL SECT 1720 | 303 3 20 1721 | SHELL SECT 1722 | 321 2 1 1723 | 1.0000000E-35 1724 | 322 2 1 1725 | 1.0000000E-35 1726 | 316 1 1 1727 | 1 1728 | 317 1 1 1729 | -999 1730 | 323 3 6 1731 | 1732 | 309 1 1 1733 | 0 1734 | 326 2 1 1735 | 0.0000000E+00 1736 | 327 2 1 1737 | 0.0000000E+00 1738 | 328 2 1 1739 | 0.0000000E+00 1740 | 329 2 1 1741 | 0.0000000E+00 1742 | 330 2 1 1743 | 0.0000000E+00 1744 | 331 2 1 1745 | 0.0000000E+00 1746 | 312 1 1 1747 | 1 1748 | 332 1 1 1749 | 0 1750 | 333 2 3 1751 | 0.0000000E+00 0.0000000E+00 0.0000000E+00 1752 | 336 1 1 1753 | 0 1754 | 337 2 1 1755 | 0.0000000E+00 1756 | 338 3 8 1757 | SIMPSON 1758 | 370 1 1 1759 | 0 1760 | 339 1 3 1761 | 3 0 0 1762 | 340 1 1 1763 | 0 1764 | 341 2 1 1765 | 0.0000000E+00 1766 | 281 1 1 1767 | 0 1768 | 282 3 96 1769 | 1770 | 1771 | 283 1 1 1772 | -999 1773 | 284 3 14 1774 | 1775 | 285 1 1 1776 | 0 1777 | 296 2 1 1778 | 7.8200000E+03 1779 | 384 2 1 1780 | 1.0000000E-35 1781 | 286 1 1 1782 | 0 1783 | 288 3 80 1784 | 1785 | 289 3 80 1786 | 1787 | 343 1 1 1788 | 0 1789 | 344 3 10 1790 | 1791 | 345 1 1 1792 | 0 1793 | 305 3 10 1794 | 1795 | 800 1 1 1796 | 0 1797 | 801 3 80 1798 | 1799 | 802 3 80 1800 | 1801 | 803 1 6 1802 | 0 0 0 0 0 0 1803 | 804 2 3 1804 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1805 | 805 2 3 1806 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1807 | 806 2 3 1808 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1809 | 807 2 3 1810 | 1.0000000E+00 0.0000000E+00 0.0000000E+00 1811 | 118 2 1 1812 | 0.0000000E+00 1813 | 154 1 1 1814 | 1 1815 | 260 2 1 1816 | 0.0000000E+00 1817 | 441 2 1 1818 | 0.0000000E+00 1819 | 442 2 1 1820 | 0.0000000E+00 1821 | 443 2 1 1822 | 0.0000000E+00 1823 | -1 1824 | -1 1825 | 2400 1826 | 13 7 -1 0 1827 | Fem1 1828 | 1829 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1830 | 03-Mar-16 20:56:47 0 0 0 1831 | 0 1832 | -1 1833 | -1 1834 | 2411 1835 | 1 1 1 11 1836 | 1.2477431156011692D-01 -8.4313023599261724D-02 9.9982984052618476D-02 1837 | 2 1 1 11 1838 | 4.0854669221344390D-02 -9.2914992242095734D-02 1.4957141687903966D-01 1839 | 3 1 1 11 1840 | -5.2755252957872707D-02 -9.3216892294474066D-02 1.4560703504409345D-01 1841 | 4 1 1 11 1842 | -1.2951950538553628D-01 -8.4971040198647207D-02 9.3158659407594782D-02 1843 | 5 1 1 11 1844 | -4.1123760044047405D-03 -1.5422119737431231D-01 9.4195592786945170D-02 1845 | 6 1 1 11 1846 | -7.8419584157023492D-02 -1.4092331447849582D-01 8.1638762593238171D-02 1847 | 7 1 1 11 1848 | 7.0890620592377038D-02 -1.4328866229073636D-01 8.4361077696811088D-02 1849 | 8 1 1 11 1850 | 6.5802308212365337D-02 1.4096290748587958D-01 9.2051248223145865D-02 1851 | 9 1 1 11 1852 | 2.4113248611741713D-02 7.4267289718525226D-02 1.6302401123373339D-01 1853 | 10 1 1 11 1854 | -1.5698119404445380D-02 -1.3514800179720158D-02 1.7956848988620330D-01 1855 | 11 1 1 11 1856 | 8.4435578707144271D-02 -8.6631302834601961D-03 1.5959165669269104D-01 1857 | 12 1 1 11 1858 | 1.5961910273285157D-01 3.8901943327685909D-03 8.4738001399694604D-02 1859 | 13 1 1 11 1860 | 1.0916272649337515D-01 6.8910095612540329D-02 1.2652597631830290D-01 1861 | 14 1 1 11 1862 | -7.4476734428124455D-02 6.5771327425123607D-02 1.5100089306019904D-01 1863 | 15 1 1 11 1864 | -1.4723657101546070D-01 5.0698142685658178D-02 9.1787825002342879D-02 1865 | 16 1 1 11 1866 | -1.0828484672089671D-01 -1.6434849857071686D-02 1.4379916805149451D-01 1867 | 17 1 1 11 1868 | -1.6274558915301462D-01 -1.7192978806014909D-02 7.6760582660702473D-02 1869 | 18 1 1 11 1870 | -3.4016313738616036D-02 1.4347299953840226D-01 1.0455759607023765D-01 1871 | 19 1 1 11 1872 | -1.0808985965369307D-01 1.1692099787445183D-01 8.5556852705842887D-02 1873 | 20 1 1 11 1874 | -1.3099917089962554D-01 -7.4744870078229234D-02 -9.9631009701850265D-02 1875 | 21 1 1 11 1876 | -4.7967793769859761D-02 -8.9788252539826488D-02 -1.4936888305775867D-01 1877 | 22 1 1 11 1878 | 4.5151226873590196D-02 -9.7164872855300691D-02 -1.4558255176278995D-01 1879 | 23 1 1 11 1880 | 1.2225360055837158D-01 -9.4772559618217775D-02 -9.3520798704229510D-02 1881 | 24 1 1 11 1882 | -7.7613302869270553D-03 -1.5419771326584039D-01 -9.4003827831183412D-02 1883 | 25 1 1 11 1884 | 6.7182699302105672D-02 -1.4668187510197225D-01 -8.1515792006907811D-02 1885 | 26 1 1 11 1886 | -8.1692764008985147D-02 -1.3752322586581975D-01 -8.4187633772153880D-02 1887 | 27 1 1 11 1888 | -5.4744798012336462D-02 1.4572575916526856D-01 -9.1874482841840244D-02 1889 | 28 1 1 11 1890 | -1.8077230953966860D-02 7.6081530855029236D-02 -1.6296847494315667D-01 1891 | 29 1 1 11 1892 | 1.4538672298945527D-02 -1.4682518234572126D-02 -1.7957443017646330D-01 1893 | 30 1 1 11 1894 | -8.4566665897625432D-02 -2.5817384402999667D-03 -1.5973644281140795D-01 1895 | 31 1 1 11 1896 | -1.5859935788531584D-01 1.5071051166951949D-02 -8.5399228898369123D-02 1897 | 32 1 1 11 1898 | -1.0309698543728181D-01 7.7168056614836625D-02 -1.2684639784260457D-01 1899 | 33 1 1 11 1900 | 7.9323962775430537D-02 6.0230543091582593D-02 -1.5084392111749673D-01 1901 | 34 1 1 11 1902 | 1.5089799008990998D-01 3.9771440025981999D-02 -9.1224736706570428D-02 1903 | 35 1 1 11 1904 | 1.0626418742251634D-01 -2.4240906563580369D-02 -1.4420201236721136D-01 1905 | 36 1 1 11 1906 | 1.6060728739047750D-01 -2.8778442855793757D-02 -7.7788288930155769D-02 1907 | 37 1 1 11 1908 | 4.5101699062167620D-02 1.4049606280141272D-01 -1.0440599660858826D-01 1909 | 38 1 1 11 1910 | 1.1684490437803115D-01 1.0837591175713804D-01 -8.5298567239365061D-02 1911 | 39 1 1 11 1912 | 1.6637004196753216D-01 -7.0468993809450917D-02 -1.3691352061577497D-17 1913 | 40 1 1 11 1914 | 1.1453244061689527D-01 -1.3967354971799509D-01 -2.7137037384983734D-17 1915 | 41 1 1 11 1916 | 3.6500519023415112D-02 -1.7687896445986784D-01 -3.4365642375316127D-17 1917 | 42 1 1 11 1918 | -4.9880965178605297D-02 -1.7358856100138445D-01 -3.3726351843359922D-17 1919 | 43 1 1 11 1920 | -1.2486278668571806D-01 -1.3055109270881321D-01 -2.5364644849629753D-17 1921 | 44 1 1 11 1922 | -1.7129318118650319D-01 -5.7591015913211072D-02 -1.1189302684599246D-17 1923 | 45 1 1 11 1924 | -1.7843612432117442D-01 2.8611617044858227D-02 0.0000000000000000D+00 1925 | 46 1 1 11 1926 | -1.4464782744395641D-01 1.0821880850711951D-01 0.0000000000000000D+00 1927 | 47 1 1 11 1928 | -7.7772387801279236D-02 1.6301089466620522D-01 0.0000000000000000D+00 1929 | 48 1 1 11 1930 | 6.8893772181874554D-03 1.8047434529611744D-01 0.0000000000000000D+00 1931 | 49 1 1 11 1932 | 8.9980852346969259D-02 1.5661999794564413D-01 0.0000000000000000D+00 1933 | 50 1 1 11 1934 | 1.5250215124331676D-01 9.6891495541412159D-02 0.0000000000000000D+00 1935 | 51 1 1 11 1936 | 1.8014190673828126D-01 1.4926984786987304D-02 0.0000000000000000D+00 1937 | -1 1938 | -1 1939 | 2412 1940 | 1 74 1 -1 7 3 1941 | 3 5 2 1942 | 2 74 1 -1 7 3 1943 | 43 4 44 1944 | 3 74 1 -1 7 3 1945 | 43 42 6 1946 | 4 74 1 -1 7 3 1947 | 5 6 42 1948 | 5 74 1 -1 7 3 1949 | 3 6 5 1950 | 6 74 1 -1 7 3 1951 | 6 4 43 1952 | 7 74 1 -1 7 3 1953 | 6 3 4 1954 | 8 74 1 -1 7 3 1955 | 1 40 39 1956 | 9 74 1 -1 7 3 1957 | 41 5 42 1958 | 10 74 1 -1 7 3 1959 | 1 7 40 1960 | 11 74 1 -1 7 3 1961 | 7 41 40 1962 | 12 74 1 -1 7 3 1963 | 2 7 1 1964 | 13 74 1 -1 7 3 1965 | 7 5 41 1966 | 14 74 1 -1 7 3 1967 | 7 2 5 1968 | 15 74 1 -1 7 3 1969 | 11 2 1 1970 | 16 74 1 -1 7 3 1971 | 2 10 3 1972 | 17 74 1 -1 7 3 1973 | 10 11 9 1974 | 18 74 1 -1 7 3 1975 | 10 2 11 1976 | 19 74 1 -1 7 3 1977 | 1 12 11 1978 | 20 74 1 -1 7 3 1979 | 12 39 51 1980 | 21 74 1 -1 7 3 1981 | 12 1 39 1982 | 22 74 1 -1 7 3 1983 | 13 11 12 1984 | 23 74 1 -1 7 3 1985 | 9 13 8 1986 | 24 74 1 -1 7 3 1987 | 9 11 13 1988 | 25 74 1 -1 7 3 1989 | 8 50 49 1990 | 26 74 1 -1 7 3 1991 | 50 12 51 1992 | 27 74 1 -1 7 3 1993 | 13 50 8 1994 | 28 74 1 -1 7 3 1995 | 13 12 50 1996 | 29 74 1 -1 7 3 1997 | 15 16 14 1998 | 30 74 1 -1 7 3 1999 | 44 17 45 2000 | 31 74 1 -1 7 3 2001 | 17 15 45 2002 | 32 74 1 -1 7 3 2003 | 17 16 15 2004 | 33 74 1 -1 7 3 2005 | 4 17 44 2006 | 34 74 1 -1 7 3 2007 | 4 16 17 2008 | 35 74 1 -1 7 3 2009 | 14 10 9 2010 | 36 74 1 -1 7 3 2011 | 14 16 10 2012 | 37 74 1 -1 7 3 2013 | 3 16 4 2014 | 38 74 1 -1 7 3 2015 | 3 10 16 2016 | 39 74 1 -1 7 3 2017 | 15 46 45 2018 | 40 74 1 -1 7 3 2019 | 8 18 9 2020 | 41 74 1 -1 7 3 2021 | 18 48 47 2022 | 42 74 1 -1 7 3 2023 | 48 8 49 2024 | 43 74 1 -1 7 3 2025 | 48 18 8 2026 | 44 74 1 -1 7 3 2027 | 18 14 9 2028 | 45 74 1 -1 7 3 2029 | 18 47 19 2030 | 46 74 1 -1 7 3 2031 | 46 19 47 2032 | 47 74 1 -1 7 3 2033 | 19 14 18 2034 | 48 74 1 -1 7 3 2035 | 15 19 46 2036 | 49 74 1 -1 7 3 2037 | 15 14 19 2038 | 50 74 1 -1 7 3 2039 | 22 24 21 2040 | 51 74 1 -1 7 3 2041 | 40 23 39 2042 | 52 74 1 -1 7 3 2043 | 40 41 25 2044 | 53 74 1 -1 7 3 2045 | 24 25 41 2046 | 54 74 1 -1 7 3 2047 | 22 25 24 2048 | 55 74 1 -1 7 3 2049 | 25 23 40 2050 | 56 74 1 -1 7 3 2051 | 25 22 23 2052 | 57 74 1 -1 7 3 2053 | 20 43 44 2054 | 58 74 1 -1 7 3 2055 | 42 24 41 2056 | 59 74 1 -1 7 3 2057 | 20 26 43 2058 | 60 74 1 -1 7 3 2059 | 26 42 43 2060 | 61 74 1 -1 7 3 2061 | 21 26 20 2062 | 62 74 1 -1 7 3 2063 | 26 24 42 2064 | 63 74 1 -1 7 3 2065 | 26 21 24 2066 | 64 74 1 -1 7 3 2067 | 21 29 22 2068 | 65 74 1 -1 7 3 2069 | 30 21 20 2070 | 66 74 1 -1 7 3 2071 | 29 30 28 2072 | 67 74 1 -1 7 3 2073 | 29 21 30 2074 | 68 74 1 -1 7 3 2075 | 20 31 30 2076 | 69 74 1 -1 7 3 2077 | 31 44 45 2078 | 70 74 1 -1 7 3 2079 | 31 20 44 2080 | 71 74 1 -1 7 3 2081 | 32 30 31 2082 | 72 74 1 -1 7 3 2083 | 28 32 27 2084 | 73 74 1 -1 7 3 2085 | 28 30 32 2086 | 74 74 1 -1 7 3 2087 | 27 46 47 2088 | 75 74 1 -1 7 3 2089 | 46 31 45 2090 | 76 74 1 -1 7 3 2091 | 32 46 27 2092 | 77 74 1 -1 7 3 2093 | 32 31 46 2094 | 78 74 1 -1 7 3 2095 | 34 35 33 2096 | 79 74 1 -1 7 3 2097 | 39 36 51 2098 | 80 74 1 -1 7 3 2099 | 36 34 51 2100 | 81 74 1 -1 7 3 2101 | 36 35 34 2102 | 82 74 1 -1 7 3 2103 | 23 36 39 2104 | 83 74 1 -1 7 3 2105 | 23 35 36 2106 | 84 74 1 -1 7 3 2107 | 33 29 28 2108 | 85 74 1 -1 7 3 2109 | 33 35 29 2110 | 86 74 1 -1 7 3 2111 | 22 35 23 2112 | 87 74 1 -1 7 3 2113 | 22 29 35 2114 | 88 74 1 -1 7 3 2115 | 34 50 51 2116 | 89 74 1 -1 7 3 2117 | 27 37 28 2118 | 90 74 1 -1 7 3 2119 | 37 48 49 2120 | 91 74 1 -1 7 3 2121 | 48 27 47 2122 | 92 74 1 -1 7 3 2123 | 48 37 27 2124 | 93 74 1 -1 7 3 2125 | 37 33 28 2126 | 94 74 1 -1 7 3 2127 | 37 49 38 2128 | 95 74 1 -1 7 3 2129 | 50 38 49 2130 | 96 74 1 -1 7 3 2131 | 38 33 37 2132 | 97 74 1 -1 7 3 2133 | 34 38 50 2134 | 98 74 1 -1 7 3 2135 | 34 33 38 2136 | -1 2137 | -1 2138 | 2420 2139 | 9 2140 | 2141 | 1 0 7 2142 | CS1 2143 | 1.00000000000000000D+00 0.00000000000000000D+00 0.00000000000000000D+00 2144 | 0.00000000000000000D+00 1.00000000000000000D+00 0.00000000000000000D+00 2145 | 0.00000000000000000D+00 0.00000000000000000D+00 1.00000000000000000D+00 2146 | 0.00000000000000000D+00 0.00000000000000000D+00 0.00000000000000000D+00 2147 | -1 2148 | --------------------------------------------------------------------------------