Changeset 1325 for LMDZ4/branches


Ignore:
Timestamp:
Mar 15, 2010, 5:28:36 PM (14 years ago)
Author:
idelkadi
Message:

Decoupage du pas de temps physique en N sous-pas (splitting)

Location:
LMDZ4/branches/LMDZ4V5.0-dev/libf/dyn3dpar
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/branches/LMDZ4V5.0-dev/libf/dyn3dpar/calfis_p.F

    r1299 r1325  
    180180      REAL,SAVE,ALLOCATABLE ::  flxwfi_omp(:,:)     ! Flux de masse verticale sur la grille physiq
    181181
     182!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     183! Introduction du splitting (FH)
     184! Question pour Yann :
     185! J'ai été surpris au début que les tableaux zufi_omp, zdufi_omp n'co soitent
     186! en SAVE. Je crois comprendre que c'est parce que tu voulais qu'il
     187! soit allocatable (plutot par exemple que de passer une dimension
     188! dépendant du process en argument des routines) et que, du coup,
     189! le SAVE évite d'avoir à refaire l'allocation à chaque appel.
     190! Tu confirmes ?
     191! J'ai suivi le même principe pour les zdufic_omp
     192! Mais c'est surement bien que tu controles.
     193!
     194
     195      REAL,ALLOCATABLE,SAVE :: zdufic_omp(:,:)
     196      REAL,ALLOCATABLE,SAVE :: zdvfic_omp(:,:)
     197      REAL,ALLOCATABLE,SAVE :: zdtfic_omp(:,:)
     198      REAL,ALLOCATABLE,SAVE :: zdqfic_omp(:,:,:)
     199      REAL jH_cur_split,zdt_split
     200      LOGICAL debut_split,lafin_split
     201      INTEGER isplit
     202!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     203
    182204c$OMP THREADPRIVATE(zplev_omp,zplay_omp,zphi_omp,zphis_omp,
    183205c$OMP+                 presnivs_omp,zufi_omp,zvfi_omp,ztfi_omp,
    184206c$OMP+                 zqfi_omp,zdufi_omp,zdvfi_omp,
    185 c$OMP+                 zdtfi_omp,zdqfi_omp,zdpsrf_omp,flxwfi_omp)       
     207c$OMP+                 zdtfi_omp,zdqfi_omp,zdpsrf_omp,flxwfi_omp,
     208c$OMP+                 zdufic_omp,zdvfic_omp,zdtfic_omp,zdqfic_omp)       
    186209
    187210      LOGICAL,SAVE :: first_omp=.true.
     
    498521        allocate(zdtfi_omp(klon,llm))
    499522        allocate(zdqfi_omp(klon,llm,nqtot))
     523        allocate(zdufic_omp(klon,llm))
     524        allocate(zdvfic_omp(klon,llm))
     525        allocate(zdtfic_omp(klon,llm))
     526        allocate(zdqfic_omp(klon,llm,nqtot))
    500527        allocate(zdpsrf_omp(klon))
    501528        allocate(flxwfi_omp(klon,llm))
     
    600627      if (planet_type=="earth") then
    601628#ifdef CPP_EARTH
     629
     630      print*,'PHYSIQUE AVEC NSPLIT_PHYS=',nsplit_phys
     631      zdt_split=dtphys/nsplit_phys
     632      zdufic_omp(:,:)=0.
     633      zdvfic_omp(:,:)=0.
     634      zdtfic_omp(:,:)=0.
     635      zdqfic_omp(:,:,:)=0.
     636
     637      do isplit=1,nsplit_phys
     638
     639         jH_cur_split=jH_cur+(isplit-1) * dtvr / (daysec *nsplit_phys)
     640         debut_split=debut.and.isplit==1
     641         lafin_split=lafin.and.isplit==nsplit_phys
     642
     643
    602644      CALL physiq (klon,
    603645     .             llm,
    604      .             debut,
    605      .             lafin,
     646     .             debut_split,
     647     .             lafin_split,
    606648     .             jD_cur,
    607      .             jH_cur,
    608      .             dtphys,
     649     .             jH_cur_split,
     650     .             zdt_split,
    609651     .             zplev_omp,
    610652     .             zplay_omp,
     
    628670     .             pducov,
    629671     .             PVteta)
     672
     673         zufi_omp(:,:)=zufi_omp(:,:)+zdufi_omp(:,:)*zdt_split
     674         zvfi_omp(:,:)=zvfi_omp(:,:)+zdvfi_omp(:,:)*zdt_split
     675         ztfi_omp(:,:)=ztfi_omp(:,:)+zdtfi_omp(:,:)*zdt_split
     676         zqfi_omp(:,:,:)=zqfi_omp(:,:,:)+zdqfi_omp(:,:,:)*zdt_split
     677
     678         zdufic_omp(:,:)=zdufic_omp(:,:)+zdufi_omp(:,:)
     679         zdvfic_omp(:,:)=zdvfic_omp(:,:)+zdvfi_omp(:,:)
     680         zdtfic_omp(:,:)=zdtfic_omp(:,:)+zdtfi_omp(:,:)
     681         zdqfic_omp(:,:,:)=zdqfic_omp(:,:,:)+zdqfi_omp(:,:,:)
     682
     683      enddo
     684
     685      zdufi_omp(:,:)=zdufic_omp(:,:)/nsplit_phys
     686      zdvfi_omp(:,:)=zdvfic_omp(:,:)/nsplit_phys
     687      zdtfi_omp(:,:)=zdtfic_omp(:,:)/nsplit_phys
     688      zdqfi_omp(:,:,:)=zdqfic_omp(:,:,:)/nsplit_phys
     689
    630690#endif
    631691      endif !of if (planet_type=="earth")
  • LMDZ4/branches/LMDZ4V5.0-dev/libf/dyn3dpar/conf_gcm.F

    r1299 r1325  
    173173       CALL getin('day_step',day_step)
    174174
     175!Config  Key  = nsplit_phys
     176!Config  Desc = nombre d'iteration de la physique
     177!Config  Def  = 240
     178!Config  Help = nombre d'itration de la physique
     179!
     180       nsplit_phys = 1
     181       CALL getin('nsplit_phys',nsplit_phys)
     182
    175183!Config  Key  = iperiod
    176184!Config  Desc = periode pour le pas Matsuno
     
    603611      write(lunout,*)' day_step = ', day_step
    604612      write(lunout,*)' iperiod = ', iperiod
     613      write(lunout,*)' nsplit_phys = ', nsplit_phys
    605614      write(lunout,*)' iconser = ', iconser
    606615      write(lunout,*)' iecri = ', iecri
  • LMDZ4/branches/LMDZ4V5.0-dev/libf/dyn3dpar/control_mod.F90

    r1299 r1325  
    1111
    1212  REAL    :: periodav
    13   INTEGER :: nday,day_step,iperiod,iapp_tracvl
     13  INTEGER :: nday,day_step,iperiod,iapp_tracvl,nsplit_phys
    1414  INTEGER :: iconser,iecri,idissip,iphysiq,iecrimoy
    1515  INTEGER :: dayref,anneeref, raz_date, ip_ebil_dyn
  • LMDZ4/branches/LMDZ4V5.0-dev/libf/dyn3dpar/gcm.F

    r1316 r1325  
    422422         if (planet_type.eq."earth") then
    423423#ifdef CPP_EARTH
    424          CALL iniphysiq(ngridmx,llm,daysec,day_ini,dtphys ,
     424         CALL iniphysiq(ngridmx,llm,daysec,day_ini,dtphys/nsplit_phys ,
    425425     ,                latfi,lonfi,airefi,zcufi,zcvfi,rad,g,r,cpp     )
    426426#endif
Note: See TracChangeset for help on using the changeset viewer.