[cig-commits] [commit] devel: For DSM (29ddcde)

cig_noreply at geodynamics.org cig_noreply at geodynamics.org
Fri Aug 1 10:07:22 PDT 2014


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

On branch  : devel
Link       : https://github.com/geodynamics/specfem3d/compare/8a3f14d7d473f70feb7f073639045daa35c587bc...d759e09dd946c593868753fbb4253d77378fb276

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

commit 29ddcde8bf8b7a264b189ca1195c648a5ffbc29a
Author: Clément Durochat <c.durochat at gmail.com>
Date:   Fri Jul 11 14:49:01 2014 +0200

    For DSM


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

29ddcde8bf8b7a264b189ca1195c648a5ffbc29a
 .../example_bigger_PYROPE/DATA/Par_file            |   0
 .../example_bigger_PYROPE/DATA/STATIONS            |   0
 .../example_bigger_PYROPE/DATA/model_1D.in         |   0
 .../input_dsm/Double_para.txt                      |   0
 .../example_bigger_PYROPE/input_dsm/FrqsMpi.txt    |   0
 .../example_bigger_PYROPE/input_dsm/ak135          |   0
 .../example_simple_small/DATA/CMTSOLUTION          |   0
 .../example_simple_small/DATA/Par_file             |   0
 .../example_simple_small/DATA/coeff_poly_deg12     |   0
 .../example_simple_small/input_dsm/st              |   0
 .../UTILS/create_inputs_files.f90                  | 359 +++++++++++++++++++--
 11 files changed, 333 insertions(+), 26 deletions(-)

diff --git a/EXAMPLES/DSM_FOR_SPECFEM3D/example_bigger_PYROPE/DATA/Par_file b/EXAMPLES/DSM_FOR_SPECFEM3D/example_bigger_PYROPE/DATA/Par_file
old mode 100644
new mode 100755
diff --git a/EXAMPLES/DSM_FOR_SPECFEM3D/example_bigger_PYROPE/DATA/STATIONS b/EXAMPLES/DSM_FOR_SPECFEM3D/example_bigger_PYROPE/DATA/STATIONS
old mode 100644
new mode 100755
diff --git a/EXAMPLES/DSM_FOR_SPECFEM3D/example_bigger_PYROPE/DATA/model_1D.in b/EXAMPLES/DSM_FOR_SPECFEM3D/example_bigger_PYROPE/DATA/model_1D.in
old mode 100644
new mode 100755
diff --git a/EXAMPLES/DSM_FOR_SPECFEM3D/example_bigger_PYROPE/input_dsm/Double_para.txt b/EXAMPLES/DSM_FOR_SPECFEM3D/example_bigger_PYROPE/input_dsm/Double_para.txt
old mode 100644
new mode 100755
diff --git a/EXAMPLES/DSM_FOR_SPECFEM3D/example_bigger_PYROPE/input_dsm/FrqsMpi.txt b/EXAMPLES/DSM_FOR_SPECFEM3D/example_bigger_PYROPE/input_dsm/FrqsMpi.txt
old mode 100644
new mode 100755
diff --git a/EXAMPLES/DSM_FOR_SPECFEM3D/example_bigger_PYROPE/input_dsm/ak135 b/EXAMPLES/DSM_FOR_SPECFEM3D/example_bigger_PYROPE/input_dsm/ak135
old mode 100644
new mode 100755
diff --git a/EXAMPLES/DSM_FOR_SPECFEM3D/example_simple_small/DATA/CMTSOLUTION b/EXAMPLES/DSM_FOR_SPECFEM3D/example_simple_small/DATA/CMTSOLUTION
old mode 100644
new mode 100755
diff --git a/EXAMPLES/DSM_FOR_SPECFEM3D/example_simple_small/DATA/Par_file b/EXAMPLES/DSM_FOR_SPECFEM3D/example_simple_small/DATA/Par_file
old mode 100644
new mode 100755
diff --git a/EXAMPLES/DSM_FOR_SPECFEM3D/example_simple_small/DATA/coeff_poly_deg12 b/EXAMPLES/DSM_FOR_SPECFEM3D/example_simple_small/DATA/coeff_poly_deg12
old mode 100644
new mode 100755
diff --git a/EXAMPLES/DSM_FOR_SPECFEM3D/example_simple_small/input_dsm/st b/EXAMPLES/DSM_FOR_SPECFEM3D/example_simple_small/input_dsm/st
old mode 100644
new mode 100755
diff --git a/utils/DSM_FOR_SPECFEM3D/UTILS/create_inputs_files.f90 b/utils/DSM_FOR_SPECFEM3D/UTILS/create_inputs_files.f90
index 45056a3..e6177f5 100755
--- a/utils/DSM_FOR_SPECFEM3D/UTILS/create_inputs_files.f90
+++ b/utils/DSM_FOR_SPECFEM3D/UTILS/create_inputs_files.f90
@@ -3,12 +3,30 @@ program create_input_files
   character(len=250) input_file,path
   double precision dp(6)
   integer id(3)
