Changeset 166


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

New flag disvert=none

Location:
codes/icosagcm/trunk/src
Files:
2 edited

Legend:

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

    r161 r166  
    1010  INTEGER, SAVE :: caldyn_eta 
    1111  INTEGER, PARAMETER :: eta_mass=1, eta_lag=2 
     12  LOGICAL,SAVE :: ap_bp_present 
    1213 
    1314CONTAINS 
     
    2223  USE mpipara 
    2324  IMPLICIT NONE 
    24     CHARACTER(LEN=255) :: disvert_type = 'std' 
     25    CHARACTER(len=255) :: def 
    2526    INTEGER :: l 
    2627 
    27     CALL getin("disvert",disvert_type) 
    28      
    29     SELECT CASE (TRIM(disvert_type)) 
     28    def='eta_mass' 
     29    CALL getin('caldyn_eta',def) 
     30    SELECT CASE(TRIM(def)) 
     31    CASE('eta_mass') 
     32       caldyn_eta=eta_mass 
     33    CASE('eta_lag') 
     34       caldyn_eta=eta_lag 
     35    CASE DEFAULT 
     36       IF (is_mpi_root) PRINT *,'Bad selector for variable caldyn_eta : <', TRIM(def),'> options are <eta_mass>, <eta_lag>' 
     37       STOP 
     38    END SELECT 
     39    IF (is_mpi_root) PRINT *, 'caldyn_eta=',TRIM(def), caldyn_eta, eta_lag, eta_mass 
     40 
     41    def='std' 
     42    ap_bp_present=.TRUE. 
     43    CALL getin("disvert",def) 
     44    SELECT CASE (TRIM(def)) 
     45      CASE('none') 
     46         IF(caldyn_eta/=eta_lag) THEN 
     47            IF(is_mpi_root) PRINT *,'disvert_type=none must be used with caldyn_eta=eta_lag' 
     48            STOP 
     49         END IF 
     50         ap_bp_present=.FALSE. 
    3051      CASE('std') 
    3152     
     
    6485         
    6586      CASE default 
    66         IF (is_mpi_root) PRINT*,'Bad selector for variable disvert : <', TRIM(disvert_type),"> options are <std>, <ncar>, <ncarl30>"  
     87        IF (is_mpi_root) PRINT*,'Bad selector for variable disvert : <', TRIM(def),"> options are <std>, <ncar>, <ncarl30>"  
    6788        STOP 
    6889         
    6990    END SELECT 
    7091 
    71     ! Convert from pressure coordinate to mass coordinate 
    72     ! pk = ap(k) + bp(k)*ps(ij) = ptop + g*( mass_ak(k) + mass_bk(k)*ms(ij) ) 
    73     ptop = ap(llm+1) 
    74     ALLOCATE(mass_al(llm+1)) 
    75     ALLOCATE(mass_bl(llm+1)) 
    76     ALLOCATE(mass_ak(llm)) 
    77     ALLOCATE(mass_bk(llm)) 
    78     ALLOCATE(mass_dak(llm)) 
    79     ALLOCATE(mass_dbk(llm)) 
    80  
    81     ! FIXME : leave ps for the moment ; change ps to ms later 
    82     DO l=1,llm+1 
    83 !       mass_al(l) = (ap(l)-ptop)/g 
    84 !       mass_bl(l) = bp(l)/g 
    85        mass_al(l) = (ap(l)-ptop) 
    86        mass_bl(l) = bp(l) 
    87     END DO 
    88     DO l=1,llm 
    89        mass_ak(l) = .5*(mass_al(l)+mass_al(l+1)) 
    90        mass_bk(l) = .5*(mass_bl(l)+mass_bl(l+1)) 
    91        mass_dak(l) = mass_al(l)-mass_al(l+1)  ! >0 
    92        mass_dbk(l) = mass_bl(l)-mass_bl(l+1)  ! >0 
    93     END DO 
     92    IF(ap_bp_present) THEN 
     93       ! Convert from pressure coordinate to mass coordinate 
     94       ! pk = ap(k) + bp(k)*ps(ij) = ptop + g*( mass_ak(k) + mass_bk(k)*ms(ij) ) 
     95       ptop = ap(llm+1) 
     96       ALLOCATE(mass_al(llm+1)) 
     97       ALLOCATE(mass_bl(llm+1)) 
     98       ALLOCATE(mass_ak(llm)) 
     99       ALLOCATE(mass_bk(llm)) 
     100       ALLOCATE(mass_dak(llm)) 
     101       ALLOCATE(mass_dbk(llm)) 
     102 
     103       ! FIXME : leave ps for the moment ; change ps to ms later 
     104       DO l=1,llm+1 
     105          !       mass_al(l) = (ap(l)-ptop)/g 
     106          !       mass_bl(l) = bp(l)/g 
     107          mass_al(l) = (ap(l)-ptop) 
     108          mass_bl(l) = bp(l) 
     109       END DO 
     110       DO l=1,llm 
     111          mass_ak(l) = .5*(mass_al(l)+mass_al(l+1)) 
     112          mass_bk(l) = .5*(mass_bl(l)+mass_bl(l+1)) 
     113          mass_dak(l) = mass_al(l)-mass_al(l+1)  ! >0 
     114          mass_dbk(l) = mass_bl(l)-mass_bl(l+1)  ! >0 
     115       END DO 
     116    END IF 
    94117 
    95118  END SUBROUTINE init_disvert   
     
    147170    INTEGER :: l 
    148171     
     172    IF(ap_bp_present) THEN 
    149173    status = NF90_CREATE('apbp.nc', NF90_CLOBBER, ncid) 
    150174    status = NF90_DEF_DIM(ncid,'lev',llm,lev) 
     
    204228    status=NF90_PUT_VAR(ncid,P0id, Preff) 
    205229    
    206    status=NF90_CLOSE(ncid) 
     230    status=NF90_CLOSE(ncid) 
     231  END IF 
    207232  END SUBROUTINE write_apbp 
    208233 
  • codes/icosagcm/trunk/src/pression.f90

    r151 r166  
    3232    INTEGER :: i,j,ij,l 
    3333 
     34    IF(ap_bp_present) THEN 
    3435    DO    l    = 1, llm+1 
    3536      DO j=jj_begin-offset,jj_end+offset 
     
    4041      ENDDO 
    4142    ENDDO 
    42      
     43    END IF 
    4344  END SUBROUTINE compute_pression 
    4445 
Note: See TracChangeset for help on using the changeset viewer.