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)

File:
1 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")
Note: See TracChangeset for help on using the changeset viewer.