Ignore:
Timestamp:
03/07/18 18:43:51 (6 years ago)
Author:
dubos
Message:

devel/unstructured : towards vertical remapping

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/Python/src/kernels_transport.jin

    r615 r685  
    158158  ! First diagnose geopotential and temperature, column-wise 
    159159  BARRIER 
    160   SEQUENCE_EXT 
     160  SEQUENCE_C1 
    161161    PROLOGUE(llm) 
    162162      pk(CELL) = ptop + .5*g*rhodz(CELL) 
     
    225225 
    226226END_BLOCK 
     227 
     228KERNEL(remap_eta) 
     229! IN  : rhodz, mass_dak, mass_dbk 
     230! TMP : mass_col, cur_lev, new_rhodz_cum 
     231! OUT : rhodz, old_rhodz, eta 
     232    SEQUENCE_C1 
     233      PROLOGUE('1') 
     234        rhodz_cum(CELL)=0. 
     235        cur_lev(HIDX(CELL))=1 
     236        eta(CELL)=0. 
     237        new_rhodz_cum(HIDX(CELL))=0. 
     238      END_BLOCK 
     239      BODY('1,llm') 
     240        rhodz_cum(UP(CELL)) = rhodz_cum(CELL) + rhodz(CELL) 
     241      END_BLOCK 
     242      EPILOGUE('llm+1') 
     243        mass_col(HIDX(CELL)) = rhodz_cum(CELL) 
     244      END_BLOCK 
     245 
     246      BODY('1,llm') 
     247        old_rhodz(CELL) = rhodz(CELL) 
     248        rhodz(CELL) = mass_dak(CELL) + mass_col(HIDX(CELL))*mass_dbk(CELL) 
     249        rhodz_cum_target = new_rhodz_cum(HIDX(CELL)) + rhodz(CELL) 
     250        DO level = cur_lev(HIDX(CELL)), llm 
     251           rhodz_cum_levp1 = rhodz_cum(AT_LEVEL(CELL,level+1)) 
     252           IF(rhodz_cum_target<=rhodz_cum_levp1) EXIT 
     253        END DO 
     254        rhodz_cum_lev = rhodz_cum(AT_LEVEL(CELL,level)) 
     255        ! now rhodz_cum_lev <= rhodz_cum_target <= rhodz_cum_levp1   
     256        cur_lev(HIDX(CELL)) = level 
     257        new_rhodz_cum(HIDX(CELL)) = rhodz_cum_target 
     258        eta(UP(CELL)) = level + (rhodz_cum_target-rhodz_cum_lev)/(rhodz_cum_levp1-rhodz_cum_lev) 
     259      END_BLOCK 
     260    END_BLOCK 
     261END_BLOCK 
     262 
     263KERNEL(remap_theta) 
     264! IN  : thetarhodz, eta 
     265! TMP : thetarhodz_cum, new_thetarhodz_cum 
     266! OUT : thetarhodz 
     267    SEQUENCE_C1 
     268      PROLOGUE('1') 
     269        thetarhodz_cum(CELL)=0. 
     270      END_BLOCK 
     271      BODY('1,llm') 
     272        thetarhodz_cum(UP(CELL)) = thetarhodz_cum(CELL) + thetarhodz(CELL) 
     273      END_BLOCK 
     274         
     275      BODY('1,llm+1') 
     276        X = eta(CELL) 
     277        level = FLOOR(X) 
     278        X = X-level 
     279        new_thetarhodz_cum(CELL) = thetarhodz_cum(AT_LEVEL(CELL,level))+X*thetarhodz(AT_LEVEL(CELL,level)) 
     280      END_BLOCK 
     281      BODY('1,llm') 
     282        thetarhodz(CELL)) = new_thetarhodz_cum(UP(CELL)) - new_thetarhodz_cum(CELL) 
     283      END_BLOCK 
     284    END_BLOCK 
     285END_BLOCK 
     286 
     287KERNEL(remap_u) 
     288! IN  : u, old_rhodz, rhodz, eta 
     289! TMP : urhodz_cum, new_urhodz_cum 
     290! OUT : u 
     291    SEQUENCE_E0 
     292      PROLOGUE('1') 
     293        urhodz_cum(EDGE)=0. 
     294      END_BLOCK 
     295      BODY('1,llm') 
     296        urhodz(EDGE) = u(EDGE)*(old_rhodz(CELL1)+old_rhodz(CELL2)) 
     297        urhodz_cum(UP(EDGE)) = urhodz_cum(EDGE) + urhodz(EDGE) 
     298      END_BLOCK 
     299         
     300      BODY('1,llm+1') 
     301        X = .5*(eta(CELL1)+eta(CELL2)) 
     302        level = FLOOR(X) 
     303        X = X-level 
     304        new_urhodz_cum(EDGE) = urhodz_cum(AT_LEVEL(EDGE,level))+X*urhodz(AT_LEVEL(EDGE,level)) 
     305      END_BLOCK 
     306      BODY('1,llm') 
     307        u(EDGE) = (new_urhodz_cum(UP(EDGE)) - new_urhodz_cum(EDGE)) / (rhodz(CELL1)+rhodz(CELL2)) 
     308      END_BLOCK 
     309    END_BLOCK 
     310END_BLOCK 
Note: See TracChangeset for help on using the changeset viewer.