+ ! 
+  integer nb_proc_by_colors,reste_by_colors, nb_frq_by_colors,reste_by_frq
+  integer  reste_ifrq,ncpus, sub_comm, ifrqmax, ifrq_by_proc, icpu,i,j,k,imin,imax,ifq
 
+  integer ifmax_for_dsm,iamax_for_dsm
+  double precision tlen_dsm,fhigh_dsm,acc_level
+!
+  double precision X,Y,Z,long,lat,rotation_matrix(3,3),ZREF
+  double precision ANGULAR_WIDTH_XI,ANGULAR_WIDTH_ETA,DEPTH_CHUNK
+  double precision lon_center_chunk,lat_center_chunk,chunk_azi
 
   ! input file name
   read(*,'(a)') input_file
   call  open_parameter_file(input_file)
   
+
+  ! parameters --------
+  call read_value_double_precision(tlen_dsm,'TLEN')
+  call read_value_double_precision(fhigh_dsm,'FHIGH')
+  call read_value_double_precision(acc_level,'ACCURACY_LEVEL')
+  tlen_dsm = tlen_dsm / 10.
+  ifmax_for_dsm = 1.4d0 * fhigh_dsm * tlen_dsm
+  iamax_for_dsm = acc_level * ifmax_for_dsm
+
   ! param.in -------------------------------------------------------------------
   open(10,file='params.in') 
   call read_value_string(path, 'DSM_BINARY_PATH')
@@ -51,7 +69,8 @@ program create_input_files
  call read_value_double_precision(dp(2),'SRC_LAT')
  call read_value_double_precision(dp(3),'SRC_LON')
  write(10,*) dp(1),dp(2),dp(3)
- call read_value_integer(id(1),'IMAX')
+ !call read_value_integer(id(1),'IMAX')
+ id(1)=iamax_for_dsm
  write(10,*) '0',id(1)
  write(10,*) '0'
  call read_value_double_precision(dp(1),'MRR')
@@ -79,7 +98,8 @@ program create_input_files
  call read_value_double_precision(dp(2),'SRC_LAT')
  call read_value_double_precision(dp(3),'SRC_LON')
  write(10,*) dp(1),dp(2),dp(3)
- call read_value_integer(id(1),'IMAX')
+ !call read_value_integer(id(1),'IMAX')
+ id(1)=iamax_for_dsm
  write(10,*) '0',id(1)
  write(10,*) '0'
  call read_value_double_precision(dp(1),'MRR')
@@ -90,15 +110,20 @@ program create_input_files
  call read_value_double_precision(dp(6),'MTP')
  write(10,'(6(f10.4,1x))') dp(1:6)
  write(10,'(a)') '../'
