Ignore:
Timestamp:
07/23/14 14:06:47 (10 years ago)
Author:
dubos
Message:

Fix recently introduced bug : slope limiter

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/trunk/src/advect.f90

    r186 r252  
    1111  !========================================================================== 
    1212 
    13   SUBROUTINE init_advect(normal,tangent,one_over_sqrt_leng) 
     13  SUBROUTINE init_advect(normal,tangent,sqrt_leng) 
    1414    IMPLICIT NONE 
    1515    REAL(rstd),INTENT(OUT) :: normal(3*iim*jjm,3) 
    1616    REAL(rstd),INTENT(OUT) :: tangent(3*iim*jjm,3) 
    17     REAL(rstd),INTENT(OUT) :: one_over_sqrt_leng(iim*jjm) 
     17    REAL(rstd),INTENT(OUT) :: sqrt_leng(iim*jjm) 
    1818 
    1919    INTEGER :: ij 
     
    4040          tangent(ij+u_ldown,:)=tangent(ij+u_ldown,:)/sqrt(sum(tangent(ij+u_ldown,:)**2)+1e-50) 
    4141 
    42           one_over_sqrt_leng(ij) = 1./sqrt(max(sum((xyz_v(ij+z_up,:) - xyz_i(ij,:))**2),sum((xyz_v(ij+z_down,:) - xyz_i(ij,:))**2), & 
    43                                           sum((xyz_v(ij+z_rup,:) - xyz_i(ij,:))**2),sum((xyz_v(ij+z_rdown,:) - xyz_i(ij,:))**2),  & 
    44                                           sum((xyz_v(ij+z_lup,:) - xyz_i(ij,:))**2),sum((xyz_v(ij+z_ldown,:) - xyz_i(ij,:))**2)) ) 
     42          sqrt_leng(ij) = sqrt(max(sum((xyz_v(ij+z_up,:) - xyz_i(ij,:))**2),sum((xyz_v(ij+z_down,:) - xyz_i(ij,:))**2), & 
     43                                   sum((xyz_v(ij+z_rup,:) - xyz_i(ij,:))**2),sum((xyz_v(ij+z_rdown,:) - xyz_i(ij,:))**2),  & 
     44                                   sum((xyz_v(ij+z_lup,:) - xyz_i(ij,:))**2),sum((xyz_v(ij+z_ldown,:) - xyz_i(ij,:))**2)) ) 
    4545    ENDDO 
    4646 
     
    4949  !======================================================================================= 
    5050 
    51   SUBROUTINE compute_gradq3d(qi_in,one_over_sqrt_leng_in,gradq3d_out,xyz_i,xyz_v) 
     51  SUBROUTINE compute_gradq3d(qi_in,sqrt_leng_in,gradq3d_out,xyz_i,xyz_v) 
    5252    USE trace 
    5353    USE omp_para 
    5454    IMPLICIT NONE 
    5555    REAL(rstd),INTENT(IN)  :: qi_in(iim*jjm,llm) 
    56     REAL(rstd),INTENT(IN)  :: one_over_sqrt_leng_in(iim*jjm) 
     56    REAL(rstd),INTENT(IN)  :: sqrt_leng_in(iim*jjm) 
    5757    REAL(rstd),INTENT(IN)  :: xyz_i(iim*jjm,3) 
    5858    REAL(rstd),INTENT(IN)  :: xyz_v(2*iim*jjm,3) 
     
    6666    INTEGER :: ij,k,ind,l 
    6767    REAL(rstd)  :: qi(iim*jjm,llm) 
    68     REAL(rstd)  :: one_over_sqrt_leng(iim*jjm) 
     68    REAL(rstd)  :: sqrt_leng(iim*jjm) 
    6969    REAL(rstd) :: gradq3d(iim*jjm,llm,3)  
    7070    REAL(rstd) :: detx,dety,detz,det 
     
    7474 
    7575    qi=qi_in 
    76     one_over_sqrt_leng=one_over_sqrt_leng_in 
     76    sqrt_leng=sqrt_leng_in 
    7777     
    7878    CALL trace_start("compute_gradq3d1") 
     
    252252             maggrd = gradq3d(ij,l,1)*gradq3d(ij,l,1) + gradq3d(ij,l,2)*gradq3d(ij,l,2) + gradq3d(ij,l,3)*gradq3d(ij,l,3)  
    253253             maggrd = sqrt(maggrd)  
    254              maxq_c = qi(ij,l) + maggrd*one_over_sqrt_leng(ij) 
    255              minq_c = qi(ij,l) - maggrd*one_over_sqrt_leng(ij) 
     254             maxq_c = qi(ij,l) + maggrd*sqrt_leng(ij) 
     255             minq_c = qi(ij,l) - maggrd*sqrt_leng(ij) 
    256256             maxq = max(qi(ij,l),qi(ij+t_right,l),qi(ij+t_lup,l),qi(ij+t_rup,l),qi(ij+t_left,l), & 
    257257                  qi(ij+t_rdown,l),qi(ij+t_ldown,l)) 
Note: See TracChangeset for help on using the changeset viewer.