[cig-commits] [commit] devel, master: deleted old boundary_definition.py (19f0f4e)
cig_noreply at geodynamics.org
cig_noreply at geodynamics.org
Wed Jun 18 16:53:53 PDT 2014
Repository : https://github.com/geodynamics/specfem3d
On branches: devel,master
Link : https://github.com/geodynamics/specfem3d/compare/6026e367984905ab133865f62fa6293b343759b9...47f703851338234f96397e7da9fbff63d8178b8a
>---------------------------------------------------------------
commit 19f0f4e956dbd72637d3ea5992b2c7cde9d1c5ec
Author: Dimitri Komatitsch <komatitsch at lma.cnrs-mrs.fr>
Date: Fri Sep 20 18:19:25 2013 +0000
deleted old boundary_definition.py
>---------------------------------------------------------------
19f0f4e956dbd72637d3ea5992b2c7cde9d1c5ec
.../boundary_definition.py | 401 ---------------------
.../cubit2specfem3d.py | 2 +-
2 files changed, 1 insertion(+), 402 deletions(-)
diff --git a/homogeneous_halfspace_HEX27_elastic_no_absorbing/boundary_definition.py b/homogeneous_halfspace_HEX27_elastic_no_absorbing/boundary_definition.py
deleted file mode 100644
index f511eb0..0000000
--- a/homogeneous_halfspace_HEX27_elastic_no_absorbing/boundary_definition.py
+++ /dev/null
@@ -1,401 +0,0 @@
-#############################################################################
-# boundary_definition.py #
-# this file is part of GEOCUBIT #
-# #
-# Created by Emanuele Casarotti #
-# Copyright (c) 2008 Istituto Nazionale di Geofisica e Vulcanologia #
-# #
-#############################################################################
-# #
-# GEOCUBIT 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 3 of the License, or #
-# (at your option) any later version. #
-# #
-# GEOCUBIT 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 GEOCUBIT. If not, see <http://www.gnu.org/licenses/>. #
-# #
-#############################################################################
-
-def define_absorbing_surf():
- """
- define the absorbing surfaces for a layered topological box where boundary are surfaces parallel to the axis.
- it returns absorbing_surf,absorbing_surf_xmin,absorbing_surf_xmax,absorbing_surf_ymin,absorbing_surf_ymax,absorbing_surf_bottom,topo_surf
- where
- absorbing_surf is the list of all the absorbing boundary surf
- absorbing_surf_xmin is the list of the absorbing boundary surfaces that correnspond to x=xmin
- ...
- absorbing_surf_bottom is the list of the absorbing boundary surfaces that correspond to z=zmin
- """
- try:
- cubit.cmd('comment')
- except:
- try:
- import cubit
- cubit.init([""])
- except:
- print 'error importing cubit'
- import sys
- sys.exit()
- absorbing_surf=[]
- absorbing_surf_xmin=[]
- absorbing_surf_xmax=[]
- absorbing_surf_ymin=[]
- absorbing_surf_ymax=[]
- absorbing_surf_bottom=[]
- top_surf=[]
-
-
- list_vol=cubit.parse_cubit_list("volume","all")
- init_n_vol=len(list_vol)
- zmax_box=cubit.get_total_bounding_box("volume",list_vol)[7]
- zmin_box=cubit.get_total_bounding_box("volume",list_vol)[6] #it is the z_min of the box ... box= xmin,xmax,d,ymin,ymax,d,zmin...
- xmin_box=cubit.get_total_bounding_box("volume",list_vol)[0]
- xmax_box=cubit.get_total_bounding_box("volume",list_vol)[1]
- ymin_box=cubit.get_total_bounding_box("volume",list_vol)[3]
- ymax_box=cubit.get_total_bounding_box("volume",list_vol)[4]
- list_surf=cubit.parse_cubit_list("surface","all")
-# for k in list_surf:
-# center_point = cubit.get_center_point("surface", k)
-# if abs((center_point[0] - xmin_box)/xmin_box) <= 0.005:
-# absorbing_surf_xmin.append(k)
-# absorbing_surf.append(k)
-# elif abs((center_point[0] - xmax_box)/xmax_box) <= 0.005:
-# absorbing_surf_xmax.append(k)
-# absorbing_surf.append(k)
-# elif abs((center_point[1] - ymin_box)/ymin_box) <= 0.005:
-# absorbing_surf_ymin.append(k)
-# absorbing_surf.append(k)
-# elif abs((center_point[1] - ymax_box)/ymax_box) <= 0.005:
-# absorbing_surf_ymax.append(k)
-# absorbing_surf.append(k)
-# elif abs((center_point[2] - zmin_box)/zmin_box) <= 0.005:
-# absorbing_surf_bottom.append(k)
-# absorbing_surf.append(k)
-# else:
-# sbox=cubit.get_bounding_box('surface',k)
-# dz=abs((sbox[7] - zmax_box)/zmax_box)
-# normal=cubit.get_surface_normal(k)
-# zn=normal[2]
-# dn=abs(zn-1)
-# if dz <= 0.001 and dn < 0.2:
-# top_surf.append(k)
-
- #box lengths
- x_len = abs( xmax_box - xmin_box)
- y_len = abs( ymax_box - ymin_box)
- z_len = abs( zmax_box - zmin_box)
-
- print '##boundary box: '
- print '## x length: ' + str(x_len)
- print '## y length: ' + str(y_len)
- print '## z length: ' + str(z_len)
-
- # tolerance parameters
- absorbing_surface_distance_tolerance=0.005
- topographic_surface_distance_tolerance=0.001
- topographic_surface_normal_tolerance=0.2
-
- for k in list_surf:
- center_point = cubit.get_center_point("surface", k)
- if abs((center_point[0] - xmin_box)/x_len) <= absorbing_surface_distance_tolerance:
- absorbing_surf_xmin.append(k)
- absorbing_surf.append(k)
- elif abs((center_point[0] - xmax_box)/x_len) <= absorbing_surface_distance_tolerance:
- absorbing_surf_xmax.append(k)
- absorbing_surf.append(k)
- elif abs((center_point[1] - ymin_box)/y_len) <= absorbing_surface_distance_tolerance:
- absorbing_surf_ymin.append(k)
- absorbing_surf.append(k)
- elif abs((center_point[1] - ymax_box)/y_len) <= absorbing_surface_distance_tolerance:
- absorbing_surf_ymax.append(k)
- absorbing_surf.append(k)
- elif abs((center_point[2] - zmin_box)/z_len) <= absorbing_surface_distance_tolerance:
- absorbing_surf_bottom.append(k)
- absorbing_surf.append(k)
- else:
- sbox=cubit.get_bounding_box('surface',k)
- dz=abs((sbox[7] - zmax_box)/z_len)
- normal=cubit.get_surface_normal(k)
- zn=normal[2]
- dn=abs(zn-1)
- if dz <= topographic_surface_distance_tolerance and dn < topographic_surface_normal_tolerance:
- top_surf.append(k)
-
- return absorbing_surf,absorbing_surf_xmin,absorbing_surf_xmax,absorbing_surf_ymin,absorbing_surf_ymax,absorbing_surf_bottom,top_surf
-
-def define_absorbing_surf_nopar():
- """
- define the absorbing surfaces for a layered topological box where boundary surfaces are not parallel to the axis.
- it returns absorbing_surf,topo_surf
- where
- absorbing_surf is the list of all the absorbing boundary surf
- """
- try:
- cubit.cmd('comment')
- except:
- try:
- import cubit
- cubit.init([""])
- except:
- print 'error importing cubit'
- import sys
- sys.exit()
- from sets import Set
- def product(*args, **kwds):
- # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
- # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
- pools = map(tuple, args) * kwds.get('repeat', 1)
- result = [[]]
- for pool in pools:
- result = [x+[y] for x in result for y in pool]
- return result
- absorbing_surf=[]
- absorbing_surf_xmin=[]
- absorbing_surf_xmax=[]
- absorbing_surf_ymin=[]
- absorbing_surf_ymax=[]
- absorbing_surf_bottom=[]
- top_surf=[]
- list_vol=cubit.parse_cubit_list("volume","all")
- init_n_vol=len(list_vol)
- zmax_box=cubit.get_total_bounding_box("volume",list_vol)[7]
- zmin_box=cubit.get_total_bounding_box("volume",list_vol)[6] #it is the z_min of the box ... box= xmin,xmax,d,ymin,ymax,d,zmin...
- xmin_box=cubit.get_total_bounding_box("volume",list_vol)[0]
- xmax_box=cubit.get_total_bounding_box("volume",list_vol)[1]
- ymin_box=cubit.get_total_bounding_box("volume",list_vol)[3]
- ymax_box=cubit.get_total_bounding_box("volume",list_vol)[4]
- list_surf=cubit.parse_cubit_list("surface","all")
- lv=[]
- for k in list_surf:
- sbox=cubit.get_bounding_box('surface',k)
- dzmax=abs((sbox[7] - zmax_box)/zmax_box)
- dzmin=abs((sbox[6] - zmin_box)/zmin_box)
- normal=cubit.get_surface_normal(k)
- zn=normal[2]
- if dzmax <= 0.001 and zn > 0.7:
- top_surf.append(k)
- list_vertex=cubit.get_relatives('surface',k,'vertex')
- for v in list_vertex:
- valence=cubit.get_valence(v)
- if valence <= 4: #valence 3 is a corner, 4 is a vertex between 2 volumes, > 4 is a vertex not in the boundaries
- lv.append(v)
- elif dzmin <= 0.001 and zn < -0.7:
- absorbing_surf.append(k)
- lp=[]
- combs=product(lv,lv)
- for comb in combs:
- v1=comb[0]
- v2=comb[1]
- c=Set(cubit.get_relatives("vertex",v1,"curve")) & Set(cubit.get_relatives("vertex",v2,"curve"))
- if len(c) == 1:
- p=cubit.get_center_point("curve",list(c)[0])
- lp.append(p)
- for k in list_surf:
- center_point = cubit.get_center_point("surface", k)
- for p in lp:
- if abs((center_point[0] - p[0])/p[0]) <= 0.005 and abs((center_point[1] - p[1])/p[1]) <= 0.005:
- absorbing_surf.append(k)
- break
- return absorbing_surf,top_surf
-
-def define_absorbing_surf_sphere():
- try:
- cubit.cmd('comment')
- except:
- try:
- import cubit
- cubit.init([""])
- except:
- print 'error importing cubit'
- import sys
- sys.exit()
- surf=[]
- list_surf=cubit.parse_cubit_list("surface","all")
- for s in list_surf:
- v=cubit.get_relatives('surface',s,'volume')
- if len(v) == 1:
- surf.append(s)
- return surf
-
-def define_block():
- try:
- cubit.cmd('comment')
- except:
- try:
- import cubit
- cubit.init([""])
- except:
- print 'error importing cubit'
- import sys
- sys.exit()
- list_vol=cubit.parse_cubit_list("volume","all")
- init_n_vol=len(list_vol)
- list_name=map(lambda x: 'vol'+x,map(str,list_vol))
- return list_vol,list_name
-
-def build_block(vol_list,name):
- from sets import Set
- try:
- cubit.cmd('comment')
- except:
- try:
- import cubit
- cubit.init([""])
- except:
- print 'error importing cubit'
- import sys
- sys.exit()
- block_list=cubit.get_block_id_list()
- if len(block_list) > 0:
- id_block=max(block_list)
- else:
- id_block=0
- for v,n in zip(vol_list,name):
- id_block+=1
- v_other=Set(vol_list)-Set([v])
- #command= 'block '+str(id_block)+' hex in node in vol '+str(v)+' except hex in vol '+str(list(v_other))
- command= 'block '+str(id_block)+' hex in vol '+str(v)
- command = command.replace("["," ").replace("]"," ")
- cubit.cmd(command)
- command = "block "+str(id_block)+" name '"+n+"'"
- cubit.cmd(command)
-
-def build_block_side(surf_list,name,obj='surface'):
- try:
- cubit.cmd('comment')
- except:
- try:
- import cubit
- cubit.init([""])
- except:
- print 'error importing cubit'
- import sys
- sys.exit()
- id_nodeset=cubit.get_next_nodeset_id()
- id_block=cubit.get_next_block_id()
-
-
- if obj == 'hex':
- txt='hex in node in surface'
- txt1='block '+str(id_block)+ ' '+ txt +' '+str(list(surf_list))
- txt2="block "+str(id_block)+" name '"+name+"'"
- txt1=txt1.replace("["," ").replace("]"," ")
- elif obj == 'node':
- txt=obj+' in surface'
- txt1= 'nodeset '+str(id_nodeset)+ ' '+ txt +' '+str(list(surf_list))
- txt1 = txt1.replace("["," ").replace("]"," ")
- txt2 = "nodeset "+str(id_nodeset)+" name '"+name+"'"
- elif obj == 'face' or obj == 'edge':
- txt=obj+' in surface'
- txt1= 'block '+str(id_block)+ ' '+ txt +' '+str(list(surf_list))
- txt1 = txt1.replace("["," ").replace("]"," ")
- txt2 = "block "+str(id_block)+" name '"+name+"'"
- else:
- txt1=''
- # do not execute: block id might be wrong
- print "##block "+str(id_block)+" name '"+name+"_notsupported (only hex,face,edge,node)'"
- txt2=''
-
-
- cubit.cmd(txt1)
- cubit.cmd(txt2)
-
-def define_bc(*args,**keys):
- parallel=keys.get('parallel',True)
- closed=keys.get('closed',False)
- if not closed:
- print "##open region"
-
- # model with parallel sides (e.g. a block)
- if parallel:
- surf,xmin,xmax,ymin,ymax,bottom,topo=define_absorbing_surf()
- else:
- # arbitrary geometry
- surf,topo=define_absorbing_surf_nopar()
-
- v_list,name_list=define_block()
- build_block(v_list,name_list)
- entities=args[0]
- print entities
- for entity in entities:
- print "##entity: "+str(entity)
-
- # block for free surface (w/ topography)
- build_block_side(topo,entity+'_topo',obj=entity)
-
- # model has parallel sides (e.g. a block model )
- if parallel:
- # blocks for each side
- build_block_side(xmin,entity+'_abs_xmin',obj=entity)
- build_block_side(xmax,entity+'_abs_xmax',obj=entity)
- build_block_side(ymin,entity+'_abs_ymin',obj=entity)
- build_block_side(ymax,entity+'_abs_ymax',obj=entity)
- build_block_side(bottom,entity+'_abs_bottom',obj=entity)
-
- # block for all sides together
- # NOTE:
- # this might fail in some CUBIT versions, when elements are already
- # assigned to other blocks
- build_block_side(surf,entity+'_abs',obj=entity)
-
- else:
- # arbitrary geometry
- # puts all elements in single block
- build_block_side(surf,entity+'_abs',obj=entity)
-
- else:
- print "##closed region"
-
- # model without absorbing boundaries, only one surface, e.g. a sphere
- surf=define_absorbing_surf_sphere()
-
- v_list,name_list=define_block()
- build_block(v_list,name_list)
-
- entities=args[0]
- for entity in entities:
- # puts all elements in single block
- build_block_side(surf,entity+'_closedvol',obj=entity)
-
-
-
-
-
-## calling example:
-
-#entities=['face']
-#define_bc(entities,parallel=True)
-#define_bc(entities,parallel=False)
-#define_bc(entities,parallel=False,closed=True)
-
-## block material assigning example:
-
-#block 1 attribute count 5
-#block 2 attribute count 0
-#block 2 name '/prova/interface1'
-#block 2 attribute count 3
-#block 3 attribute count 5
-#block 1 attribute index 2 1500
-#block 1 attribute count 2
-#block 3 attribute index 1 2
-#block 3 attribute index 2 5800
-#block 3 attribute index 3 3900
-#block 3 attribute index 4 1500
-#block 3 attribute index 5 3.5
-#block 1 name 'top'
-#block 3 name 'bottom'
-#block 2 attribute index 1 -1
-#block 2 attribute index 2 2
-#block 2 attribute count 4
-#block 2 attribute index 2 1
-#block 2 attribute index 3 2
-
-
-
-
diff --git a/homogeneous_halfspace_HEX27_elastic_no_absorbing/cubit2specfem3d.py b/homogeneous_halfspace_HEX27_elastic_no_absorbing/cubit2specfem3d.py
index 4062a6b..f70980c 120000
--- a/homogeneous_halfspace_HEX27_elastic_no_absorbing/cubit2specfem3d.py
+++ b/homogeneous_halfspace_HEX27_elastic_no_absorbing/cubit2specfem3d.py
@@ -1 +1 @@
-../../CUBIT/cubit2specfem3d.py
\ No newline at end of file
+../../CUBIT_GEOCUBIT/geocubitlib/cubit2specfem3d.py
\ No newline at end of file
More information about the CIG-COMMITS
mailing list