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/nxgrad_loc.f90

    r5245 r5246  
    1       SUBROUTINE nxgrad_loc (klevel, rot, x, y )
    2 c
    3 c    P. Le Van
    4 c
    5 c   ********************************************************************
    6 c      calcul du gradient tourne de pi/2 du rotationnel du vect.v
    7 c   ********************************************************************
    8 c       rot          est un argument  d'entree pour le s-prog
    9 c       x  et y    sont des arguments de sortie pour le s-prog
    10 c
    11       USE parallel_lmdz
    12       IMPLICIT NONE
    13 c
    14       INCLUDE "dimensions.h"
    15       INCLUDE "paramet.h"
    16       INCLUDE "comgeom.h"
    17       INTEGER klevel
    18       REAL rot( ijb_v:ije_v,klevel ),x( ijb_u:ije_u,klevel )
    19       REAL y(ijb_v:ije_v,klevel )
    20       INTEGER  l,ij
    21       INTEGER :: ijb,ije
    22 c
    23 c
    24 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)     
    25       DO 10 l = 1,klevel
    26 c
    27       ijb=ij_begin
    28       ije=ij_end
    29       if (pole_sud)  ije=ij_end-iip1
    30        
    31       DO 1  ij = ijb+1, ije
    32       y( ij,l ) = (  rot( ij,l ) - rot( ij-1,l )  ) * cvsurcuv( ij )
    33    1  CONTINUE
    34 c
    35 c    ..... correction pour  y ( 1,j,l )  ......
    36 c
    37 c    ....    y(1,j,l)= y(iip1,j,l) ....
    38 CDIR$ IVDEP
    39       DO 2  ij = ijb, ije, iip1
    40       y( ij,l ) = y( ij +iim,l )
    41    2  CONTINUE
    42 c
    43       ijb=ij_begin
    44       ije=ij_end+iip1
    45      
    46       if (pole_nord)  ijb=ij_begin+iip1
    47       if (pole_sud)  ije=ij_end-iip1
    48      
    49       DO 4  ij = ijb,ije
    50       x( ij,l ) = (  rot( ij,l ) - rot( ij -iip1,l )  ) * cusurcvu( ij )
    51    4  CONTINUE
    52    
    53       if (pole_nord) then
    54         DO ij = 1,iip1
    55           x(    ij    ,l ) = 0.
    56         ENDDO
    57       endif
    58      
    59       if (pole_sud) then
    60         DO ij = 1,iip1
    61           x( ij +ip1jm,l ) = 0.
    62         ENDDO
    63       endif
    64 c
    65   10  CONTINUE
    66 c$OMP END DO NOWAIT
    67       RETURN
    68       END
     1SUBROUTINE nxgrad_loc (klevel, rot, x, y )
     2  !
     3  ! P. Le Van
     4  !
     5  !   ********************************************************************
     6  !  calcul du gradient tourne de pi/2 du rotationnel du vect.v
     7  !   ********************************************************************
     8  !   rot          est un argument  d'entree pour le s-prog
     9  !   x  et y    sont des arguments de sortie pour le s-prog
     10  !
     11  USE parallel_lmdz
     12  IMPLICIT NONE
     13  !
     14  INCLUDE "dimensions.h"
     15  INCLUDE "paramet.h"
     16  INCLUDE "comgeom.h"
     17  INTEGER :: klevel
     18  REAL :: rot( ijb_v:ije_v,klevel ),x( ijb_u:ije_u,klevel )
     19  REAL :: y(ijb_v:ije_v,klevel )
     20  INTEGER :: l,ij
     21  INTEGER :: ijb,ije
     22  !
     23  !
     24!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     25  DO l = 1,klevel
     26  !
     27  ijb=ij_begin
     28  ije=ij_end
     29  if (pole_sud)  ije=ij_end-iip1
     30
     31  DO  ij = ijb+1, ije
     32  y( ij,l ) = (  rot( ij,l ) - rot( ij-1,l )  ) * cvsurcuv( ij )
     33  END DO
     34  !
     35  !    ..... correction pour  y ( 1,j,l )  ......
     36  !
     37  !    ....    y(1,j,l)= y(iip1,j,l) ....
     38  !DIR$ IVDEP
     39  DO  ij = ijb, ije, iip1
     40  y( ij,l ) = y( ij +iim,l )
     41  END DO
     42  !
     43  ijb=ij_begin
     44  ije=ij_end+iip1
     45
     46  if (pole_nord)  ijb=ij_begin+iip1
     47  if (pole_sud)  ije=ij_end-iip1
     48
     49  DO  ij = ijb,ije
     50  x( ij,l ) = (  rot( ij,l ) - rot( ij -iip1,l )  ) * cusurcvu( ij )
     51  END DO
     52
     53  if (pole_nord) then
     54    DO ij = 1,iip1
     55      x(    ij    ,l ) = 0.
     56    ENDDO
     57  endif
     58
     59  if (pole_sud) then
     60    DO ij = 1,iip1
     61      x( ij +ip1jm,l ) = 0.
     62    ENDDO
     63  endif
     64  !
     65  END DO
     66!$OMP END DO NOWAIT
     67  RETURN
     68END SUBROUTINE nxgrad_loc
Note: See TracChangeset for help on using the changeset viewer.