Changeset 3841


Ignore:
Timestamp:
Jul 8, 2025, 12:37:46 PM (3 days ago)
Author:
emillour
Message:

Venus PCM:
Some work towards making OpenMP work:

  • adding some threadprivate statements for saved variables (many more missing)
  • turn conf_phys.F90 into a module
  • update way of reading/writing startphy (iostart.F90/phyredem.F)

EM

Location:
trunk/LMDZ.VENUS/libf/phyvenus
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.VENUS/libf/phyvenus/chemparam_mod.F90

    r3755 r3841  
    4242
    4343real, dimension(:,:), save, allocatable :: no_emission
     44!$OMP THREADPRIVATE(no_emission)
    4445real, dimension(:,:), save, allocatable :: o2_emission
     46!$OMP THREADPRIVATE(o2_emission)
    4547
    4648!----------------------------------------------------------------------------
  • trunk/LMDZ.VENUS/libf/phyvenus/clesphys_mod.F90

    r3835 r3841  
    11MODULE clesphys_mod
    22  IMPLICIT NONE
    3   SAVE
    43
    5   LOGICAL :: cycle_diurne, soil_model
    6   LOGICAL :: ok_orodr, ok_orolf, ok_gw_nonoro
    7   LOGICAL :: ok_kzmin, tuneupperatm, ok_ionchem, ok_jonline
    8   LOGICAL :: ok_iondiff
    9   LOGICAL :: callnlte, callnirco2, callthermos
    10   LOGICAL :: ok_cloud, ok_chem, reinit_trac, ok_sedim
    11   LOGICAL :: ok_clmain, physideal, startphy_file
     4  LOGICAL,SAVE :: cycle_diurne, soil_model
     5!$OMP THREADPRIVATE(cycle_diurne, soil_model)
     6  LOGICAL,SAVE :: ok_orodr, ok_orolf, ok_gw_nonoro
     7!$OMP THREADPRIVATE(ok_orodr, ok_orolf, ok_gw_nonoro)
     8  LOGICAL,SAVE :: ok_kzmin, tuneupperatm, ok_ionchem, ok_jonline
     9!$OMP THREADPRIVATE(ok_kzmin, tuneupperatm, ok_ionchem, ok_jonline)
     10  LOGICAL,SAVE :: ok_iondiff
     11!$OMP THREADPRIVATE(ok_iondiff)
     12  LOGICAL,SAVE :: callnlte, callnirco2, callthermos
     13!$OMP THREADPRIVATE(callnlte, callnirco2, callthermos)
     14  LOGICAL,SAVE :: ok_cloud, ok_chem, reinit_trac, ok_sedim
     15!$OMP THREADPRIVATE(ok_cloud, ok_chem, reinit_trac, ok_sedim)
     16  LOGICAL,SAVE :: ok_clmain, physideal, startphy_file
     17!$OMP THREADPRIVATE(ok_clmain, physideal, startphy_file)
    1218
    13   INTEGER :: nbapp_rad, nbapp_chem, iflag_con, iflag_ajs
    14   INTEGER :: lev_histins, lev_histday, lev_histmth
    15   INTEGER :: tr_scheme, cl_scheme
    16   INTEGER :: nircorr, nltemodel, solvarmod
    17   INTEGER :: nb_mode
    18   INTEGER :: solarchoice
     19  INTEGER,SAVE :: nbapp_rad, nbapp_chem, iflag_con, iflag_ajs
     20!$OMP THREADPRIVATE(nbapp_rad, nbapp_chem, iflag_con, iflag_ajs)
     21  INTEGER,SAVE :: lev_histins, lev_histday, lev_histmth
     22!$OMP THREADPRIVATE(lev_histins, lev_histday, lev_histmth)
     23  INTEGER,SAVE :: tr_scheme, cl_scheme
     24!$OMP THREADPRIVATE(tr_scheme, cl_scheme)
     25  INTEGER,SAVE :: nircorr, nltemodel, solvarmod
     26!$OMP THREADPRIVATE(nircorr, nltemodel, solvarmod)
     27  INTEGER,SAVE :: nb_mode
     28!$OMP THREADPRIVATE(nb_mode)
     29  INTEGER,SAVE :: solarchoice
     30!$OMP THREADPRIVATE(solarchoice)
    1931
    20   REAL :: ecriphy
    21   REAL :: z0, lmixmin
    22   REAL :: ksta, inertie
    23   REAL :: euveff, fixed_euv_value
     32  REAL,SAVE :: ecriphy
     33!$OMP THREADPRIVATE(ecriphy)
     34  REAL,SAVE :: z0, lmixmin
     35!$OMP THREADPRIVATE(z0, lmixmin)
     36  REAL,SAVE :: ksta, inertie
     37!$OMP THREADPRIVATE(ksta, inertie)
     38  REAL,SAVE :: euveff, fixed_euv_value
     39!$OMP THREADPRIVATE(euveff, fixed_euv_value)
    2440
    2541END MODULE clesphys_mod
  • trunk/LMDZ.VENUS/libf/phyvenus/conf_phys.F90

    r3835 r3841  
    1 !
    2 ! $Header: /home/cvsroot/LMDZ4/libf/phylmd/conf_phys.F90,v 1.3 2005/02/07 15:15:31 fairhead Exp $
    3 !
    4 !
    5 !
     1module conf_phys_mod
     2
     3implicit none
     4
     5contains
    66
    77  subroutine conf_phys(ok_journe, ok_mensuel, ok_instan, &
     
    99   use init_print_control_mod, only: init_print_control
    1010   use print_control_mod, only: lunout
     11   use mod_phys_lmdz_para, only: is_master
    1112   use ioipsl_getin_p_mod, only: getin_p
    1213   use age_of_air_mod, only: ok_aoa, reinit_aoa, lev_aoa
     
    9394       nbapp_rad = 12
    9495       call getin_p('nbapp_rad',nbapp_rad)
    95        print*,"nbapp_rad",nbapp_rad
     96
    9697!Config  Key  = nbapp_chem
    9798!Config  Desc = Frequence d'appel a la chimie
     
    576577!
    577578!
     579  if (is_master) then ! only master needs to print this info
    578580
    579581  write(lunout,*)' ##############################################'
    580   write(lunout,*)' Configuration des parametres de la physique: '
     582  write(lunout,*)' Physics configuration and parameters: '
    581583  write(lunout,*)' cycle_diurne = ', cycle_diurne
    582584  write(lunout,*)' soil_model = ', soil_model
     
    631633  write(lunout,*)' ok_iondiff = ',ok_iondiff
    632634
     635  endif ! of if (is_master)
     636 
    633637  end subroutine conf_phys
    634638
     639end module conf_phys_mod
  • trunk/LMDZ.VENUS/libf/phyvenus/iostart.F90

    r3719 r3841  
    2828    PUBLIC get_field,get_var,put_field,put_var
    2929    PUBLIC open_startphy,close_startphy,open_restartphy,close_restartphy
     30    PUBLIC enddef_restartphy
    3031   
    3132CONTAINS
     
    140141    LOGICAL,OPTIONAL,INTENT(OUT) :: found
    141142   
    142     REAL    :: field_glo(klon_glo,field_size) ! field on global grid
    143     REAL :: field_glo_tmp(klon_glo,field_size)
    144     INTEGER :: ind_cell_glo_glo(klon_glo) ! cell indexes on global grid
     143    REAL,ALLOCATABLE :: field_glo(:,:) ! field on global grid
     144    REAL,ALLOCATABLE :: field_glo_tmp(:,:)
     145    INTEGER,ALLOCATABLE :: ind_cell_glo_glo(:) ! cell indexes on global grid
    145146    LOGICAL :: tmp_found
    146147    INTEGER :: varid
    147148    INTEGER :: ierr, i
    148149   
     150    IF (is_master) THEN
     151      ALLOCATE(ind_cell_glo_glo(klon_glo))
     152      ALLOCATE(field_glo(klon_glo,field_size))
     153      ALLOCATE(field_glo_tmp(klon_glo,field_size))
     154    ELSE
     155      ALLOCATE(ind_cell_glo_glo(0))
     156      ALLOCATE(field_glo(0,0))
     157    ENDIF
     158
    149159    ! gather columns indexes on global grid
    150160    CALL gather(ind_cell_glo,ind_cell_glo_glo)
     
    347357      ierr = NF90_DEF_DIM (nid_restart, "horizon_klevp1", klon_glo*klevp1, idim4)
    348358
    349       ierr = NF90_ENDDEF(nid_restart)
    350     ENDIF
     359!      ierr = NF90_ENDDEF(nid_restart)
     360    ENDIF ! of IF (is_master)
    351361
    352362  END SUBROUTINE open_restartphy
    353363 
     364  SUBROUTINE enddef_restartphy
     365  USE netcdf, ONLY: NF90_ENDDEF
     366  USE mod_phys_lmdz_para, ONLY: is_master
     367  IMPLICIT NONE
     368    INTEGER          :: ierr
     369
     370    IF (is_master) ierr = NF90_ENDDEF(nid_restart)
     371 
     372  END SUBROUTINE enddef_restartphy
     373
    354374  SUBROUTINE close_restartphy
    355375  USE netcdf, ONLY: NF90_CLOSE
     
    365385
    366386 
    367   SUBROUTINE put_field_r1(field_name,title,field)
    368   IMPLICIT NONE
     387  SUBROUTINE put_field_r1(pass,field_name,title,field)
     388  IMPLICIT NONE
     389  INTEGER,INTENT(IN) :: pass
    369390  CHARACTER(LEN=*),INTENT(IN)    :: field_name
    370391  CHARACTER(LEN=*),INTENT(IN)    :: title
    371392  REAL,INTENT(IN)                :: field(:)
    372393 
    373     CALL put_field_rgen(field_name,title,field,1)
     394    CALL put_field_rgen(pass,field_name,title,field,1)
    374395 
    375396  END SUBROUTINE put_field_r1
    376397
    377   SUBROUTINE put_field_r2(field_name,title,field)
    378   IMPLICIT NONE
     398  SUBROUTINE put_field_r2(pass,field_name,title,field)
     399  IMPLICIT NONE
     400  INTEGER,INTENT(IN) :: pass
    379401  CHARACTER(LEN=*),INTENT(IN)    :: field_name
    380402  CHARACTER(LEN=*),INTENT(IN)    :: title
    381403  REAL,INTENT(IN)                :: field(:,:)
    382404 
    383     CALL put_field_rgen(field_name,title,field,size(field,2))
     405    CALL put_field_rgen(pass,field_name,title,field,size(field,2))
    384406 
    385407  END SUBROUTINE put_field_r2
    386408
    387   SUBROUTINE put_field_r3(field_name,title,field)
    388   IMPLICIT NONE
     409  SUBROUTINE put_field_r3(pass,field_name,title,field)
     410  IMPLICIT NONE
     411  INTEGER,INTENT(IN) :: pass
    389412  CHARACTER(LEN=*),INTENT(IN)    :: field_name
    390413  CHARACTER(LEN=*),INTENT(IN)    :: title
    391414  REAL,INTENT(IN)                :: field(:,:,:)
    392415 
    393     CALL put_field_rgen(field_name,title,field,size(field,2)*size(field,3))
     416    CALL put_field_rgen(pass,field_name,title,field,size(field,2)*size(field,3))
    394417 
    395418  END SUBROUTINE put_field_r3
    396419 
    397   SUBROUTINE put_field_rgen(field_name,title,field,field_size)
     420  SUBROUTINE put_field_rgen(pass,field_name,title,field,field_size)
    398421  USE netcdf, ONLY: NF90_REDEF, NF90_ENDDEF, NF90_DEF_VAR, NF90_PUT_ATT, &
    399                     NF90_PUT_VAR, NF90_FLOAT, NF90_DOUBLE
     422                    NF90_INQ_VARID, NF90_PUT_VAR, NF90_FLOAT, NF90_DOUBLE
    400423  USE dimphy, ONLY: klon, klev, klevp1
    401424  USE mod_grid_phy_lmdz, ONLY: klon_glo
     
    404427
    405428  IMPLICIT NONE
     429  INTEGER,INTENT(IN) :: pass
    406430  CHARACTER(LEN=*),INTENT(IN)    :: field_name
    407431  CHARACTER(LEN=*),INTENT(IN)    :: title
     
    409433  REAL,INTENT(IN)                :: field(klon,field_size)
    410434 
    411   REAL :: field_glo(klon_glo,field_size)
    412   REAL :: field_glo_tmp(klon_glo,field_size)
    413   INTEGER :: ind_cell_glo_glo(klon_glo) ! cell indexes on global grid
     435  REAL,ALLOCATABLE :: field_glo(:,:)
     436  REAL,ALLOCATABLE :: field_glo_tmp(:,:)
     437  INTEGER,ALLOCATABLE :: ind_cell_glo_glo(:) ! cell indexes on global grid
    414438 
    415439  INTEGER                        :: ierr
     
    418442  INTEGER :: i
    419443   
    420     ! gather indexes on global grid
    421     CALL gather(ind_cell_glo,ind_cell_glo_glo)
    422     ! gather field on master
    423     CALL gather(field,field_glo_tmp)
    424    
    425     IF (is_master) THEN
    426       ! reorder columns
    427       DO i=1,klon_glo
    428         field_glo(ind_cell_glo_glo(i),:)=field_glo_tmp(i,:)
    429       ENDDO
    430      
     444! first pass : definition   
     445  IF (pass==1) THEN
     446   
     447    IF (is_master) THEN
     448
    431449      IF (field_size==1) THEN
    432450        idim=idim2
     
    440458      ENDIF
    441459         
    442       ierr = NF90_REDEF (nid_restart)
     460!      ierr = NF90_REDEF (nid_restart)
    443461#ifdef NC_DOUBLE
    444462      ierr = NF90_DEF_VAR (nid_restart, field_name, NF90_DOUBLE,(/ idim /),nvarid)
     
    447465#endif
    448466      IF (LEN_TRIM(title) > 0) ierr = NF90_PUT_ATT (nid_restart,nvarid,"title", title)
    449       ierr = NF90_ENDDEF(nid_restart)
     467!      ierr = NF90_ENDDEF(nid_restart)
     468    ENDIF ! of IF (is_master)
     469
     470! second pass : write     
     471   ELSE IF (pass==2) THEN
     472
     473     IF (is_master) THEN
     474       ALLOCATE(ind_cell_glo_glo(klon_glo))
     475       ALLOCATE(field_glo(klon_glo,field_size))
     476       ALLOCATE(field_glo_tmp(klon_glo,field_size))
     477     ELSE
     478       ALLOCATE(ind_cell_glo_glo(0))
     479       ALLOCATE(field_glo_tmp(0,0))
     480     ENDIF
     481
     482     ! gather indexes on global grid
     483    CALL gather(ind_cell_glo,ind_cell_glo_glo)
     484    ! gather field on master
     485    CALL gather(field,field_glo_tmp)
     486   
     487    IF (is_master) THEN
     488      ! reorder columns
     489      DO i=1,klon_glo
     490        field_glo(ind_cell_glo_glo(i),:)=field_glo_tmp(i,:)
     491      ENDDO
     492     
     493      ierr = NF90_INQ_VARID(nid_restart, field_name, nvarid)
    450494      ierr = NF90_PUT_VAR(nid_restart,nvarid,RESHAPE(field_glo,(/klon_glo*field_size/)))
    451     ENDIF
    452    
     495    ENDIF ! of IF(is_master)
     496   
     497   ENDIF ! of IF (pass=1) ELSE IF (pass==2)
     498
    453499   END SUBROUTINE put_field_rgen 
    454500 
    455    SUBROUTINE put_var_r0(var_name,title,var)
     501   SUBROUTINE put_var_r0(pass,var_name,title,var)
    456502   IMPLICIT NONE
     503     INTEGER,INTENT(IN) :: pass
    457504     CHARACTER(LEN=*),INTENT(IN) :: var_name
    458505     CHARACTER(LEN=*),INTENT(IN) :: title
     
    462509     varin(1)=var
    463510     
    464      CALL put_var_rgen(var_name,title,varin,size(varin))
     511     CALL put_var_rgen(pass,var_name,title,varin,size(varin))
    465512
    466513  END SUBROUTINE put_var_r0
    467514
    468515
    469    SUBROUTINE put_var_r1(var_name,title,var)
     516   SUBROUTINE put_var_r1(pass,var_name,title,var)
    470517   IMPLICIT NONE
     518     INTEGER,INTENT(IN) :: pass
    471519     CHARACTER(LEN=*),INTENT(IN) :: var_name
    472520     CHARACTER(LEN=*),INTENT(IN) :: title
    473521     REAL,INTENT(IN)             :: var(:)
    474522     
    475      CALL put_var_rgen(var_name,title,var,size(var))
     523     CALL put_var_rgen(pass,var_name,title,var,size(var))
    476524
    477525  END SUBROUTINE put_var_r1
    478526 
    479   SUBROUTINE put_var_r2(var_name,title,var)
     527  SUBROUTINE put_var_r2(pass,var_name,title,var)
    480528   IMPLICIT NONE
     529     INTEGER,INTENT(IN) :: pass
    481530     CHARACTER(LEN=*),INTENT(IN) :: var_name
    482531     CHARACTER(LEN=*),INTENT(IN) :: title
    483532     REAL,INTENT(IN)             :: var(:,:)
    484533     
    485      CALL put_var_rgen(var_name,title,var,size(var))
     534     CALL put_var_rgen(pass,var_name,title,var,size(var))
    486535
    487536  END SUBROUTINE put_var_r2     
    488537 
    489   SUBROUTINE put_var_r3(var_name,title,var)
     538  SUBROUTINE put_var_r3(pass,var_name,title,var)
    490539   IMPLICIT NONE
     540     INTEGER,INTENT(IN) :: pass
    491541     CHARACTER(LEN=*),INTENT(IN) :: var_name
    492542     CHARACTER(LEN=*),INTENT(IN) :: title
    493543     REAL,INTENT(IN)             :: var(:,:,:)
    494544     
    495      CALL put_var_rgen(var_name,title,var,size(var))
     545     CALL put_var_rgen(pass,var_name,title,var,size(var))
    496546
    497547  END SUBROUTINE put_var_r3
    498548
    499   SUBROUTINE put_var_rgen(var_name,title,var,var_size)
     549  SUBROUTINE put_var_rgen(pass,var_name,title,var,var_size)
    500550  USE netcdf, ONLY: NF90_REDEF, NF90_DEF_VAR, NF90_ENDDEF, NF90_PUT_VAR, &
    501                     NF90_PUT_ATT, NF90_FLOAT, NF90_DOUBLE
     551                    NF90_INQ_VARID, NF90_PUT_ATT, NF90_FLOAT, NF90_DOUBLE
    502552  USE mod_phys_lmdz_para, ONLY: is_master
    503553  IMPLICIT NONE
     554     INTEGER,INTENT(IN) :: pass
    504555     CHARACTER(LEN=*),INTENT(IN) :: var_name
    505556     CHARACTER(LEN=*),INTENT(IN) :: title
     
    517568      ENDIF
    518569     
    519       ierr = NF90_REDEF (nid_restart)
     570     ! first pass : definition   
     571      IF (pass==1) THEN
     572
     573!      ierr = NF90_REDEF (nid_restart)
    520574
    521575#ifdef NC_DOUBLE
    522       ierr = NF90_DEF_VAR (nid_restart, var_name, NF90_DOUBLE,(/ idim1 /),nvarid)
     576        ierr = NF90_DEF_VAR (nid_restart, var_name, NF90_DOUBLE,(/ idim1 /),nvarid)
    523577#else
    524       ierr = NF90_DEF_VAR (nid_restart, var_name, NF90_FLOAT,(/ idim1 /),nvarid)
     578        ierr = NF90_DEF_VAR (nid_restart, var_name, NF90_FLOAT,(/ idim1 /),nvarid)
    525579#endif
    526       IF (LEN_TRIM(title)>0) ierr = NF90_PUT_ATT (nid_restart,nvarid,"title", title)
    527       ierr = NF90_ENDDEF(nid_restart)
    528      
    529       ierr = NF90_PUT_VAR(nid_restart,nvarid,var)
    530 
    531     ENDIF
     580        IF (LEN_TRIM(title)>0) ierr = NF90_PUT_ATT (nid_restart,nvarid,"title", title)
     581!      ierr = NF90_ENDDEF(nid_restart)
     582     
     583    ! second pass : write     
     584      ELSE IF (pass==2) THEN
     585        ierr = NF90_INQ_VARID(nid_restart, var_name, nvarid)
     586        ierr = NF90_PUT_VAR(nid_restart,nvarid,var)
     587      ENDIF
     588
     589    ENDIF ! of IF (is_master)
    532590   
    533591  END SUBROUTINE put_var_rgen     
  • trunk/LMDZ.VENUS/libf/phyvenus/phyredem.F90

    r3835 r3841  
    1010      USE phys_state_var_mod
    1111      USE iostart, only : open_restartphy,close_restartphy, &
    12                           put_var,put_field
     12                          enddef_restartphy,put_var,put_field
    1313      use geometry_mod, only: longitude_deg, latitude_deg
    1414      USE time_phylmdz_mod, only: day_end, annee_ref, itau_phy, raz_date
     
    3333integer :: isoil
    3434CHARACTER(len=2) :: str2
    35 
     35integer :: pass
    3636
    3737! open file
     
    6060      tab_cntrl(15) = itau_phy
    6161
    62       CALL put_var("controle","Parametres de controle",tab_cntrl)
     62! write data to file
     63  DO pass=1,2   ! pass=1 netcdf definition ; pass=2 netcdf write
     64
     65      CALL put_var(pass,"controle","Parametres de controle",tab_cntrl)
    6366
    6467! coordinates
    6568
    66       CALL put_field("longitude", &
     69      CALL put_field(pass,"longitude", &
    6770                     "Longitudes de la grille physique",longitude_deg)
    6871     
    69       CALL put_field("latitude", &
     72      CALL put_field(pass,"latitude", &
    7073                     "Latitudes de la grille physique",latitude_deg)
    7174
    7275! variables
    7376
    74       CALL put_field("TS","Temperature de surface",ftsol)
     77      CALL put_field(pass,"TS","Temperature de surface",ftsol)
    7578
    7679      DO isoil=1, nsoilmx
    7780        IF (isoil.LE.99) THEN
    7881        WRITE(str2,'(i2.2)') isoil
    79         CALL put_field("Tsoil"//str2, &
     82        CALL put_field(pass,"Tsoil"//str2, &
    8083                       "Temperature du sol No."//str2,ftsoil(:,isoil))
    8184        ELSE
    82         PRINT*, "Trop de couches"
     85        PRINT*, "Too many soil layers"
    8386        CALL abort
    8487        ENDIF
    8588      ENDDO
    8689
    87       CALL put_field("ALBE","albedo de surface",falbe)
    88       CALL put_field("solsw","Rayonnement solaire a la surface",solsw)
    89       CALL put_field("sollw","Rayonnement IR a la surface",sollw)
    90       CALL put_field("fder","Derive de flux",fder)
    91       CALL put_field("dlw","Derivee flux IR",dlw)
    92       CALL put_field("sollwdown","Flux IR vers le bas a la surface",sollwdown)
    93       CALL put_field("RADS","Rayonnement net a la surface",radsol)
    94       CALL put_field("ZMEA","zmea Orographie sous-maille",zmea)
    95       CALL put_field("ZSTD","zstd Orographie sous-maille",zstd)
    96       CALL put_field("ZSIG","zsig Orographie sous-maille",zsig)
    97       CALL put_field("ZGAM","zgam Orographie sous-maille",zgam)
    98       CALL put_field("ZTHE","zthe Orographie sous-maille",zthe)
    99       CALL put_field("ZPIC","zpic Orographie sous-maille",zpic)
    100       CALL put_field("ZVAL","zval Orographie sous-maille",zval)
    101       CALL put_field("Q2","Turbulent Kinetic Energy",q2)
     90      CALL put_field(pass,"ALBE","albedo de surface",falbe)
     91      CALL put_field(pass,"solsw","Rayonnement solaire a la surface",solsw)
     92      CALL put_field(pass,"sollw","Rayonnement IR a la surface",sollw)
     93      CALL put_field(pass,"fder","Derive de flux",fder)
     94      CALL put_field(pass,"dlw","Derivee flux IR",dlw)
     95      CALL put_field(pass,"sollwdown","Flux IR vers le bas a la surface",sollwdown)
     96      CALL put_field(pass,"RADS","Rayonnement net a la surface",radsol)
     97      CALL put_field(pass,"ZMEA","zmea Orographie sous-maille",zmea)
     98      CALL put_field(pass,"ZSTD","zstd Orographie sous-maille",zstd)
     99      CALL put_field(pass,"ZSIG","zsig Orographie sous-maille",zsig)
     100      CALL put_field(pass,"ZGAM","zgam Orographie sous-maille",zgam)
     101      CALL put_field(pass,"ZTHE","zthe Orographie sous-maille",zthe)
     102      CALL put_field(pass,"ZPIC","zpic Orographie sous-maille",zpic)
     103      CALL put_field(pass,"ZVAL","zval Orographie sous-maille",zval)
     104      CALL put_field(pass,"Q2","Turbulent Kinetic Energy",q2)
    102105
    103       CALL put_field("TANCIEN","T Previous iteration",t_ancien)
     106      CALL put_field(pass,"TANCIEN","T Previous iteration",t_ancien)
    104107
    105108! Non-orographic gavity waves
    106109if (ok_gw_nonoro) then
    107    call put_field("du_nonoro_gwd","Zonal wind tendency due to GW",du_nonoro_gwd)
    108    call put_field("dv_nonoro_gwd","Meridional wind tendency due to GW",dv_nonoro_gwd)
    109    call put_field("east_gwstress","Eastward stress profile due to GW",east_gwstress)
    110    call put_field("west_gwstress","Westward stress profile due to GW",west_gwstress)
     110   call put_field(pass,"du_nonoro_gwd","Zonal wind tendency due to GW",du_nonoro_gwd)
     111   call put_field(pass,"dv_nonoro_gwd","Meridional wind tendency due to GW",dv_nonoro_gwd)
     112   call put_field(pass,"east_gwstress","Eastward stress profile due to GW",east_gwstress)
     113   call put_field(pass,"west_gwstress","Westward stress profile due to GW",west_gwstress)
    111114endif
    112115
    113116if (ok_aoa) then
    114    call put_field("age","Age of air",age)
     117   call put_field(pass,"age","Age of air",age)
    115118endif
    116119
    117 ! close file
     120! end definition mode or close file
     121    IF (pass==1) CALL enddef_restartphy
     122    IF (pass==2) CALL close_restartphy
     123  ENDDO ! DO pass=1,2   ! pass=1 netcdf definition ; pass=2 netcdf write
    118124
    119       CALL close_restartphy
    120125!$OMP BARRIER
    121126
  • trunk/LMDZ.VENUS/libf/phyvenus/physiq_mod.F

    r3835 r3841  
    6262!      USE histcom ! not needed; histcom is included in ioipsl
    6363      use dimphy
     64      use conf_phys_mod, only: conf_phys
    6465      USE geometry_mod,only: longitude, latitude, ! in radians
    6566     &                       longitude_deg,latitude_deg, ! in degrees
     
    121122#include "hedin.h"
    122123c======================================================================
    123       LOGICAL ok_journe ! sortir le fichier journalier
    124       save ok_journe
     124      LOGICAL, SAVE :: ok_journe ! sortir le fichier journalier
     125!$OMP THREADPRIVATE(ok_journe)
    125126c      PARAMETER (ok_journe=.true.)
    126127c
    127       LOGICAL ok_mensuel ! sortir le fichier mensuel
    128       save ok_mensuel
     128      LOGICAL, SAVE :: ok_mensuel ! sortir le fichier mensuel
     129!$OMP THREADPRIVATE(ok_mensuel)
     130
    129131c      PARAMETER (ok_mensuel=.true.)
    130132c
    131       LOGICAL ok_instan ! sortir le fichier instantane
    132       save ok_instan
     133      LOGICAL, SAVE :: ok_instan ! sortir le fichier instantane
     134!$OMP THREADPRIVATE(ok_instan)
    133135c      PARAMETER (ok_instan=.true.)
    134136c
     
    169171      REAL,INTENT(OUT) :: d_ps(klon)
    170172
    171       logical ok_hf
    172       real ecrit_hf
    173       integer nid_hf
    174       save ok_hf, ecrit_hf, nid_hf
     173      logical, save :: ok_hf
     174!$OMP THREADPRIVATE(ok_hf)
     175      real, save :: ecrit_hf
     176!$OMP THREADPRIVATE(ecrit_hf)
     177      integer, save :: nid_hf
     178!$OMP THREADPRIVATE(nid_hf)
    175179
    176180#ifdef histhf
     
    183187
    184188      integer,save :: itap        ! physics counter
     189!$OMP THREADPRIVATE(itap)
    185190      REAL delp(klon,klev)        ! epaisseur d'une couche
    186191      REAL omega(klon,klev)       ! vitesse verticale en Pa/s (+ downward)
     
    226231cAA
    227232      REAL,save,allocatable :: source(:,:)
     233!$OMP THREADPRIVATE(source)       
    228234      REAL ycoefh(klon,klev)    ! coef d'echange pour phytrac
    229235      REAL :: kzz_p(klev)       ! coef d'echange pour phytrac pour le 1D
     
    255261      EXTERNAL zenang
    256262      EXTERNAL diagetpq
    257       EXTERNAL conf_phys
    258263      EXTERNAL diagphy
    259264      EXTERNAL mucorr
     
    351356c Variables liees a l'ecriture de la bande histoire physique
    352357c
    353       INTEGER ecrit_mth
    354       SAVE ecrit_mth   ! frequence d'ecriture (fichier mensuel)
    355 c
    356       INTEGER ecrit_day
    357       SAVE ecrit_day   ! frequence d'ecriture (fichier journalier)
    358 c
    359       INTEGER ecrit_ins
    360       SAVE ecrit_ins   ! frequence d'ecriture (fichier instantane)
     358      INTEGER, SAVE :: ecrit_mth ! frequence d'ecriture (fichier mensuel)
     359!$OMP THREADPRIVATE(ecrit_mth)
     360      INTEGER, SAVE :: ecrit_day ! frequence d'ecriture (fichier journalier)
     361!$OMP THREADPRIVATE(ecrit_day)       
     362c
     363      INTEGER ,SAVE :: ecrit_ins   ! frequence d'ecriture (fichier instantane)
     364!$OMP THREADPRIVATE(ecrit_ins)
    361365c
    362366      integer itau_w   ! pas de temps ecriture = itap + itau_phy
     
    373377      REAL :: col_dens_tr(klon,nqmax)
    374378      REAL,allocatable,save :: prod_tr(:,:,:)
     379!$OMP THREADPRIVATE(prod_tr)
    375380      REAL,allocatable,save :: loss_tr(:,:,:)
     381!$OMP THREADPRIVATE(loss_tr)
    376382
    377383c pour ioipsl
    378       INTEGER nid_day, nid_mth, nid_ins
    379       SAVE nid_day, nid_mth, nid_ins
     384      INTEGER, SAVE :: nid_day, nid_mth, nid_ins
     385!$OMP THREADPRIVATE(nid_day,nid_mth,nid_ins)
    380386      INTEGER nhori, nvert, idayref
    381387      REAL zsto, zout, zsto1, zsto2, zero
    382388      parameter (zero=0.0e0)
    383       real zjulian
    384       save zjulian
     389      real, save :: zjulian
     390!$OMP THREADPRIVATE(zjulian)
    385391
    386392      CHARACTER*2  str2
     
    395401C     Variables liees au bilan d'energie et d'enthalpi
    396402      REAL ztsol(klon)
    397       REAL      h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot
    398      $        , h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot
    399       SAVE      h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot
    400      $        , h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot
     403      REAL, SAVE :: h_vcol_tot, h_dair_tot, h_qw_tot, h_ql_tot
     404!$OMP THREADPRIVATE(h_vcol_tot,h_dair_tot,h_qw_tot,h_ql_tot)
     405      REAL, SAVE :: h_qs_tot, qw_tot, ql_tot, qs_tot , ec_tot
     406!$OMP THREADPRIVATE(h_qs_tot,qw_tot,ql_tot,qs_tot,ec_tot)
    401407      REAL      d_h_vcol, d_h_dair, d_qt, d_qw, d_ql, d_qs, d_ec
    402       REAL      d_h_vcol_phy
     408      REAL, SAVE :: d_h_vcol_phy
     409!$OMP THREADPRIVATE(d_h_vcol_phy)
    403410      REAL      fs_bound, fq_bound
    404       SAVE      d_h_vcol_phy
    405411      REAL      zero_v(klon),zero_v2(klon,klev)
    406412      CHARACTER*15 ztit
    407       INTEGER  ip_ebil  ! PRINT level for energy conserv. diag.
    408       SAVE      ip_ebil
     413      INTEGER, SAVE :: ip_ebil  ! PRINT level for energy conserv. diag.
     414!$OMP THREADPRIVATE(ip_ebil)
    409415      DATA      ip_ebil/2/
    410       INTEGER  if_ebil ! level for energy conserv. dignostics
    411       SAVE      if_ebil
     416      INTEGER, SAVE :: if_ebil ! level for energy conserv. dignostics
     417!$OMP THREADPRIVATE(if_ebil)
    412418c+jld ec_conser
    413419      REAL d_t_ec(klon,klev)    ! tendance du a la conversion Ec -> E thermique
  • trunk/LMDZ.VENUS/libf/phyvenus/tabcontrol.h

    r815 r3841  
    1515      COMMON/ctltab_r/dtime
    1616      COMMON/ctltab/tabcntr0
     17
     18!$OMP THREADPRIVATE(/ctltab_i/,/ctltab_r/,/ctltab/)
  • trunk/LMDZ.VENUS/libf/phyvenus/turb_mod.F90

    r2534 r3841  
    33  !! variables
    44  REAL,SAVE,ALLOCATABLE :: q2(:,:)    ! Turbulent Kinetic Energy
     5!$OMP THREADPRIVATE(q2)
    56  REAL,SAVE,ALLOCATABLE :: sens(:)
     7!$OMP THREADPRIVATE(sens)
    68  REAL,allocatable,SAVE :: l0(:)      ! Characteristic mixing length
     9!$OMP THREADPRIVATE(l0)
    710  REAL,SAVE,ALLOCATABLE :: yustar(:)
     11!$OMP THREADPRIVATE(yustar)
    812  REAL,SAVE,ALLOCATABLE :: wstar(:)
     13!$OMP THREADPRIVATE(wstar)
    914  REAL,SAVE,ALLOCATABLE :: tstar(:)
     15!$OMP THREADPRIVATE(tstar)
    1016  REAL,SAVE,ALLOCATABLE :: hfmax_th(:)
     17!$OMP THREADPRIVATE(hfmax_th)
    1118  REAL,SAVE,ALLOCATABLE :: zmax_th(:)
     19!$OMP THREADPRIVATE(zmax_th)
    1220!  REAL,SAVE,ALLOCATABLE :: sensibFlux(:)
    1321  LOGICAL :: turb_resolved = .false.
    1422      ! this is a flag to say 'turbulence is resolved'
    1523      ! mostly for LES use. default is FALSE (for GCM and mesoscale)
     24!$OMP THREADPRIVATE(turb_resolved)
    1625
    1726contains
Note: See TracChangeset for help on using the changeset viewer.