[cig-commits] [commit] devel, master: improved topo file filtering routine (2e696a1)

cig_noreply at geodynamics.org cig_noreply at geodynamics.org
Thu Nov 6 07:59:59 PST 2014


Repository : https://github.com/geodynamics/specfem3d_globe

On branches: devel,master
Link       : https://github.com/geodynamics/specfem3d_globe/compare/bc58e579b3b0838a0968725a076f5904845437ca...be63f20cbb6f462104e949894dbe205d2398cd7f

>---------------------------------------------------------------

commit 2e696a1aaca65e37a348c20c4c7265e39a90d4cf
Author: Dimitri Komatitsch <komatitsch at lma.cnrs-mrs.fr>
Date:   Fri Jun 13 21:46:04 2003 +0000

    improved topo file filtering routine


>---------------------------------------------------------------

2e696a1aaca65e37a348c20c4c7265e39a90d4cf
 topo_bathy/filter_etopo_file.f90    | 86 +++++++++++++++++++++++++++++++++++++
 topo_bathy/smooth_etopo5_etopo2.f90 | 64 ---------------------------
 2 files changed, 86 insertions(+), 64 deletions(-)

diff --git a/topo_bathy/filter_etopo_file.f90 b/topo_bathy/filter_etopo_file.f90
new file mode 100644
index 0000000..f8176b2
--- /dev/null
+++ b/topo_bathy/filter_etopo_file.f90
@@ -0,0 +1,86 @@
+
+  program filter_topo_file
+
+! smooth topo file using a window filter
+
+  implicit none
+
+  include "../../constants.h"
+
+! filter final surface using box filter
+  integer, parameter :: SIZE_FILTER_ONE_SIDE = 2
+
+! impose min and max of topography and bathymetry
+  integer, parameter :: MIN_TOPO = -5000
+  integer, parameter :: MAX_TOPO = +5000
+
+  integer ix,iy,ixconv,iyconv,i,ic,ixcount,iycount
+  integer ixbox,iybox,ixval,iyval
+
+  double precision rlon,rlat,rx,ry,a,b
+  double precision sumval,value,dist,sigma
+
+! use integer array to store values
+  integer itopo(NX_BATHY,NY_BATHY)
+  integer itopo_filtered(NX_BATHY,NY_BATHY)
+
+  integer itopo_x,itopo_y
+
+  print *
+  print *,'size of window filter is ',2*SIZE_FILTER_ONE_SIDE + 1
+  print *
+
+  print *,'imposing min and max of topography and bathymetry = ',MIN_TOPO,MAX_TOPO
+  print *
+
+  open(unit=13,file='topo_bathy_etopo5.dat',status='old')
+  do itopo_y=1,NY_BATHY
+    do itopo_x=1,NX_BATHY
+      read(13,*) itopo(itopo_x,itopo_y)
+    enddo
+  enddo
+  close(13)
+
+  print *,'min and max of original topo file is ',minval(itopo),maxval(itopo)
+
+! impose min and max values
+  do itopo_y=1,NY_BATHY
+    do itopo_x=1,NX_BATHY
+      if(itopo(itopo_x,itopo_y) < MIN_TOPO) itopo(itopo_x,itopo_y) = MIN_TOPO
+      if(itopo(itopo_x,itopo_y) > MAX_TOPO) itopo(itopo_x,itopo_y) = MAX_TOPO
+    enddo
+  enddo
+
+! filter final surface using box filter
+    print *,'filtering topography data file using box filter'
+    do iy = 1,NY_BATHY
+      print *,'doing iy = ',iy,' out of ',NY_BATHY
+      do ix = 1,NX_BATHY
+        sumval = 0.d0
+        do iybox = iy-SIZE_FILTER_ONE_SIDE,iy+SIZE_FILTER_ONE_SIDE
+          do ixbox = ix-SIZE_FILTER_ONE_SIDE,ix+SIZE_FILTER_ONE_SIDE
+            ixval = ixbox
+            iyval = iybox
+            if(ixval < 1) ixval = NX_BATHY - abs(ixval)
+            if(iyval < 1) iyval = NY_BATHY - abs(iyval)
+            if(ixval > NX_BATHY) ixval = ixval - NX_BATHY
+            if(iyval > NY_BATHY) iyval = iyval - NY_BATHY
+            sumval = sumval + dble(itopo(ixval,iyval))
+          enddo
+        enddo
+        itopo_filtered(ix,iy) = nint(sumval/dble((2*SIZE_FILTER_ONE_SIDE+1)**2))
+      enddo
+    enddo
+
+  print *,'min and max of filtered topo file is ',minval(itopo_filtered),maxval(itopo_filtered)
+
+  open(unit=13,file='topo_bathy_etopo5_filtered.dat',status='unknown')
+  do itopo_y=1,NY_BATHY
+    do itopo_x=1,NX_BATHY
+      write(13,*) itopo_filtered(itopo_x,itopo_y)
+    enddo
+  enddo
+  close(13)
+
+  end program filter_topo_file
+
diff --git a/topo_bathy/smooth_etopo5_etopo2.f90 b/topo_bathy/smooth_etopo5_etopo2.f90
deleted file mode 100644
index 0d14e16..0000000
--- a/topo_bathy/smooth_etopo5_etopo2.f90
+++ /dev/null
@@ -1,64 +0,0 @@
-
-  program merge_filter_ori_bathy_topo
-
-!! DK DK smooth original bathy and topo file
-
-  implicit none
-
-  include "../../constants.h"
-
-! filter final surface using box filter
-  integer, parameter :: SIZE_FILTER_ONE_SIDE = 2
-
-  integer ix,iy,ixconv,iyconv,i,ic,ixcount,iycount
-  integer ixbox,iybox,ixval,iyval
-
-  double precision rlon,rlat,rx,ry,a,b
-  double precision sumval,value,dist,sigma
-
-! use integer array to store values
-  integer itopo(NX_BATHY,NY_BATHY)
-  integer itopo_filtered(NX_BATHY,NY_BATHY)
-
-  integer itopo_x,itopo_y
-
-  open(unit=13,file='topo_bathy_etopo5_harvard.dat_ori',status='old')
-  do itopo_y=1,NY_BATHY
-    do itopo_x=1,NX_BATHY
-      read(13,*) itopo(itopo_x,itopo_y)
-    enddo
-  enddo
-  close(13)
-
-! filter final surface using box filter
-    print *,'filtering final surface using box filter'
-    do iy = 1,NY_BATHY
-      print *,'doing iy = ',iy,' out of ',NY_BATHY
-      do ix = 1,NX_BATHY
-        sumval = 0.d0
-        do iybox = iy-SIZE_FILTER_ONE_SIDE,iy+SIZE_FILTER_ONE_SIDE
-          do ixbox = ix-SIZE_FILTER_ONE_SIDE,ix+SIZE_FILTER_ONE_SIDE
-            ixval = ixbox
-            iyval = iybox
-            if(ixval < 1) ixval = 1
-            if(iyval < 1) iyval = 1
-            if(ixval > NX_BATHY) ixval = NX_BATHY
-            if(iyval > NY_BATHY) iyval = NY_BATHY
-            sumval = sumval + dble(itopo(ixval,iyval))
-          enddo
-        enddo
-        itopo_filtered(ix,iy) = nint(sumval/dble((2*SIZE_FILTER_ONE_SIDE+1)**2))
-      enddo
-    enddo
-    itopo(:,:) = itopo_filtered(:,:)
-
-  open(unit=13,file='topo_bathy_etopo5_harvard.dat',status='unknown')
-  do itopo_y=1,NY_BATHY
-    do itopo_x=1,NX_BATHY
-      write(13,*) itopo(itopo_x,itopo_y)
-    enddo
-  enddo
-  close(13)
-
-  end program merge_filter_ori_bathy_topo
-



More information about the CIG-COMMITS mailing list