- call  read_value_integer(id(1),'IFRQMIN')
- call  read_value_integer(id(2),'IFRQMAX')
+ !call  read_value_integer(id(1),'IFRQMIN')
+ !call  read_value_integer(id(2),'IFRQMAX')
+ id(1)=0
+ id(2)=ifmax_for_dsm
  write(10,*) id(1),id(2)
  call read_value_double_precision(dp(1),'SAMPLING')
  call read_value_double_precision(dp(2),'TSTART')
  call read_value_double_precision(dp(3),'TEND')
  write(10,*) dp(1),dp(2),dp(3)
- call read_value_double_precision(dp(1),'FGAUSS')
- write(10,*) dp(1)
+ call read_value_double_precision(dp(1),'FLOW')
+ call read_value_double_precision(dp(2),'FHIGH')
+ write(10,*) dp(1),dp(2)
+ !call read_value_double_precision(dp(1),'FGAUSS') 
+ !write(10,*) dp(1)
  write(10,'(a3)') 'end'
 
  ! input file xmax ------------------------------------------
@@ -115,7 +140,8 @@ program create_input_files
  call read_value_double_precision(dp(2),'SRC_LAT')
  call read_value_double_precision(dp(3),'SRC_LON')
  write(10,*) dp(1),dp(2),dp(3)
- call read_value_integer(id(1),'IMAX')
+ !call read_value_integer(id(1),'IMAX')
+ id(1)=iamax_for_dsm
  write(10,*) '0',id(1)
  write(10,*) '0'
  call read_value_double_precision(dp(1),'MRR')
@@ -126,15 +152,20 @@ program create_input_files
  call read_value_double_precision(dp(6),'MTP')
  write(10,'(6(f10.4,1x))') dp(1:6)
  write(10,'(a)') '../'
- call  read_value_integer(id(1),'IFRQMIN')
- call  read_value_integer(id(2),'IFRQMAX')
+ !call  read_value_integer(id(1),'IFRQMIN')
+ !call  read_value_integer(id(2),'IFRQMAX')
+ id(1)=0
+ id(2)=ifmax_for_dsm
  write(10,*) id(1),id(2)
  call read_value_double_precision(dp(1),'SAMPLING')
  call read_value_double_precision(dp(2),'TSTART')
  call read_value_double_precision(dp(3),'TEND')
  write(10,*) dp(1),dp(2),dp(3)
- call read_value_double_precision(dp(1),'FGAUSS')
- write(10,*) dp(1)
+ call read_value_double_precision(dp(1),'FLOW')
+ call read_value_double_precision(dp(2),'FHIGH')
+ write(10,*) dp(1),dp(2)
+ !call read_value_double_precision(dp(1),'FGAUSS')
+ !write(10,*) dp(1)
  write(10,'(a3)') 'end'
 
 ! input file ymin ------------------------------------------
@@ -151,7 +182,8 @@ program create_input_files
  call read_value_double_precision(dp(2),'SRC_LAT')
  call read_value_double_precision(dp(3),'SRC_LON')
  write(10,*) dp(1),dp(2),dp(3)
- call read_value_integer(id(1),'IMAX')
+ !call read_value_integer(id(1),'IMAX')
+ id(1)=iamax_for_dsm
  write(10,*) '0',id(1)
  write(10,*) '0'
  call read_value_double_precision(dp(1),'MRR')
@@ -162,15 +194,20 @@ program create_input_files
  call read_value_double_precision(dp(6),'MTP')
  write(10,'(6(f10.4,1x))') dp(1:6)
  write(10,'(a)') '../'
- call  read_value_integer(id(1),'IFRQMIN')
- call  read_value_integer(id(2),'IFRQMAX')
+ !call  read_value_integer(id(1),'IFRQMIN')
+ !call  read_value_integer(id(2),'IFRQMAX')
+ id(1)=0
+ id(2)=ifmax_for_dsm
  write(10,*) id(1),id(2)
  call read_value_double_precision(dp(1),'SAMPLING')
  call read_value_double_precision(dp(2),'TSTART')
  call read_value_double_precision(dp(3),'TEND')
  write(10,*) dp(1),dp(2),dp(3)
