[cig-commits] r19977 - seismo/3D/FAULT_SOURCE/branches/new_fault_db/src
surendra at geodynamics.org
surendra at geodynamics.org
Mon Apr 23 18:41:02 PDT 2012
Author: surendra
Date: 2012-04-23 18:41:02 -0700 (Mon, 23 Apr 2012)
New Revision: 19977
Modified:
seismo/3D/FAULT_SOURCE/branches/new_fault_db/src/fault_solver.f90
Log:
Switched to formulation in terms of tractions for Newton-Raphson search. Added comments that were removed by mistake in previous commit
Modified: seismo/3D/FAULT_SOURCE/branches/new_fault_db/src/fault_solver.f90
===================================================================
--- seismo/3D/FAULT_SOURCE/branches/new_fault_db/src/fault_solver.f90 2012-04-24 01:17:41 UTC (rev 19976)
+++ seismo/3D/FAULT_SOURCE/branches/new_fault_db/src/fault_solver.f90 2012-04-24 01:41:02 UTC (rev 19977)
@@ -325,6 +325,9 @@
! NOTE: same Bi on both sides, see note above
allocate(bc%Z(bc%nglob))
bc%Z = 1.e0_CUSTOM_REAL/(0.5e0_CUSTOM_REAL*dt * bc%B *( bc%invM1 + bc%invM2 ))
+ ! WARNING: In non-split nodes at fault edges M is assembled across the fault.
+ ! hence invM1+invM2=2/(M1+M2) instead of 1/M1+1/M2
+ ! In a symmetric mesh (M1=M2) Z will be twice its intended value
allocate(bc%T(3,bc%nglob))
allocate(bc%D(3,bc%nglob))
@@ -614,6 +617,7 @@
!---------------------------------------------------------------------
! adds a value to a fault parameter inside an area with prescribed shape
subroutine init_2d_distribution(a,coord,iin,n)
+!JPA refactor: background value shuld be an argument
real(kind=CUSTOM_REAL), intent(inout) :: a(:)
real(kind=CUSTOM_REAL), intent(in) :: coord(:,:)
@@ -695,6 +699,9 @@
!=====================================================================
! adds boundary term Bt into Force array for each fault.
!
+! NOTE: On non-split nodes at fault edges, dD=dV=dA=0
+! and the net contribution of B*T is =0
+!
subroutine bc_dynflt_set3d_all(F,Vel,Dis)
real(kind=CUSTOM_REAL), dimension(:,:), intent(in) :: Vel,Dis
@@ -806,6 +813,7 @@
TxExt = DTau0 * bc%asp%Fload * GLoad
T(1,:) = T(1,:) + TxExt
+ !JPA the solver below can be refactored into a loop with two passes
Vf = Vnorm_old
theta_old = bc%rsf%theta
call rsf_update_state(Vf,bc%dt,bc%rsf)
@@ -910,6 +918,9 @@
da(2,:) = bc%invM2*f(2,bc%ibulk2)-bc%invM1*f(2,bc%ibulk1)
da(3,:) = bc%invM2*f(3,bc%ibulk2)-bc%invM1*f(3,bc%ibulk1)
+ ! NOTE: In non-split nodes at fault edges M and f are assembled across the fault.
+ ! Hence, f1=f2, invM1=invM2=1/(M1+M2) instead of invMi=1/Mi, and da=0.
+
end function get_weighted_jump
!----------------------------------------------------------------------
More information about the CIG-COMMITS
mailing list