Ignore:
Timestamp:
Oct 21, 2024, 2:58:45 PM (23 hours ago)
Author:
abarral
Message:

Convert fixed-form to free-form sources .F -> .{f,F}90
(WIP: some .F remain, will be handled in subsequent commits)

File:
1 moved

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/dyn3dmem/fluxstokenc_p.f90

    r5245 r5246  
    22! $Id: caladvtrac_p.F 1299 2010-01-20 14:27:21Z fairhead $
    33!
    4 c
    5 c
    6             SUBROUTINE fluxstokenc_p(pbaru,pbarv ,
    7      *                   masse,  teta, phi)
    8       USE parallel_lmdz
    9       USE control_mod, ONLY : iapp_tracvl,planet_type,iphysiq
    10       USE caladvtrac_mod
    11       USE mod_hallo
    12       USE bands
    13       USE times
    14       USE Vampir
    15       USE write_field_loc
     4!
     5!
     6      SUBROUTINE fluxstokenc_p(pbaru,pbarv , &
     7              masse,  teta, phi)
     8  USE parallel_lmdz
     9  USE control_mod, ONLY : iapp_tracvl,planet_type,iphysiq
     10  USE caladvtrac_mod
     11  USE mod_hallo
     12  USE bands
     13  USE times
     14  USE Vampir
     15  USE write_field_loc
    1616
    17 c
    18       IMPLICIT NONE
    19 c
    20 c     Auteurs:   F.Hourdin , P.Le Van, F.Forget, F.Codron 
    21 c
    22 c=======================================================================
    23 c
    24 c       Shema de  Van Leer
    25 c
    26 c=======================================================================
     17  !
     18  IMPLICIT NONE
     19  !
     20  ! Auteurs:   F.Hourdin , P.Le Van, F.Forget, F.Codron
     21  !
     22  !=======================================================================
     23  !
     24  !   Shema de  Van Leer
     25  !
     26  !=======================================================================
    2727
    2828
    29       include "dimensions.h"
    30       include "paramet.h"
    31       include "tracstoke.h"
     29  include "dimensions.h"
     30  include "paramet.h"
     31  include "tracstoke.h"
    3232
    33 c   Arguments:
    34 c   ----------
    35       REAL :: pbaru( ijb_u:ije_u,llm ),pbarv( ijb_v:ije_v,llm)
    36       REAL :: masse(ijb_u:ije_u,llm)
    37       REAL :: teta( ijb_u:ije_u,llm)
    38       REAL :: phi(ijb_u:ije_u,llm)
    39      
    40       INTEGER,SAVE :: pasflx=0
     33  !   Arguments:
     34  !   ----------
     35  REAL :: pbaru( ijb_u:ije_u,llm ),pbarv( ijb_v:ije_v,llm)
     36  REAL :: masse(ijb_u:ije_u,llm)
     37  REAL :: teta( ijb_u:ije_u,llm)
     38  REAL :: phi(ijb_u:ije_u,llm)
     39
     40  INTEGER,SAVE :: pasflx=0
    4141!$OMP THREADPRIVATE(pasflx)
    42       INTEGER ::  ijb,ije,ijbu,ijbv,ijeu,ijev,j
    43       INTEGER :: ij,l
    44       TYPE(Request),SAVE :: Request_vanleer
     42  INTEGER ::  ijb,ije,ijbu,ijbv,ijeu,ijev,j
     43  INTEGER :: ij,l
     44  TYPE(Request),SAVE :: Request_vanleer
    4545!$OMP THREADPRIVATE(Request_vanleer)
    4646
    4747
    4848
    49       !write(*,*) 'caladvtrac 58: entree'     
    50       ijbu=ij_begin
    51       ijeu=ij_end
    52      
    53       ijbv=ij_begin-iip1
    54       ijev=ij_end
    55       if (pole_nord) ijbv=ij_begin
    56       if (pole_sud)  ijev=ij_end-iip1
     49  ! !write(*,*) 'caladvtrac 58: entree'
     50  ijbu=ij_begin
     51  ijeu=ij_end
    5752
    58       IF(pasflx.EQ.0) THEN
    59 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
    60       DO l=1,llm   
    61           tetac(ijbu:ijeu,l)=0.
    62           phic(ijbu:ijeu,l)=0.
    63           pbarucc(ijbu:ijeu,l)=0.
    64           pbarvcc(ijbv:ijev,l)=0.
    65         ENDDO
    66 c$OMP END DO NOWAIT 
    67       ENDIF
     53  ijbv=ij_begin-iip1
     54  ijev=ij_end
     55  if (pole_nord) ijbv=ij_begin
     56  if (pole_sud)  ijev=ij_end-iip1
    6857
    69 c   accumulation des flux de masse horizontaux
    70 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    71       DO l=1,llm
    72          DO ij = ijbu,ijeu
    73             pbarucc(ij,l) = pbarucc(ij,l) + pbaru(ij,l)
    74             tetac(ij,l) = tetac(ij,l) + teta(ij,l)
    75             phic(ij,l) = phic(ij,l) + phi(ij,l)
     58  IF(pasflx.EQ.0) THEN
     59!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     60  DO l=1,llm
     61      tetac(ijbu:ijeu,l)=0.
     62      phic(ijbu:ijeu,l)=0.
     63      pbarucc(ijbu:ijeu,l)=0.
     64      pbarvcc(ijbv:ijev,l)=0.
     65    ENDDO
     66!$OMP END DO NOWAIT
     67  ENDIF
    7668
    77          ENDDO
    78          DO ij = ijbv,ijev
    79             pbarvcc(ij,l) = pbarvcc(ij,l) + pbarv(ij,l)
    80          ENDDO
    81       ENDDO
    82 c$OMP END DO NOWAIT
     69  !   accumulation des flux de masse horizontaux
     70!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     71  DO l=1,llm
     72     DO ij = ijbu,ijeu
     73        pbarucc(ij,l) = pbarucc(ij,l) + pbaru(ij,l)
     74        tetac(ij,l) = tetac(ij,l) + teta(ij,l)
     75        phic(ij,l) = phic(ij,l) + phi(ij,l)
    8376
    84 c   selection de la masse instantannee des mailles avant le transport.
    85       IF(pasflx.EQ.0) THEN
     77     ENDDO
     78     DO ij = ijbv,ijev
     79        pbarvcc(ij,l) = pbarvcc(ij,l) + pbarv(ij,l)
     80     ENDDO
     81  ENDDO
     82!$OMP END DO NOWAIT
    8683
    87           ijb=ij_begin
    88           ije=ij_end
     84  !   selection de la masse instantannee des mailles avant le transport.
     85  IF(pasflx.EQ.0) THEN
    8986
    90 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    91       DO l=1,llm
    92           massec(ijb:ije,l)=masse(ijb:ije,l)
    93        ENDDO
    94 c$OMP END DO NOWAIT
    95 
    96       ENDIF
    97 
    98       pasflx   = pasflx+1
    99 
    100 
    101 c   Test pour savoir si on advecte a ce pas de temps
    102 
    103       IF ( pasflx.EQ.(iphysiq*istphy) ) THEN
    104       !write(*,*) 'caladvtrac 133'
    105 c$OMP MASTER
    106       call suspend_timer(timer_caldyn)
    107 c$OMP END MASTER
    108      
    10987      ijb=ij_begin
    11088      ije=ij_end
    11189
     90!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     91  DO l=1,llm
     92      massec(ijb:ije,l)=masse(ijb:ije,l)
     93   ENDDO
     94!$OMP END DO NOWAIT
    11295
    113 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    114       DO l=1,llm
    115             pbarucc(ijb:ije,l) = pbarucc(ijb:ije,l)/REAL(iphysiq*istphy)
    116             tetac(ijb:ije,l) = tetac(ijb:ije,l)/REAL(iphysiq*istphy)
    117             phic(ijb:ije,l) = phic(ijb:ije,l)/REAL(iphysiq*istphy)
    118       ENDDO
    119 c$OMP ENDDO NOWAIT
     96  ENDIF
    12097
    121       if (pole_sud) ije=ij_end-iip1
    122 
    123 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    124       DO l=1,llm
    125             pbarvcc(ijb:ije,l) = pbarvcc(ijb:ije,l)/REAL(iphysiq*istphy)
    126       ENDDO
    127 c$OMP ENDDO NOWAIT
     98  pasflx   = pasflx+1
    12899
    129100
    130 c$OMP BARRIER
    131         call Register_Hallo_u(pbarucc,llm,1,1,1,1,Request_vanleer)
    132         call Register_Hallo_v(pbarvcc,llm,1,1,1,1,Request_vanleer)
    133         call SendRequest(Request_vanleer)
    134 c$OMP BARRIER
    135         call WaitRequest(Request_vanleer)
    136 c$OMP BARRIER
     101  !   Test pour savoir si on advecte a ce pas de temps
     102
     103  IF ( pasflx.EQ.(iphysiq*istphy) ) THEN
     104  ! !write(*,*) 'caladvtrac 133'
     105!$OMP MASTER
     106  call suspend_timer(timer_caldyn)
     107!$OMP END MASTER
     108
     109  ijb=ij_begin
     110  ije=ij_end
     111
     112
     113!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     114  DO l=1,llm
     115        pbarucc(ijb:ije,l) = pbarucc(ijb:ije,l)/REAL(iphysiq*istphy)
     116        tetac(ijb:ije,l) = tetac(ijb:ije,l)/REAL(iphysiq*istphy)
     117        phic(ijb:ije,l) = phic(ijb:ije,l)/REAL(iphysiq*istphy)
     118  ENDDO
     119!$OMP ENDDO NOWAIT
     120
     121  if (pole_sud) ije=ij_end-iip1
     122
     123!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     124  DO l=1,llm
     125        pbarvcc(ijb:ije,l) = pbarvcc(ijb:ije,l)/REAL(iphysiq*istphy)
     126  ENDDO
     127!$OMP ENDDO NOWAIT
     128
     129
     130!$OMP BARRIER
     131    call Register_Hallo_u(pbarucc,llm,1,1,1,1,Request_vanleer)
     132    call Register_Hallo_v(pbarvcc,llm,1,1,1,1,Request_vanleer)
     133    call SendRequest(Request_vanleer)
     134!$OMP BARRIER
     135    call WaitRequest(Request_vanleer)
     136!$OMP BARRIER
    137137
    138138
    139139
    140      
    141 cc   ..  Modif P.Le Van  ( 20/12/97 )  ....
    142 cc
    143140
    144 c   traitement des flux de masse avant advection.
    145 c     1. calcul de w
    146 c     2. groupement des mailles pres du pole.
     141  !c   ..  Modif P.Le Van  ( 20/12/97 )  ....
     142  !c
    147143
    148         CALL groupe_loc( massec, pbarucc,pbarvcc, pbarugg,pbarvgg,wgg )
     144  !   traitement des flux de masse avant advection.
     145  ! 1. calcul de w
     146  ! 2. groupement des mailles pres du pole.
     147
     148    CALL groupe_loc( massec, pbarucc,pbarvcc, pbarugg,pbarvgg,wgg )
    149149
    150150
    151151
    152          ijb=ij_begin
    153          ije=ij_end
     152     ijb=ij_begin
     153     ije=ij_end
    154154
    155 c$OMP BARRIER
    156          CALL WriteField_u('pbarug',pbarugg)
    157          CALL WriteField_v('pbarvg',pbarvgg)
    158          CALL WriteField_u('wg',wgg)
    159          CALL WriteField_u('tetag',tetac)
    160          CALL WriteField_u('phig',phic)
    161          CALL WriteField_u('masseg',massec)
     155!$OMP BARRIER
     156     CALL WriteField_u('pbarug',pbarugg)
     157     CALL WriteField_v('pbarvg',pbarvgg)
     158     CALL WriteField_u('wg',wgg)
     159     CALL WriteField_u('tetag',tetac)
     160     CALL WriteField_u('phig',phic)
     161     CALL WriteField_u('masseg',massec)
    162162
    163163
    164 c$OMP MASTER
    165         call Set_Distrib(distrib_caldyn)
    166         call VTe(VThallo)
    167         call resume_timer(timer_caldyn)
    168 c$OMP END MASTER
     164!$OMP MASTER
     165    call Set_Distrib(distrib_caldyn)
     166    call VTe(VThallo)
     167    call resume_timer(timer_caldyn)
     168!$OMP END MASTER
    169169
    170170
    171 c$OMP BARRIER
    172           pasflx=0
    173        ENDIF ! if iadvtr.EQ.iapp_tracvl
     171!$OMP BARRIER
     172      pasflx=0
     173   ENDIF ! if iadvtr.EQ.iapp_tracvl
    174174
    175       END
     175END SUBROUTINE fluxstokenc_p
Note: See TracChangeset for help on using the changeset viewer.