- call read_value_double_precision(dp(1),'FGAUSS')
- write(10,*) dp(1)
+ call read_value_double_precision(dp(1),'FLOW')
+ call read_value_double_precision(dp(2),'FHIGH')
+ write(10,*) dp(1),dp(2)
+ !call read_value_double_precision(dp(1),'FGAUSS')
+ !write(10,*) dp(1)
  write(10,'(a3)') 'end'
 
 ! input file ymax ------------------------------------------
@@ -187,7 +224,8 @@ program create_input_files
  call read_value_double_precision(dp(2),'SRC_LAT')
  call read_value_double_precision(dp(3),'SRC_LON')
  write(10,*) dp(1),dp(2),dp(3)
- call read_value_integer(id(1),'IMAX')
+ !call read_value_integer(id(1),'IMAX')
+ id(1)=iamax_for_dsm
  write(10,*) '0',id(1)
  write(10,*) '0'
  call read_value_double_precision(dp(1),'MRR')
@@ -198,15 +236,20 @@ program create_input_files
  call read_value_double_precision(dp(6),'MTP')
  write(10,'(6(f10.4,1x))') dp(1:6)
  write(10,'(a)') '../'
- call  read_value_integer(id(1),'IFRQMIN')
- call  read_value_integer(id(2),'IFRQMAX')
+ !call  read_value_integer(id(1),'IFRQMIN')
+ !call  read_value_integer(id(2),'IFRQMAX')
+ id(1)=0
+ id(2)=ifmax_for_dsm
  write(10,*) id(1),id(2)
  call read_value_double_precision(dp(1),'SAMPLING')
  call read_value_double_precision(dp(2),'TSTART')
  call read_value_double_precision(dp(3),'TEND')
  write(10,*) dp(1),dp(2),dp(3)
- call read_value_double_precision(dp(1),'FGAUSS')
- write(10,*) dp(1)
+ call read_value_double_precision(dp(1),'FLOW')
+ call read_value_double_precision(dp(2),'FHIGH')
+ write(10,*) dp(1),dp(2)
+ !call read_value_double_precision(dp(1),'FGAUSS')
+ !write(10,*) dp(1)
  write(10,'(a3)') 'end'
 
  ! input file zmin ------------------------------------------
@@ -223,7 +266,8 @@ program create_input_files
  call read_value_double_precision(dp(2),'SRC_LAT')
  call read_value_double_precision(dp(3),'SRC_LON')
  write(10,*) dp(1),dp(2),dp(3)
- call read_value_integer(id(1),'IMAX')
+ !call read_value_integer(id(1),'IMAX')
+ id(1)=iamax_for_dsm
  write(10,*) '0',id(1)
  write(10,*) '0'
  call read_value_double_precision(dp(1),'MRR')
@@ -234,15 +278,20 @@ program create_input_files
  call read_value_double_precision(dp(6),'MTP')
  write(10,'(6(f10.4,1x))') dp(1:6)
  write(10,'(a)') '../'
- call  read_value_integer(id(1),'IFRQMIN')
- call  read_value_integer(id(2),'IFRQMAX')
+ !call  read_value_integer(id(1),'IFRQMIN')
+ !call  read_value_integer(id(2),'IFRQMAX')
+ id(1)=0
+ id(2)=ifmax_for_dsm
  write(10,*) id(1),id(2)
  call read_value_double_precision(dp(1),'SAMPLING')
  call read_value_double_precision(dp(2),'TSTART')
  call read_value_double_precision(dp(3),'TEND')
  write(10,*) dp(1),dp(2),dp(3)
