Changeset 889


Ignore:
Timestamp:
06/13/19 10:12:33 (5 years ago)
Author:
ymipsl
Message:

OpenMP fix when using "phys_smooth_tendency=y"

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/trunk/src/physics/physics_external.F90

    r873 r889  
    3434 
    3535    CALL initialize_external_physics 
     36!$OMP PARALLEL     
    3637    CALL allocate_field(f_theta_rhodz0, field_t, type_real, llm, nqdyn, name='theta_rhodz0') 
    3738    CALL allocate_field(f_u0,field_u,type_real,llm,name='u0') 
     
    4647    phys_smooth_tendency=.FALSE. 
    4748    CALL getin("phys_smooth_tendency",phys_smooth_tendency) 
    48      
     49!$OMP END PARALLEL     
    4950         
    5051  END SUBROUTINE init_physics 
     
    8889 
    8990    IF (phys_smooth_tendency) THEN 
    90      
     91 
    9192      IF (MOD(it_,itau_physics)==1) THEN 
    9293        DO ind=1, ndomain 
     
    103104          rhodz=f_rhodz(ind) 
    104105        
    105           theta_rhodz0(:,:,1)=theta_rhodz(:,:,1) 
    106           u0=u 
    107           q0=q 
     106          theta_rhodz0(:,ll_begin:ll_end,1)=theta_rhodz(:,ll_begin:ll_end,1) 
     107          u0(:,ll_begin:ll_end)=u(:,ll_begin:ll_end) 
     108          q0(:,ll_begin:ll_end,:)=q(:,ll_begin:ll_end,:) 
    108109          CALL compute_rhodz(.TRUE., ps, rhodz) 
    109110        ENDDO 
     
    129130          rhodz=f_rhodz(ind) 
    130131        
    131           dtheta_rhodz(:,:,1)=(theta_rhodz(:,:,1)-theta_rhodz0(:,:,1))/itau_physics 
    132           du=(u-u0)/itau_physics 
    133     
     132          dtheta_rhodz(:,ll_begin:ll_end,1)=(theta_rhodz(:,ll_begin:ll_end,1)-theta_rhodz0(:,ll_begin:ll_end,1))/itau_physics 
     133           
     134          du(:,ll_begin:ll_end)=(u(:,ll_begin:ll_end)-u0(:,ll_begin:ll_end))/itau_physics 
     135          
    134136          DO iq=1, nqtot 
    135             dq(:,:,iq)=((q(:,:,iq)-q0(:,:,iq))/itau_physics)*rhodz(:,:) 
     137            dq(:,ll_begin:ll_end,iq)=((q(:,ll_begin:ll_end,iq)-q0(:,ll_begin:ll_end,iq))/itau_physics)*rhodz(:,ll_begin:ll_end) 
    136138          ENDDO 
    137139          
    138           theta_rhodz(:,:,1)=theta_rhodz0(:,:,1) 
    139           u=u0 
    140           q=q0 
     140          theta_rhodz(:,ll_begin:ll_end,1)=theta_rhodz0(:,ll_begin:ll_end,1) 
     141          u(:,ll_begin:ll_end)=u0(:,ll_begin:ll_end) 
     142          q(:,ll_begin:ll_end,:)=q0(:,ll_begin:ll_end,:) 
    141143        ENDDO 
    142144     ENDIF 
     
    156158       ps=f_ps(ind) 
    157159 
    158        u=u+du 
    159        theta_rhodz=theta_rhodz+dtheta_rhodz 
     160       u(:,ll_begin:ll_end)=u(:,ll_begin:ll_end)+du(:,ll_begin:ll_end) 
     161       theta_rhodz(:,ll_begin:ll_end,1)=theta_rhodz(:,ll_begin:ll_end,1)+dtheta_rhodz(:,ll_begin:ll_end,1) 
    160162       CALL compute_rhodz(.TRUE., ps, rhodz) 
    161163       DO iq=1, nqtot 
    162          q(:,:,iq)=q(:,:,iq)+dq(:,:,iq)/rhodz(:,:) 
     164         q(:,ll_begin:ll_end,iq)=q(:,ll_begin:ll_end,iq)+dq(:,ll_begin:ll_end,iq)/rhodz(:,ll_begin:ll_end) 
    163165       ENDDO 
    164166     ENDDO 
     167!$OMP BARRIER 
    165168    
    166169   ELSE 
Note: See TracChangeset for help on using the changeset viewer.