Changeset 106


Ignore:
Timestamp:
08/07/12 00:02:15 (12 years ago)
Author:
ymipsl
Message:

Bug fix for DCMIP simple physics

YM

File:
1 edited

Legend:

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

    r102 r106  
    4040    INTEGER :: ind 
    4141 
     42    CALL transfert_request(f_ue,req_e1) 
    4243    DO ind=1,ndomain 
    4344      CALL swap_dimensions(ind) 
     
    5253      precl=f_precl(ind) 
    5354     
    54       CALL compute_physics( phis, ps, theta_rhodz, ue, q(:,:,3), precl) 
     55      CALL compute_physics( phis, ps, theta_rhodz, ue, q(:,:,1), precl) 
    5556   
    5657    ENDDO 
     58 
     59!    CALL writefield("out_i",f_out_i) 
    5760     
    5861    IF (mod(it,itau_out)==0 ) THEN 
     
    8285    REAL(rstd) :: phi(iim*jjm,llm) 
    8386    REAL(rstd) :: T(iim*jjm,llm) 
     87    REAL(rstd) :: Tfi(iim*jjm,llm) 
    8488    REAL(rstd) :: theta(iim*jjm,llm) 
    8589 
     
    8993    REAL(rstd) :: ufi(iim*jjm,llm) 
    9094    REAL(rstd) :: vfi(iim*jjm,llm) 
     95    REAL(rstd) :: qfi(iim*jjm,llm) 
     96    REAL(rstd) :: utemp(iim*jjm,llm) 
     97    REAL(rstd) :: vtemp(iim*jjm,llm) 
    9198    REAL(rstd) :: lat(iim*jjm) 
    9299    REAL(rstd) :: lon 
    93100    REAL(rstd) :: pmid(iim*jjm,llm) 
     101    REAL(rstd) :: pint(iim*jjm,llm+1) 
    94102    REAL(rstd) :: pdel(iim*jjm,llm) 
    95103    INTEGER :: i,j,l,ij 
     
    111119    ENDDO 
    112120    
    113     DO l=1,llm 
    114       DO j=jj_begin,jj_end 
    115         DO i=ii_begin,ii_end 
    116           ij=(j-1)*iim+i 
    117           pmid(ij,l)=0.5*(p(ij,l)+p(ij,l+1))  
     121    DO l=1,llm+1 
     122      DO j=jj_begin,jj_end 
     123        DO i=ii_begin,ii_end 
     124          ij=(j-1)*iim+i 
     125          pint(ij,l)=p(ij,llm+2-l) 
    118126        ENDDO 
    119127      ENDDO 
     
    124132        DO i=ii_begin,ii_end 
    125133          ij=(j-1)*iim+i 
    126           pdel(ij,l)=p(ij,l+1)-p(ij,l) 
     134          pmid(ij,l)=0.5*(pint(ij,l)+pint(ij,l+1))  
     135        ENDDO 
     136      ENDDO 
     137    ENDDO 
     138     
     139    DO l=1,llm 
     140      DO j=jj_begin,jj_end 
     141        DO i=ii_begin,ii_end 
     142          ij=(j-1)*iim+i 
     143          pdel(ij,l)=pint(ij,l+1)-pint(ij,l) 
    127144        ENDDO 
    128145      ENDDO 
     
    130147        
    131148     
    132     ufi=u 
    133     vfi=v     
     149!    ufi=u 
     150!    vfi=v     
    134151     
    135152    DO l=1,llm 
     
    142159    ENDDO        
    143160     
    144      
    145     CALL simple_physics(iim*jjm, llm, dt, lat, t, q , ufi, vfi, pmid, p, pdel, 1/pdel, ps, precl, testcase)  
    146      
     161    DO l=1,llm 
     162      DO j=jj_begin,jj_end 
     163        DO i=ii_begin,ii_end 
     164          ij=(j-1)*iim+i 
     165          Tfi(ij,l)=T(ij,llm+1-l) 
     166          ufi(ij,l)=u(ij,llm+1-l) 
     167          vfi(ij,l)=v(ij,llm+1-l) 
     168          qfi(ij,l)=q(ij,llm+1-l) 
     169        ENDDO 
     170      ENDDO 
     171    ENDDO        
     172     
     173!    q=0 
     174    out_i=T 
     175     
     176    CALL simple_physics(iim*jjm, llm, dt, lat, tfi, qfi , ufi, vfi, pmid, pint, pdel, 1/pdel, ps, precl, testcase)  
     177     
     178    DO l=1,llm 
     179      DO j=jj_begin,jj_end 
     180        DO i=ii_begin,ii_end 
     181          ij=(j-1)*iim+i 
     182          T(ij,l)=Tfi(ij,llm+1-l) 
     183          utemp(ij,l)=ufi(ij,llm+1-l) 
     184          vtemp(ij,l)=vfi(ij,llm+1-l) 
     185          q(ij,l)=qfi(ij,llm+1-l) 
     186        ENDDO 
     187      ENDDO 
     188    ENDDO        
     189 
     190 
    147191    DO l=1,llm 
    148192      DO j=jj_begin,jj_end 
     
    153197      ENDDO 
    154198    ENDDO        
     199 
     200    out_i=q 
    155201         
    156     ufi=ufi-u 
    157     vfi=vfi-v 
    158  
    159     DO l=1,llm 
    160       DO j=jj_begin,jj_end 
    161         DO i=ii_begin,ii_end 
    162           ij=(j-1)*iim+i 
    163           uc(ij,:,l)=ufi(ij,l)*elon_i(ij,:)+vfi(ij,l)*elat_i(ij,:) 
     202    utemp=utemp-u 
     203    vtemp=vtemp-v 
     204 
     205    DO l=1,llm 
     206      DO j=jj_begin,jj_end 
     207        DO i=ii_begin,ii_end 
     208          ij=(j-1)*iim+i 
     209          uc(ij,:,l)=utemp(ij,l)*elon_i(ij,:)+vtemp(ij,l)*elat_i(ij,:) 
    164210        ENDDO 
    165211      ENDDO 
    166212    ENDDO 
    167213 
    168     out_i=ufi 
     214!    out_i=ufi 
    169215     
    170216    DO l=1,llm 
     
    469515      end do 
    470516 
     517      IF (test==0) return 
    471518!=============================================================================== 
    472519! Send variables to history file - THIS PROCESS WILL BE MODEL SPECIFIC 
Note: See TracChangeset for help on using the changeset viewer.