@@ -652,9 +652,6 @@ Kernel_2_noatt_iso_PML_impl(const int nb_blocks_to_compute,
652652 const int simulation_type,
653653 const int p_sv,
654654 const int * d_spec_to_pml,
655- realw ALPHA_MAX_PML ,
656- realw d0,
657- realw* abs_normalized,
658655 int NSPEC_PML_X ,
659656 int NSPEC_PML_Z ,
660657 realw deltat,
@@ -713,7 +710,7 @@ Kernel_2_noatt_iso_PML_impl(const int nb_blocks_to_compute,
713710 // PML
714711 int ispec_pml;
715712 int offset_pml,offset_local_pml;
716- realw alpha1,beta1,alphax,betax,abs_norm ;
713+ realw alpha1,beta1,alphax,betax,alphaz,betaz ;
717714 realw c1,c2;
718715 realw r1,r2,r3,r4,r5,r6,r7,r8;
719716 realw r9_x,r9_z,r10_x,r10_z;
@@ -802,46 +799,53 @@ Kernel_2_noatt_iso_PML_impl(const int nb_blocks_to_compute,
802799 offset_local_pml = (ispec_pml-(NSPEC_PML_X + NSPEC_PML_Z ))*NGLL2 + tx; // local pml elements in range [0,NSPEC_PML_XZ-1]
803800
804801 // coefficients
802+ alphax = alphax_store[offset_pml];
803+ betax = betax_store[offset_pml];
804+ alphaz = alphaz_store[offset_pml];
805+ betaz = betaz_store[offset_pml];
806+
805807 // note: see pml_init.F90, compare to routine define_PML_coefficients()
806808 // (starting around line 900);
807- // assumes coefficients are calculated w/out PML_PARAMETER_ADJUSTMENT
808- if (ispec_pml < (NSPEC_PML_X + NSPEC_PML_Z )){
809- // in CPML_X_ONLY or in CPML_Z_ONLY region
810- abs_norm = abs_normalized[offset_pml];
809+ // K_MIN_PML must be == 1.0 and K_MAX_PML == 1.0,
810+ // thus, K_x == K_z == K_MIN_PML + (K_MAX_PML - 1.0d0) * abscissa_normalized**NPOWER == 1
811+ if (ispec_pml < NSPEC_PML_X ){
812+ // in CPML_X_ONLY
813+ //
811814 // for CPML_X_ONLY:
812- // (see pml_init.F90, routine `define_PML_coefficients`)
813- // alpha1 == alpha_x == ALPHA_MAX * (1 - abscissa)
815+ // alpha1 == alpha_x
814816 // alpha_z == 0
815817 //
816818 // beta1 == beta_x == alpha_x + d_x / K_x
817- // == alpha_x + (d0_x / damping_change_factor_elastic * abscissa_normalized**NPOWER) /
819+ // with d_x == d0_x / damping_change_factor_acoustic * abscissa_normalized**NPOWER
820+ // K_x == K_MIN_PML + (K_MAX_PML - 1.0d0) * abscissa_normalized**NPOWER
821+ // == alpha_x + (d0_x / damping_change_factor_acoustic * abscissa_normalized**NPOWER) /
818822 // (K_MIN_PML + (K_MAX_PML - 1.0d0) * abscissa_normalized**NPOWER)
819- // note: damping_change_factor_elastic must be == 1.0 for this implementation,
820- // K_MIN_PML must be == 1.0 and K_MAX_PML == 1.0,
821- // and NPOWER must be == 2 (see parameter defined in pml_init.F90)
822- // Thus,
823- // K_x == K_z == K_MIN_PML + (K_MAX_PML - 1.0d0) * abscissa_normalized**NPOWER == 1
824- // d_x == d0_x / damping_change_factor_elastic * abscissa_normalized**NPOWER == d0_x * abscissa**2
825- //
826- // it follows, that
827- // beta1 == beta_x == alpha_x + (d0_x * abscissa**2)
828823 // beta_z == 0
829824 //
825+ alpha1 = alphax;
826+ beta1 = betax;
827+ alphaz = 0 .f ;
828+ betaz = 0 .f ;
829+ } else if (ispec_pml < (NSPEC_PML_X + NSPEC_PML_Z )){
830+ // in CPML_Z_ONLY region
831+ //
830832 // for CPML_Z_ONLY:
831833 // alpha1 == alpha_z == ALPHA_MAX * (1 - abscissa)
832834 // alpha_x == 0
833835 //
834836 // beta1 == beta_z == alpha_z + d_z / K_z
835- // == alpha_z + (d0_z * abscissa**2)
837+ // == alpha_z + (2 * d0_z * abscissa**2)
836838 // beta_x == 0
837- alpha1 = ALPHA_MAX_PML * (1 .f - abs_norm) ;
838- beta1 = alpha1 + d0 * abs_norm * abs_norm; // instead of d0_x_left, d0_x_right, .. this takes d0_max
839- } else {
839+ alpha1 = alphaz;
840+ beta1 = betaz;
841+ alphax = 0 .f ;
842+ betax = 0 .f ;
843+ } else {
840844 // in CPML_XZ region
841- alpha1 = alphaz_store[offset_local_pml] ;
842- beta1 = betaz_store[offset_local_pml] ;
843- alphax = alphax_store[offset_local_pml] ;
844- betax = betax_store[offset_local_pml] ;
845+ alpha1 = alphaz ;
846+ beta1 = betaz ;
847+ // alphax = alphax ;
848+ // betax = betax ;
845849 }
846850
847851 // Update memory variables of derivatives
@@ -880,7 +884,7 @@ Kernel_2_noatt_iso_PML_impl(const int nb_blocks_to_compute,
880884 c2 = __expf (-0 .5f * deltat * beta1);
881885
882886 coef0_1 = c1 * c1;
883- if (abs (alpha1) > 0.00001 ){
887+ if (abs (alpha1) > 0 .00001f ){
884888 // coef1_zx_1 == (1 - c1)/alpha1
885889 // coef2_zx_1 == coef1 * c1
886890 coef1_1 = (1 .f - c1) / alpha1;
@@ -893,7 +897,7 @@ Kernel_2_noatt_iso_PML_impl(const int nb_blocks_to_compute,
893897 }
894898
895899 coef0_2 = c2 * c2;
896- if (abs (beta1) > 0.00001 ){
900+ if (abs (beta1) > 0 .00001f ){
897901 // coef1_zx_2 == (1 - c2)/beta1
898902 // coef2_zx_2 == coef1 * c2
899903 coef1_2 = (1 .f - c2) / beta1;
@@ -911,7 +915,7 @@ Kernel_2_noatt_iso_PML_impl(const int nb_blocks_to_compute,
911915 realw c4 = __expf (-0 .5f * deltat * alphax);
912916
913917 coef0_3 = c3 * c3;
914- if (abs (betax) > 0.00001 ){
918+ if (abs (betax) > 0 .00001f ){
915919 // coef1_zx_2 == (1 - c3)/betax
916920 // coef2_zx_2 == coef1 * c3
917921 coef1_3 = (1 .f - c3) / betax;
@@ -924,7 +928,7 @@ Kernel_2_noatt_iso_PML_impl(const int nb_blocks_to_compute,
924928 }
925929
926930 coef0_4 = c4 * c4;
927- if (abs (alphax) > 0.00001 ){
931+ if (abs (alphax) > 0 .00001f ){
928932 // coef1_zx_1 == (1 - c4)/alphax
929933 // coef2_zx_1 == coef1 * c4
930934 coef1_4 = (1 .f - c4) / alphax;
@@ -2097,8 +2101,7 @@ template __global__ void Kernel_2_noatt_iso_PML_impl<1>(const int,const int*,con
20972101 realw_const_p,realw_p,
20982102 realw*,realw*,realw*,realw*,
20992103 realw_const_p,realw_const_p,realw_const_p,
2100- realw*,realw*,const int ,const int ,const int *,
2101- realw,realw,realw*,int ,int ,realw,
2104+ realw*,realw*,const int ,const int ,const int *,int ,int ,realw,
21022105 realw*,realw*,realw*,realw*,realw*,realw*,realw*,realw*,realw*,realw*,
21032106 realw*,realw*,realw*,realw*,realw*,
21042107 realw_p,const realw*,
@@ -2108,8 +2111,7 @@ template __global__ void Kernel_2_noatt_iso_PML_impl<3>(const int,const int*,con
21082111 realw_const_p,realw_p,
21092112 realw*,realw*,realw*,realw*,
21102113 realw_const_p,realw_const_p,realw_const_p,
2111- realw*,realw*,const int ,const int ,const int *,
2112- realw,realw,realw*,int ,int ,realw,
2114+ realw*,realw*,const int ,const int ,const int *,int ,int ,realw,
21132115 realw*,realw*,realw*,realw*,realw*,realw*,realw*,realw*,realw*,realw*,
21142116 realw*,realw*,realw*,realw*,realw*,
21152117 realw_p,const realw*,
0 commit comments