Changeset 380


Ignore:
Timestamp:
05/25/16 10:00:02 (8 years ago)
Author:
ymipsl
Message:

Add module for tracer.
Some tracer can be defined as passive, ie not advected

YM

File:
1 edited

Legend:

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

    r364 r380  
    5959    USE trace 
    6060    USE write_field_mod 
     61    USE tracer_mod 
    6162    IMPLICIT NONE 
    6263     
     
    7677    REAL(rstd),POINTER ::  wq(:,:)           ! time-integrated flux of q 
    7778     
    78      INTEGER :: ind,k 
     79     INTEGER :: ind,k, nq_last 
    7980    LOGICAL,SAVE :: first=.TRUE. 
    8081!$OMP THREADPRIVATE(first) 
     
    9394 
    9495    IF(nqtot<1) RETURN 
     96    nq_last=-1 
     97     
     98    DO k = 1, nqtot 
     99      IF (advection_scheme(k)==advect_vanleer) nq_last=k 
     100    ENDDO 
     101      
     102    IF(nq_last<0) RETURN 
     103       
    95104    CALL trace_start("advect_tracer")  
    96105 
     
    123132 
    124133       DO k = 1, nqtot 
    125           CALL vlz(k==nqtot,0.5, wfluxt,rhodz,q(:,:,k),1,dzqw, adzqw, dzq, wq) 
     134          IF (advection_scheme(k)==advect_vanleer) CALL vlz(k==nq_last,0.5, wfluxt,rhodz,q(:,:,k),1,dzqw, adzqw, dzq, wq) 
    126135       END DO 
    127136 
     
    135144    ! horizontal transport - split in two to place transfer of gradq3d 
    136145    DO k = 1, nqtot 
    137        DO ind=1,ndomain 
     146      IF (advection_scheme(k)==advect_vanleer) THEN 
     147        
     148        DO ind=1,ndomain 
    138149          IF (.NOT. assigned_domain(ind)) CYCLE 
    139150          CALL swap_dimensions(ind) 
     
    144155          CALL compute_gradq3d(q(:,:,k),sqrt_leng,gradq3d,xyz_i,xyz_v) 
    145156 
    146        END DO 
    147  
    148        CALL send_message(f_gradq3d,req_gradq3d) 
    149        CALL wait_message(req_cc) 
    150        CALL wait_message(req_gradq3d) 
    151  
    152  
    153        DO ind=1,ndomain 
     157        END DO 
     158 
     159        CALL send_message(f_gradq3d,req_gradq3d) 
     160        CALL wait_message(req_cc) 
     161        CALL wait_message(req_gradq3d) 
     162 
     163 
     164        DO ind=1,ndomain 
    154165          IF (.NOT. assigned_domain(ind)) CYCLE 
    155166          CALL swap_dimensions(ind) 
     
    160171          hfluxt  = f_hfluxt(ind)  
    161172          gradq3d = f_gradq3d(ind) 
    162           CALL compute_advect_horiz(k==nqtot,hfluxt,cc,gradq3d, rhodz,q(:,:,k)) 
    163        END DO 
     173          CALL compute_advect_horiz(k==nq_last,hfluxt,cc,gradq3d, rhodz,q(:,:,k)) 
     174        END DO 
     175      ENDIF 
    164176    END DO  
    165177     
     
    180192 
    181193       DO k = 1,nqtot 
    182           CALL vlz(k==nqtot, 0.5,wfluxt,rhodz, q(:,:,k),0, dzqw, adzqw, dzq, wq) 
     194         IF (advection_scheme(k)==advect_vanleer) CALL vlz(k==nq_last, 0.5,wfluxt,rhodz, q(:,:,k),0, dzqw, adzqw, dzq, wq) 
    183195       END DO 
    184196 
Note: See TracChangeset for help on using the changeset viewer.