Ignore:
Timestamp:
12/21/17 22:38:57 (6 years ago)
Author:
aslmd
Message:

added an option for simple Rayleigh friction at bottom (giant planets, but could be used for any case really)

File:
1 edited

Legend:

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

    r548 r648  
    3535!$OMP THREADPRIVATE(rayleigh_friction_type) 
    3636!$OMP THREADPRIVATE(rayleigh_shear) 
    37   REAL, SAVE    :: rayleigh_tau 
     37  REAL, SAVE    :: rayleigh_tau, rayleigh_limlat 
    3838!$OMP THREADPRIVATE(rayleigh_tau) 
     39!$OMP THREADPRIVATE(rayleigh_limlat) 
    3940   
    4041  REAL,SAVE    :: dtdissip 
     
    103104      rayleigh_friction_type=2 
    104105      IF (is_master) PRINT *, 'Rayleigh friction : Schaer-like mountain with shear DCMIP2.2' 
     106   CASE('giant_liu_schneider')  
     107      rayleigh_friction_type=99 
     108      IF (is_master) PRINT *, 'Rayleigh friction : giant planets Liu Schneider 2010' 
    105109   CASE DEFAULT 
    106110      IF (is_master) PRINT *, 'Bad selector : rayleigh_friction_type =', TRIM(rayleigh_friction_key), & 
     
    117121         STOP 
    118122      END IF 
     123      IF(rayleigh_friction_type == 99) THEN 
     124         rayleigh_limlat=0. 
     125         CALL getin("rayleigh_limlat",rayleigh_limlat) 
     126         rayleigh_limlat = rayleigh_limlat*3.14159/180. 
     127      ENDIF 
    119128   END IF 
    120129 
     
    479488 
    480489    INTEGER :: ind, shear 
    481     INTEGER :: l,ij 
     490    INTEGER :: l,ij,nn 
    482491 
    483492!$OMP BARRIER 
     
    515524 
    516525      IF(rayleigh_friction_type>0) THEN 
     526       IF(rayleigh_friction_type<99) THEN 
    517527         phi=f_geopot(ind) 
    518528         ue=f_ue(ind) 
     
    524534            ENDDO 
    525535         END DO 
     536       ELSE 
     537         ue=f_ue(ind) 
     538            DO ij=ij_begin,ij_end 
     539              nn = ij+u_right 
     540              IF (ABS(lat_e(nn)) .gt. rayleigh_limlat) THEN 
     541                !print*, "latitude", lat_e(nn)*180./3.14159 
     542                due(nn,ll_begin:ll_begin+1) = due(nn,ll_begin:ll_begin+1) - (ue(nn,ll_begin:ll_begin+1)/rayleigh_tau) 
     543              ENDIF 
     544              nn = ij+u_lup 
     545              IF (ABS(lat_e(nn)) .gt. rayleigh_limlat) THEN 
     546                due(nn,ll_begin:ll_begin+1) = due(nn,ll_begin:ll_begin+1) - (ue(nn,ll_begin:ll_begin+1)/rayleigh_tau) 
     547              ENDIF 
     548              nn = ij+u_ldown 
     549              IF (ABS(lat_e(nn)) .gt. rayleigh_limlat) THEN 
     550                due(nn,ll_begin:ll_begin+1) = due(nn,ll_begin:ll_begin+1) - (ue(nn,ll_begin:ll_begin+1)/rayleigh_tau) 
     551              ENDIF 
     552            ENDDO 
     553       ENDIF 
    526554      END IF 
    527555   END DO 
     
    532560 
    533561    CONTAINS 
     562 
    534563      SUBROUTINE relax(shift_t, shift_u) 
    535564        USE dcmip_initial_conditions_test_1_2_3 
Note: See TracChangeset for help on using the changeset viewer.