- call read_value_double_precision(dp(1),'FGAUSS')
- write(10,*) dp(1)
+ call read_value_double_precision(dp(1),'FLOW')
+ call read_value_double_precision(dp(2),'FHIGH')
+ write(10,*) dp(1),dp(2)
+ !call read_value_double_precision(dp(1),'FGAUSS')
+ !write(10,*) dp(1)
  write(10,'(a3)') 'end'
 
  ! INPUT FILE FOR MESHER
@@ -268,6 +317,90 @@ program create_input_files
  call read_value_string(path, 'FILE_MODEL_1D')
  write(10,'(a)') trim(path)
  close(10)
+
+ 
+
+ !----- parallelisation file -------
+ !call read_value_integer(ifrqmax,'IFRQMAX')
+ ifrqmax=ifmax_for_dsm
+ call read_value_integer(ncpus,'MPI_CPUS')
+ call read_value_integer(sub_comm,'SUB_COMM')
+
+ ifrq_by_proc = int((ifrqmax+1)/ncpus) ! quotient
+ reste_ifrq   = (ifrqmax + 1) - ifrq_by_proc *  ncpus
+
+ ! step 1 
+ open(10,file='./input_dsm/FrqsMpi.txt')
+ write(10,*) '2'
+
+
+ ifq=-1;imin=1;imax=ifrq_by_proc+1
+ do icpu = 1,reste_ifrq
+    write(10,*) icpu-1,ifq+imin,ifq+imax
+    ifq=ifq+imax
+ end do
+
+ imax=ifrq_by_proc
+ do icpu = reste_ifrq+1,ncpus
+    write(10,*) icpu-1,ifq+imin,ifq+imax
+    ifq=ifq+imax
+ end do
+ close(10)
+
+ ! step 2
+ open(10,file='./input_dsm/Double_para.txt')
+
+ nb_proc_by_colors = ncpus / sub_comm
+ reste_by_colors =  ncpus - sub_comm * nb_proc_by_colors
+
+ nb_frq_by_colors =  (ifrqmax+1) / sub_comm
+ reste_by_frq = (ifrqmax+1) - sub_comm * nb_frq_by_colors
+
+ write(10,*) sub_comm,  ncpus
+ imin=0;k=0
+ do i=1, sub_comm
+
+    if (i .le.  reste_by_frq) then
+       imax = imin+nb_frq_by_colors-1 + 1
+    else 
+       imax = imin+nb_frq_by_colors-1
+    end if
+
+    write(10,*) i-1,imin,imax,nb_proc_by_colors
+    imin=imax+1
+    if (j .le.  reste_by_colors) then
+       do  j=1,nb_proc_by_colors+1
+          write(10,*) k
+          k=k+1
+       end do
+    else
+       do  j=1,nb_proc_by_colors
+          write(10,*) k
+          k=k+1
+       end do
+    end if
+ end do
+ close(10)
+
+ call read_value_double_precision(ANGULAR_WIDTH_XI,'ANGULAR_WIDTH_XI_RAD')
+ call read_value_double_precision(ANGULAR_WIDTH_ETA,'ANGULAR_WIDTH_ETA_RAD')
+ call read_value_double_precision(DEPTH_CHUNK,'DEPTH_CHUNK')
+ call read_value_double_precision(lon_center_chunk,'LON_CENTER')
+ call read_value_double_precision(lat_center_chunk,'LAT_CENTER')
+ call read_value_double_precision(chunk_azi,'AZI_CHUNK')
+ call compute_rotation_matrix(rotation_matrix,lon_center_chunk,lat_center_chunk, chunk_azi)
+!!$ call compute_ZREF(ZREF,ANGULAR_WIDTH_XI,ANGULAR_WIDTH_ETA,DEPTH_CHUNK)
+ ZREF=0.d0
+!-------- station file (lat long)----
+ open(10,file='station_for_simulation.txt')
+ open(20,file='DATA/STATIONS_test')
+ do 
+    read(10,*,end=99) lat,long
+    call  Geogr2Cart(X,Y,Z,long,lat,rotation_matrix,ZREF)
+    write(20,*) x,y,z
+ end do
+99 close(10)
+
 end program create_input_files
 
 
