Ignore:
Timestamp:
06/29/13 02:35:03 (11 years ago)
Author:
dubos
Message:

Multi-layer Saint-Venant / Ripa equations - tested with Williamson91.5 & JW06

File:
1 edited

Legend:

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

    r151 r167  
    2727  REAL, save    :: rayleigh_tau 
    2828   
    29 !  INTEGER,SAVE :: itau_dissip 
    3029  REAL,SAVE    :: dtdissip 
    3130  
     
    368367    fact=2 
    369368    DO l=1,llm 
    370        zz= 1. - preff/presnivs(l) 
     369       IF(ap_bp_present) THEN ! height-dependent dissipation 
     370          zz= 1. - preff/presnivs(l) 
     371       ELSE 
     372          zz = 0. 
     373       END IF 
    371374       zvert=fact-(fact-1)/(1+zz*zz) 
    372375       tau_graddiv(l) = tau_graddiv(l)/zvert 
     
    390393  
    391394   
    392   SUBROUTINE dissip(f_ue,f_due,f_ps,f_phis,f_theta_rhodz,f_dtheta_rhodz) 
     395  SUBROUTINE dissip(f_ue,f_due,f_mass,f_phis,f_theta_rhodz,f_dtheta_rhodz) 
    393396  USE icosa 
    394397  USE theta2theta_rhodz_mod 
     
    402405    TYPE(t_field),POINTER :: f_ue(:) 
    403406    TYPE(t_field),POINTER :: f_due(:) 
    404     TYPE(t_field),POINTER :: f_ps(:), f_phis(:) 
     407    TYPE(t_field),POINTER :: f_mass(:), f_phis(:) 
    405408    TYPE(t_field),POINTER :: f_theta_rhodz(:) 
    406409    TYPE(t_field),POINTER :: f_dtheta_rhodz(:) 
     
    421424    CALL gradiv(f_ue,f_due_diss1) 
    422425    CALL gradrot(f_ue,f_due_diss2) 
    423      
    424     CALL divgrad_theta_rhodz(f_ps,f_theta_rhodz,f_dtheta_rhodz_diss) 
     426 
     427    CALL divgrad_theta_rhodz(f_mass,f_theta_rhodz,f_dtheta_rhodz_diss) 
    425428     
    426429! later for openmp     
     
    646649  END SUBROUTINE divgrad 
    647650    
    648   SUBROUTINE divgrad_theta_rhodz(f_ps,f_theta_rhodz,f_dtheta_rhodz) 
     651  SUBROUTINE divgrad_theta_rhodz(f_mass,f_theta_rhodz,f_dtheta_rhodz) 
    649652  USE icosa 
    650653  USE trace 
    651654  USE omp_para 
    652   USE disvert_mod 
    653655  IMPLICIT NONE 
    654     TYPE(t_field),POINTER :: f_ps(:) 
     656    TYPE(t_field),POINTER :: f_mass(:) 
    655657    TYPE(t_field),POINTER :: f_theta_rhodz(:) 
    656658    TYPE(t_field),POINTER :: f_dtheta_rhodz(:) 
    657659     
    658     REAL(rstd),POINTER :: ps(:) 
     660    REAL(rstd),POINTER :: mass(:,:) 
    659661    REAL(rstd),POINTER :: theta_rhodz(:,:) 
    660662    REAL(rstd),POINTER :: dtheta_rhodz(:,:) 
     
    668670      CALL swap_dimensions(ind) 
    669671      CALL swap_geometry(ind) 
    670       ps=f_ps(ind) 
     672      mass=f_mass(ind) 
    671673      theta_rhodz=f_theta_rhodz(ind) 
    672674      dtheta_rhodz=f_dtheta_rhodz(ind)  
     
    675677          DO i=ii_begin,ii_end 
    676678            ij=(j-1)*iim+i 
    677             dtheta_rhodz(ij,l) = theta_rhodz(ij,l) / ( ap(l)-ap(l+1) + (bp(l)-bp(l+1))*ps(ij))/g 
     679            dtheta_rhodz(ij,l) = theta_rhodz(ij,l) / mass(ij,l) 
    678680          ENDDO 
    679681        ENDDO 
     
    703705          DO i=ii_begin,ii_end 
    704706            ij=(j-1)*iim+i 
    705             dtheta_rhodz(ij,l) = dtheta_rhodz(ij,l) * ( ap(l)-ap(l+1) + (bp(l)-bp(l+1))*ps(ij))/g 
     707            dtheta_rhodz(ij,l) = dtheta_rhodz(ij,l) * mass(ij,l) 
    706708          ENDDO 
    707709        ENDDO 
Note: See TracChangeset for help on using the changeset viewer.