Ignore:
Timestamp:
Aug 17, 2006, 5:41:51 PM (18 years ago)
Author:
Laurent Fairhead
Message:

Inclusion des modifs de Y. Meurdesoif pour la version V3
LF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/branches/V3_test/libf/phylmd/readsulfate.F

    r640 r704  
    22! $Header$
    33!
    4       SUBROUTINE readsulfate (r_day, first, sulfate)
    5      
     4      SUBROUTINE readsulfate (r_day, first, sulfate_p)
     5      USE dimphy, klon=>klon2,klon2=>klon
    66      IMPLICIT none
    77     
     
    3434#include "chem.h"     
    3535#include "dimensions.h"     
    36 #include "dimphy.h"     
     36cym#include "dimphy.h"     
    3737#include "temps.h"     
    3838c
     
    4545c Output:     
    4646c -------     
     47      REAL*8  sulfate_p(klon_omp,klev)
    4748      REAL*8  sulfate (klon, klev)  ! Mass of sulfate (monthly mean data,
    4849                                  !  from file) [ug SO4/m3]
     50      REAL*8,SAVE,ALLOCATABLE :: sulfate_mpi(:,:)
    4951c     
    5052c Local Variables:
     
    6264      REAL*8 so4_2(iim, jjm+1, klev, 12)   ! The sulfate distributions
    6365     
    64       REAL*8 so4(klon, klev, 12)  ! SO4 in right dimension
    65       SAVE so4
    66       REAL*8 so4_out(klon, klev)
    67       SAVE so4_out
     66cym      REAL*8 so4(klon, klev, 12)  ! SO4 in right dimension
     67cym      SAVE so4
     68cym      REAL*8 so4_out(klon, klev)
     69cym      SAVE so4_out
     70
     71      REAL*8,allocatable,save :: so4(:, :, :)  ! SO4 in right dimension
     72      REAL*8,allocatable,save :: so4_out(:, :)
     73c$OMP THREADPRIVATE(so4,so4_out)
    6874     
    6975      LOGICAL lnewday
    7076      LOGICAL lonlyone
    7177      PARAMETER (lonlyone=.FALSE.)
    72 
     78      logical,save :: first2=.true.
     79c$OMP THREADPRIVATE(first2)
     80
     81c$OMP MASTER
     82      if (first2) then
     83     
     84        allocate( so4(klon, klev, 12) )
     85        allocate( so4_out(klon, klev))
     86        allocate(sulfate_mpi(klon_mpi,klev)) 
     87        first2=.false.
     88       
     89      endif
     90
     91      if (phy_rank==0) then
     92           
    7393      iday = INT(r_day)
    7494     
     
    265285
    266286      ENDIF ! Did I have to do anything (was it a new day?)
    267      
     287
     288      endif   ! phy_rank==0
     289     
     290      call ScatterField(sulfate,sulfate_mpi,klev)
     291c$OMP END MASTER
     292      call ScatterField_omp(sulfate_mpi,sulfate_p,klev)           
     293
    268294      RETURN
    269295      END
     
    277303c-----------------------------------------------------------------------------
    278304     
    279       SUBROUTINE readsulfate_preind (r_day, first, pi_sulfate)
    280      
     305      SUBROUTINE readsulfate_preind (r_day, first, pi_sulfate_p)
     306      USE dimphy, klon=>klon2,klon2=>klon
    281307      IMPLICIT none
    282308     
     
    305331#include "chem.h"     
    306332#include "dimensions.h"     
    307 #include "dimphy.h"     
     333cym#include "dimphy.h"     
    308334#include "temps.h"     
    309335c
     
    316342c Output:     
    317343c -------     
     344      REAL*8  pi_sulfate_p (klon_omp, klev) 
     345                                 
    318346      REAL*8  pi_sulfate (klon, klev)  ! Number conc. sulfate (monthly mean data,
    319                                   !  from file)
     347                                  !  from fil
     348      REAL*8,SAVE,ALLOCATABLE :: pi_sulfate_mpi(:,:)                     
    320349c     
    321350c Local Variables:
     
    327356      INTEGER im, day1, day2, im2, ismaller
    328357      REAL*8 pi_so4_1(iim, jjm+1, klev, 12)
    329      
    330       REAL*8 pi_so4(klon, klev, 12)  ! SO4 in right dimension
    331       SAVE pi_so4
    332       REAL*8 pi_so4_out(klon, klev)
    333       SAVE pi_so4_out
     358
     359cym      REAL*8 pi_so4(klon, klev, 12)  ! SO4 in right dimension
     360cym      SAVE pi_so4
     361cym      REAL*8 pi_so4_out(klon, klev)
     362cym      SAVE pi_so4_out
     363
     364      REAL*8,allocatable,save :: pi_so4(:, :, :)  ! SO4 in right dimension
     365      REAL*8,allocatable,save :: pi_so4_out(:, :)
     366c$OMP THREADPRIVATE(pi_so4,pi_so4_out)           
    334367     
    335368      CHARACTER*4 cyear
    336369      LOGICAL lnewday
    337 
     370      logical,save :: first2=.true.
     371c$OMP THREADPRIVATE(first2)
     372
     373c$OMP MASTER
     374      if (first2) then
     375     
     376        allocate( pi_so4(klon, klev, 12) )
     377        allocate( pi_so4_out(klon, klev))
     378        allocate(pi_sulfate_mpi (klon_mpi, klev)) 
     379        first2=.false.
     380       
     381      endif
     382
     383      if (phy_rank==0) then
     384   
    338385     
    339386
     
    479526
    480527      ENDIF ! Was this the beginning of a new day?
     528
     529      endif   ! phy_rank==0
     530     
     531      call ScatterField(pi_sulfate,pi_sulfate_mpi,klev)
     532c$OMP END MASTER
     533      call ScatterField_omp(pi_sulfate_mpi,pi_sulfate_p,klev)           
     534
    481535      RETURN
    482536      END
Note: See TracChangeset for help on using the changeset viewer.