@@ -348,3 +481,177 @@ end program create_input_files
    character(len=250) filename
    call param_open(filename, len(filename), ierr); 
  end subroutine open_parameter_file
+
+
+!----------------------------------------------------------------------------------------------------------
+!! routine for convertion coordiantes 
+
+
+
+  subroutine  compute_rotation_matrix(rotation_matrix,lon_center_chunk,lat_center_chunk, chunk_azi)
+  implicit none
+  double precision rotation_matrix(3,3),lon_center_chunk,lat_center_chunk,chunk_azi
+  double precision R0(3,3),R1(3,3),R2(3,3),axe_rotation(3),R00(3,3)
+
+    ! je met le chunk en 0,0
+    axe_rotation(1)=0.d0; axe_rotation(2)=-1.d0; axe_rotation(3)=0.d0
+    call rotation_matrix_axe(R00,axe_rotation,90.d0)  ! je ramene le chunk en (0,0)
+ 
+   ! rotation de l'azimuth du chunk
+    axe_rotation(1)=-1.d0; axe_rotation(2)=0.d0; axe_rotation(3)=0.d0
+    call rotation_matrix_axe(R0,axe_rotation,90.-chunk_azi)
+
+    ! on met le chunk a la bonne latitude
+    axe_rotation(1)=0.d0; axe_rotation(2)=1.d0; axe_rotation(3)=0.d0
+    call rotation_matrix_axe(R1,axe_rotation,lat_center_chunk)
+
+    ! on met le chunk a la bonne longitude
+    axe_rotation(1)=0.d0; axe_rotation(2)=0.d0; axe_rotation(3)=-1.d0
+    call rotation_matrix_axe(R2,axe_rotation, lon_center_chunk)
+ 
+   
+
+    ! rotation resultante
+    call compose4matrix(rotation_matrix,R2,R1,R0,R00)
+
+
+  end subroutine compute_rotation_matrix
+
+!
+!   ROUTINES POUR FAIRE DES ROTATIONS 3D ET DIVERS CHANGEMENTS DE REPERES
+!       
+!       Vadim Monteiller Mars 2013
+!
+!---------------------------------------------------------------------------------------------------------------------------------------------------------
+! matrice de rotation 3D d'axe "axe" et d'angle theta (d°)
+!
+subroutine rotation_matrix_axe(R,axe,theta)
+  implicit none
+  double precision axe(3),theta,pi,deg2rad
+  double precision R(3,3)
+  double precision c,s,ux,uy,uz,norme_axe
+  integer i,j
+
+  pi=3.1415926535897932d0
+  deg2rad = pi / 180.d0
+  ! on normalise l'axe
+  norme_axe=dsqrt(axe(1)**2 + axe(2)**2 + axe(3)**2)
+
+  ! composantes de l'axe
+  ux=axe(1)/norme_axe
+  uy=axe(2)/norme_axe
+  uz=axe(3)/norme_axe
+
+  ! on calcule le cos et sin 
+  c=dcos(deg2rad * theta);s=dsin(deg2rad * theta)
+
+  ! matrice de rotation complexe
+  R(1,1)=(ux**2 + (1.d0-ux**2)*c)
+  R(1,2)=(ux*uy*(1.d0-c)-uz*s)
+  R(1,3)=(ux*uy*(1.d0-c)+uy*s)
+
+  R(2,1)=(ux*uy*(1.d0-c)+uz*s)
+  R(2,2)=(uy**2+(1.d0-uy**2)*c)
+  R(2,3)=(uy*uz*(1.d0-c)-ux*s)
+
+  R(3,1)=(ux*uz*(1.d0-c)-uy*s)
+  R(3,2)=(uy*uz*(1.d0-c)+ux*s)
+  R(3,3)=(uz**2+(1.d0-uz**2)*c)
+
+!!$  write(49,*) ' MATRICE ROTATION '
+!!$  write(49,*) R(1,:)
+!!$  write(49,*) R(2,:)
+!!$  write(49,*) R(3,:)
+!!$  write(49,*) 
+end subroutine rotation_matrix_axe
+
+!-------------------------------------------------------------------------------------------------------------------------------------------------------
+! R=R2*R1*R0
+subroutine compose4matrix(R,R00,R0,R1,R2)
+  implicit none
+  double precision R(3,3),R0(3,3),R1(3,3),R2(3,3),R00(3,3),Rtmp(3,3)
+  integer i,j,k
+
+
+ R(:,:)=0.d0
+  ! multiplication R=R0*R00
+  do j=1,3
+     do i=1,3
+        do k=1,3
+           R(i,j)=R(i,j) + R0(i,k)*R00(k,j)
+        end do
+     end do
+  end do
+
+  ! multiplication R=R1*R
+ Rtmp=R
+ R(:,:)=0.d0
+  do j=1,3
+     do i=1,3
+        do k=1,3
+           R(i,j)=R(i,j) + R1(i,k)*Rtmp(k,j)
+        end do
+     end do
+  end do
+
+  ! multiplication R=R2*R
+ Rtmp=R
+ R(:,:)=0.d0
+  do j=1,3
+     do i=1,3
+        do k=1,3
+           R(i,j)=R(i,j) + R2(i,k)*Rtmp(k,j)
+        end do
+     end do
+  end do
+
+!!$  write(49,*) ' MATRICE ROTATION COMPLETE '
+!!$  write(49,*) R(1,:)
+!!$  write(49,*) R(2,:)
+!!$  write(49,*) R(3,:)
+!!$  write(49,*) 
+end subroutine compose4matrix
+
+!---------------------------------------------------------------------------------------------------------------------------------------------------------------
+subroutine Geogr2Cart(X,Y,Z,long,lat,rotation_matrix,ZREF)
+  implicit none
+  double precision vector_ori(3),vector_rotated(3),rotation_matrix(3,3)
+  double precision X,Y,Z,long,lat
+  double precision  radius_earth, deg2rad,ZREF
+  integer i,j,NDIM
+
+
+  NDIM=3
+  deg2rad = 3.141592653589793238d0/ 180.d0
+  radius_earth = 6371000.d0
+ 
+
+  vector_ori(1) = radius_earth * cos(long*deg2rad) * cos(lat*deg2rad)
+  vector_ori(2) = radius_earth * sin(long*deg2rad) * cos(lat*deg2rad)
+  vector_ori(3) = radius_earth *                     sin(lat*deg2rad)
+  
+  do i = 1,NDIM
+     vector_rotated(i) = 0.d0
+     do j = 1,NDIM
+        vector_rotated(i) = vector_rotated(i) + rotation_matrix(i,j)*vector_ori(j)
+     enddo
+  enddo
+  
+  x = vector_rotated(1)
+  y = vector_rotated(2)
+  z = vector_rotated(3) - ZREF
+  
+  
+end subroutine Geogr2Cart
+
+!!$
+!!$subroutine compute_ZREF(ZREF,ANGULAR_WIDTH_XI,ANGULAR_WIDTH_ETA,DEPTH_CHUNK)
+!!$  implicit none
+!!$  deg2rad=3.141592653589793d0/180.d0
+!!$  ANGULAR_WIDTH_XI = deg2rad * ANGULAR_WIDTH_XI
+!!$  ANGULAR_WIDTH_ETA = deg2rad * ANGULAR_WIDTH_ETA
+!!$  DEPTH_CHUNK  = DEPTH_CHUNK * 1000.d0
+!!$
+!!$
+!!$
+!!$end subroutine compute_ZREF



More information about the CIG-COMMITS mailing list