Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
D
DOUAR WSMP
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
HUGG
DOUAR WSMP
Commits
e58ee284
Commit
e58ee284
authored
14 years ago
by
Dave Whipp
Browse files
Options
Downloads
Patches
Plain Diff
Modified refine surface to remove points along edges that are closer together than the levelmax+4
parent
c097aa1c
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/refine_surface.f90
+67
-37
67 additions, 37 deletions
src/refine_surface.f90
with
67 additions
and
37 deletions
src/refine_surface.f90
+
67
−
37
View file @
e58ee284
...
@@ -57,6 +57,7 @@ implicit none
...
@@ -57,6 +57,7 @@ implicit none
type
(
parameters
)
params
type
(
parameters
)
params
type
(
sheet
)
surface
type
(
sheet
)
surface
type
(
sheet
)
surface0
type
(
thread
)
threadinfo
type
(
thread
)
threadinfo
integer
nadd
,
nrem
integer
nadd
,
nrem
integer
is
,
istep
integer
is
,
istep
...
@@ -79,7 +80,7 @@ integer ie,j,jedge,kp,kpp,k,inode,inodep,inodepp,iadd,irem
...
@@ -79,7 +80,7 @@ integer ie,j,jedge,kp,kpp,k,inode,inodep,inodepp,iadd,irem
integer
ntriangle
integer
ntriangle
integer
nedge
integer
nedge
integer
nedgen
,
nsurfacen
integer
nedgen
,
nsurfacen
double precision
dist1
,
distmax
,
prod
,
distmin
double precision
dist1
,
distmax
,
prod
,
distmin
,
eps
double precision
,
external
::
dist
double precision
,
external
::
dist
...
@@ -98,6 +99,7 @@ call mpi_comm_size (mpi_comm_world,nproc,ierr)
...
@@ -98,6 +99,7 @@ call mpi_comm_size (mpi_comm_world,nproc,ierr)
call
mpi_comm_rank
(
mpi_comm_world
,
iproc
,
ierr
)
call
mpi_comm_rank
(
mpi_comm_world
,
iproc
,
ierr
)
shift
=
' '
shift
=
' '
eps
=
1.d-8
!------------------------
!------------------------
! build edge information
! build edge information
...
@@ -108,7 +110,6 @@ ntriangle=surface%nt
...
@@ -108,7 +110,6 @@ ntriangle=surface%nt
nedge
=
nsurfacen
+
ntriangle
-1
nedge
=
nsurfacen
+
ntriangle
-1
nnmax
=
12
! nnmax is maximum number of neighbours in triangulation (should be around 6 on average)
nnmax
=
12
! nnmax is maximum number of neighbours in triangulation (should be around 6 on average)
allocate
(
ed
(
nedge
),
stat
=
threadinfo
%
err
);
call
heap
(
threadinfo
,
'ed'
,
'refine_surface'
,
size
(
ed
),
'int'
,
+1
)
allocate
(
ed
(
nedge
),
stat
=
threadinfo
%
err
);
call
heap
(
threadinfo
,
'ed'
,
'refine_surface'
,
size
(
ed
),
'int'
,
+1
)
allocate
(
nedgepernode
(
nsurfacen
),
stat
=
threadinfo
%
err
)
allocate
(
nedgepernode
(
nsurfacen
),
stat
=
threadinfo
%
err
)
call
heap
(
threadinfo
,
'nedgepernode'
,
'refine_surface'
,
size
(
nedgepernode
),
'int'
,
+1
)
call
heap
(
threadinfo
,
'nedgepernode'
,
'refine_surface'
,
size
(
nedgepernode
),
'int'
,
+1
)
...
@@ -119,40 +120,39 @@ call heap (threadinfo,'nodeedgenumber','refine_surface',size(nodeedgenumber),'in
...
@@ -119,40 +120,39 @@ call heap (threadinfo,'nodeedgenumber','refine_surface',size(nodeedgenumber),'in
ed
%
t1
=
0
ed
%
t1
=
0
ed
%
t2
=
0
ed
%
t2
=
0
nedgepernode
=
0
nedgepernode
=
0
iedge
=
0
iedge
=
0
do
ie
=
1
,
ntriangle
do
ie
=
1
,
ntriangle
do
k
=
1
,
3
do
k
=
1
,
3
inode
=
surface
%
icon
(
k
,
ie
)
inode
=
surface
%
icon
(
k
,
ie
)
kp
=
mod
(
k
,
3
)
+1
kp
=
mod
(
k
,
3
)
+1
kpp
=
mod
(
k
+1
,
3
)
+1
kpp
=
mod
(
k
+1
,
3
)
+1
inodep
=
surface
%
icon
(
kp
,
ie
)
inodep
=
surface
%
icon
(
kp
,
ie
)
inodepp
=
surface
%
icon
(
kpp
,
ie
)
inodepp
=
surface
%
icon
(
kpp
,
ie
)
do
j
=
1
,
nedgepernode
(
inodep
)
do
j
=
1
,
nedgepernode
(
inodep
)
if
(
nodenodenumber
(
j
,
inodep
)
.eq.
inode
)
then
if
(
nodenodenumber
(
j
,
inodep
)
.eq.
inode
)
then
jedge
=
nodeedgenumber
(
j
,
inodep
)
jedge
=
nodeedgenumber
(
j
,
inodep
)
ed
(
jedge
)
%
m2
=
inodepp
ed
(
jedge
)
%
m2
=
inodepp
ed
(
jedge
)
%
t2
=
ie
ed
(
jedge
)
%
t2
=
ie
goto
111
goto
111
endif
endif
enddo
enddo
iedge
=
iedge
+1
iedge
=
iedge
+1
if
(
iedge
.gt.
nedge
)
call
stop_run
(
'too many edges in delaunay2$'
)
if
(
iedge
.gt.
nedge
)
call
stop_run
(
'too many edges in delaunay2$'
)
nedgepernode
(
inode
)
=
nedgepernode
(
inode
)
+1
nedgepernode
(
inode
)
=
nedgepernode
(
inode
)
+1
if
(
nedgepernode
(
inode
)
.gt.
nnmax
)
then
if
(
nedgepernode
(
inode
)
.gt.
nnmax
)
then
if
(
iproc
.eq.
0
)
write
(
8
,
*
)
'node'
,
inode
,
'has'
,
nedgepernode
(
inode
),
'neighbours'
if
(
iproc
.eq.
0
)
write
(
8
,
*
)
'node'
,
inode
,
'has'
,
nedgepernode
(
inode
),
'neighbours'
call
stop_run
(
'too many neighbours$'
)
call
stop_run
(
'too many neighbours$'
)
endif
endif
nodenodenumber
(
nedgepernode
(
inode
),
inode
)
=
inodep
nodenodenumber
(
nedgepernode
(
inode
),
inode
)
=
inodep
nodeedgenumber
(
nedgepernode
(
inode
),
inode
)
=
iedge
nodeedgenumber
(
nedgepernode
(
inode
),
inode
)
=
iedge
ed
(
iedge
)
%
n1
=
inode
ed
(
iedge
)
%
n1
=
inode
ed
(
iedge
)
%
n2
=
inodep
ed
(
iedge
)
%
n2
=
inodep
ed
(
iedge
)
%
m1
=
inodepp
ed
(
iedge
)
%
m1
=
inodepp
ed
(
iedge
)
%
t1
=
ie
ed
(
iedge
)
%
t1
=
ie
111
continue
111
continue
enddo
enddo
enddo
enddo
if
(
iedge
/
=
nedge
)
call
stop_run
(
'pb_b in refine_surface$'
)
if
(
iedge
/
=
nedge
)
call
stop_run
(
'pb_b in refine_surface$'
)
...
@@ -163,7 +163,7 @@ if (iedge/=nedge) call stop_run ('pb_b in refine_surface$')
...
@@ -163,7 +163,7 @@ if (iedge/=nedge) call stop_run ('pb_b in refine_surface$')
!distmax=1.d0/2.d0**surface%levelt*sqrt(2.d0)*surface%stretch
!distmax=1.d0/2.d0**surface%levelt*sqrt(2.d0)*surface%stretch
distmax
=
1.d0
/(
2.d0
**
surface
%
levelt
+1
)
*
sqrt
(
2.d0
)
*
surface
%
stretch
!opla
distmax
=
1.d0
/(
2.d0
**
surface
%
levelt
+1
)
*
sqrt
(
2.d0
)
*
surface
%
stretch
!opla
distmin
=
1.d0
/(
2.d0
**
surface
%
levelt
+4
)
*
sqrt
(
2.d0
)
distmin
=
1.d0
/(
2.d0
**
(
surface
%
levelt
+4
)
+1
)
*
sqrt
(
2.d0
)
allocate
(
refine
(
nedge
),
stat
=
err
)
allocate
(
refine
(
nedge
),
stat
=
err
)
allocate
(
refinep
(
nedge
),
stat
=
err
)
allocate
(
refinep
(
nedge
),
stat
=
err
)
...
@@ -183,13 +183,13 @@ do iedge=1+iproc,nedge,nproc
...
@@ -183,13 +183,13 @@ do iedge=1+iproc,nedge,nproc
prod
=
surface
%
xn
(
i1
)
*
surface
%
xn
(
i2
)
+
surface
%
yn
(
i1
)
*
surface
%
yn
(
i2
)
+
surface
%
zn
(
i1
)
*
surface
%
zn
(
i2
)
prod
=
surface
%
xn
(
i1
)
*
surface
%
xn
(
i2
)
+
surface
%
yn
(
i1
)
*
surface
%
yn
(
i2
)
+
surface
%
zn
(
i1
)
*
surface
%
zn
(
i2
)
!if (dist1.gt.distmax .or. prod.lt.prodmin) refinep(iedge)=1
!if (dist1.gt.distmax .or. prod.lt.prodmin) refinep(iedge)=1
refinep
(
iedge
)
=
(
dist1
.gt.
distmax
)
refinep
(
iedge
)
=
(
dist1
.gt.
distmax
)
removep
(
iedge
)
=
(
dist1
.le.
distmin
)
removep
(
iedge
)
=
(
dist1
.gt.
eps
.and.
dist1
.le.
distmin
)
!if (dist1.le.distmin) print *,'dist1 (',dist1,') less than distmin'
enddo
enddo
call
mpi_allreduce
(
refinep
,
refine
,
nedge
,
mpi_logical
,
mpi_lor
,
mpi_comm_world
,
ierr
)
call
mpi_allreduce
(
refinep
,
refine
,
nedge
,
mpi_logical
,
mpi_lor
,
mpi_comm_world
,
ierr
)
call
mpi_allreduce
(
removep
,
remove
,
nedge
,
mpi_logical
,
mpi_lor
,
mpi_comm_world
,
ierr
)
call
mpi_allreduce
(
removep
,
remove
,
nedge
,
mpi_logical
,
mpi_lor
,
mpi_comm_world
,
ierr
)
!-----------------------
!-----------------------
! compute nadd and naddp
! compute nadd and naddp
!-----------------------
!-----------------------
...
@@ -213,10 +213,20 @@ do iedge=1,nedge
...
@@ -213,10 +213,20 @@ do iedge=1,nedge
if
(
remove
(
iedge
))
then
if
(
remove
(
iedge
))
then
irem
=
irem
+1
irem
=
irem
+1
if
(
ed
(
iedge
)
%
t1
.eq.
0
.or.
ed
(
iedge
)
%
t2
.eq.
0
)
nremp
=
nremp
+1
if
(
ed
(
iedge
)
%
t1
.eq.
0
.or.
ed
(
iedge
)
%
t2
.eq.
0
)
nremp
=
nremp
+1
remove_list
(
irem
)
=
iedge
!remove_list(irem)=iedge
remove_list
(
irem
)
=
ed
(
iedge
)
%
n1
endif
endif
enddo
enddo
! Modify remove_list to account for removal of nodes from surface
if
(
nrem
.gt.
0
)
then
do
i
=
1
,
nrem
do
j
=
i
,
nrem
if
(
remove_list
(
i
)
.lt.
remove_list
(
j
))
remove_list
(
j
)
=
remove_list
(
j
)
-1
enddo
enddo
endif
if
(
iadd
/
=
nadd
)
call
stop_run
(
'pb_b in refine_surface$'
)
if
(
iadd
/
=
nadd
)
call
stop_run
(
'pb_b in refine_surface$'
)
if
(
irem
/
=
nrem
)
call
stop_run
(
'pb_b in refine_surface$'
)
if
(
irem
/
=
nrem
)
call
stop_run
(
'pb_b in refine_surface$'
)
...
@@ -308,6 +318,7 @@ deallocate (iconswap)
...
@@ -308,6 +318,7 @@ deallocate (iconswap)
nnodeint
=
surface
%
nsurface
nnodeint
=
surface
%
nsurface
nelemint
=
surface
%
nt
nelemint
=
surface
%
nt
nedgeint
=
nedge
nedgeint
=
nedge
do
i
=
1
,
nadd
do
i
=
1
,
nadd
iedge
=
refine_list
(
i
)
iedge
=
refine_list
(
i
)
i1
=
ed
(
iedge
)
%
n1
i1
=
ed
(
iedge
)
%
n1
...
@@ -332,10 +343,24 @@ enddo
...
@@ -332,10 +343,24 @@ enddo
if
(
iproc
.eq.
0
.and.
params
%
debug
>=
1
)
write
(
*
,
'(a,i2,a,i4,a)'
)
shift
//
'S.'
,
is
,
':'
,
nrem
,
' removed ptcls in refine_surface'
if
(
iproc
.eq.
0
.and.
params
%
debug
>=
1
)
write
(
*
,
'(a,i2,a,i4,a)'
)
shift
//
'S.'
,
is
,
':'
,
nrem
,
' removed ptcls in refine_surface'
do
i
=
1
,
size
(
ed
%
n1
)
i1
=
ed
(
i
)
%
n1
i2
=
ed
(
i
)
%
n2
if
(
i1
.eq.
i2
)
then
print
*
,
'*******************************************************************'
print
*
,
'Nodes for edge '
,
i
,
' have the same spatial coordinates'
print
*
,
'The edges nodes are are node i1: '
,
i1
,
' and i2: '
,
i2
print
*
,
'x1:'
,
surface
%
x
(
i1
),
' y1: '
,
surface
%
y
(
i1
),
' z1: '
,
surface
%
z
(
i1
)
print
*
,
'x2:'
,
surface
%
x
(
i2
),
' y2: '
,
surface
%
y
(
i2
),
' z2: '
,
surface
%
z
(
i2
)
print
*
,
'*******************************************************************'
endif
enddo
surface
%
nsurface
=
nnodemax
surface
%
nt
=
nelemmax
do
i
=
1
,
nrem
do
i
=
1
,
nrem
iedge
=
remove_list
(
i
)
i1
=
remove_list
(
i
)
i1
=
ed
(
iedge
)
%
n1
i2
=
ed
(
iedge
)
%
n2
call
remove_point
(
i1
,
surface
,
0
,
surface0
)
call
remove_point
(
i1
,
surface
,
0
,
surface0
)
end
do
end
do
...
@@ -347,6 +372,12 @@ end if
...
@@ -347,6 +372,12 @@ end if
if
(
nnodeint
.ne.
nnodemax
)
call
stop_run
(
'Error counting nodes in refine_surface$'
)
if
(
nnodeint
.ne.
nnodemax
)
call
stop_run
(
'Error counting nodes in refine_surface$'
)
if
(
nelemint
.ne.
nelemmax
)
call
stop_run
(
'Error counting elements in refine_surface$'
)
if
(
nelemint
.ne.
nelemmax
)
call
stop_run
(
'Error counting elements in refine_surface$'
)
if
(
nrem
.gt.
0
)
then
nnodemax
=
surface
%
nsurface
nelemmax
=
surface
%
nt
nedgemax
=
nnodemax
+
nelemmax
-1
endif
surface
%
nsurface
=
nnodemax
surface
%
nsurface
=
nnodemax
surface
%
nt
=
nelemmax
surface
%
nt
=
nelemmax
nedge
=
nedgemax
nedge
=
nedgemax
...
@@ -359,7 +390,6 @@ call heap (threadinfo,'nedgepernode','refine_surface',size(nedgepernode),'int',-
...
@@ -359,7 +390,6 @@ call heap (threadinfo,'nedgepernode','refine_surface',size(nedgepernode),'int',-
call
heap
(
threadinfo
,
'nodenodenumber'
,
'refine_surface'
,
size
(
nodenodenumber
),
'int'
,
-1
)
;
deallocate
(
nodenodenumber
)
call
heap
(
threadinfo
,
'nodenodenumber'
,
'refine_surface'
,
size
(
nodenodenumber
),
'int'
,
-1
)
;
deallocate
(
nodenodenumber
)
call
heap
(
threadinfo
,
'nodeedgenumber'
,
'refine_surface'
,
size
(
nodeedgenumber
),
'int'
,
-1
)
;
deallocate
(
nodeedgenumber
)
call
heap
(
threadinfo
,
'nodeedgenumber'
,
'refine_surface'
,
size
(
nodeedgenumber
),
'int'
,
-1
)
;
deallocate
(
nodeedgenumber
)
if
(
params
%
debug
.ge.
2
)
call
output_surf
(
surface
,
is
,
'after_refine'
,
istep
,
ref_count
)
if
(
params
%
debug
.ge.
2
)
call
output_surf
(
surface
,
is
,
'after_refine'
,
istep
,
ref_count
)
end
subroutine
end
subroutine
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment