Tochnog Contact issues-Solved!
[email protected] Sun, 24 Jun 2012 11:35:30 -0500
| Newsgroups | gmane.comp.mathematics.tochnog.user |
|---|---|
| Message-ID | <[email protected]> |
--===============6866580182146327426== Content-Type: multipart/alternative; boundary="Apple-Mail=_447CF314-EA92-4A61-A675-97FE585A3BA4" --Apple-Mail=_447CF314-EA92-4A61-A675-97FE585A3BA4 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Dear Tochnogers, Following the recent postings regarding tochnog and contact issues, I = remembered having similar issues before and reviewed the options and = problems.=20 I realized that contact between a mesh and a point works, as it is shown = in example 9. Contact between a mesh and a circle worked also (Please = see attached problem) contact with a line works perfectly well (see example 14) but contact = between an ellipse and a mesh had issues and did not work. After long hours looking at the problem, I have edited and corrected the = errors in the code in file "geometry.cc" and it works very well, as it = was supposed to. I am attaching a copy of the corrected file, so that those building = their own versions can update their code. I will be updating the Mac OSX version binary very soon.=20 I would ask those of you who have access to the 64 bit versions of linux = or windows and would like to contribute with binaries, please send them = to me. I will post them so that other users can download them. I would ask that = you test your binaries before sending them to me. If you can, for those using Windows, I know that there is a LAPACK = version already built for windows. It would be nice if it can be built = with LAPACK for Windows, so that all versions would have the same capabilities. If you do not have the LAPACK library option in your build please edit = the corresponding line in the attached example files. The three small = attached examples=20 solve the same problem for contact with a point 0.3 units in diameters, = a circle of 0.3 units radius, and an ellipse with a=3D0.5 and b=3D0.3 = all having the same center. For those trying the contact between meshes, remember to include the = "node_boundary" line in the problem. Let me have some feedback please! Fernando Lorenzo [email protected] --Apple-Mail=_447CF314-EA92-4A61-A675-97FE585A3BA4 Content-Type: multipart/mixed; boundary="Apple-Mail=_E42D6334-FD94-4515-81CC-29299AC79161" --Apple-Mail=_E42D6334-FD94-4515-81CC-29299AC79161 Content-Transfer-Encoding: 7bit Content-Type: text/html; charset=us-ascii <html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: collapse; color: rgb(85, 85, 85); font-family: monospace; font-size: 12px; line-height: 18px; "><pre style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0.5em; padding-right: 1em; padding-bottom: 0.5em; padding-left: 1em; font-family: monospace; line-height: 16px; font-size: 11px; overflow-x: auto; overflow-y: auto; white-space: pre; ">Dear Tochnogers, Following the recent postings regarding tochnog and contact issues, I remembered having similar issues before and reviewed the options and problems. I realized that contact between a mesh and a point works, as it is shown in example 9. Contact between a mesh and a circle worked also (Please see attached problem) contact with a line works perfectly well (see example 14) but contact between an ellipse and a mesh had issues and did not work. After long hours looking at the problem, I have edited and corrected the errors in the code in file "geometry.cc" and it works very well, as it was supposed to. I am attaching a copy of the corrected file, so that those building their own versions can update their code. I will be updating the Mac OSX version binary very soon. I would ask those of you who have access to the 64 bit versions of linux or windows and would like to contribute with binaries, please send them to me. I will post them so that other users can download them. I would ask that you test your binaries before sending them to me. If you can, for those using Windows, I know that there is a LAPACK version already built for windows. It would be nice if it can be built with LAPACK for Windows, so that all versions would have the same capabilities. If you do not have the LAPACK library option in your build please edit the corresponding line in the attached example files. The three small attached examples solve the same problem for contact with a point 0.3 units in diameters, a circle of 0.3 units radius, and an ellipse with a=0.5 and b=0.3 all having the same center. For those trying the contact between meshes, remember to include the "node_boundary" line in the problem. Let me have some feedback please!</pre></span><div></div></body></html> --Apple-Mail=_E42D6334-FD94-4515-81CC-29299AC79161 Content-Disposition: attachment; filename=geometry.cc Content-Type: application/octet-stream; name="geometry.cc" Content-Transfer-Encoding: 7bit /* Copyright (C) 1998 Dennis Roddeman email: [email protected] This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation 59 Temple Place, Suite 330, Boston, MA, 02111-1307, USA */ // This file was modified and corrected so that the contact with an ellipse geometry // will work. Modification made by Fernando Lorenzo on June 22, 2012. #include "tochnog.h" void geometry( long int inod, double co[], long int geometry_entity[], long int &in_geometry, double &factor, double normal[], double &penetration, double projection[], long int node_type, long int projection_type, long int version ) { int i=0, level=0; long j=0, itest=0, idim=0, index=0, ind=0, length_geometry_bounda_factor=0, entity=0, itriangle=0, ntriangle=0, length=0, iset=0, nset=0, ok=0, ldum=0, idum[1], geometry_set[DATA_ITEM_SIZE]; double xi=0., tolerance=0., tmp=0., tmp1=0., a=0., b=0., xyint[2], ellilength=0., l0=0., l1=0., l2=0., x0=0., x1=0., y0=0., y1=0., l=0., radius=0., cylinder_length=0., x=0., y=0., z=0., eps_iso=EPS_ISO, side[MDIM], geometry_bounda_sine_x[2], geometry_bounda_sine_y[2], geometry_bounda_sine_z[2], coord[MDIM], dydx[MDIM], ddum[1], weight[MNOL], tmp_vec[MDIM], point_first[MDIM], point_second[MDIM], tmp_vec0[MDIM], tmp_vec1[MDIM], tmp_vec2[MDIM], tmp_vec11[MDIM], tmp_vec3[MDIM], centre[MDIM], vec01[MDIM], vec02[MDIM], coord0[MDIM], coord1[MDIM], coord2[MDIM], geometry_point[1*MDIM+1], geometry_line[2*MDIM+1], geometry_triangle[2*(3*MDIM+1)], geometry_circle[MDIM+2], geometry_circle_segment[MDIM+1+MDIM+1], geometry_circle_smallsegment[MDIM+1+2*MDIM+1], geometry_quadrilateral[4*MDIM+1], geometry_sphere[MDIM+2], geometry_sphere_segment[MDIM+1+MDIM+1], geometry_cylinder[2*MDIM+2], geometry_cylinder_segment[MDIM+MDIM+1+MDIM+1], geometry_ellipse[MDIM+3], geometry_bounda_factor[4], geometry_brick[2*MDIM+1], work[MDIM], *node_dof=NULL, *geometry_polynomial=NULL; factor = 1.; in_geometry = 0; array_set( normal, 0., MDIM ); array_set( vec01, 0., MDIM ); array_set( vec02, 0., MDIM ); entity = geometry_entity[0]; index = geometry_entity[1]; if ( inod>=0 ) { if ( node_type==PLUS_DISPLACEMENT ) { db( NODE, inod, idum, coord, ldum, version, GET ); if ( materi_displacement ) { node_dof = db_dbl( NODE_DOF, inod, version ); for ( idim=0; idim<ndim; idim++ ) coord[idim] += node_dof[dis_indx+idim*nder]; } } else db( node_type, inod, idum, coord, ldum, version, GET ); } else array_move( co, coord, ndim ); if ( entity==-GEOMETRY_SET ) { db( GEOMETRY_SET, index, geometry_set, ddum, nset, VERSION_NORMAL, GET ); nset = nset / 2; } else { geometry_set[0] = entity; geometry_set[1] = index; nset = 1; } for ( iset=0; iset<nset && !in_geometry; iset++ ) { entity = geometry_set[iset*2]; index = geometry_set[iset*2+1]; if ( entity==-GEOMETRY_BRICK ) { db( GEOMETRY_BRICK, index, idum, geometry_brick, ldum, VERSION_NORMAL, GET ); tolerance = geometry_brick[2*MDIM]; ok = 1; for ( idim=0; idim<MDIM; idim++ ) { if ( coord[idim] < geometry_brick[idim]- geometry_brick[MDIM+idim]/2.-tolerance ) ok = 0; if ( coord[idim] > geometry_brick[idim]+ geometry_brick[MDIM+idim]/2.+tolerance ) ok = 0; } if ( ok ) in_geometry = 1; for ( idim=0; idim<MDIM; idim++ ) { if ( coord[idim] < geometry_brick[idim] ) tmp = geometry_brick[idim]-geometry_brick[MDIM+idim]; if ( coord[idim] > geometry_brick[idim] ) tmp = geometry_brick[idim]+geometry_brick[MDIM+idim]; projection[idim] = tmp; } } if ( entity==-GEOMETRY_CIRCLE ) { db( GEOMETRY_CIRCLE, index, idum, geometry_circle, ldum, VERSION_NORMAL, GET ); array_move( geometry_circle, centre, ndim ); radius = geometry_circle[ndim]; tolerance = geometry_circle[ndim+1]; array_subtract( coord, centre, tmp_vec1, ndim ); tmp = array_size( tmp_vec1, ndim ); if ( projection_type==CONTROL_MESH_DELETE_GEOMETRY ) { if ( tmp<=(radius+tolerance+EPS_COORD) ) in_geometry = 1; } else { if ( tmp>=(radius-tolerance-EPS_COORD) && tmp<=(radius+tolerance+EPS_COORD) ) in_geometry = 1; } array_move( tmp_vec1, normal, ndim ); array_normalize( normal, ndim ); penetration = tmp - radius; for ( idim=0; idim<ndim; idim++ ) { if ( tmp<EPS_COORD ) projection[idim] = centre[idim]; else projection[idim] = centre[idim] + (radius/tmp)*tmp_vec1[idim]; } } else if ( entity==-GEOMETRY_CIRCLE_SEGMENT ) { db( GEOMETRY_CIRCLE_SEGMENT, index, idum, geometry_circle_segment, ldum, VERSION_NORMAL, GET ); array_move( geometry_circle_segment, centre, ndim ); radius = geometry_circle_segment[ndim]; side[0] = geometry_circle_segment[ndim+1]; side[1] = geometry_circle_segment[ndim+2]; tolerance = geometry_circle_segment[ndim+3]; array_subtract( coord, centre, tmp_vec1, ndim ); tmp = array_size( tmp_vec1, ndim ); ok = 0; if ( projection_type==CONTROL_MESH_DELETE_GEOMETRY ) { if ( tmp<=(radius+tolerance+EPS_COORD) ) ok = 1; } else { if ( tmp>=(radius-tolerance-EPS_COORD) && tmp<=(radius+tolerance+EPS_COORD) ) ok = 1; } for ( idim=0; idim<ndim; idim++ ) { if ( side[idim]>0. && tmp_vec1[idim]<0. ) ok = 0; if ( side[idim]<0. && tmp_vec1[idim]>0. ) ok = 0; } if ( ok ) in_geometry = 1; array_move( tmp_vec1, normal, ndim ); array_normalize( normal, ndim ); penetration = tmp - radius; for ( idim=0; idim<ndim; idim++ ) { if ( tmp<EPS_COORD ) projection[idim] = centre[idim]; else projection[idim] = centre[idim] + (radius/tmp)*tmp_vec1[idim]; } } else if ( entity==-GEOMETRY_CIRCLE_SMALLSEGMENT ) { db( GEOMETRY_CIRCLE_SMALLSEGMENT, index, idum, geometry_circle_smallsegment, ldum, VERSION_NORMAL, GET ); array_move( geometry_circle_smallsegment, centre, ndim ); radius = geometry_circle_smallsegment[ndim]; array_move( &geometry_circle_smallsegment[ndim+1], point_first, ndim ); array_move( &geometry_circle_smallsegment[ndim+1+ndim], point_second, ndim ); tolerance = geometry_circle_smallsegment[ndim+1+2*ndim]; array_subtract( coord, centre, tmp_vec1, ndim ); tmp = array_size( tmp_vec1, ndim ); ok = 0; if ( projection_type==CONTROL_MESH_DELETE_GEOMETRY ) { if ( tmp<=(radius+tolerance+EPS_COORD) ) ok = 1; } else { if ( tmp>=(radius-tolerance-EPS_COORD) && tmp<=(radius+tolerance+EPS_COORD) ) ok = 1; } for ( idim=0; idim<ndim; idim++ ) { if ( coord[idim]>point_first[idim] && coord[idim]>point_second[idim] ) ok = 0; if ( coord[idim]<point_first[idim] && coord[idim]<point_second[idim] ) ok = 0; } if ( ok ) in_geometry = 1; array_move( tmp_vec1, normal, ndim ); array_normalize( normal, ndim ); penetration = tmp - radius; for ( idim=0; idim<ndim; idim++ ) { if ( tmp<EPS_COORD ) projection[idim] = centre[idim]; else projection[idim] = centre[idim] + (radius/tmp)*tmp_vec1[idim]; } } else if ( entity==-GEOMETRY_CYLINDER ) { db( GEOMETRY_CYLINDER, index, idum, geometry_cylinder, ldum, VERSION_NORMAL, GET ); array_subtract( &geometry_cylinder[3], &geometry_cylinder[0], tmp_vec0, ndim); if ( array_null( tmp_vec0, ndim ) ) db_error( GEOMETRY_CYLINDER, index ); cylinder_length = array_size( tmp_vec0, ndim ); array_normalize( tmp_vec0, ndim ); array_subtract( coord, &geometry_cylinder[0], tmp_vec1, ndim ); l = array_inproduct( tmp_vec1, tmp_vec0, ndim ); radius = geometry_cylinder[6]; tolerance = geometry_cylinder[7]; array_multiply( tmp_vec0, tmp_vec0, l, ndim ); array_subtract( tmp_vec1, tmp_vec0, tmp_vec2, ndim ); tmp = array_size( tmp_vec2, ndim ); if ( l>=-EPS_COORD && l<=cylinder_length+EPS_COORD ) { if ( projection_type==CONTROL_MESH_DELETE_GEOMETRY ) { if ( tmp<=(radius+tolerance+EPS_COORD) ) in_geometry = 1; } else { if ( tmp>=(radius-tolerance-EPS_COORD) && tmp<=(radius+tolerance+EPS_COORD) ) in_geometry = 1; } } array_move( tmp_vec2, normal, ndim ); array_normalize( normal, ndim ); penetration = tmp - radius; for ( idim=0; idim<ndim; idim++ ) { if ( tmp<EPS_COORD ) projection[idim] = tmp_vec0[idim]+geometry_cylinder[idim]; else projection[idim] = tmp_vec0[idim] +geometry_cylinder[idim]+ (radius/tmp)*tmp_vec2[idim]; } } else if ( entity==-GEOMETRY_CYLINDER_SEGMENT ) { db( GEOMETRY_CYLINDER_SEGMENT, index, idum, geometry_cylinder_segment, ldum, VERSION_NORMAL, GET ); array_subtract( &geometry_cylinder_segment[3], &geometry_cylinder_segment[0], tmp_vec0, ndim); if ( array_null( tmp_vec0, ndim ) ) db_error( GEOMETRY_CYLINDER_SEGMENT, index ); cylinder_length = array_size( tmp_vec0, ndim ); array_normalize( tmp_vec0, ndim ); array_subtract( coord, &geometry_cylinder_segment[0], tmp_vec1, ndim ); l = array_inproduct( tmp_vec1, tmp_vec0, ndim ); radius = geometry_cylinder_segment[6]; side[0] = geometry_cylinder_segment[7]; side[1] = geometry_cylinder_segment[8]; side[2] = geometry_cylinder_segment[9]; tolerance = geometry_cylinder_segment[10]; array_multiply( tmp_vec0, tmp_vec0, l, ndim ); array_subtract( tmp_vec1, tmp_vec0, tmp_vec2, ndim ); tmp = array_size( tmp_vec2, ndim ); if ( l>=-EPS_COORD && l<=cylinder_length+EPS_COORD ) { ok = 0; if ( projection_type==CONTROL_MESH_DELETE_GEOMETRY ) { if ( tmp<=(radius+tolerance+EPS_COORD) ) ok = 1; } else { if ( tmp>=(radius-tolerance-EPS_COORD) && tmp<=(radius+tolerance+EPS_COORD) ) ok = 1; } for ( idim=0; idim<ndim; idim++ ) { if ( side[idim]>0. && tmp_vec1[idim]<0. ) ok = 0; if ( side[idim]<0. && tmp_vec1[idim]>0. ) ok = 0; } if ( ok ) in_geometry = 1; } array_move( tmp_vec2, normal, ndim ); array_normalize( normal, ndim ); penetration = tmp - radius; for ( idim=0; idim<ndim; idim++ ) { if ( tmp<EPS_COORD ) projection[idim] = tmp_vec0[idim]+geometry_cylinder_segment[idim]; else projection[idim] = tmp_vec0[idim] +geometry_cylinder_segment[idim]+ (radius/tmp)*tmp_vec2[idim]; } } // Ellipse contact analysis was modified and corrected by Fernando Lorenzo June 22, 2012 else if ( entity==-GEOMETRY_ELLIPSE ) { db( GEOMETRY_ELLIPSE, index, idum, geometry_ellipse, ldum, VERSION_NORMAL, GET ); array_move( geometry_ellipse, centre, ndim ); // Parameters of the ellipse a = geometry_ellipse[ndim]; b = geometry_ellipse[ndim+1]; if ( a<=0. || b<=0. ) db_error( GEOMETRY_ELLIPSE, index ); tolerance = geometry_ellipse[ndim+2]; // Coordinates of the nodal point with respect to the center of the ellipse // Equivalent to displacing the origin of the ellipse to ease the calculations x = coord[0] - centre[0]; y = coord[1] - centre[1]; // xyint[0], xyint[1] contain the intersection of a line from the center of the ellipse // to the ellipse xyint[0]=(a*b*coord[0])/(sqrt((a*a)*(coord[1]*coord[1])+(b*b)*(coord[0]*coord[0]))); xyint[1]=(a*b*coord[1])/(sqrt((a*a)*(coord[1]*coord[1])+(b*b)*(coord[0]*coord[0]))); // ellilength is the distance equivalent to the radius of a circle ellilength=sqrt(xyint[0]*xyint[0]+xyint[1]*xyint[1]); // tmp contains the distance from the center of the ellipse to the node array_subtract( coord, centre, tmp_vec1, ndim ); tmp = array_size( tmp_vec1, ndim ); // tmp11 contains the distance from the center of the ellipse to point on the ellipse array_subtract( xyint, centre, tmp_vec11, ndim ); tmp1 = array_size( tmp_vec1, ndim ); if ( projection_type==CONTROL_MESH_DELETE_GEOMETRY ) { if ( tmp<=(tmp1+tolerance +EPS_COORD) ) in_geometry = 1; } else { if ( tmp>=(tmp1 -tolerance-EPS_COORD) && tmp<=(tmp1+tolerance+EPS_COORD) ) in_geometry = 1; } if ( y==0. ) { if ( x>0. ) { normal[0] = 1.; normal[1] = 0.; } else { normal[0] = -1.; normal[1] = 0.; } } else if ( x==0. ) { if ( y>0. ) { normal[0] = 0.; normal[1] = 1.; } else { normal[0] = 0.; normal[1] = -1.; } } else { normal[0] = (b*xyint[0])/a; normal[1] = (a*xyint[1])/b; array_normalize( normal, ndim ); } array_move( tmp_vec1, normal, ndim ); array_normalize( normal, ndim ); penetration = tmp - ellilength; for ( idim=0; idim<ndim; idim++ ) { if ( tmp<EPS_COORD ) projection[idim] = centre[idim]; else projection[idim] = centre[idim] + (ellilength/tmp)*tmp_vec1[idim]; } } else if ( entity==-GEOMETRY_LINE ) { db( GEOMETRY_LINE, index, idum, geometry_line, ldum, VERSION_NORMAL, GET ); array_subtract( coord, &geometry_line[0], tmp_vec1, ndim ); array_subtract( &geometry_line[ndim], &geometry_line[0], vec01, ndim ); if ( array_null(vec01,ndim) ) db_error( GEOMETRY_LINE, index ); xi = array_inproduct( tmp_vec1, vec01, ndim ) / array_inproduct( vec01, vec01, ndim ); array_multiply( vec01, tmp_vec1, xi, ndim ); array_add( &geometry_line[0], tmp_vec1, tmp_vec2, ndim ); array_subtract( coord, tmp_vec2, tmp_vec1, ndim ); tmp = array_size( tmp_vec1, ndim ); tolerance = geometry_line[2*ndim]; if ( xi>=-EPS_ISO && xi<=(1.+EPS_ISO) && tmp<=tolerance+EPS_COORD ) in_geometry = 1; if ( ndim==2 ) { array_outproduct_2D( vec01, normal ); array_normalize( normal, ndim ); penetration = array_inproduct( normal, tmp_vec1, ndim ); } if ( db_active_index( GEOMETRY_BOUNDA_FACTOR, index, VERSION_NORMAL ) ) { db( GEOMETRY_BOUNDA_FACTOR, index, idum, geometry_bounda_factor, length_geometry_bounda_factor, VERSION_NORMAL, GET ); if ( length_geometry_bounda_factor==2 ) factor = geometry_bounda_factor[0] * (1.-xi) + geometry_bounda_factor[1] * xi; else { assert( length_geometry_bounda_factor==3 ); xi = 2.*xi - 1.; factor = geometry_bounda_factor[0] * 0.5 *( xi*xi - xi ) + geometry_bounda_factor[1] * ( 1. - xi*xi ) + geometry_bounda_factor[2] * 0.5 * ( xi*xi + xi ); } } for ( idim=0; idim<ndim; idim++ ) { if ( projection_type==PROJECT_EXACT || tmp<EPS_COORD) projection[idim] = tmp_vec2[idim]; else { projection[idim] = tmp_vec2[idim] + (tolerance/tmp)*tmp_vec1[idim]; } } } else if ( entity==-GEOMETRY_POINT ) { db( GEOMETRY_POINT, index, idum, geometry_point, ldum, VERSION_NORMAL, GET ); array_subtract( coord, geometry_point, tmp_vec1, ndim ); tmp = array_size( tmp_vec1, ndim ); tolerance = geometry_point[1*ndim]; if ( tmp<=tolerance+EPS_COORD ) in_geometry = 1; array_move( tmp_vec1, normal, ndim ); array_normalize( normal, ndim ); penetration = tmp - tolerance; for ( idim=0; idim<ndim; idim++ ) { if ( projection_type==PROJECT_EXACT || tmp<EPS_COORD ) projection[idim] = geometry_point[idim]; else projection[idim] = geometry_point[idim] + (tolerance/tmp)*tmp_vec1[idim]; } } else if ( entity==-GEOMETRY_POLYNOMIAL ) { length = db_len( GEOMETRY_POLYNOMIAL, index, VERSION_NORMAL ); if ( length<((ndim-1)*2+2) ) db_error( GEOMETRY_POLYNOMIAL, index ); geometry_polynomial = db_dbl( GEOMETRY_POLYNOMIAL, index, VERSION_NORMAL ); if ( ndim==2 ) { x = coord[0]; x0 = geometry_polynomial[length-3]; x1 = geometry_polynomial[length-2]; tolerance = geometry_polynomial[length-1]; if ( x>=x0 && x<=x1 ) { y = geometry_polynomial[0]; for ( j=level=1; j<(length-3); level++ ) { y += geometry_polynomial[j] * scalar_power(x,level); j++; } dydx[0] = 1.; dydx[1] = geometry_polynomial[1]; dydx[2] = 0.; for ( j=level=2; j<(length-3); level++ ) { dydx[1] += level * geometry_polynomial[j] * scalar_power(x,level-1); j++; } if ( coord[1]>=(y-tolerance-EPS_COORD) && coord[1]<=(y+tolerance+EPS_COORD) ) in_geometry = 1; normal[1] = 1.; penetration = coord[1] - y; if ( projection_type==PROJECT_EXACT ) { projection[0] = x; projection[1] = y; } else if ( coord[1]>y ) { projection[0] = x; projection[1] = y+tolerance; } else { projection[0] = x; projection[1] = y-tolerance; } } } else { assert( ndim==3 ); x = coord[0]; y = coord[1]; x0 = geometry_polynomial[length-5]; x1 = geometry_polynomial[length-4]; y0 = geometry_polynomial[length-3]; y1 = geometry_polynomial[length-2]; tolerance = geometry_polynomial[length-1]; if ( x>=x0 && x<=x1 && y>=y0 && y<=y1 ) { j = 0; z = geometry_polynomial[j]; j++; for ( level=1; j<(length-5); level++ ) { if ( j<(length-5) ) { z += geometry_polynomial[j] * scalar_power(x,level); j++; } for ( i=level-1; i>0 && j<(length-5); i-- ) { z += geometry_polynomial[j] * scalar_power(x,i) * scalar_power(y,level-i); j++; } if ( j<(length-5) ) { z+= geometry_polynomial[j] * scalar_power(y,level); j++; } } if ( coord[2]>=(z-tolerance-EPS_COORD) && coord[2]<=(z+tolerance+EPS_COORD) ) in_geometry = 1; normal[2] = 1.; penetration = coord[2] - z; if ( projection_type==PROJECT_EXACT ) { projection[0] = x; projection[1] = y; projection[2] = z; } else if ( coord[2]>z ) { projection[0] = x; projection[1] = y; projection[2] = z+tolerance; } else { projection[0] = x; projection[1] = y; projection[2] = z-tolerance; } } } } else if ( entity==-GEOMETRY_SPHERE ) { db( GEOMETRY_SPHERE, index, idum, geometry_sphere, ldum, VERSION_NORMAL, GET ); radius = geometry_sphere[3]; tolerance = geometry_sphere[4]; array_move( geometry_sphere, centre, ndim ); array_subtract( coord, centre, tmp_vec1, ndim ); tmp = array_size( tmp_vec1, ndim ); if ( projection_type==CONTROL_MESH_DELETE_GEOMETRY ) { if ( tmp<=(radius+tolerance+EPS_COORD) ) in_geometry = 1; } else { if ( tmp>=(radius-tolerance-EPS_COORD) && tmp<=(radius+tolerance+EPS_COORD) ) in_geometry = 1; } array_move( tmp_vec1, normal, ndim ); array_normalize( normal, ndim ); penetration = tmp - radius; for ( idim=0; idim<ndim; idim++ ) { if ( tmp<EPS_COORD ) projection[idim] = centre[idim]; else projection[idim] = centre[idim] + (radius/tmp)*tmp_vec1[idim]; } } else if ( entity==-GEOMETRY_SPHERE_SEGMENT ) { db( GEOMETRY_SPHERE_SEGMENT, index, idum, geometry_sphere_segment, ldum, VERSION_NORMAL, GET ); radius = geometry_sphere_segment[3]; side[0] = geometry_sphere_segment[4]; side[1] = geometry_sphere_segment[5]; side[2] = geometry_sphere_segment[6]; tolerance = geometry_sphere_segment[7]; array_move( geometry_sphere_segment, centre, ndim ); array_subtract( coord, centre, tmp_vec1, ndim ); tmp = array_size( tmp_vec1, ndim ); ok = 0; if ( projection_type==CONTROL_MESH_DELETE_GEOMETRY ) { if ( tmp<=(radius+tolerance+EPS_COORD) ) ok = 1; } else { if ( tmp>=(radius-tolerance-EPS_COORD) && tmp<=(radius+tolerance+EPS_COORD) ) ok = 1; } for ( idim=0; idim<ndim; idim++ ) { if ( side[idim]>0. && tmp_vec1[idim]<0. ) ok = 0; if ( side[idim]<0. && tmp_vec1[idim]>0. ) ok = 0; } if ( ok ) in_geometry = 1; array_move( tmp_vec1, normal, ndim ); array_normalize( normal, ndim ); penetration = tmp - radius; for ( idim=0; idim<ndim; idim++ ) { if ( tmp<EPS_COORD ) projection[idim] = centre[idim]; else projection[idim] = centre[idim] + (radius/tmp)*tmp_vec1[idim]; } } else if ( entity==-GEOMETRY_TRIANGLE || entity==-GEOMETRY_QUADRILATERAL ) { if ( entity==-GEOMETRY_TRIANGLE ) { ntriangle = 1; db( GEOMETRY_TRIANGLE, index, idum, geometry_triangle, ldum, VERSION_NORMAL, GET ); eps_iso = EPS_ISO; db( GEOMETRY_TRIANGLE_EPSISO, index, idum, &eps_iso, ldum, VERSION_NORMAL, GET_IF_EXISTS ); } else { ntriangle = 2; db( GEOMETRY_QUADRILATERAL, index, idum, geometry_quadrilateral, ldum, VERSION_NORMAL, GET ); for ( idim=0; idim<ndim; idim++ ) { // first triangle ind = 0*(3*ndim+1); geometry_triangle[ind+0*ndim+idim] = geometry_quadrilateral[0*ndim+idim]; geometry_triangle[ind+1*ndim+idim] = geometry_quadrilateral[1*ndim+idim]; geometry_triangle[ind+2*ndim+idim] = geometry_quadrilateral[2*ndim+idim]; // second triangle ind = 1*(3*ndim+1); geometry_triangle[ind+0*ndim+idim] = geometry_quadrilateral[1*ndim+idim]; geometry_triangle[ind+1*ndim+idim] = geometry_quadrilateral[2*ndim+idim]; geometry_triangle[ind+2*ndim+idim] = geometry_quadrilateral[3*ndim+idim]; } ind = 0*(3*ndim+1); geometry_triangle[ind+3*ndim] = geometry_quadrilateral[4*ndim]; ind = 1*(3*ndim+1); geometry_triangle[ind+3*ndim] = geometry_quadrilateral[4*ndim]; } for ( itriangle=0; itriangle<ntriangle && !in_geometry; itriangle++ ) { ind = itriangle*(3*ndim+1); itest = project_point_on_triangle( coord, &geometry_triangle[ind+0*ndim], &geometry_triangle[ind+1*ndim], &geometry_triangle[ind+2*ndim], weight ); l0 = weight[0]; l1 = weight[1]; l2 = weight[2]; array_multiply( &geometry_triangle[ind+0*ndim], tmp_vec1, l0, ndim ); array_multiply( &geometry_triangle[ind+1*ndim], tmp_vec2, l1, ndim ); array_add( tmp_vec1, tmp_vec2, tmp_vec1, ndim ); array_multiply( &geometry_triangle[ind+2*ndim], tmp_vec2, l2, ndim ); array_add( tmp_vec1, tmp_vec2, tmp_vec3, ndim ); array_subtract( coord, tmp_vec3, tmp_vec2, ndim ); tmp = array_size( tmp_vec2, ndim ); tolerance = geometry_triangle[ind+3*ndim]; if ( itest && l0>=-eps_iso && l0<(1.+eps_iso) && l1>=-eps_iso && l1<(1.+eps_iso) && l2>=-eps_iso && l2<(1.+eps_iso) ) { if ( tmp<=tolerance ) in_geometry = 1; } array_move( &geometry_triangle[ind+0*ndim], coord0, ndim ); array_move( &geometry_triangle[ind+1*ndim], coord1, ndim ); array_move( &geometry_triangle[ind+2*ndim], coord2, ndim ); array_subtract( coord0, coord1, vec01, ndim ); array_subtract( coord0, coord2, vec02, ndim ); array_outproduct_3D( vec01, vec02, normal ); array_normalize( normal, ndim ); penetration = array_inproduct( tmp_vec2, normal, ndim ); if ( db_active_index( GEOMETRY_BOUNDA_FACTOR, index, VERSION_NORMAL ) ) { if ( entity==-GEOMETRY_TRIANGLE ) length = 3; else { assert( entity==-GEOMETRY_QUADRILATERAL ); length = 4; } db( GEOMETRY_BOUNDA_FACTOR, index, idum, geometry_bounda_factor, length, VERSION_NORMAL, GET_AND_CHECK ); if ( itriangle==0 ) { factor = geometry_bounda_factor[0] * l0 + geometry_bounda_factor[1] * l1 + geometry_bounda_factor[2] * l2; } else { assert( itriangle==1 ); factor = geometry_bounda_factor[1] * l0 + geometry_bounda_factor[2] * l1 + geometry_bounda_factor[3] * l2; } } for ( idim=0; idim<ndim; idim++ ) { if ( projection_type==PROJECT_EXACT || tmp<EPS_COORD ) projection[idim] = tmp_vec3[idim]; else { projection[idim] = tmp_vec3[idim] + (tolerance/tmp)*tmp_vec2[idim]; } } } } else if ( entity==-NODE_BOUNDARY ) { area_node_dataitem(); if ( db_active_index( NODE_BOUNDARY, inod, version ) ) in_geometry = 1; else in_geometry = 0; } if ( in_geometry ) { if ( db_active_index( GEOMETRY_BOUNDA_SINE_X, index, VERSION_NORMAL ) ) { db( GEOMETRY_BOUNDA_SINE_X, index, idum, geometry_bounda_sine_x, ldum, VERSION_NORMAL, GET ); a = geometry_bounda_sine_x[0]; b = geometry_bounda_sine_x[1]; factor *= sin(a+b*coord[0]); } if ( db_active_index( GEOMETRY_BOUNDA_SINE_Y, index, VERSION_NORMAL ) ) { db( GEOMETRY_BOUNDA_SINE_Y, index, idum, geometry_bounda_sine_y, ldum, VERSION_NORMAL, GET ); a = geometry_bounda_sine_y[0]; b = geometry_bounda_sine_y[1]; factor *= sin(a+b*coord[1]); } if ( db_active_index( GEOMETRY_BOUNDA_SINE_Z, index, VERSION_NORMAL ) ) { db( GEOMETRY_BOUNDA_SINE_Z, index, idum, geometry_bounda_sine_z, ldum, VERSION_NORMAL, GET ); a = geometry_bounda_sine_z[0]; b = geometry_bounda_sine_z[1]; factor *= sin(a+b*coord[2]); } } } } void interpolate_geometry( long int geometry_entity[], long int node_numbers[], long int n, double test_coord[], double new_coord[], double test_coord_start_refined[], double new_coord_start_refined[], long int project_type, long int version ) { long int i=0, inod=0, part_of_same_geometry=0, in_geometry=0, i_geometry_entity=0, n_geometry_entity=0, geometry_entities[DATA_ITEM_SIZE]; double rdum=0., ddum[MDIM], test_co[MDIM], new_co[MDIM], diff_co[MDIM]; if ( geometry_entity[0]==-GEOMETRY_SET ) { db( GEOMETRY_SET, geometry_entity[1], geometry_entities, ddum, n_geometry_entity, VERSION_NORMAL, GET ); n_geometry_entity /= 2; } else { array_move( geometry_entity, geometry_entities, 2 ); n_geometry_entity = 1; } for ( i_geometry_entity=0; i_geometry_entity<n_geometry_entity; i_geometry_entity++ ) { if ( n>0 ) { array_move( test_coord_start_refined, test_co, ndim ); part_of_same_geometry = 1; for ( i=0; i<n && part_of_same_geometry; i++ ) { inod = node_numbers[i]; geometry( inod, ddum, &geometry_entities[i_geometry_entity*2], in_geometry, rdum, ddum, rdum, ddum, NODE_START_REFINED, project_type, version ); part_of_same_geometry = part_of_same_geometry && in_geometry; } } if ( part_of_same_geometry ) { geometry( -1, test_co, &geometry_entities[i_geometry_entity*2], in_geometry, rdum, ddum, rdum, new_co, NODE_START_REFINED, project_type, version ); array_subtract( new_co, test_co, diff_co, ndim ); array_move( new_co, new_coord_start_refined, ndim ); array_add( test_coord, diff_co, new_coord, ndim ); } } } void parallel_geometry( void ) { long int inod=0, max_node=0, found=0, iloop=0, nloop=0, swit=0, ithread=0, *next_of_loop=NULL; double factor=0., rdum=0., ddum[MDIM]; swit = set_swit(-1,-1,"parallel_geometry"); if ( swit ) pri( "In routine PARALLEL_GEOMETRY" ); db_max_index( NODE, max_node, VERSION_NORMAL, GET ); if ( max_node>=0 ) { next_of_loop = get_new_int(100+max_node); parallel_sys_next_of_loop( next_of_loop, max_node, nloop, ithread ); for ( iloop=0; iloop<nloop; iloop++ ) { inod = next_of_loop[iloop]; if ( inod>max_node ) { break; } else { if ( db_active_index( NODE, inod, VERSION_NORMAL ) ) { geometry( inod, ddum, geometry_ent, found, factor, ddum, rdum, ddum, NODE_START_REFINED, PROJECT_EXACT, VERSION_NORMAL ); if ( found ) nodes_in_geometry[inod] = 1; } } } delete[] next_of_loop; } if ( swit ) pri( "Out routine PARALLEL_GEOMETRY" ); } --Apple-Mail=_E42D6334-FD94-4515-81CC-29299AC79161 Content-Transfer-Encoding: 7bit Content-Type: text/html; charset=us-ascii <html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><head></head><div></div></body></html> --Apple-Mail=_E42D6334-FD94-4515-81CC-29299AC79161 Content-Disposition: attachment; filename=Testpoint.dat.zip Content-Type: application/zip; name="Testpoint.dat.zip" Content-Transfer-Encoding: base64 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 --Apple-Mail=_E42D6334-FD94-4515-81CC-29299AC79161 Content-Transfer-Encoding: 7bit Content-Type: text/html; charset=us-ascii <html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><head></head><div></div></body></html> --Apple-Mail=_E42D6334-FD94-4515-81CC-29299AC79161 Content-Disposition: attachment; filename=Testellipse.dat.zip Content-Type: application/zip; name="Testellipse.dat.zip" Content-Transfer-Encoding: base64 UEsDBBQACAAIABpH1kAAAAAAAAAAAAAAAAAPABAAVGVzdGVsbGlwc2UuZGF0VVgMAFQ75U+keeRP 9QEUAK1dy3Icu5HdM8L/0Et7QUVl4lX4iFnNxGwZHKl9zbgUySBbd6y/HyTQBWSiT2+mSg7bEoHK Qh7kAU6iQOD8/V/vp8ff56+Ht18//+f8+fT+z6evj+fv56cfLz/Pb18v729fJ374+Xw5f748/XV+ ff/+cvm9/fvr8vn88vZ0eb88v04/+3h9/rq8bD9s/3r68/nj41lVPH99PZzffjy9vL1cXp4fHh5O p7f3H+cTneof+rYsS/3bIn/721bMp+sPV1jsbp9mVey3p1Om69+IfS8O3bgP29NpPB234gjfnW7f 7VXx2p/O62Y8pl6cezH5rWlhPE1Lb/oau/U8ymkrD257nvXzHTgft9cTq+ddfz+P1tMo79CtIW9v im6Ud+w8BIfiLTpRl6fuX/c/xHWUd/h8dNe/uajal8f7ufs/yrnj53zHV/nPHb+145uWERrc8Qtu a3/wqrzjl+L2fMxxlPvx/tF+HuUdP157eOj29+ArvbL9TcUmd/yi22I3rur5jh/3/qUQRnnHjzGx ltv+W3V5x8/z5l9Q/eNU/G34Rxr96zp+gTf/4jr6x3X8uMe3xs8p/HJ/kyof5F03+ykP+rmO39rt l1FglHf8nOvxH0b8u44fpc1/DuP9fsTf2uNfxZ8f/I1beVLx7wd+V6pIfI32+44f+x6fYcSn7/hR f79X/PWDv8H396v2dfyWuPGLlP9+8HfZns+Lat+Iv7XHp1PlAz8a/Tvsh4Ffj6+0jP4JA791a9+a 1fMDv7w9v6rxMXT8Ft/5t6ryjh+el8IVv8EPsuUdPxc2+ykNfoQRf0tCz3f8KCP8QsfPZRS/sePH ro9vNPCJA79la192au7r+FEfX4PCLyr8NnwL00f54G/q8Z1UeY+/bf6z/scx/rnt/VnNf7Hj55bh v3q+OfVY2tfHb5cUPiP+RvwrfK6Nluc7fziM9yfaymnZ+ElujP9p4Je39ic1PqeOn/Pb+JTV+JhG /KXt+ajmhzTGv86PVb9/8HcZ47MSLx0/zyh+0+Bv2OInL8p+x29Jm/+JR/vXHn9EPf7XMT6uHb9l HfPbwHcd+IXObzX/rm57Hs9fq+/947fx26n4XDt+Y3xcsyqPI346/n7wb03dfh76S/k34q+PTyGN +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 AOAAAADrHAAAAAA= --Apple-Mail=_E42D6334-FD94-4515-81CC-29299AC79161 Content-Transfer-Encoding: 7bit Content-Type: text/html; charset=us-ascii <html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><head></head><div></div></body></html> --Apple-Mail=_E42D6334-FD94-4515-81CC-29299AC79161 Content-Disposition: attachment; filename=Testcircle.dat.zip Content-Type: application/zip; name="Testcircle.dat.zip" Content-Transfer-Encoding: base64 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 AAADAAMA3gAAAIAcAAAAAA== --Apple-Mail=_E42D6334-FD94-4515-81CC-29299AC79161 Content-Transfer-Encoding: 7bit Content-Type: text/html; charset=us-ascii <html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div></div><div apple-content-edited="true"> <div>Fernando Lorenzo</div><div><a href="mailto:[email protected]">[email protected]</a></div><div><br></div><br class="Apple-interchange-newline"> </div> <br></body></html> --Apple-Mail=_E42D6334-FD94-4515-81CC-29299AC79161-- --Apple-Mail=_447CF314-EA92-4A61-A675-97FE585A3BA4-- --===============6866580182146327426== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ --===============6866580182146327426== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Tochnog-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/tochnog-users --===============6866580182146327426==--