[cig-commits] [commit] devel: Reads locally and broadcasts database coupling (786a3bb)
cig_noreply at geodynamics.org
cig_noreply at geodynamics.org
Fri Dec 5 07:22:50 PST 2014
Repository : https://github.com/geodynamics/specfem3d_globe
On branch : devel
Link : https://github.com/geodynamics/specfem3d_globe/compare/b9fb1aa33196d161098710455fadbb4ed91c5e47...897de40783bd1a4630c2aacd3fa5f8b016d4c189
>---------------------------------------------------------------
commit 786a3bb6b55987e00f3c380457db68b180d1df82
Author: Matthieu Lefebvre <ml15 at princeton.edu>
Date: Mon Dec 1 16:53:33 2014 -0500
Reads locally and broadcasts database coupling
>---------------------------------------------------------------
786a3bb6b55987e00f3c380457db68b180d1df82
src/specfem3D/read_mesh_databases.F90 | 347 ++++++++++++++++++++++------------
1 file changed, 222 insertions(+), 125 deletions(-)
diff --git a/src/specfem3D/read_mesh_databases.F90 b/src/specfem3D/read_mesh_databases.F90
index 815a20c..2e742cb 100644
--- a/src/specfem3D/read_mesh_databases.F90
+++ b/src/specfem3D/read_mesh_databases.F90
@@ -609,145 +609,148 @@
integer :: ier
! reads in arrays
- if (ADIOS_FOR_ARRAYS_SOLVER) then
- call read_mesh_databases_coupling_adios()
- else
- ! crust and mantle
- ! create name of database
- call create_name_database(prname,myrank,IREGION_CRUST_MANTLE,LOCAL_PATH)
-
- ! Stacey put back
- open(unit=IIN,file=prname(1:len_trim(prname))//'boundary.bin', &
- status='old',form='unformatted',action='read',iostat=ier)
- if (ier /= 0 ) call exit_mpi(myrank,'Error opening crust_mantle boundary.bin file')
-
- read(IIN) nspec2D_xmin_crust_mantle
- read(IIN) nspec2D_xmax_crust_mantle
- read(IIN) nspec2D_ymin_crust_mantle
- read(IIN) nspec2D_ymax_crust_mantle
- read(IIN) njunk1
- read(IIN) njunk2
-
- ! boundary parameters
- read(IIN) ibelm_xmin_crust_mantle
- read(IIN) ibelm_xmax_crust_mantle
- read(IIN) ibelm_ymin_crust_mantle
- read(IIN) ibelm_ymax_crust_mantle
- read(IIN) ibelm_bottom_crust_mantle
- read(IIN) ibelm_top_crust_mantle
-
- read(IIN) normal_xmin_crust_mantle
- read(IIN) normal_xmax_crust_mantle
- read(IIN) normal_ymin_crust_mantle
- read(IIN) normal_ymax_crust_mantle
- read(IIN) normal_bottom_crust_mantle
- read(IIN) normal_top_crust_mantle
-
- read(IIN) jacobian2D_xmin_crust_mantle
- read(IIN) jacobian2D_xmax_crust_mantle
- read(IIN) jacobian2D_ymin_crust_mantle
- read(IIN) jacobian2D_ymax_crust_mantle
- read(IIN) jacobian2D_bottom_crust_mantle
- read(IIN) jacobian2D_top_crust_mantle
- close(IIN)
+ if (I_should_read_the_database) then
+ if (ADIOS_FOR_ARRAYS_SOLVER) then
+ call read_mesh_databases_coupling_adios()
+ else
+ ! crust and mantle
+ ! create name of database
+ call create_name_database(prname,myrank,IREGION_CRUST_MANTLE,LOCAL_PATH)
- ! read parameters to couple fluid and solid regions
- !
- ! outer core
+ ! Stacey put back
+ open(unit=IIN,file=prname(1:len_trim(prname))//'boundary.bin', &
+ status='old',form='unformatted',action='read',iostat=ier)
+ if (ier /= 0 ) call exit_mpi(myrank,'Error opening crust_mantle boundary.bin file')
- ! create name of database
- call create_name_database(prname,myrank,IREGION_OUTER_CORE,LOCAL_PATH)
+ read(IIN) nspec2D_xmin_crust_mantle
+ read(IIN) nspec2D_xmax_crust_mantle
+ read(IIN) nspec2D_ymin_crust_mantle
+ read(IIN) nspec2D_ymax_crust_mantle
+ read(IIN) njunk1
+ read(IIN) njunk2
! boundary parameters
+ read(IIN) ibelm_xmin_crust_mantle
+ read(IIN) ibelm_xmax_crust_mantle
+ read(IIN) ibelm_ymin_crust_mantle
+ read(IIN) ibelm_ymax_crust_mantle
+ read(IIN) ibelm_bottom_crust_mantle
+ read(IIN) ibelm_top_crust_mantle
+
+ read(IIN) normal_xmin_crust_mantle
+ read(IIN) normal_xmax_crust_mantle
+ read(IIN) normal_ymin_crust_mantle
+ read(IIN) normal_ymax_crust_mantle
+ read(IIN) normal_bottom_crust_mantle
+ read(IIN) normal_top_crust_mantle
+
+ read(IIN) jacobian2D_xmin_crust_mantle
+ read(IIN) jacobian2D_xmax_crust_mantle
+ read(IIN) jacobian2D_ymin_crust_mantle
+ read(IIN) jacobian2D_ymax_crust_mantle
+ read(IIN) jacobian2D_bottom_crust_mantle
+ read(IIN) jacobian2D_top_crust_mantle
+ close(IIN)
- ! Stacey put back
- open(unit=IIN,file=prname(1:len_trim(prname))//'boundary.bin', &
- status='old',form='unformatted',action='read',iostat=ier)
- if (ier /= 0 ) call exit_mpi(myrank,'Error opening outer_core boundary.bin file')
-
- read(IIN) nspec2D_xmin_outer_core
- read(IIN) nspec2D_xmax_outer_core
- read(IIN) nspec2D_ymin_outer_core
- read(IIN) nspec2D_ymax_outer_core
- read(IIN) njunk1
- read(IIN) njunk2
-
- nspec2D_zmin_outer_core = NSPEC2D_BOTTOM(IREGION_OUTER_CORE)
-
- read(IIN) ibelm_xmin_outer_core
- read(IIN) ibelm_xmax_outer_core
- read(IIN) ibelm_ymin_outer_core
- read(IIN) ibelm_ymax_outer_core
- read(IIN) ibelm_bottom_outer_core
- read(IIN) ibelm_top_outer_core
-
- read(IIN) normal_xmin_outer_core
- read(IIN) normal_xmax_outer_core
- read(IIN) normal_ymin_outer_core
- read(IIN) normal_ymax_outer_core
- read(IIN) normal_bottom_outer_core
- read(IIN) normal_top_outer_core
-
- read(IIN) jacobian2D_xmin_outer_core
- read(IIN) jacobian2D_xmax_outer_core
- read(IIN) jacobian2D_ymin_outer_core
- read(IIN) jacobian2D_ymax_outer_core
- read(IIN) jacobian2D_bottom_outer_core
- read(IIN) jacobian2D_top_outer_core
- close(IIN)
-
- !
- ! inner core
- !
+ ! read parameters to couple fluid and solid regions
+ !
+ ! outer core
- ! create name of database
- call create_name_database(prname,myrank,IREGION_INNER_CORE,LOCAL_PATH)
+ ! create name of database
+ call create_name_database(prname,myrank,IREGION_OUTER_CORE,LOCAL_PATH)
- ! read info for vertical edges for central cube matching in inner core
- open(unit=IIN,file=prname(1:len_trim(prname))//'boundary.bin', &
- status='old',form='unformatted',action='read',iostat=ier)
- if (ier /= 0 ) call exit_mpi(myrank,'Error opening inner_core boundary.bin file')
+ ! boundary parameters
- read(IIN) nspec2D_xmin_inner_core
- read(IIN) nspec2D_xmax_inner_core
- read(IIN) nspec2D_ymin_inner_core
- read(IIN) nspec2D_ymax_inner_core
- read(IIN) njunk1
- read(IIN) njunk2
+ ! Stacey put back
+ open(unit=IIN,file=prname(1:len_trim(prname))//'boundary.bin', &
+ status='old',form='unformatted',action='read',iostat=ier)
+ if (ier /= 0 ) call exit_mpi(myrank,'Error opening outer_core boundary.bin file')
+
+ read(IIN) nspec2D_xmin_outer_core
+ read(IIN) nspec2D_xmax_outer_core
+ read(IIN) nspec2D_ymin_outer_core
+ read(IIN) nspec2D_ymax_outer_core
+ read(IIN) njunk1
+ read(IIN) njunk2
+
+ nspec2D_zmin_outer_core = NSPEC2D_BOTTOM(IREGION_OUTER_CORE)
+
+ read(IIN) ibelm_xmin_outer_core
+ read(IIN) ibelm_xmax_outer_core
+ read(IIN) ibelm_ymin_outer_core
+ read(IIN) ibelm_ymax_outer_core
+ read(IIN) ibelm_bottom_outer_core
+ read(IIN) ibelm_top_outer_core
+
+ read(IIN) normal_xmin_outer_core
+ read(IIN) normal_xmax_outer_core
+ read(IIN) normal_ymin_outer_core
+ read(IIN) normal_ymax_outer_core
+ read(IIN) normal_bottom_outer_core
+ read(IIN) normal_top_outer_core
+
+ read(IIN) jacobian2D_xmin_outer_core
+ read(IIN) jacobian2D_xmax_outer_core
+ read(IIN) jacobian2D_ymin_outer_core
+ read(IIN) jacobian2D_ymax_outer_core
+ read(IIN) jacobian2D_bottom_outer_core
+ read(IIN) jacobian2D_top_outer_core
+ close(IIN)
- ! boundary parameters
- read(IIN) ibelm_xmin_inner_core
- read(IIN) ibelm_xmax_inner_core
- read(IIN) ibelm_ymin_inner_core
- read(IIN) ibelm_ymax_inner_core
- read(IIN) ibelm_bottom_inner_core
- read(IIN) ibelm_top_inner_core
- close(IIN)
+ !
+ ! inner core
+ !
- ! -- Boundary Mesh for crust and mantle ---
- if (SAVE_BOUNDARY_MESH .and. SIMULATION_TYPE == 3) then
- call create_name_database(prname,myrank,IREGION_CRUST_MANTLE,LOCAL_PATH)
+ ! create name of database
+ call create_name_database(prname,myrank,IREGION_INNER_CORE,LOCAL_PATH)
- open(unit=IIN,file=prname(1:len_trim(prname))//'boundary_disc.bin', &
+ ! read info for vertical edges for central cube matching in inner core
+ open(unit=IIN,file=prname(1:len_trim(prname))//'boundary.bin', &
status='old',form='unformatted',action='read',iostat=ier)
- if (ier /= 0 ) call exit_mpi(myrank,'Error opening boundary_disc.bin file')
-
- read(IIN) njunk1,njunk2,njunk3
- if (njunk1 /= NSPEC2D_MOHO .and. njunk2 /= NSPEC2D_400 .and. njunk3 /= NSPEC2D_670) &
- call exit_mpi(myrank, 'Error reading ibelm_disc.bin file')
- read(IIN) ibelm_moho_top
- read(IIN) ibelm_moho_bot
- read(IIN) ibelm_400_top
- read(IIN) ibelm_400_bot
- read(IIN) ibelm_670_top
- read(IIN) ibelm_670_bot
- read(IIN) normal_moho
- read(IIN) normal_400
- read(IIN) normal_670
+ if (ier /= 0 ) call exit_mpi(myrank,'Error opening inner_core boundary.bin file')
+
+ read(IIN) nspec2D_xmin_inner_core
+ read(IIN) nspec2D_xmax_inner_core
+ read(IIN) nspec2D_ymin_inner_core
+ read(IIN) nspec2D_ymax_inner_core
+ read(IIN) njunk1
+ read(IIN) njunk2
+
+ ! boundary parameters
+ read(IIN) ibelm_xmin_inner_core
+ read(IIN) ibelm_xmax_inner_core
+ read(IIN) ibelm_ymin_inner_core
+ read(IIN) ibelm_ymax_inner_core
+ read(IIN) ibelm_bottom_inner_core
+ read(IIN) ibelm_top_inner_core
close(IIN)
- endif
- endif ! ADIOS
+ ! -- Boundary Mesh for crust and mantle ---
+ if (SAVE_BOUNDARY_MESH .and. SIMULATION_TYPE == 3) then
+ call create_name_database(prname,myrank,IREGION_CRUST_MANTLE,LOCAL_PATH)
+
+ open(unit=IIN,file=prname(1:len_trim(prname))//'boundary_disc.bin', &
+ status='old',form='unformatted',action='read',iostat=ier)
+ if (ier /= 0 ) call exit_mpi(myrank,'Error opening boundary_disc.bin file')
+
+ read(IIN) njunk1,njunk2,njunk3
+ if (njunk1 /= NSPEC2D_MOHO .and. njunk2 /= NSPEC2D_400 .and. njunk3 /= NSPEC2D_670) &
+ call exit_mpi(myrank, 'Error reading ibelm_disc.bin file')
+ read(IIN) ibelm_moho_top
+ read(IIN) ibelm_moho_bot
+ read(IIN) ibelm_400_top
+ read(IIN) ibelm_400_bot
+ read(IIN) ibelm_670_top
+ read(IIN) ibelm_670_bot
+ read(IIN) normal_moho
+ read(IIN) normal_400
+ read(IIN) normal_670
+ close(IIN)
+ endif
+
+ endif ! ADIOS
+ endif
+ call bcast_mesh_databases_coupling()
! checks dimensions
! crust mantle
@@ -1545,3 +1548,97 @@
call bcast_all_cr_for_database(b_rmassy_inner_core(1), size(b_rmassy_inner_core))
end subroutine bcast_mesh_databases_IC
+
+!
+!-------------------------------------------------------------------------------------------------
+!
+
+ subroutine bcast_mesh_databases_coupling()
+
+ use specfem_par
+ use specfem_par_crustmantle
+ use specfem_par_innercore
+ use specfem_par_outercore
+
+ implicit none
+
+ call bcast_all_i_for_database(nspec2D_xmin_crust_mantle, 1)
+ call bcast_all_i_for_database(nspec2D_xmax_crust_mantle, 1)
+ call bcast_all_i_for_database(nspec2D_ymin_crust_mantle, 1)
+ call bcast_all_i_for_database(nspec2D_ymax_crust_mantle, 1)
+
+ call bcast_all_i_for_database(ibelm_xmin_crust_mantle(1), size(ibelm_xmin_crust_mantle))
+ call bcast_all_i_for_database(ibelm_xmax_crust_mantle(1), size(ibelm_xmax_crust_mantle))
+ call bcast_all_i_for_database(ibelm_ymin_crust_mantle(1), size(ibelm_ymin_crust_mantle))
+ call bcast_all_i_for_database(ibelm_ymax_crust_mantle(1), size(ibelm_ymax_crust_mantle))
+ call bcast_all_i_for_database(ibelm_bottom_crust_mantle(1), size(ibelm_bottom_crust_mantle))
+ call bcast_all_i_for_database(ibelm_top_crust_mantle(1), size(ibelm_top_crust_mantle))
+
+ call bcast_all_cr_for_database(normal_xmin_crust_mantle(1,1,1,1), size(normal_xmin_crust_mantle))
+ call bcast_all_cr_for_database(normal_xmax_crust_mantle(1,1,1,1), size(normal_xmax_crust_mantle))
+ call bcast_all_cr_for_database(normal_ymin_crust_mantle(1,1,1,1), size(normal_ymin_crust_mantle))
+ call bcast_all_cr_for_database(normal_ymax_crust_mantle(1,1,1,1), size(normal_ymax_crust_mantle))
+ call bcast_all_cr_for_database(normal_bottom_crust_mantle(1,1,1,1), size(normal_bottom_crust_mantle))
+ call bcast_all_cr_for_database(normal_top_crust_mantle(1,1,1,1), size(normal_top_crust_mantle))
+
+ call bcast_all_cr_for_database(jacobian2D_xmin_crust_mantle(1,1,1), size(jacobian2D_xmin_crust_mantle))
+ call bcast_all_cr_for_database(jacobian2D_xmax_crust_mantle(1,1,1), size(jacobian2D_xmax_crust_mantle))
+ call bcast_all_cr_for_database(jacobian2D_ymin_crust_mantle(1,1,1), size(jacobian2D_ymin_crust_mantle))
+ call bcast_all_cr_for_database(jacobian2D_ymax_crust_mantle(1,1,1), size(jacobian2D_ymax_crust_mantle))
+ call bcast_all_cr_for_database(jacobian2D_bottom_crust_mantle(1,1,1), size(jacobian2D_bottom_crust_mantle))
+ call bcast_all_cr_for_database(jacobian2D_top_crust_mantle(1,1,1), size(jacobian2D_top_crust_mantle))
+
+ call bcast_all_i_for_database(nspec2D_xmin_outer_core, 1)
+ call bcast_all_i_for_database(nspec2D_xmax_outer_core, 1)
+ call bcast_all_i_for_database(nspec2D_ymin_outer_core, 1)
+ call bcast_all_i_for_database(nspec2D_ymax_outer_core, 1)
+ call bcast_all_i_for_database(nspec2D_zmin_outer_core, 1)
+
+ call bcast_all_i_for_database(ibelm_xmin_outer_core(1), size(ibelm_xmin_outer_core))
+ call bcast_all_i_for_database(ibelm_xmax_outer_core(1), size(ibelm_xmax_outer_core))
+ call bcast_all_i_for_database(ibelm_ymin_outer_core(1), size(ibelm_ymin_outer_core))
+ call bcast_all_i_for_database(ibelm_ymax_outer_core(1), size(ibelm_ymax_outer_core))
+ call bcast_all_i_for_database(ibelm_bottom_outer_core(1), size(ibelm_bottom_outer_core))
+ call bcast_all_i_for_database(ibelm_top_outer_core(1), size(ibelm_top_outer_core))
+
+ call bcast_all_cr_for_database(normal_xmin_outer_core(1,1,1,1), size(normal_xmin_outer_core))
+ call bcast_all_cr_for_database(normal_xmax_outer_core(1,1,1,1), size(normal_xmax_outer_core))
+ call bcast_all_cr_for_database(normal_ymin_outer_core(1,1,1,1), size(normal_ymin_outer_core))
+ call bcast_all_cr_for_database(normal_ymax_outer_core(1,1,1,1), size(normal_ymax_outer_core))
+ call bcast_all_cr_for_database(normal_bottom_outer_core(1,1,1,1), size(normal_bottom_outer_core))
+ call bcast_all_cr_for_database(normal_top_outer_core(1,1,1,1), size(normal_top_outer_core))
+
+ call bcast_all_cr_for_database(jacobian2D_xmin_outer_core(1,1,1), size(jacobian2D_xmin_outer_core))
+ call bcast_all_cr_for_database(jacobian2D_xmax_outer_core(1,1,1), size(jacobian2D_xmax_outer_core))
+ call bcast_all_cr_for_database(jacobian2D_ymin_outer_core(1,1,1), size(jacobian2D_ymin_outer_core))
+ call bcast_all_cr_for_database(jacobian2D_ymax_outer_core(1,1,1), size(jacobian2D_ymax_outer_core))
+ call bcast_all_cr_for_database(jacobian2D_bottom_outer_core(1,1,1), size(jacobian2D_bottom_outer_core))
+ call bcast_all_cr_for_database(jacobian2D_top_outer_core(1,1,1), size(jacobian2D_top_outer_core))
+
+ call bcast_all_i_for_database(nspec2D_xmin_inner_core, 1)
+ call bcast_all_i_for_database(nspec2D_xmax_inner_core, 1)
+ call bcast_all_i_for_database(nspec2D_ymin_inner_core, 1)
+ call bcast_all_i_for_database(nspec2D_ymax_inner_core, 1)
+
+ ! boundary parameters
+ call bcast_all_i_for_database(ibelm_xmin_inner_core(1), size(ibelm_xmin_inner_core))
+ call bcast_all_i_for_database(ibelm_xmax_inner_core(1), size(ibelm_xmax_inner_core))
+ call bcast_all_i_for_database(ibelm_ymin_inner_core(1), size(ibelm_ymin_inner_core))
+ call bcast_all_i_for_database(ibelm_ymax_inner_core(1), size(ibelm_ymax_inner_core))
+ call bcast_all_i_for_database(ibelm_bottom_inner_core(1), size(ibelm_bottom_inner_core))
+ call bcast_all_i_for_database(ibelm_top_inner_core(1), size(ibelm_top_inner_core))
+
+ ! -- Boundary Mesh for crust and mantle ---
+ if (SAVE_BOUNDARY_MESH .and. SIMULATION_TYPE == 3) then
+ call bcast_all_i_for_database(ibelm_moho_top(1), size(ibelm_moho_top))
+ call bcast_all_i_for_database(ibelm_moho_bot(1), size(ibelm_moho_bot))
+ call bcast_all_i_for_database(ibelm_400_top(1), size(ibelm_400_top))
+ call bcast_all_i_for_database(ibelm_400_bot(1), size(ibelm_400_bot))
+ call bcast_all_i_for_database(ibelm_670_top(1), size(ibelm_670_top))
+ call bcast_all_i_for_database(ibelm_670_bot(1), size(ibelm_670_bot))
+ call bcast_all_cr_for_database(normal_moho(1,1,1,1), size(normal_moho))
+ call bcast_all_cr_for_database(normal_400(1,1,1,1), size(normal_400))
+ call bcast_all_cr_for_database(normal_670(1,1,1,1), size(normal_670))
+ endif
+
+ end subroutine bcast_mesh_databases_coupling
More information about the CIG-COMMITS
mailing list