Changeset 148


Ignore:
Timestamp:
03/18/13 15:44:08 (11 years ago)
Author:
ymipsl
Message:

Various optimisations

  • dissipation is not called every timestep (similar way than LMDZ)
  • transfert size of halos has been reduced : need to synchronise redondant data between tiles at itau_sync timestep

YM

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

Legend:

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

    r141 r148  
    1111  !========================================================================== 
    1212 
    13   SUBROUTINE init_advect(normal,tangent) 
     13  SUBROUTINE init_advect(normal,tangent,one_over_sqrt_leng) 
    1414    IMPLICIT NONE 
    1515    REAL(rstd),INTENT(OUT) :: normal(3*iim*jjm,3) 
    1616    REAL(rstd),INTENT(OUT) :: tangent(3*iim*jjm,3) 
     17    REAL(rstd),INTENT(OUT) :: one_over_sqrt_leng(iim*jjm) 
    1718 
    1819    INTEGER :: i,j,n 
     
    3940          tangent(n+u_ldown,:)=xyz_v(n+z_down,:)-xyz_v(n+z_ldown,:) 
    4041          tangent(n+u_ldown,:)=tangent(n+u_ldown,:)/sqrt(sum(tangent(n+u_ldown,:)**2)+1e-50) 
    41        END DO 
     42 
     43          one_over_sqrt_leng(n) = 1./sqrt(max(sum((xyz_v(n+z_up,:) - xyz_i(n,:))**2),sum((xyz_v(n+z_down,:) - xyz_i(n,:))**2), & 
     44                                          sum((xyz_v(n+z_rup,:) - xyz_i(n,:))**2),sum((xyz_v(n+z_rdown,:) - xyz_i(n,:))**2),  & 
     45                                          sum((xyz_v(n+z_lup,:) - xyz_i(n,:))**2),sum((xyz_v(n+z_ldown,:) - xyz_i(n,:))**2)) ) 
     46       ENDDO 
    4247    ENDDO 
    4348 
     
    4651  !======================================================================================= 
    4752 
    48   SUBROUTINE compute_gradq3d(qi,gradq3d) 
     53  SUBROUTINE compute_gradq3d(qi,one_over_sqrt_leng,gradq3d) 
     54    USE trace 
    4955    IMPLICIT NONE 
    5056    REAL(rstd),INTENT(IN)  :: qi(iim*jjm,llm) 
     57    REAL(rstd),INTENT(IN)  :: one_over_sqrt_leng(iim*jjm) 
    5158    REAL(rstd),INTENT(OUT) :: gradq3d(iim*jjm,llm,3)  
    5259    REAL(rstd) :: maxq,minq,minq_c,maxq_c  
    53     REAL(rstd) :: alphamx,alphami,alpha ,maggrd,leng 
     60    REAL(rstd) :: alphamx,alphami,alpha ,maggrd 
    5461    REAL(rstd) :: leng1,leng2 
    5562    REAL(rstd) :: arr(2*iim*jjm) 
     63    REAL(rstd) :: ar(iim*jjm) 
    5664    REAL(rstd) :: gradtri(2*iim*jjm,llm,3)  
    57     REAL(rstd) :: ar 
    5865    INTEGER :: i,j,n,k,ind,l 
     66 
     67    CALL trace_start("compute_gradq3d") 
    5968 
    6069    ! TODO : precompute ar, drop arr as output argument of gradq ? 
     
    6776          DO i=ii_begin-1,ii_end+1 
    6877             n=(j-1)*iim+i    
    69              CALL gradq(n,n+t_rup,n+t_lup,n+z_up,qi(:,l),gradtri(n+z_up,l,:),arr(n+z_up)) 
    70              CALL gradq(n,n+t_ldown,n+t_rdown,n+z_down,qi(:,l),gradtri(n+z_down,l,:),arr(n+z_down)) 
     78             CALL gradq(n,l,n+t_rup,n+t_lup,n+z_up,qi,gradtri(n+z_up,l,:),arr(n+z_up)) 
     79             CALL gradq(n,l,n+t_ldown,n+t_rdown,n+z_down,qi,gradtri(n+z_down,l,:),arr(n+z_down)) 
    7180          END DO 
    7281       END DO 
    7382    END DO 
    7483 
    75     !      Do l =1,llm 
    76     DO j=jj_begin,jj_end 
    77        DO i=ii_begin,ii_end 
    78           n=(j-1)*iim+i 
    79           gradq3d(n,:,:) = gradtri(n+z_up,:,:) + gradtri(n+z_down,:,:)   +   & 
    80                gradtri(n+z_rup,:,:) +  gradtri(n+z_ldown,:,:)   +   &  
    81                gradtri(n+z_lup,:,:)+    gradtri(n+z_rdown,:,:)   
    82           ar = arr(n+z_up)+arr(n+z_lup)+arr(n+z_ldown)+arr(n+z_down)+arr(n+z_rdown)+arr(n+z_rup) 
    83           gradq3d(n,:,:) = gradq3d(n,:,:)/(ar+1.e-50)  
    84        END DO 
    85     END DO 
    86     !    END DO 
     84    DO j=jj_begin-1,jj_end+1 
     85      DO i=ii_begin-1,ii_end+1 
     86         n=(j-1)*iim+i    
     87         ar(n) = arr(n+z_up)+arr(n+z_lup)+arr(n+z_ldown)+arr(n+z_down)+arr(n+z_rdown)+arr(n+z_rup)+1.e-50 
     88      ENDDO 
     89    ENDDO 
     90       
     91    DO k=1,3 
     92      DO l =1,llm 
     93        DO j=jj_begin,jj_end 
     94           DO i=ii_begin,ii_end 
     95              n=(j-1)*iim+i 
     96              gradq3d(n,l,k) = ( gradtri(n+z_up,l,k) + gradtri(n+z_down,l,k)   +   & 
     97                                 gradtri(n+z_rup,l,k) +  gradtri(n+z_ldown,l,k)   +   &  
     98                                 gradtri(n+z_lup,l,k)+    gradtri(n+z_rdown,l,k) ) / ar(n)   
     99           END DO 
     100        END DO 
     101      END DO 
     102    ENDDO 
    87103 
    88104    !============================================================================================= LIMITING  
     
    94110             maggrd =  dot_product(gradq3d(n,l,:),gradq3d(n,l,:)) 
    95111             maggrd = sqrt(maggrd)  
    96              leng = max(sum((xyz_v(n+z_up,:) - xyz_i(n,:))**2),sum((xyz_v(n+z_down,:) - xyz_i(n,:))**2), & 
    97                   sum((xyz_v(n+z_rup,:) - xyz_i(n,:))**2),sum((xyz_v(n+z_rdown,:) - xyz_i(n,:))**2),  & 
    98                   sum((xyz_v(n+z_lup,:) - xyz_i(n,:))**2),sum((xyz_v(n+z_ldown,:) - xyz_i(n,:))**2)) 
    99              maxq_c = qi(n,l) + maggrd*sqrt(leng) 
    100              minq_c = qi(n,l) - maggrd*sqrt(leng) 
     112!             leng = max(sum((xyz_v(n+z_up,:) - xyz_i(n,:))**2),sum((xyz_v(n+z_down,:) - xyz_i(n,:))**2), & 
     113!                  sum((xyz_v(n+z_rup,:) - xyz_i(n,:))**2),sum((xyz_v(n+z_rdown,:) - xyz_i(n,:))**2),  & 
     114!                  sum((xyz_v(n+z_lup,:) - xyz_i(n,:))**2),sum((xyz_v(n+z_ldown,:) - xyz_i(n,:))**2)) 
     115!             maxq_c = qi(n,l) + maggrd*sqrt(leng(n)) 
     116!             minq_c = qi(n,l) - maggrd*sqrt(leng(n)) 
     117             maxq_c = qi(n,l) + maggrd*one_over_sqrt_leng(n) 
     118             minq_c = qi(n,l) - maggrd*one_over_sqrt_leng(n) 
    101119             maxq = max(qi(n,l),qi(n+t_right,l),qi(n+t_lup,l),qi(n+t_rup,l),qi(n+t_left,l), & 
    102120                  qi(n+t_rdown,l),qi(n+t_ldown,l)) 
     
    112130       END DO 
    113131    END DO 
     132 
     133  CALL trace_end("compute_gradq3d") 
    114134  END SUBROUTINE compute_gradq3d 
    115135 
    116136  ! Backward trajectories, for use with Miura approach 
    117137  SUBROUTINE compute_backward_traj(normal,tangent,ue,tau, cc) 
     138    USE trace 
    118139    IMPLICIT NONE 
    119140    REAL(rstd),INTENT(IN)    :: normal(3*iim*jjm,3) 
     
    125146    REAL(rstd) :: v_e(3), up_e, qe, ed(3)     
    126147    INTEGER :: i,j,n,l 
     148 
     149    CALL trace_start("compute_backward_traj") 
    127150 
    128151    ! TODO : compute normal displacement ue*tau as hfluxt / mass(upwind) then reconstruct tangential displacement 
     
    181204       ENDDO 
    182205    END DO 
     206 
     207    CALL trace_end("compute_backward_traj") 
     208 
    183209  END SUBROUTINE compute_backward_traj 
    184210 
     
    186212  ! Slope-limited van Leer approach with hexagons 
    187213  SUBROUTINE compute_advect_horiz(update_mass,hfluxt,cc,gradq3d, mass,qi)  
     214    USE trace 
    188215    IMPLICIT NONE 
    189216    LOGICAL, INTENT(IN)       :: update_mass 
     
    197224    REAL(rstd) :: qflux(3*iim*jjm,llm) 
    198225    INTEGER :: i,j,n,k,l 
     226 
     227    CALL trace_start("compute_advect_horiz") 
    199228 
    200229    ! evaluate tracer field at point cc using piecewise linear reconstruction 
     
    262291    END DO 
    263292 
     293    CALL trace_end("compute_advect_horiz") 
    264294  CONTAINS 
    265295 
     
    275305 
    276306  !========================================================================== 
    277   PURE SUBROUTINE gradq(n0,n1,n2,n3,q,dq,det) 
    278     IMPLICIT NONE 
    279     INTEGER, INTENT(IN) :: n0,n1,n2,n3 
    280     REAL(rstd), INTENT(IN)     :: q(iim*jjm) 
     307  PURE SUBROUTINE gradq(n0,l,n1,n2,n3,q,dq,det) 
     308    IMPLICIT NONE 
     309    INTEGER, INTENT(IN) :: n0,l,n1,n2,n3 
     310    REAL(rstd), INTENT(IN)     :: q(iim*jjm,llm) 
    281311    REAL(rstd), INTENT(OUT)    :: dq(3), det 
    282312     
     
    293323    A(3,1)=xyz_v(n3,1);              A(3,2)= xyz_v(n3,2);            A(3,3)=xyz_v(n3,3) 
    294324 
    295     dq(1) = q(n1)-q(n0) 
    296     dq(2) = q(n2)-q(n0) 
     325    dq(1) = q(n1,l)-q(n0,l) 
     326    dq(2) = q(n2,l)-q(n0,l) 
    297327    dq(3) = 0.0 
    298328    !    CALL DGESV(3,1,A,3,IPIV,dq(:),3,info) 
  • codes/icosagcm/trunk/src/advect_tracer.f90

    r146 r148  
    88  TYPE(t_field),POINTER :: f_gradq3d(:) 
    99  TYPE(t_field),POINTER :: f_cc(:)  ! starting point of backward-trajectory (Miura approach) 
    10  
     10  TYPE(t_field),POINTER :: f_one_over_sqrt_leng(:) 
     11  
    1112  REAL(rstd), PARAMETER :: pente_max=2.0 ! for vlz 
    1213 
     
    1920    REAL(rstd),POINTER :: tangent(:,:) 
    2021    REAL(rstd),POINTER :: normal(:,:) 
     22    REAL(rstd),POINTER :: one_over_sqrt_leng(:) 
    2123    INTEGER :: ind 
    2224 
     
    2527    CALL allocate_field(f_gradq3d,field_t,type_real,llm,3, name='gradq3d') 
    2628    CALL allocate_field(f_cc,field_u,type_real,llm,3, name='cc') 
     29    CALL allocate_field(f_one_over_sqrt_leng,field_t,type_real, name='one_over_sqrt_leng') 
    2730 
    2831    DO ind=1,ndomain 
     
    3134       normal=f_normal(ind) 
    3235       tangent=f_tangent(ind) 
    33        CALL init_advect(normal,tangent) 
     36       one_over_sqrt_leng=f_one_over_sqrt_leng(ind) 
     37       CALL init_advect(normal,tangent,one_over_sqrt_leng) 
    3438    END DO 
    3539 
     
    4953    TYPE(t_field),POINTER :: f_rhodz(:)    ! mass field at beginning of macro time step 
    5054 
    51     REAL(rstd),POINTER :: q(:,:,:), normal(:,:), tangent(:,:), gradq3d(:,:,:), cc(:,:,:) 
     55    REAL(rstd),POINTER :: q(:,:,:), normal(:,:), tangent(:,:), one_over_sqrt_leng(:), gradq3d(:,:,:), cc(:,:,:) 
    5256    REAL(rstd),POINTER :: hfluxt(:,:), wfluxt(:,:) 
    5357    REAL(rstd),POINTER :: rhodz(:,:), u(:,:)  
     
    106110       rhodz   = f_rhodz(ind) 
    107111       wfluxt  = f_wfluxt(ind)  
     112 
    108113       DO k = 1, nqtot 
    109           CALL vlz(k==nqtot,0.5, wfluxt,rhodz,q(:,:,k)) 
    110        END DO 
     114          CALL vlz(k==nqtot,0.5, wfluxt,rhodz,q(:,:,k),1) 
     115       END DO 
     116 
    111117       CALL compute_backward_traj(tangent,normal,u,0.5*dt*itau_adv, cc)  
    112118    END DO 
    113119 
    114     CALL transfert_request(f_q,req_i1)      ! necessary ? 
    115     CALL transfert_request(f_rhodz,req_i1)  ! necessary ? 
     120!    CALL transfert_request(f_q,req_i1)      ! necessary ? 
     121!    CALL transfert_request(f_rhodz,req_i1)  ! necessary ? 
    116122 
    117123    ! horizontal transport - split in two to place transfer of gradq3d 
     
    123129          q       = f_q(ind) 
    124130          gradq3d = f_gradq3d(ind) 
    125           CALL compute_gradq3d(q(:,:,k),gradq3d) 
     131          one_over_sqrt_leng=f_one_over_sqrt_leng(ind) 
     132          CALL compute_gradq3d(q(:,:,k),one_over_sqrt_leng,gradq3d) 
    126133       END DO 
    127134 
    128135       CALL transfert_request(f_gradq3d,req_i1) 
     136 
     137 
    129138 
    130139       DO ind=1,ndomain 
     
    140149    END DO  
    141150     
    142     CALL transfert_request(f_q,req_i1)      ! necessary ? 
    143     CALL transfert_request(f_rhodz,req_i1)  ! necessary ? 
     151!    CALL transfert_request(f_q,req_i1)      ! necessary ? 
     152!    CALL transfert_request(f_rhodz,req_i1)  ! necessary ? 
    144153     
    145154    ! 1/2 vertical transport 
     
    151160       wfluxt  = f_wfluxt(ind)  
    152161       DO k = 1,nqtot 
    153           CALL vlz(k==nqtot, 0.5,wfluxt,rhodz, q(:,:,k)) 
     162          CALL vlz(k==nqtot, 0.5,wfluxt,rhodz, q(:,:,k),0) 
    154163       END DO 
    155164    END DO 
     
    159168  END SUBROUTINE advect_tracer 
    160169 
    161   SUBROUTINE vlz(update_mass, fac,wfluxt,mass, q) 
     170  SUBROUTINE vlz(update_mass, fac,wfluxt,mass, q, halo) 
    162171    ! 
    163172    !     Auteurs:   P.Le Van, F.Hourdin, F.Forget, T. Dubos 
     
    168177    !     wfluxt >0 for upward transport 
    169178    !    ******************************************************************** 
     179    USE trace 
    170180    IMPLICIT NONE 
    171181    LOGICAL, INTENT(IN)       :: update_mass 
     
    173183    REAL(rstd), INTENT(INOUT) :: mass(iim*jjm,llm) 
    174184    REAL(rstd), INTENT(INOUT) :: q(iim*jjm,llm) 
     185    INTEGER, INTENT(IN) :: halo 
    175186 
    176187    REAL(rstd) :: dq(iim*jjm,llm), & ! increase of q 
     
    182193    INTEGER :: i,ij,l,j 
    183194 
     195    CALL trace_start("vlz") 
     196 
    184197    ! finite difference of q 
    185198    DO l=2,llm 
    186        DO j=jj_begin-1,jj_end+1 
    187           DO i=ii_begin-1,ii_end+1 
     199       DO j=jj_begin-halo,jj_end+halo 
     200          DO i=ii_begin-halo,ii_end+halo 
    188201             ij=(j-1)*iim+i 
    189202             dzqw(ij,l)=q(ij,l)-q(ij,l-1) 
     
    196209    ! dzq = slope*dz, i.e. the reconstructed q varies by dzq inside level l 
    197210    DO l=2,llm-1 
    198        DO j=jj_begin-1,jj_end+1 
    199           DO i=ii_begin-1,ii_end+1 
     211       DO j=jj_begin-halo,jj_end+halo 
     212          DO i=ii_begin-halo,ii_end+halo 
    200213             ij=(j-1)*iim+i 
    201214             IF(dzqw(ij,l)*dzqw(ij,l+1).gt.0.) THEN 
     
    211224 
    212225    ! 0 slope in top and bottom layers 
    213     DO j=jj_begin-1,jj_end+1 
    214        DO i=ii_begin-1,ii_end+1 
     226    DO j=jj_begin-halo,jj_end+halo 
     227       DO i=ii_begin-halo,ii_end+halo 
    215228          ij=(j-1)*iim+i 
    216229          dzq(ij,1)=0. 
     
    222235    ! then amount of q leaving level l/l+1 = wq = w * qq 
    223236    DO l = 1,llm-1 
    224        DO j=jj_begin-1,jj_end+1 
    225           DO i=ii_begin-1,ii_end+1 
     237       DO j=jj_begin-halo,jj_end+halo 
     238          DO i=ii_begin-halo,ii_end+halo 
    226239             ij=(j-1)*iim+i 
    227240             w = fac*wfluxt(ij,l+1) 
     
    238251    END DO 
    239252    ! wq = 0 at top and bottom 
    240     DO j=jj_begin-1,jj_end+1 
    241        DO i=ii_begin-1,ii_end+1 
     253    DO j=jj_begin-halo,jj_end+halo 
     254       DO i=ii_begin-halo,ii_end+halo 
    242255          ij=(j-1)*iim+i 
    243256          wq(ij,llm+1)=0. 
     
    248261    ! update q, mass is updated only after all q's have been updated 
    249262    DO l=1,llm 
    250        DO j=jj_begin-1,jj_end+1 
    251           DO i=ii_begin-1,ii_end+1 
     263       DO j=jj_begin-halo,jj_end+halo 
     264          DO i=ii_begin-halo,ii_end+halo 
    252265             ij=(j-1)*iim+i 
    253266             newmass = mass(ij,l) + fac*(wfluxt(ij,l)-wfluxt(ij,l+1)) 
     
    258271    END DO 
    259272 
     273    CALL trace_end("vlz") 
     274 
    260275  END SUBROUTINE vlz 
    261276 
  • codes/icosagcm/trunk/src/caldyn_gcm_opt.f90

    r147 r148  
    111111     
    112112    CALL trace_start("caldyn") 
    113     CALL transfert_request(f_phis,req_i1)  
    114113    CALL transfert_request(f_ps,req_i1)  
    115114    CALL transfert_request(f_theta_rhodz,req_i1)  
  • codes/icosagcm/trunk/src/dissip_gcm.f90

    r146 r148  
    2727  REAL, save    :: rayleigh_tau 
    2828   
    29   INTEGER,SAVE :: idissip 
     29!  INTEGER,SAVE :: itau_dissip 
    3030  REAL,SAVE    :: dtdissip 
    3131   
     
    5757  USE mpi_mod 
    5858  USE mpipara 
     59  USE time_mod 
    5960   
    6061  IMPLICIT NONE 
     
    7576  INTEGER               :: l 
    7677  CHARACTER(len=255)    :: rayleigh_friction_key 
     78  REAL(rstd)            :: mintau 
    7779   
    7880             
     
    415417       tau_divgrad(l) = tau_divgrad(l)/zvert 
    416418    ENDDO 
     419 
     420    mintau=tau_graddiv(1) 
     421    DO l=1,llm 
     422      mintau=MIN(mintau,tau_graddiv(l)) 
     423      mintau=MIN(mintau,tau_gradrot(l)) 
     424      mintau=MIN(mintau,tau_divgrad(l)) 
     425    ENDDO 
    417426        
    418 !    idissip=INT(MIN(tetagdiv,tetagrot)/(2.*dt)) 
    419 !    idissip=MAX(1,idissip) 
    420 !    dtdissip=idissip*dt 
    421 !    PRINT *,"idissip",idissip," dtdissip ",dtdissip 
     427    itau_dissip=INT(mintau/dt) 
     428    itau_dissip=MAX(1,itau_dissip) 
     429    dtdissip=itau_dissip*dt 
     430    IF (is_mpi_root) PRINT *,"mintau ",mintau,"itau_dissip",itau_dissip," dtdissip ",dtdissip 
    422431 
    423432  END SUBROUTINE init_dissip  
     
    431440  USE geopotential_mod 
    432441  USE trace 
     442  USE time_mod 
    433443  IMPLICIT NONE 
    434444    TYPE(t_field),POINTER :: f_ue(:) 
     
    475485            n=(j-1)*iim+i 
    476486 
    477             due(n+u_right,l) = -0.5*( due_diss1(n+u_right,l)/tau_graddiv(l) + due_diss2(n+u_right,l)/tau_gradrot(l) ) 
    478             due(n+u_lup,l)   = -0.5*( due_diss1(n+u_lup,l)  /tau_graddiv(l) + due_diss2(n+u_lup,l)  /tau_gradrot(l) ) 
    479             due(n+u_ldown,l) = -0.5*( due_diss1(n+u_ldown,l)/tau_graddiv(l) + due_diss2(n+u_ldown,l)/tau_gradrot(l) ) 
    480  
    481             dtheta_rhodz(n,l) = -0.5*dtheta_rhodz_diss(n,l)/tau_divgrad(l) 
     487            due(n+u_right,l) = -0.5*( due_diss1(n+u_right,l)/tau_graddiv(l) + due_diss2(n+u_right,l)/tau_gradrot(l))*itau_dissip  
     488            due(n+u_lup,l)   = -0.5*( due_diss1(n+u_lup,l)  /tau_graddiv(l) + due_diss2(n+u_lup,l)  /tau_gradrot(l))*itau_dissip 
     489            due(n+u_ldown,l) = -0.5*( due_diss1(n+u_ldown,l)/tau_graddiv(l) + due_diss2(n+u_ldown,l)/tau_gradrot(l))*itau_dissip 
     490 
     491            dtheta_rhodz(n,l) = -0.5*dtheta_rhodz_diss(n,l)/tau_divgrad(l)*itau_dissip 
    482492          ENDDO 
    483493        ENDDO 
     
    736746    REAL(rstd),INTENT(IN)  :: ue(iim*3*jjm,ll) 
    737747    REAL(rstd),INTENT(OUT) :: gradivu_e(iim*3*jjm,ll) 
    738     REAL(rstd),SAVE,ALLOCATABLE :: divu_i(:,:) 
     748    REAL(rstd) :: divu_i(iim*jjm,ll) 
    739749     
    740750    INTEGER :: i,j,n,l 
    741751 
    742 !$OMP BARRIER 
    743 !$OMP MASTER 
    744       ALLOCATE(divu_i(iim*jjm,ll)) 
    745 !$OMP END MASTER 
    746 !$OMP BARRIER 
    747  
    748752    DO l=1,ll 
    749 !$OMP DO 
    750753      DO j=jj_begin,jj_end 
    751754        DO i=ii_begin,ii_end 
     
    762765     
    763766    DO l=1,ll 
    764 !$OMP DO 
    765767      DO j=jj_begin,jj_end 
    766768        DO i=ii_begin,ii_end 
     
    779781 
    780782    DO l=1,ll 
    781 !$OMP DO 
    782783      DO j=jj_begin,jj_end 
    783784        DO i=ii_begin,ii_end 
     
    790791    ENDDO 
    791792 
    792 !$OMP BARRIER 
    793 !$OMP MASTER 
    794       DEALLOCATE(divu_i) 
    795 !$OMP END MASTER 
    796 !$OMP BARRIER 
    797  
    798      
     793    
    799794  END SUBROUTINE compute_gradiv 
    800795   
     
    805800    REAL(rstd),INTENT(IN)  :: theta(iim*jjm,ll) 
    806801    REAL(rstd),INTENT(OUT) :: divgrad_i(iim*jjm,ll) 
    807     REAL(rstd),SAVE,ALLOCATABLE :: grad_e(:,:) 
     802    REAL(rstd)  :: grad_e(3*iim*jjm,ll) 
    808803 
    809804    INTEGER :: i,j,n,l 
    810805 
    811 !$OMP BARRIER 
    812 !$OMP MASTER 
    813       ALLOCATE(grad_e(3*iim*jjm,ll)) 
    814 !$OMP END MASTER 
    815 !$OMP BARRIER 
    816          
     806        
    817807    DO l=1,ll 
    818 !$OMP DO 
    819808      DO j=jj_begin-1,jj_end+1 
    820809        DO i=ii_begin-1,ii_end+1 
     
    834823     
    835824    DO l=1,ll 
    836 !$OMP DO 
    837825      DO j=jj_begin,jj_end 
    838826        DO i=ii_begin,ii_end 
     
    849837    
    850838    DO l=1,ll 
    851 !$OMP DO 
    852839      DO j=jj_begin,jj_end 
    853840        DO i=ii_begin,ii_end 
     
    857844      ENDDO 
    858845    ENDDO 
    859  
    860 !$OMP BARRIER 
    861 !$OMP MASTER 
    862       DEALLOCATE(grad_e) 
    863 !$OMP END MASTER 
    864 !$OMP BARRIER 
    865846 
    866847  END SUBROUTINE compute_divgrad 
     
    873854    REAL(rstd),INTENT(IN)  :: ue(iim*3*jjm,ll) 
    874855    REAL(rstd),INTENT(OUT) :: gradrot_e(iim*3*jjm,ll) 
    875     REAL(rstd),SAVE,ALLOCATABLE  :: rot_v(:,:) 
     856    REAL(rstd) :: rot_v(2*iim*jjm,ll) 
    876857 
    877858    INTEGER :: i,j,n,l 
    878  
    879 !$OMP BARRIER 
    880 !$OMP MASTER 
    881       ALLOCATE(rot_v(2*iim*jjm,ll)) 
    882 !$OMP END MASTER 
    883 !$OMP BARRIER 
    884859      
    885860    DO l=1,ll 
    886 !$OMP DO 
    887861      DO j=jj_begin-1,jj_end+1 
    888862        DO i=ii_begin-1,ii_end+1 
     
    902876   
    903877    DO l=1,ll 
    904 !$OMP DO 
    905878      DO j=jj_begin,jj_end 
    906879        DO i=ii_begin,ii_end 
     
    918891 
    919892    DO l=1,ll 
    920 !$OMP DO 
    921893      DO j=jj_begin,jj_end 
    922894        DO i=ii_begin,ii_end 
     
    930902      ENDDO 
    931903    ENDDO   
    932      
    933 !$OMP BARRIER 
    934 !$OMP MASTER 
    935       DEALLOCATE(rot_v) 
    936 !$OMP END MASTER 
    937 !$OMP BARRIER  
    938904    
    939905  END SUBROUTINE compute_gradrot 
  • codes/icosagcm/trunk/src/timeloop_gcm.f90

    r146 r148  
    66 
    77  INTEGER, PARAMETER :: euler=1, rk4=2, mlf=3 
     8  INTEGER  :: itau_sync=10 
    89 
    910CONTAINS 
     
    1920  USE mpipara 
    2021  USE trace 
     22  USE transfert_mod 
    2123  IMPLICIT NONE 
    2224  TYPE(t_field),POINTER :: f_phis(:) 
     
    4749  CHARACTER(len=255) :: scheme_name 
    4850  LOGICAL :: fluxt_zero(ndomain) ! set to .TRUE. to start accumulating fluxes in time 
     51  LOGICAL, PARAMETER :: check=.FALSE. 
    4952!  INTEGER :: itaumax 
    5053!  REAL(rstd) ::write_period 
     
    132135  CALL init_advect_tracer 
    133136  CALL init_physics 
    134    
     137 
     138    
    135139  CALL etat0(f_ps,f_phis,f_theta_rhodz,f_u, f_q) 
    136140  CALL writefield("phis",f_phis,once=.TRUE.) 
     
    155159  END DO 
    156160   
     161  CALL transfert_request(f_phis,req_i0)  
     162  CALL transfert_request(f_phis,req_i1)  
     163 
    157164  DO it=0,itaumax 
    158  
     165    IF (MOD(it,itau_sync)==0) THEN 
     166      CALL transfert_request(f_ps,req_i0) 
     167      CALL transfert_request(f_theta_rhodz,req_i0)  
     168      CALL transfert_request(f_u,req_e0_vect) 
     169      CALL transfert_request(f_q,req_i0)  
     170    ENDIF 
     171     
    159172    IF (is_mpi_root) PRINT *,"It No :",It,"   t :",dt*It 
    160173    IF (mod(it,itau_out)==0 ) THEN 
     
    188201    END DO 
    189202 
    190     CALL dissip(f_u,f_du,f_ps,f_phis, f_theta_rhodz,f_dtheta_rhodz) 
    191     CALL euler_scheme(.FALSE.) 
     203    IF (MOD(it+1,itau_dissip)==0) THEN 
     204      CALL dissip(f_u,f_du,f_ps,f_phis, f_theta_rhodz,f_dtheta_rhodz) 
     205      CALL euler_scheme(.FALSE.) 
     206    ENDIF 
    192207 
    193208    IF(MOD(it+1,itau_adv)==0) THEN 
    194        CALL transfert_request(f_wfluxt,req_i1) ! FIXME 
     209!       CALL transfert_request(f_wfluxt,req_i1) ! FIXME 
    195210!       CALL transfert_request(f_hfluxt,req_e1) ! FIXME 
    196211 
     
    199214 
    200215       ! FIXME : check that rhodz is consistent with ps 
    201        CALL transfert_request(f_rhodz,req_i1) 
    202        CALL transfert_request(f_ps,req_i1) 
    203        CALL transfert_request(f_dps,req_i1) ! FIXME 
    204        CALL transfert_request(f_wflux,req_i1) ! FIXME 
    205        DO ind=1,ndomain 
    206           CALL swap_dimensions(ind) 
    207           CALL swap_geometry(ind) 
    208           rhodz=f_rhodz(ind); ps=f_ps(ind); dps=f_dps(ind);  
    209           wflux=f_wflux(ind); wfluxt=f_wfluxt(ind) 
    210           CALL compute_rhodz(.FALSE., ps, rhodz)    
    211        END DO 
     216       IF (check) THEN 
     217         CALL transfert_request(f_rhodz,req_i1) 
     218         CALL transfert_request(f_ps,req_i1) 
     219         CALL transfert_request(f_dps,req_i1) ! FIXME 
     220         CALL transfert_request(f_wflux,req_i1) ! FIXME 
     221         DO ind=1,ndomain 
     222            CALL swap_dimensions(ind) 
     223            CALL swap_geometry(ind) 
     224            rhodz=f_rhodz(ind); ps=f_ps(ind); dps=f_dps(ind);  
     225            wflux=f_wflux(ind); wfluxt=f_wfluxt(ind) 
     226            CALL compute_rhodz(.FALSE., ps, rhodz)    
     227         END DO 
     228       ENDIF 
    212229 
    213230    END IF 
     
    222239    LOGICAL :: with_dps 
    223240    INTEGER :: ind 
    224  
     241    INTEGER :: i,j,ij,l 
    225242    CALL trace_start("Euler_scheme")   
    226243 
     
    229246       CALL swap_geometry(ind) 
    230247       IF(with_dps) THEN 
    231           ps=f_ps(ind) ; dps=f_dps(ind) ;  
    232           ps(:)=ps(:)+dt*dps(:) 
    233           hflux=f_hflux(ind);     hfluxt=f_hfluxt(ind) 
    234           wflux=f_wflux(ind);     wfluxt=f_wfluxt(ind) 
    235           CALL accumulate_fluxes(hflux,wflux,hfluxt,wfluxt,dt,fluxt_zero(ind)) 
     248         ps=f_ps(ind) ; dps=f_dps(ind) ;  
     249 
     250         DO j=jj_begin,jj_end 
     251           DO i=ii_begin,ii_end 
     252             ij=(j-1)*iim+i 
     253             ps(ij)=ps(ij)+dt*dps(ij) 
     254           ENDDO 
     255         ENDDO 
     256         hflux=f_hflux(ind);     hfluxt=f_hfluxt(ind) 
     257         wflux=f_wflux(ind);     wfluxt=f_wfluxt(ind) 
     258         CALL accumulate_fluxes(hflux,wflux,hfluxt,wfluxt,dt,fluxt_zero(ind)) 
    236259       END IF 
     260        
    237261       u=f_u(ind) ; theta_rhodz=f_theta_rhodz(ind) 
    238262       du=f_du(ind) ; dtheta_rhodz=f_dtheta_rhodz(ind) 
    239        u(:,:)=u(:,:)+dt*du(:,:) 
    240        theta_rhodz(:,:)=theta_rhodz(:,:)+dt*dtheta_rhodz(:,:) 
     263 
     264       DO l=1,llm 
     265         DO j=jj_begin,jj_end 
     266           DO i=ii_begin,ii_end 
     267             ij=(j-1)*iim+i 
     268             u(ij+u_right,l)=u(ij+u_right,l)+dt*du(ij+u_right,l) 
     269             u(ij+u_lup,l)=u(ij+u_lup,l)+dt*du(ij+u_lup,l) 
     270             u(ij+u_ldown,l)=u(ij+u_ldown,l)+dt*du(ij+u_ldown,l) 
     271             theta_rhodz(ij,l)=theta_rhodz(ij,l)+dt*dtheta_rhodz(ij,l) 
     272           ENDDO 
     273         ENDDO 
     274       ENDDO 
    241275    ENDDO 
    242276 
     
    250284      REAL(rstd), DIMENSION(4), PARAMETER :: coef = (/ .25, 1./3., .5, 1. /) 
    251285      REAL(rstd) :: tau 
     286      INTEGER :: i,j,ij,l 
    252287   
    253288      CALL trace_start("RK_scheme")   
     
    263298          
    264299         IF (stage==1) THEN ! first stage : save model state in XXm1 
    265             psm1(:)=ps(:) ; um1(:,:)=u(:,:) ; theta_rhodzm1(:,:)=theta_rhodz(:,:) 
     300 
     301           DO j=jj_begin,jj_end 
     302             DO i=ii_begin,ii_end 
     303               ij=(j-1)*iim+i 
     304               psm1(ij)=ps(ij) 
     305             ENDDO 
     306           ENDDO 
     307               
     308           DO l=1,llm 
     309             DO j=jj_begin,jj_end 
     310               DO i=ii_begin,ii_end 
     311                 ij=(j-1)*iim+i 
     312                 um1(ij+u_right,l)=u(ij+u_right,l) 
     313                 um1(ij+u_lup,l)=u(ij+u_lup,l) 
     314                 um1(ij+u_ldown,l)=u(ij+u_ldown,l) 
     315                 theta_rhodzm1(ij,l)=theta_rhodz(ij,l) 
     316               ENDDO 
     317             ENDDO 
     318           ENDDO 
     319 
    266320         END IF 
    267321         ! updates are of the form x1 := x0 + tau*f(x1) 
    268          ps(:)=psm1(:)+tau*dps(:) 
    269          u(:,:)=um1(:,:)+tau*du(:,:) 
    270          theta_rhodz(:,:)=theta_rhodzm1(:,:)+tau*dtheta_rhodz(:,:) 
     322         DO j=jj_begin,jj_end 
     323           DO i=ii_begin,ii_end 
     324             ij=(j-1)*iim+i 
     325             ps(ij)=psm1(ij)+tau*dps(ij) 
     326           ENDDO 
     327         ENDDO 
     328          
     329         DO l=1,llm 
     330           DO j=jj_begin,jj_end 
     331             DO i=ii_begin,ii_end 
     332               ij=(j-1)*iim+i 
     333               u(ij+u_right,l)=um1(ij+u_right,l)+tau*du(ij+u_right,l) 
     334               u(ij+u_lup,l)=um1(ij+u_lup,l)+tau*du(ij+u_lup,l) 
     335               u(ij+u_ldown,l)=um1(ij+u_ldown,l)+tau*du(ij+u_ldown,l) 
     336               theta_rhodz(ij,l)=theta_rhodzm1(ij,l)+tau*dtheta_rhodz(ij,l) 
     337             ENDDO 
     338           ENDDO 
     339         ENDDO 
     340 
    271341         IF(stage==nb_stage) THEN ! accumulate mass fluxes at last stage 
    272342            hflux=f_hflux(ind);     hfluxt=f_hfluxt(ind) 
     
    450520    REAL(rstd), INTENT(IN) :: tau 
    451521    LOGICAL, INTENT(INOUT) :: fluxt_zero 
     522    INTEGER :: l,i,j,ij 
     523 
    452524    IF(fluxt_zero) THEN 
    453525!       PRINT *, 'Accumulating fluxes (first)' 
    454526       fluxt_zero=.FALSE. 
    455        hfluxt = tau*hflux 
    456        wfluxt = tau*wflux 
     527       DO l=1,llm 
     528         DO j=jj_begin-1,jj_end+1 
     529           DO i=ii_begin-1,ii_end+1 
     530             ij=(j-1)*iim+i 
     531             hfluxt(ij+u_right,l) = tau*hflux(ij+u_right,l) 
     532             hfluxt(ij+u_lup,l) = tau*hflux(ij+u_lup,l) 
     533             hfluxt(ij+u_ldown,l) = tau*hflux(ij+u_ldown,l) 
     534           ENDDO 
     535         ENDDO 
     536       ENDDO 
     537 
     538       DO l=1,llm+1 
     539         DO j=jj_begin,jj_end 
     540           DO i=ii_begin,ii_end 
     541             ij=(j-1)*iim+i 
     542             wfluxt(ij,l) = tau*wflux(ij,l) 
     543           ENDDO 
     544         ENDDO 
     545       ENDDO 
    457546    ELSE 
    458547!       PRINT *, 'Accumulating fluxes (next)' 
    459        hfluxt = hfluxt + tau*hflux 
    460        wfluxt = wfluxt + tau*wflux 
     548       DO l=1,llm 
     549         DO j=jj_begin-1,jj_end+1 
     550           DO i=ii_begin-1,ii_end+1 
     551             ij=(j-1)*iim+i 
     552             hfluxt(ij+u_right,l) = hfluxt(ij+u_right,l)+tau*hflux(ij+u_right,l) 
     553             hfluxt(ij+u_lup,l) = hfluxt(ij+u_lup,l)+tau*hflux(ij+u_lup,l) 
     554             hfluxt(ij+u_ldown,l) = hfluxt(ij+u_ldown,l)+tau*hflux(ij+u_ldown,l) 
     555           ENDDO 
     556         ENDDO 
     557       ENDDO 
     558 
     559       DO l=1,llm+1 
     560         DO j=jj_begin,jj_end 
     561           DO i=ii_begin,ii_end 
     562             ij=(j-1)*iim+i 
     563             wfluxt(ij,l) = wfluxt(ij,l)+tau*wflux(ij,l) 
     564           ENDDO 
     565         ENDDO 
     566       ENDDO 
     567 
    461568    END IF 
    462569  END SUBROUTINE accumulate_fluxes 
  • codes/icosagcm/trunk/src/transfert.F90

    r146 r148  
    33#ifdef CPP_USING_MPI 
    44  USE transfert_mpi_mod, ONLY : init_transfert, transfert_request=>transfert_request_mpi, req_i1,req_e1_vect, & 
    5                                 req_e1_scal,request_add_point, create_request, gather_field 
     5                                req_e1_scal, req_i0, req_e0_vect, req_e0_scal, request_add_point, create_request, gather_field 
    66#else  
    77  USE transfert_mpi_mod, ONLY : init_transfert, transfert_request, req_i1,req_e1_vect, & 
  • codes/icosagcm/trunk/src/transfert_mpi.f90

    r146 r148  
    3737  TYPE(t_request),POINTER :: req_e1_vect(:) 
    3838   
     39  TYPE(t_request),POINTER :: req_i0(:) 
     40  TYPE(t_request),POINTER :: req_e0_scal(:) 
     41  TYPE(t_request),POINTER :: req_e0_vect(:) 
     42   
    3943   
    4044CONTAINS 
     
    6973     
    7074      DO i=ii_begin,ii_end 
    71         CALL request_add_point(ind,i,jj_begin,req_i1) 
     75!        CALL request_add_point(ind,i,jj_begin,req_i1) 
    7276      ENDDO 
    7377 
    7478      DO j=jj_begin,jj_end 
    75         CALL request_add_point(ind,ii_end,j,req_i1) 
     79!        CALL request_add_point(ind,ii_end,j,req_i1) 
    7680      ENDDO     
    7781     
    7882      DO i=ii_begin,ii_end 
    79         CALL request_add_point(ind,i,jj_end,req_i1) 
     83!        CALL request_add_point(ind,i,jj_end,req_i1) 
    8084      ENDDO     
    8185 
    8286      DO j=jj_begin,jj_end 
    83         CALL request_add_point(ind,ii_begin,j,req_i1) 
     87!        CALL request_add_point(ind,ii_begin,j,req_i1) 
    8488      ENDDO     
    8589     
     
    8791   
    8892    CALL finalize_request(req_i1) 
    89    
     93 
     94 
     95    CALL create_request(field_t,req_i0) 
     96 
     97    DO ind=1,ndomain 
     98      CALL swap_dimensions(ind) 
     99     
     100      DO i=ii_begin,ii_end 
     101        CALL request_add_point(ind,i,jj_begin,req_i0) 
     102      ENDDO 
     103 
     104      DO j=jj_begin,jj_end 
     105        CALL request_add_point(ind,ii_end,j,req_i0) 
     106      ENDDO     
     107     
     108      DO i=ii_begin,ii_end 
     109        CALL request_add_point(ind,i,jj_end,req_i0) 
     110      ENDDO     
     111 
     112      DO j=jj_begin,jj_end 
     113        CALL request_add_point(ind,ii_begin,j,req_i0) 
     114      ENDDO     
     115     
     116    ENDDO 
     117  
     118    CALL finalize_request(req_i0)   
     119 
     120 
    90121    CALL create_request(field_u,req_e1_scal) 
    91122    DO ind=1,ndomain 
     
    112143 
    113144      DO i=ii_begin+1,ii_end-1 
    114         CALL request_add_point(ind,i,jj_begin,req_e1_scal,right) 
    115         CALL request_add_point(ind,i,jj_end,req_e1_scal,right) 
     145!        CALL request_add_point(ind,i,jj_begin,req_e1_scal,right) 
     146!        CALL request_add_point(ind,i,jj_end,req_e1_scal,right) 
    116147      ENDDO 
    117148     
    118149      DO j=jj_begin+1,jj_end-1 
    119         CALL request_add_point(ind,ii_begin,j,req_e1_scal,rup) 
    120         CALL request_add_point(ind,ii_end,j,req_e1_scal,rup) 
     150!        CALL request_add_point(ind,ii_begin,j,req_e1_scal,rup) 
     151!        CALL request_add_point(ind,ii_end,j,req_e1_scal,rup) 
    121152      ENDDO    
    122153 
    123       CALL request_add_point(ind,ii_begin+1,jj_begin,req_e1_scal,left) 
    124       CALL request_add_point(ind,ii_begin,jj_begin+1,req_e1_scal,ldown) 
    125       CALL request_add_point(ind,ii_begin+1,jj_end,req_e1_scal,left) 
    126       CALL request_add_point(ind,ii_end,jj_begin+1,req_e1_scal,ldown) 
     154!      CALL request_add_point(ind,ii_begin+1,jj_begin,req_e1_scal,left) 
     155!      CALL request_add_point(ind,ii_begin,jj_begin+1,req_e1_scal,ldown) 
     156!      CALL request_add_point(ind,ii_begin+1,jj_end,req_e1_scal,left) 
     157!      CALL request_add_point(ind,ii_end,jj_begin+1,req_e1_scal,ldown) 
    127158 
    128159    ENDDO 
    129160 
    130161    CALL finalize_request(req_e1_scal) 
     162 
     163 
     164    CALL create_request(field_u,req_e0_scal) 
     165    DO ind=1,ndomain 
     166      CALL swap_dimensions(ind) 
     167 
     168 
     169      DO i=ii_begin+1,ii_end-1 
     170        CALL request_add_point(ind,i,jj_begin,req_e0_scal,right) 
     171        CALL request_add_point(ind,i,jj_end,req_e0_scal,right) 
     172      ENDDO 
     173     
     174      DO j=jj_begin+1,jj_end-1 
     175        CALL request_add_point(ind,ii_begin,j,req_e0_scal,rup) 
     176        CALL request_add_point(ind,ii_end,j,req_e0_scal,rup) 
     177      ENDDO    
     178 
     179      CALL request_add_point(ind,ii_begin+1,jj_begin,req_e0_scal,left) 
     180      CALL request_add_point(ind,ii_begin,jj_begin+1,req_e0_scal,ldown) 
     181      CALL request_add_point(ind,ii_begin+1,jj_end,req_e0_scal,left) 
     182      CALL request_add_point(ind,ii_end,jj_begin+1,req_e0_scal,ldown) 
     183 
     184    ENDDO 
     185 
     186    CALL finalize_request(req_e0_scal) 
     187 
     188 
    131189     
    132190    CALL create_request(field_u,req_e1_vect,.TRUE.) 
     
    154212 
    155213      DO i=ii_begin+1,ii_end-1 
    156         CALL request_add_point(ind,i,jj_begin,req_e1_vect,right) 
    157         CALL request_add_point(ind,i,jj_end,req_e1_vect,right) 
     214!        CALL request_add_point(ind,i,jj_begin,req_e1_vect,right) 
     215!        CALL request_add_point(ind,i,jj_end,req_e1_vect,right) 
    158216      ENDDO 
    159217     
    160218      DO j=jj_begin+1,jj_end-1 
    161         CALL request_add_point(ind,ii_begin,j,req_e1_vect,rup) 
    162         CALL request_add_point(ind,ii_end,j,req_e1_vect,rup) 
     219!        CALL request_add_point(ind,ii_begin,j,req_e1_vect,rup) 
     220!        CALL request_add_point(ind,ii_end,j,req_e1_vect,rup) 
    163221      ENDDO    
    164222 
    165       CALL request_add_point(ind,ii_begin+1,jj_begin,req_e1_vect,left) 
    166       CALL request_add_point(ind,ii_begin,jj_begin+1,req_e1_vect,ldown) 
    167       CALL request_add_point(ind,ii_begin+1,jj_end,req_e1_vect,left) 
    168       CALL request_add_point(ind,ii_end,jj_begin+1,req_e1_vect,ldown) 
    169  
     223!      CALL request_add_point(ind,ii_begin+1,jj_begin,req_e1_vect,left) 
     224!      CALL request_add_point(ind,ii_begin,jj_begin+1,req_e1_vect,ldown) 
     225!      CALL request_add_point(ind,ii_begin+1,jj_end,req_e1_vect,left) 
     226!      CALL request_add_point(ind,ii_end,jj_begin+1,req_e1_vect,ldown) 
    170227   
    171228    ENDDO   
    172229 
    173230    CALL finalize_request(req_e1_vect) 
     231     
     232     
     233    CALL create_request(field_u,req_e0_vect,.TRUE.) 
     234    DO ind=1,ndomain 
     235      CALL swap_dimensions(ind) 
     236  
     237      DO i=ii_begin+1,ii_end-1 
     238        CALL request_add_point(ind,i,jj_begin,req_e0_vect,right) 
     239        CALL request_add_point(ind,i,jj_end,req_e0_vect,right) 
     240      ENDDO 
     241     
     242      DO j=jj_begin+1,jj_end-1 
     243        CALL request_add_point(ind,ii_begin,j,req_e0_vect,rup) 
     244        CALL request_add_point(ind,ii_end,j,req_e0_vect,rup) 
     245      ENDDO    
     246 
     247      CALL request_add_point(ind,ii_begin+1,jj_begin,req_e0_vect,left) 
     248      CALL request_add_point(ind,ii_begin,jj_begin+1,req_e0_vect,ldown) 
     249      CALL request_add_point(ind,ii_begin+1,jj_end,req_e0_vect,left) 
     250      CALL request_add_point(ind,ii_end,jj_begin+1,req_e0_vect,ldown) 
     251   
     252    ENDDO   
     253 
     254    CALL finalize_request(req_e0_vect) 
     255 
    174256 
    175257  END SUBROUTINE init_transfert 
     
    533615  USE mpi_mod 
    534616  USE mpipara 
     617  USE trace 
    535618  IMPLICIT NONE 
    536619    TYPE(t_field),POINTER :: field(:) 
     
    553636    INTEGER :: dim3,dim4 
    554637 
     638    CALL trace_start("transfert_mpi") 
     639     
    555640    IF (field(1)%data_type==type_real) THEN 
    556641      IF (field(1)%ndim==2) THEN 
     
    747832       
    748833    ENDIF 
     834 
     835    CALL trace_end("transfert_mpi") 
    749836     
    750837  END SUBROUTINE transfert_request_mpi 
Note: See TracChangeset for help on using the changeset viewer.