New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 1200 for trunk/AGRIF/AGRIF_FILES – NEMO

Ignore:
Timestamp:
2008-09-24T15:05:20+02:00 (16 years ago)
Author:
rblod
Message:

Adapt Agrif to the new SBC and correct several bugs for agrif (restart writing and reading), see ticket #133
Note : this fix does not work yet on NEC computerq (sxf90/360)

Location:
trunk/AGRIF/AGRIF_FILES
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/AGRIF/AGRIF_FILES/modarrays.F

    r662 r1200  
    176176C     Local variables        
    177177C 
    178       SELECT CASE (nbdim) 
    179       CASE (1) 
    180            lower = lbound(Variable % array1) 
    181            upper = ubound(Variable % array1) 
    182       CASE (2) 
    183            lower = lbound(Variable % array2) 
    184            upper = ubound(Variable % array2) 
    185       CASE (3) 
    186            lower = lbound(Variable % array3) 
    187            upper = ubound(Variable % array3) 
    188       CASE (4) 
    189            lower = lbound(Variable % array4) 
    190            upper = ubound(Variable % array4) 
    191       CASE (5) 
    192            lower = lbound(Variable % array5) 
    193            upper = ubound(Variable % array5) 
    194       CASE (6) 
    195            lower = lbound(Variable % array6) 
    196            upper = ubound(Variable % array6) 
    197       END SELECT 
    198 C 
     178      lower = Variable % lb(1:nbdim) 
     179      upper = Variable % ub(1:nbdim) 
    199180      return 
    200181C 
     
    552533C 
    553534 
    554 #ifdef AGRIF_MPI 
    555535C     ************************************************************************** 
    556536CCC   Subroutine GiveAgrif_SpecialValueToTab_mpi 
     
    581561      CASE (1) 
    582562             Where (Variable1 % array1( 
    583      &           bound1(lower(1),1,2):bound1(upper(1),1,2))  
     563     &           bound1(1,1,2):bound1(1,2,2))  
    584564     &            == Value) 
    585              Variable2 % array1(lower(1):upper(1)) 
     565             Variable2 % array1(bound1(1,1,1):bound1(1,2,1)) 
    586566     &                        = Value 
    587567C       
     
    589569      CASE (2) 
    590570             Where (Variable1 % array2( 
    591      &           bound1(lower(1),1,2):bound1(upper(1),1,2), 
    592      &           bound1(lower(2),2,2):bound1(upper(2),2,2))  
     571     &           bound1(1,1,2):bound1(1,2,2), 
     572     &           bound1(2,1,2):bound1(2,2,2))  
    593573     &            == Value) 
    594              Variable2 % array2(lower(1):upper(1), 
    595      &                          lower(2):upper(2)) 
     574             Variable2 % array2(bound1(1,1,1):bound1(1,2,1), 
     575     &                       bound1(2,1,1):bound1(2,2,1)) 
    596576     &                        = Value 
    597577C       
     
    599579      CASE (3) 
    600580             Where (Variable1 % array3( 
    601      &           bound1(lower(1),1,2):bound1(upper(1),1,2), 
    602      &           bound1(lower(2),2,2):bound1(upper(2),2,2),  
    603      &           bound1(lower(3),3,2):bound1(upper(3),3,2))  
     581     &           bound1(1,1,2):bound1(1,2,2), 
     582     &                       bound1(2,1,2):bound1(2,2,2), 
     583     &                       bound1(3,1,2):bound1(3,2,2))  
    604584     &            == Value) 
    605              Variable2 % array3(lower(1):upper(1), 
    606      &                          lower(2):upper(2), 
    607      &                          lower(3):upper(3)) 
     585             Variable2 % array3(bound1(1,1,1):bound1(1,2,1), 
     586     &                       bound1(2,1,1):bound1(2,2,1), 
     587     &                       bound1(3,1,1):bound1(3,2,1)) 
    608588     &                         = Value 
    609589C       
     
    611591      CASE (4) 
    612592             Where (Variable1 % array4( 
    613      &           bound1(lower(1),1,2):bound1(upper(1),1,2), 
    614      &           bound1(lower(2),2,2):bound1(upper(2),2,2),  
    615      &           bound1(lower(3),3,2):bound1(upper(3),3,2), 
    616      &           bound1(lower(4),4,2):bound1(upper(4),4,2))  
     593     &           bound1(1,1,2):bound1(1,2,2), 
     594     &                       bound1(2,1,2):bound1(2,2,2), 
     595     &                       bound1(3,1,2):bound1(3,2,2), 
     596     &                       bound1(4,1,2):bound1(4,2,2))  
    617597     &            == Value) 
    618              Variable2 % array4(lower(1):upper(1), 
    619      &                          lower(2):upper(2), 
    620      &                          lower(3):upper(3), 
    621      &                          lower(4):upper(4)) 
     598             Variable2 % array4(bound1(1,1,1):bound1(1,2,1), 
     599     &                       bound1(2,1,1):bound1(2,2,1), 
     600     &                       bound1(3,1,1):bound1(3,2,1), 
     601     &                       bound1(4,1,1):bound1(4,2,1)) 
    622602     &                        = Value 
    623603C       
     
    625605      CASE (5) 
    626606             Where (Variable1 % array5( 
    627      &           bound1(lower(1),1,2):bound1(upper(1),1,2), 
    628      &           bound1(lower(2),2,2):bound1(upper(2),2,2), 
    629      &           bound1(lower(3),3,2):bound1(upper(3),3,2), 
    630      &           bound1(lower(4),4,2):bound1(upper(4),4,2), 
    631      &           bound1(lower(5),5,2):bound1(upper(5),5,2))  
     607     &           bound1(1,1,2):bound1(1,2,2), 
     608     &                       bound1(2,1,2):bound1(2,2,2), 
     609     &                       bound1(3,1,2):bound1(3,2,2), 
     610     &                       bound1(4,1,2):bound1(4,2,2), 
     611     &                       bound1(5,1,2):bound1(5,2,2))  
    632612     &            == Value) 
    633              Variable2 % array5(lower(1):upper(1), 
    634      &                          lower(2):upper(2), 
    635      &                          lower(3):upper(3), 
    636      &                          lower(4):upper(4), 
    637      &                          lower(5):upper(5)) 
     613             Variable2 % array5(bound1(1,1,1):bound1(1,2,1), 
     614     &                       bound1(2,1,1):bound1(2,2,1), 
     615     &                       bound1(3,1,1):bound1(3,2,1), 
     616     &                       bound1(4,1,1):bound1(4,2,1), 
     617     &                       bound1(5,1,1):bound1(5,2,1)) 
    638618     &                        = Value 
    639619C       
     
    641621      CASE (6) 
    642622             Where (Variable1 % array6( 
    643      &           bound1(lower(1),1,2):bound1(upper(1),1,2), 
    644      &           bound1(lower(2),2,2):bound1(upper(2),2,2), 
    645      &           bound1(lower(2),3,2):bound1(upper(3),3,2), 
    646      &           bound1(lower(4),4,2):bound1(upper(4),4,2), 
    647      &           bound1(lower(5),5,2):bound1(upper(5),5,2), 
    648      &           bound1(lower(6),6,2):bound1(upper(6),6,2))  
     623     &           bound1(1,1,2):bound1(1,2,2), 
     624     &                       bound1(2,1,2):bound1(2,2,2), 
     625     &                       bound1(3,1,2):bound1(3,2,2), 
     626     &                       bound1(4,1,2):bound1(4,2,2), 
     627     &                       bound1(5,1,2):bound1(5,2,2), 
     628     &                       bound1(6,1,2):bound1(6,2,2))  
    649629     &            == Value) 
    650              Variable2 % array6(lower(1):upper(1), 
    651      &                          lower(2):upper(2), 
    652      &                          lower(3):upper(3), 
    653      &                          lower(4):upper(4), 
    654      &                          lower(5):upper(5), 
    655      &                          lower(6):upper(6)) 
     630             Variable2 % array6(bound1(1,1,1):bound1(1,2,1), 
     631     &                       bound1(2,1,1):bound1(2,2,1), 
     632     &                       bound1(3,1,1):bound1(3,2,1), 
     633     &                       bound1(4,1,1):bound1(4,2,1), 
     634     &                       bound1(5,1,1):bound1(5,2,1), 
     635     &                       bound1(6,1,1):bound1(6,2,1)) 
    656636     &                        = Value 
    657637C       
     
    662642C 
    663643      End Subroutine GiveAgrif_SpecialValueToTab_mpi     
    664 #else 
     644 
    665645C     ************************************************************************** 
    666646CCC   Subroutine GiveAgrif_SpecialValueToTab 
     
    771751C 
    772752      End Subroutine GiveAgrif_SpecialValueToTab    
    773 #endif 
     753 
    774754C 
    775755C 
  • trunk/AGRIF/AGRIF_FILES/modbc.F

    r898 r1200  
    4141C 
    4242C 
     43       
    4344C 
    4445C     ************************************************************************** 
     
    4748C  
    4849      Subroutine Agrif_Interp_bc_1d(TypeInterp,parent,child,tab,deb,fin, 
    49      &                              weight,pweight)             
     50     &                              weight,pweight,procname) 
    5051C 
    5152CCC   Description: 
    5253CCC   Subroutine to calculate the boundary conditions on a fine grid for a 1D  
    53 CCC   grid variable. 
    54 C 
    55 C     Declarations: 
    56 C       
    57        
    58 C 
    59 C     Arguments       
    60       INTEGER,DIMENSION(6,6) :: TypeInterp    ! TYPE of interpolation 
    61                                             ! (linear,...) 
    62       TYPE(AGRIF_PVariable) :: parent       ! Variable on the parent grid 
    63       TYPE(AGRIF_PVariable) :: child        ! Variable on the child grid 
    64       TYPE(AGRIF_PVariable) :: childtemp    ! Temporary variable on the child  
    65                                             ! grid 
    66       INTEGER :: deb,fin                    ! Positions of the  interpolations  
    67       REAL, DIMENSION( 
    68      &    lbound(child%var%array1,1):ubound(child%var%array1,1) 
    69      &    ), Target :: tab ! Values of the grid variable 
    70       LOGICAL :: pweight                    ! Indicates if weight is used for   
    71                                             ! the temporal interpolation  
    72       REAL :: weight                        ! Coefficient for the time  
    73                                             ! interpolation 
    74 C 
    75 C 
    76 C     Definition of a temporary AGRIF_PVariable data TYPE representing the grid 
    77 C     variable.   
    78 C 
    79       allocate(childtemp % var)   
    80 C 
    81       childtemp % var % root_var => child % var % root_var 
    82 C       
    83 C     Values of the grid variable 
    84       childtemp % var % array1 => tab   
    85 C 
    86 C     Temporary results for the time interpolation before and after the space  
    87 C     interpolation  
    88       childtemp % var % oldvalues2D => child % var % oldvalues2D 
    89 C  
    90 C     Index indicating if a space interpolation is necessary 
    91       childtemp % var % interpIndex => child % var % interpIndex        
    92       childtemp % var % Interpolationshouldbemade =  
    93      &                 child % var % Interpolationshouldbemade   
    94       childtemp % var % list_interp => child % var% list_interp           
    95 C 
    96 C     Call to the procedure for the calculations of the boundary conditions 
    97       Call Agrif_CorrectVariable 
    98      &     (TypeInterp,parent,childtemp,deb,fin,pweight,weight) 
    99 C 
    100       child % var % oldvalues2D => childtemp % var % oldvalues2D 
    101       child % var % list_interp => childtemp % var %list_interp       
    102 C       
    103       deallocate(childtemp % var) 
    104 C 
    105 C        
    106       End Subroutine Agrif_Interp_bc_1D 
    107 C 
    108 C 
    109 C 
    110 C     ************************************************************************** 
    111 CCC   Subroutine Agrif_Interp_bc_2d 
    112 C     ************************************************************************** 
    113 C  
    114       Subroutine Agrif_Interp_bc_2d(TypeInterp,parent,child,tab,deb,fin, 
    115      &                              weight,pweight,procname) 
    116 C 
    117 CCC   Description: 
    118 CCC   Subroutine to calculate the boundary conditions on a fine grid for a 2D  
    11954CCC   grid variable. 
    12055C 
     
    13570                                            ! done on the fine grid  
    13671      REAL, DIMENSION( 
    137      &         lbound(child%var%array2,1): ubound(child%var%array2,1), 
    138      &         lbound(child%var%array2,2): ubound(child%var%array2,2)),  
    139      &         Target :: tab ! Values of the grid variable 
     72     &         child%var%lb(1):child%var%ub(1)  
     73     &    ), Target :: tab ! Values of the grid variable 
    14074      LOGICAL :: pweight                    ! Indicates if weight is used for   
    14175                                            ! the temporal interpolation  
     
    15286C       
    15387C     Values of the grid variable 
    154       childtemp % var % array2 => tab   
     88      childtemp % var % array1 => tab   
    15589C 
    15690C     Temporary results for the time interpolation before and after the space  
     
    16296      childtemp % var % Interpolationshouldbemade =  
    16397     &                 child % var % Interpolationshouldbemade    
    164       childtemp % var % list_interp => child % var% list_interp     
     98      childtemp % var % list_interp => child % var% list_interp  
     99       
     100      childtemp % var% lb = child % var % lb 
     101      childtemp % var% ub = child % var % ub          
     102C 
     103C     Call to the procedure for the calculations of the boundary conditions 
     104      IF (present(procname)) THEN 
     105      Call Agrif_CorrectVariable 
     106     &     (TypeInterp,parent,childtemp,deb,fin,pweight,weight,procname) 
     107      ELSE 
     108      Call Agrif_CorrectVariable 
     109     &     (TypeInterp,parent,childtemp,deb,fin,pweight,weight) 
     110      ENDIF 
     111 
     112C    
     113      child % var % oldvalues2D => childtemp % var % oldvalues2D 
     114      child % var % list_interp => childtemp % var %list_interp 
     115C          
     116      deallocate(childtemp % var) 
     117C 
     118C        
     119      End Subroutine Agrif_Interp_bc_1D 
     120C 
     121       
     122C 
     123C 
     124C 
     125C     ************************************************************************** 
     126CCC   Subroutine Agrif_Interp_bc_2d 
     127C     ************************************************************************** 
     128C  
     129      Subroutine Agrif_Interp_bc_2d(TypeInterp,parent,child,tab,deb,fin, 
     130     &                              weight,pweight,procname) 
     131C 
     132CCC   Description: 
     133CCC   Subroutine to calculate the boundary conditions on a fine grid for a 2D  
     134CCC   grid variable. 
     135C 
     136C     Declarations: 
     137C       
     138       
     139C 
     140C     Arguments       
     141      External :: procname 
     142      Optional :: procname 
     143      INTEGER,DIMENSION(6,6) :: TypeInterp    ! TYPE of interpolation (linear,  
     144                                            ! lagrange, spline, ... ) 
     145      TYPE(AGRIF_PVariable) :: parent       ! Variable on the parent grid 
     146      TYPE(AGRIF_PVariable) :: child        ! Variable on the child grid 
     147      TYPE(AGRIF_PVariable) :: childtemp    ! Temporary variable on the child  
     148                                            ! grid 
     149      INTEGER :: deb,fin                    ! Positions where interpolations are 
     150                                            ! done on the fine grid  
     151      REAL, DIMENSION( 
     152     &         child%var%lb(1):child%var%ub(1), 
     153     &         child%var%lb(2):child%var%ub(2)  
     154     &    ), Target :: tab ! Values of the grid variable 
     155      LOGICAL :: pweight                    ! Indicates if weight is used for   
     156                                            ! the temporal interpolation  
     157      REAL :: weight                        ! Coefficient for the time  
     158                                            ! interpolation 
     159C 
     160C 
     161C     Definition of a temporary AGRIF_PVariable data TYPE representing the grid 
     162C     variable.    
     163C 
     164      allocate(childtemp % var)   
     165C 
     166      childtemp % var % root_var => child % var % root_var 
     167C       
     168C     Values of the grid variable 
     169      childtemp % var % array2 => tab   
     170C 
     171C     Temporary results for the time interpolation before and after the space  
     172C     interpolation  
     173      childtemp % var % oldvalues2D => child % var % oldvalues2D 
     174C  
     175C     Index indicating if a space interpolation is necessary 
     176      childtemp % var % interpIndex => child % var % interpIndex        
     177      childtemp % var % Interpolationshouldbemade =  
     178     &                 child % var % Interpolationshouldbemade    
     179      childtemp % var % list_interp => child % var% list_interp  
     180       
     181      childtemp % var% lb = child % var % lb 
     182      childtemp % var% ub = child % var % ub          
    165183C 
    166184C     Call to the procedure for the calculations of the boundary conditions 
     
    211229                                            ! are done on the fine grid  
    212230      REAL, DIMENSION( 
    213      &         lbound(child%var%array3,1):ubound(child%var%array3,1), 
    214      &         lbound(child%var%array3,2):ubound(child%var%array3,2), 
    215      &         lbound(child%var%array3,3):ubound(child%var%array3,3) 
     231     &         child%var%lb(1):child%var%ub(1), 
     232     &         child%var%lb(2):child%var%ub(2), 
     233     &         child%var%lb(3):child%var%ub(3) 
    216234     &         ), Target :: tab ! Values of the grid variable 
    217235      LOGICAL :: pweight                    ! Indicates if weight is used for  
     
    239257      childtemp % var % Interpolationshouldbemade =  
    240258     &                 child % var % Interpolationshouldbemade  
    241       childtemp % var % list_interp => child % var% list_interp            
     259      childtemp % var % list_interp => child % var% list_interp  
     260       
     261      childtemp % var% lb = child % var % lb 
     262      childtemp % var% ub = child % var % ub 
    242263C 
    243264C     Call to the procedure for the calculations of the boundary conditions      
     
    288309                                              ! are done on the fine grid  
    289310      REAL, DIMENSION( 
    290      &        lbound(child%var%array4,1):ubound(child%var%array4,1), 
    291      &        lbound(child%var%array4,2):ubound(child%var%array4,2), 
    292      &        lbound(child%var%array4,3):ubound(child%var%array4,3), 
    293      &        lbound(child%var%array4,4):ubound(child%var%array4,4) 
     311     &         child%var%lb(1):child%var%ub(1), 
     312     &         child%var%lb(2):child%var%ub(2), 
     313     &         child%var%lb(3):child%var%ub(3), 
     314     &         child%var%lb(4):child%var%ub(4) 
    294315     &        ), Target :: tab ! Values of the grid variable 
    295316      LOGICAL :: pweight                      ! Indicates if weight is used for  
     
    317338      childtemp % var % Interpolationshouldbemade =  
    318339     &                 child % var % Interpolationshouldbemade   
    319       childtemp % var % list_interp => child % var% list_interp           
     340      childtemp % var % list_interp => child % var% list_interp  
     341       
     342      childtemp % var% lb = child % var % lb 
     343      childtemp % var% ub = child % var % ub                
    320344C 
    321345C     Call to the procedure for the calculations of the boundary conditions 
     
    365389                                              ! are done on the fine grid  
    366390      REAL, DIMENSION( 
    367      &         lbound(child%var%array5,1):ubound(child%var%array5,1), 
    368      &         lbound(child%var%array5,2):ubound(child%var%array5,2), 
    369      &         lbound(child%var%array5,3):ubound(child%var%array5,3), 
    370      &         lbound(child%var%array5,4):ubound(child%var%array5,4), 
    371      &         lbound(child%var%array5,5):ubound(child%var%array5,5) 
     391     &         child%var%lb(1):child%var%ub(1), 
     392     &         child%var%lb(2):child%var%ub(2), 
     393     &         child%var%lb(3):child%var%ub(3), 
     394     &         child%var%lb(4):child%var%ub(4), 
     395     &         child%var%lb(5):child%var%ub(5) 
    372396     &         ), Target :: tab ! Values of the grid variable 
    373397      LOGICAL :: pweight                      ! Indicates if weight is used for  
     
    395419      childtemp % var % Interpolationshouldbemade =  
    396420     &                 child % var % Interpolationshouldbemade  
    397       childtemp % var % list_interp => child % var% list_interp            
     421      childtemp % var % list_interp => child % var% list_interp   
     422       
     423      childtemp % var% lb = child % var % lb 
     424      childtemp % var% ub = child % var % ub 
     425                      
    398426C 
    399427C     Call to the procedure for the calculations of the boundary conditions   
     
    442470                                              ! are done on the fine grid  
    443471      REAL, DIMENSION( 
    444      &         lbound(child%var%array6,1):ubound(child%var%array6,1), 
    445      &         lbound(child%var%array6,2):ubound(child%var%array6,2), 
    446      &         lbound(child%var%array6,3):ubound(child%var%array6,3), 
    447      &         lbound(child%var%array6,4):ubound(child%var%array6,4), 
    448      &         lbound(child%var%array6,5):ubound(child%var%array6,5), 
    449      &         lbound(child%var%array6,6):ubound(child%var%array6,6) 
     472     &         child%var%lb(1):child%var%ub(1), 
     473     &         child%var%lb(2):child%var%ub(2), 
     474     &         child%var%lb(3):child%var%ub(3), 
     475     &         child%var%lb(4):child%var%ub(4), 
     476     &         child%var%lb(5):child%var%ub(5), 
     477     &         child%var%lb(6):child%var%ub(6) 
    450478     &         ), Target :: tab ! Values of the grid variable 
    451479      LOGICAL :: pweight                      ! Indicates if weight is used for  
     
    473501      childtemp % var % Interpolationshouldbemade =  
    474502     &                 child % var % Interpolationshouldbemade  
    475       childtemp % var % list_interp => child % var% list_interp            
     503      childtemp % var % list_interp => child % var% list_interp   
     504       
     505      childtemp % var% lb = child % var % lb 
     506      childtemp % var% ub = child % var % ub                
    476507C 
    477508C     Call to the procedure for the calculations of the boundary conditions 
     
    626657          case('N') ! No space DIMENSION       
    627658C 
    628             select case (nbdim)  
    629 C       
    630               case(1) 
    631                 nbtab_Child(n) = SIZE(child % var % array1,n) - 1 
    632                 pttab_Child(n) = lbound(child % var % array1,n) 
    633               case(2) 
    634                 nbtab_Child(n) = SIZE(child % var % array2,n) - 1 
    635                 pttab_Child(n) = lbound(child % var % array2,n) 
    636               case(3) 
    637                 nbtab_Child(n) = SIZE(child % var % array3,n) - 1 
    638                 pttab_Child(n) = lbound(child % var % array3,n)   
    639               case(4) 
    640                 nbtab_Child(n) = SIZE(child % var % array4,n) - 1 
    641                 pttab_Child(n) = lbound(child % var % array4,n) 
    642               case(5) 
    643                 nbtab_Child(n) = SIZE(child % var % array5,n) - 1 
    644                 pttab_Child(n) = lbound(child % var % array5,n)       
    645               case(6) 
    646                 nbtab_Child(n) = SIZE(child % var % array6,n) - 1 
    647                 pttab_Child(n) = lbound(child % var % array6,n)       
    648 C 
    649             end select 
     659            nbtab_Child(n) = child % var % ub(n) - child % var % lb(n) 
     660            pttab_Child(n) = child % var % lb(n) 
    650661C 
    651662C           No interpolation but only a copy of the values of the grid variable 
  • trunk/AGRIF/AGRIF_FILES/modbcfunction.F

    r779 r1200  
    256256C 
    257257      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
     258      TYPE(Agrif_PVariable),Pointer ::tabvars 
     259       
     260     
    258261C 
    259262C 
     
    261264C 
    262265C      
     266 
     267      if (tabvarsindic <=0) then 
     268      tabvars => Agrif_Search_Variable(Agrif_Curgrid,-tabvarsindic) 
     269      else 
     270      tabvars=>Agrif_Curgrid % tabvars(tabvarsindic) 
     271      endif   
     272       
    263273      if (Agrif_Curgrid % fixedrank .NE. 0) then   
    264        IF (.Not.Associated(Agrif_Curgrid%tabvars(tabvarsindic)%var 
    265      &                % interpIndex)) THEN 
    266         Allocate(Agrif_Curgrid%tabvars(tabvarsindic)%var % interpIndex) 
    267           Agrif_Curgrid%tabvars(tabvarsindic)%var % interpIndex = -1 
    268  
    269         Allocate( 
    270      &    Agrif_Curgrid%tabvars(tabvarsindic)%var % oldvalues2D(2,1)) 
    271           Agrif_Curgrid%tabvars(tabvarsindic)%var % oldvalues2D = 0.  
     274       IF (.Not.Associated(tabvars%var% interpIndex)) THEN 
     275        Allocate(tabvars%var % interpIndex) 
     276          tabvars%var % interpIndex = -1 
     277 
     278        Allocate(tabvars%var % oldvalues2D(2,1)) 
     279          tabvars%var % oldvalues2D = 0.  
    272280       ENDIF       
    273281       if ( PRESENT(Interpolationshouldbemade) ) then 
    274          Agrif_Curgrid%tabvars(tabvarsindic)%var % 
     282         tabvars%var % 
    275283     &     Interpolationshouldbemade = Interpolationshouldbemade 
    276284       endif 
     
    278286      endif 
    279287C 
    280       Agrif_Curgrid%tabvars(tabvarsindic)%var % bcinf = point(1) 
    281       Agrif_Curgrid%tabvars(tabvarsindic)%var % bcsup = point(2) 
     288      tabvars%var % bcinf = point(1) 
     289      tabvars%var % bcsup = point(2) 
    282290C 
    283291      End Subroutine Agrif_Set_bc 
     
    346354C 
    347355      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
     356      TYPE(Agrif_PVariable),Pointer ::tabvars 
     357       
     358     
    348359C 
    349360C 
    350361C     Begin  
    351362C 
    352       Agrif_Mygrid % tabvars(tabvarsindic)% var % bctypeinterp =  
     363C      
     364 
     365      if (tabvarsindic <=0) then 
     366      tabvars => Agrif_Search_Variable(Agrif_Mygrid,-tabvarsindic) 
     367      else 
     368      tabvars=>Agrif_Mygrid % tabvars(tabvarsindic) 
     369      endif  
     370C 
     371      tabvars% var % bctypeinterp =  
    353372     &           Agrif_Constant    
    354373      IF (present(interp)) THEN 
    355       Agrif_Mygrid % tabvars(tabvarsindic)% var % bctypeinterp =  
     374      tabvars% var % bctypeinterp =  
    356375     &           interp 
    357376      ENDIF        
    358377      IF (present(interp1)) THEN 
    359       Agrif_Mygrid % tabvars(tabvarsindic)% var % bctypeinterp(1:2,1) =  
     378      tabvars% var % bctypeinterp(1:2,1) =  
    360379     &           interp1 
    361380      ENDIF        
    362381      IF (present(interp11)) THEN 
    363       Agrif_Mygrid % tabvars(tabvarsindic)% var % bctypeinterp(1,1) =  
     382      tabvars% var % bctypeinterp(1,1) =  
    364383     &           interp11 
    365384      ENDIF 
    366385      IF (present(interp12)) THEN 
    367       Agrif_Mygrid % tabvars(tabvarsindic)% var % bctypeinterp(1,2) =  
     386      tabvars% var % bctypeinterp(1,2) =  
    368387     &           interp12 
    369388      ENDIF           
    370389      IF (present(interp2)) THEN 
    371       Agrif_Mygrid % tabvars(tabvarsindic)% var % bctypeinterp(1:2,2) =  
     390      tabvars% var % bctypeinterp(1:2,2) =  
    372391     &           interp2 
    373392      ENDIF 
    374393      IF (present(interp21)) THEN 
    375       Agrif_Mygrid % tabvars(tabvarsindic)% var % bctypeinterp(2,1) =  
     394      tabvars% var % bctypeinterp(2,1) =  
    376395     &           interp21 
    377396      ENDIF       
    378397      IF (present(interp22)) THEN 
    379       Agrif_Mygrid % tabvars(tabvarsindic)% var % bctypeinterp(2,2) =  
     398      tabvars% var % bctypeinterp(2,2) =  
    380399     &           interp22 
    381400      ENDIF             
    382401      IF (present(interp3)) THEN 
    383       Agrif_Mygrid % tabvars(tabvarsindic)% var % bctypeinterp(1:2,3) = 
     402      tabvars% var % bctypeinterp(1:2,3) = 
    384403     &           interp3 
    385404      ENDIF 
     
    507526CCC   Subroutine Agrif_Init_variable0d 
    508527C     ************************************************************************** 
    509       Subroutine Agrif_Init_variable0d(tabvarsindic0,tabvarsindic) 
     528      Subroutine Agrif_Init_variable0d(tabvarsindic0,tabvarsindic, 
     529     &        procname) 
    510530 
    511531      INTEGER :: tabvarsindic0 ! indice of the variable in tabvars 
    512532      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
     533      External :: procname 
     534      Optional ::  procname 
    513535C 
    514536      if (Agrif_Root()) Return 
    515537C       
     538      if (present(procname)) then 
     539      CALL Agrif_Interp_variable(tabvarsindic0,tabvarsindic,procname) 
     540      CALL Agrif_Bc_variable(tabvarsindic0,tabvarsindic,1.,procname) 
     541      else 
    516542      CALL Agrif_Interp_variable(tabvarsindic0,tabvarsindic) 
    517543      CALL Agrif_Bc_variable(tabvarsindic0,tabvarsindic,1.) 
     544      endif 
    518545 
    519546      End Subroutine Agrif_Init_variable0d 
     
    523550CCC   Subroutine Agrif_Init_variable1d 
    524551C     ************************************************************************** 
    525       Subroutine Agrif_Init_variable1d(q,tabvarsindic) 
     552      Subroutine Agrif_Init_variable1d(q,tabvarsindic,procname) 
    526553 
    527554      REAL, DIMENSION(:) :: q 
    528555      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
     556      External :: procname 
     557      Optional ::  procname 
     558 
    529559C 
    530560      if (Agrif_Root()) Return 
    531561C 
     562      if (present(procname)) then 
     563      CALL Agrif_Interp_variable(q,tabvarsindic,procname) 
     564      CALL Agrif_Bc_variable(q,tabvarsindic,1.,procname) 
     565      else 
    532566      CALL Agrif_Interp_variable(q,tabvarsindic) 
    533567      CALL Agrif_Bc_variable(q,tabvarsindic,1.) 
     568      endif 
    534569 
    535570      End Subroutine Agrif_Init_variable1d 
     
    538573CCC   Subroutine Agrif_Init_variable2d 
    539574C     ************************************************************************** 
    540       Subroutine Agrif_Init_variable2d(q,tabvarsindic) 
     575      Subroutine Agrif_Init_variable2d(q,tabvarsindic,procname) 
    541576 
    542577      REAL,  DIMENSION(:,:) :: q 
    543578      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
     579      External :: procname 
     580      Optional ::  procname 
     581 
    544582C 
    545583      if (Agrif_Root()) Return 
    546584C 
     585      if (present(procname)) then 
     586      CALL Agrif_Interp_variable(q,tabvarsindic,procname) 
     587      CALL Agrif_Bc_variable(q,tabvarsindic,1.,procname) 
     588      else 
    547589      CALL Agrif_Interp_variable(q,tabvarsindic) 
    548590      CALL Agrif_Bc_variable(q,tabvarsindic,1.) 
     591      endif 
     592 
    549593 
    550594      End Subroutine Agrif_Init_variable2d 
     
    554598CCC   Subroutine Agrif_Init_variable3d 
    555599C     ************************************************************************** 
    556       Subroutine Agrif_Init_variable3d(q,tabvarsindic) 
     600      Subroutine Agrif_Init_variable3d(q,tabvarsindic,procname) 
    557601 
    558602      REAL,  DIMENSION(:,:,:) :: q 
    559603      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
     604      External :: procname 
     605      Optional ::  procname 
    560606C 
    561607      if (Agrif_Root()) Return 
    562608C 
     609      if (present(procname)) then 
     610      CALL Agrif_Interp_variable(q,tabvarsindic,procname) 
     611      CALL Agrif_Bc_variable(q,tabvarsindic,1.,procname) 
     612      else 
    563613      CALL Agrif_Interp_variable(q,tabvarsindic) 
    564614      CALL Agrif_Bc_variable(q,tabvarsindic,1.) 
     615      endif 
     616 
    565617C 
    566618      End Subroutine Agrif_Init_variable3d 
     619C 
     620C 
     621C     ************************************************************************** 
     622CCC   Subroutine Agrif_Init_variable4d 
     623C     ************************************************************************** 
     624      Subroutine Agrif_Init_variable4d(q,tabvarsindic,procname) 
     625 
     626      REAL,  DIMENSION(:,:,:,:) :: q 
     627      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
     628      External :: procname 
     629      Optional ::  procname 
     630C 
     631      if (Agrif_Root()) Return 
     632C 
     633      if (present(procname)) then 
     634      CALL Agrif_Interp_variable(q,tabvarsindic,procname) 
     635      CALL Agrif_Bc_variable(q,tabvarsindic,1.,procname) 
     636      else 
     637      CALL Agrif_Interp_variable(q,tabvarsindic) 
     638      CALL Agrif_Bc_variable(q,tabvarsindic,1.) 
     639      endif 
     640 
     641C 
     642      End Subroutine Agrif_Init_variable4d       
    567643C 
    568644C 
     
    713789C 
    714790C 
    715 C 
    716791C     ************************************************************************** 
    717792CCC   Subroutine Agrif_Bc_variable1d 
    718793C     ************************************************************************** 
    719       Subroutine Agrif_Bc_variable1d(q,tabvarsindic,calledweight) 
    720  
    721       REAL   , DIMENSION(:)          :: q 
     794      Subroutine Agrif_Bc_variable1d(q,tabvarsindic,calledweight, 
     795     &                               procname) 
     796 
     797      REAL   , Dimension(:)          :: q 
     798      External :: procname 
     799      Optional ::  procname 
    722800      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
    723801C         
     
    725803      REAL    :: weight 
    726804      LOGICAL :: pweight 
    727 C 
     805      TYPE(Agrif_PVariable),Pointer ::tabvars,parenttabvars,roottabvars 
     806C 
     807C       
     808C       
     809      If (Agrif_Root()) Return 
     810       
    728811      if ( PRESENT(calledweight) ) then 
    729812        weight=calledweight       
     
    733816        pweight = .FALSE. 
    734817      endif 
    735 C       
    736 C 
    737       if (Agrif_Root()) Return 
    738        
     818       
     819      if (tabvarsindic <=0) then 
     820      tabvars => Agrif_Search_Variable(Agrif_Curgrid,-tabvarsindic) 
     821      parenttabvars => tabvars%parent_var 
     822      roottabvars => Agrif_Search_Variable(Agrif_Mygrid,-tabvarsindic) 
     823      else 
     824      tabvars=>Agrif_Curgrid % tabvars(tabvarsindic) 
     825      parenttabvars => Agrif_Curgrid % parent % tabvars(tabvarsindic) 
     826      roottabvars => Agrif_Mygrid % tabvars(tabvarsindic) 
     827      endif 
     828             
     829      IF (present(procname)) THEN 
    739830      Call Agrif_Interp_Bc_1D( 
    740      & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp, 
    741      & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
    742      & Agrif_Curgrid % tabvars(tabvarsindic), 
    743      & q, 
    744      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf, 
    745      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup, 
    746      & weight, 
    747      & pweight) 
    748       End Subroutine Agrif_Bc_variable1d 
    749 C 
    750 C 
    751 CC 
     831     & roottabvars % var % bctypeinterp, 
     832     & parenttabvars, 
     833     & tabvars,q, 
     834     & tabvars % var % bcinf, 
     835     & tabvars % var % bcsup, 
     836     & weight,pweight,procname)       
     837      ELSE 
     838      Call Agrif_Interp_Bc_1D( 
     839     & roottabvars % var % bctypeinterp, 
     840     & parenttabvars, 
     841     & tabvars,q, 
     842     & tabvars % var % bcinf, 
     843     & tabvars % var % bcsup, 
     844     & weight,pweight) 
     845      ENDIF 
     846      End Subroutine Agrif_Bc_variable1d  
     847       
    752848C 
    753849C     ************************************************************************** 
     
    755851C     ************************************************************************** 
    756852      Subroutine Agrif_Bc_variable2d(q,tabvarsindic,calledweight, 
    757      &                                 procname) 
    758  
    759       REAL   , DIMENSION(:,:)          :: q 
     853     &                               procname) 
     854 
     855      REAL   , Dimension(:,:)          :: q 
    760856      External :: procname 
    761857      Optional ::  procname 
     
    765861      REAL    :: weight 
    766862      LOGICAL :: pweight 
    767 C 
     863      TYPE(Agrif_PVariable),Pointer ::tabvars,parenttabvars,roottabvars 
     864C 
     865C       
     866C       
     867      If (Agrif_Root()) Return 
     868       
    768869      if ( PRESENT(calledweight) ) then 
    769         weight=calledweight 
     870        weight=calledweight       
    770871        pweight = .TRUE. 
    771872      else 
     
    773874        pweight = .FALSE. 
    774875      endif 
    775 C       
    776 C 
    777  
    778       if (Agrif_Root()) Return 
     876       
     877      if (tabvarsindic <=0) then 
     878      tabvars => Agrif_Search_Variable(Agrif_Curgrid,-tabvarsindic) 
     879      parenttabvars => tabvars%parent_var 
     880      roottabvars => Agrif_Search_Variable(Agrif_Mygrid,-tabvarsindic) 
     881      else 
     882      tabvars=>Agrif_Curgrid % tabvars(tabvarsindic) 
     883      parenttabvars => Agrif_Curgrid % parent % tabvars(tabvarsindic) 
     884      roottabvars => Agrif_Mygrid % tabvars(tabvarsindic) 
     885      endif 
     886             
    779887      IF (present(procname)) THEN 
    780888      Call Agrif_Interp_Bc_2D( 
    781      & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp, 
    782      & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
    783      & Agrif_Curgrid % tabvars(tabvarsindic),q, 
    784      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf, 
    785      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup, 
     889     & roottabvars % var % bctypeinterp, 
     890     & parenttabvars, 
     891     & tabvars,q, 
     892     & tabvars % var % bcinf, 
     893     & tabvars % var % bcsup, 
    786894     & weight,pweight,procname)       
    787895      ELSE 
    788        Call Agrif_Interp_Bc_2D( 
    789      & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp, 
    790      & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
    791      & Agrif_Curgrid % tabvars(tabvarsindic),q, 
    792      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf, 
    793      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup, 
     896      Call Agrif_Interp_Bc_2D( 
     897     & roottabvars % var % bctypeinterp, 
     898     & parenttabvars, 
     899     & tabvars,q, 
     900     & tabvars % var % bcinf, 
     901     & tabvars % var % bcsup, 
    794902     & weight,pweight) 
    795903      ENDIF 
    796  
    797904      End Subroutine Agrif_Bc_variable2d 
     905             
    798906C 
    799907C     ************************************************************************** 
     
    811919      REAL    :: weight 
    812920      LOGICAL :: pweight 
    813 C 
     921      TYPE(Agrif_PVariable),Pointer ::tabvars,parenttabvars,roottabvars 
     922C 
     923C       
     924C       
     925      If (Agrif_Root()) Return 
     926       
    814927      if ( PRESENT(calledweight) ) then 
    815928        weight=calledweight       
     
    819932        pweight = .FALSE. 
    820933      endif 
    821 C       
    822 C       
    823       If (Agrif_Root()) Return 
     934       
     935      if (tabvarsindic <=0) then 
     936      tabvars => Agrif_Search_Variable(Agrif_Curgrid,-tabvarsindic) 
     937      parenttabvars => tabvars%parent_var 
     938      roottabvars => Agrif_Search_Variable(Agrif_Mygrid,-tabvarsindic) 
     939      else 
     940      tabvars=>Agrif_Curgrid % tabvars(tabvarsindic) 
     941      parenttabvars => Agrif_Curgrid % parent % tabvars(tabvarsindic) 
     942      roottabvars => Agrif_Mygrid % tabvars(tabvarsindic) 
     943      endif 
     944             
    824945      IF (present(procname)) THEN 
    825946      Call Agrif_Interp_Bc_3D( 
    826      & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp, 
    827      & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
    828      & Agrif_Curgrid % tabvars(tabvarsindic),q, 
    829      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf, 
    830      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup, 
     947     & roottabvars % var % bctypeinterp, 
     948     & parenttabvars, 
     949     & tabvars,q, 
     950     & tabvars % var % bcinf, 
     951     & tabvars % var % bcsup, 
    831952     & weight,pweight,procname)       
    832953      ELSE 
    833954      Call Agrif_Interp_Bc_3D( 
    834      & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp, 
    835      & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
    836      & Agrif_Curgrid % tabvars(tabvarsindic),q, 
    837      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf, 
    838      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup, 
     955     & roottabvars % var % bctypeinterp, 
     956     & parenttabvars, 
     957     & tabvars,q, 
     958     & tabvars % var % bcinf, 
     959     & tabvars % var % bcsup, 
    839960     & weight,pweight) 
    840961      ENDIF 
    841962      End Subroutine Agrif_Bc_variable3d 
     963       
    842964C 
    843965C     ************************************************************************** 
     
    855977      REAL    :: weight 
    856978      LOGICAL :: pweight 
    857 C 
     979      TYPE(Agrif_PVariable),Pointer ::tabvars,parenttabvars,roottabvars 
     980C 
     981C       
     982C       
     983      If (Agrif_Root()) Return 
     984       
    858985      if ( PRESENT(calledweight) ) then 
    859986        weight=calledweight       
     
    863990        pweight = .FALSE. 
    864991      endif 
    865 C       
    866 C       
    867       If (Agrif_Root()) Return 
     992       
     993      if (tabvarsindic <=0) then 
     994      tabvars => Agrif_Search_Variable(Agrif_Curgrid,-tabvarsindic) 
     995      parenttabvars => tabvars%parent_var 
     996      roottabvars => Agrif_Search_Variable(Agrif_Mygrid,-tabvarsindic) 
     997      else 
     998      tabvars=>Agrif_Curgrid % tabvars(tabvarsindic) 
     999      parenttabvars => Agrif_Curgrid % parent % tabvars(tabvarsindic) 
     1000      roottabvars => Agrif_Mygrid % tabvars(tabvarsindic) 
     1001      endif 
     1002             
    8681003      IF (present(procname)) THEN 
    8691004      Call Agrif_Interp_Bc_4D( 
    870      & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp, 
    871      & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
    872      & Agrif_Curgrid % tabvars(tabvarsindic),q, 
    873      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf, 
    874      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup, 
     1005     & roottabvars % var % bctypeinterp, 
     1006     & parenttabvars, 
     1007     & tabvars,q, 
     1008     & tabvars % var % bcinf, 
     1009     & tabvars % var % bcsup, 
    8751010     & weight,pweight,procname)       
    8761011      ELSE 
    8771012      Call Agrif_Interp_Bc_4D( 
    878      & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp, 
    879      & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
    880      & Agrif_Curgrid % tabvars(tabvarsindic),q, 
    881      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf, 
    882      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup, 
     1013     & roottabvars % var % bctypeinterp, 
     1014     & parenttabvars, 
     1015     & tabvars,q, 
     1016     & tabvars % var % bcinf, 
     1017     & tabvars % var % bcsup, 
    8831018     & weight,pweight) 
    8841019      ENDIF 
    8851020      End Subroutine Agrif_Bc_variable4d 
     1021             
    8861022C 
    8871023C     ************************************************************************** 
     
    8891025C     ************************************************************************** 
    8901026      Subroutine Agrif_Bc_variable5d(q,tabvarsindic,calledweight, 
    891      &                              procname) 
     1027     &                               procname) 
    8921028 
    8931029      REAL   , Dimension(:,:,:,:,:)          :: q 
     
    8991035      REAL    :: weight 
    9001036      LOGICAL :: pweight 
    901 C 
     1037      TYPE(Agrif_PVariable),Pointer ::tabvars,parenttabvars,roottabvars 
     1038C 
     1039C       
     1040C       
     1041      If (Agrif_Root()) Return 
     1042       
    9021043      if ( PRESENT(calledweight) ) then 
    9031044        weight=calledweight       
     
    9071048        pweight = .FALSE. 
    9081049      endif 
    909 C       
    910 C       
    911       If (Agrif_Root()) Return 
     1050       
     1051      if (tabvarsindic <=0) then 
     1052      tabvars => Agrif_Search_Variable(Agrif_Curgrid,-tabvarsindic) 
     1053      parenttabvars => tabvars%parent_var 
     1054      roottabvars => Agrif_Search_Variable(Agrif_Mygrid,-tabvarsindic) 
     1055      else 
     1056      tabvars=>Agrif_Curgrid % tabvars(tabvarsindic) 
     1057      parenttabvars => Agrif_Curgrid % parent % tabvars(tabvarsindic) 
     1058      roottabvars => Agrif_Mygrid % tabvars(tabvarsindic) 
     1059      endif 
     1060             
    9121061      IF (present(procname)) THEN 
    913       Call Agrif_Interp_Bc_5D( 
    914      & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp, 
    915      & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
    916      & Agrif_Curgrid % tabvars(tabvarsindic),q, 
    917      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf, 
    918      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup, 
     1062      Call Agrif_Interp_Bc_5d( 
     1063     & roottabvars % var % bctypeinterp, 
     1064     & parenttabvars, 
     1065     & tabvars,q, 
     1066     & tabvars % var % bcinf, 
     1067     & tabvars % var % bcsup, 
    9191068     & weight,pweight,procname)       
    9201069      ELSE 
    921       Call Agrif_Interp_Bc_5D( 
    922      & Agrif_Mygrid % tabvars(tabvarsindic) % var % bctypeinterp, 
    923      & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
    924      & Agrif_Curgrid % tabvars(tabvarsindic),q, 
    925      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcinf, 
    926      & Agrif_Curgrid % tabvars(tabvarsindic) % var % bcsup, 
     1070      Call Agrif_Interp_Bc_5d( 
     1071     & roottabvars % var % bctypeinterp, 
     1072     & parenttabvars, 
     1073     & tabvars,q, 
     1074     & tabvars % var % bcinf, 
     1075     & tabvars % var % bcsup, 
    9271076     & weight,pweight) 
    9281077      ENDIF 
    9291078      End Subroutine Agrif_Bc_variable5d 
     1079       
    9301080C 
    9311081C     ************************************************************************** 
     
    9331083C     ************************************************************************** 
    9341084C  
    935       Subroutine Agrif_Interp_var0d(tabvarsindic0,tabvarsindic) 
     1085      Subroutine Agrif_Interp_var0d(tabvarsindic0,tabvarsindic,procname) 
    9361086 
    9371087      INTEGER :: tabvarsindic0 ! indice of the variable in tabvars 
    9381088      INTEGER :: tabvarsindic  ! indice of the variable in tabvars 
    9391089      INTEGER :: dimensio  ! indice of the variable in tabvars 
     1090      External :: procname 
     1091      Optional ::  procname 
    9401092C       
    9411093      if (Agrif_Root()) Return 
     
    9431095      dimensio = Agrif_Mygrid % tabvars(tabvarsindic) % var % nbdim  
    9441096C 
    945       if ( dimensio .EQ. 1 ) 
    946      & Call Agrif_Interp_1D( 
     1097      if ( dimensio .EQ. 1 ) then 
     1098       if (present(procname)) then 
     1099       Call Agrif_Interp_1D( 
    9471100     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
    9481101     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     
    9501103     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array1 ,      
    9511104     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
     1105     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname) 
     1106       else 
     1107       Call Agrif_Interp_1D( 
     1108     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
     1109     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     1110     & Agrif_Curgrid % tabvars(tabvarsindic), 
     1111     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array1 ,      
     1112     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
    9521113     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim) 
    953 C 
    954       if ( dimensio .EQ. 2 ) 
    955      & Call Agrif_Interp_2D( 
     1114       endif 
     1115       endif 
     1116C 
     1117      if ( dimensio .EQ. 2 ) then 
     1118      if (present(procname)) then 
     1119       Call Agrif_Interp_2D( 
    9561120     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
    9571121     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     
    9591123     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array2 ,      
    9601124     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
     1125     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname) 
     1126      else 
     1127       Call Agrif_Interp_2D( 
     1128     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
     1129     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     1130     & Agrif_Curgrid % tabvars(tabvarsindic), 
     1131     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array2 ,      
     1132     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
    9611133     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim) 
    962 C 
    963       if ( dimensio .EQ. 3 ) 
    964      & Call Agrif_Interp_3D( 
     1134      endif 
     1135      endif 
     1136C 
     1137      if ( dimensio .EQ. 3 ) then 
     1138      if (present(procname)) then 
     1139       Call Agrif_Interp_3D( 
    9651140     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
    9661141     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     
    9681143     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array3 ,      
    9691144     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
     1145     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname) 
     1146      else 
     1147       Call Agrif_Interp_3D( 
     1148     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
     1149     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     1150     & Agrif_Curgrid % tabvars(tabvarsindic), 
     1151     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array3 ,      
     1152     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
    9701153     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim) 
    971 C 
    972       if ( dimensio .EQ. 4 ) 
    973      & Call Agrif_Interp_4D( 
     1154      endif 
     1155      endif 
     1156C 
     1157      if ( dimensio .EQ. 4 ) then 
     1158      if (present(procname)) then 
     1159       Call Agrif_Interp_4D( 
    9741160     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
    9751161     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     
    9771163     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array4 ,      
    9781164     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
     1165     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname) 
     1166      else 
     1167       Call Agrif_Interp_4D( 
     1168     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
     1169     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     1170     & Agrif_Curgrid % tabvars(tabvarsindic), 
     1171     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array4 ,      
     1172     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
    9791173     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim) 
    980 C 
    981       if ( dimensio .EQ. 5 ) 
    982      & Call Agrif_Interp_5D( 
     1174      endif 
     1175      endif 
     1176C 
     1177      if ( dimensio .EQ. 5 ) then 
     1178      if (present(procname)) then 
     1179       Call Agrif_Interp_5D( 
    9831180     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
    9841181     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     
    9861183     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array5 ,      
    9871184     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
     1185     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname) 
     1186      else 
     1187       Call Agrif_Interp_5D( 
     1188     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
     1189     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     1190     & Agrif_Curgrid % tabvars(tabvarsindic), 
     1191     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array5 ,      
     1192     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
    9881193     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim) 
    989 C 
    990       if ( dimensio .EQ. 6 ) 
    991      & Call Agrif_Interp_6D( 
     1194       endif 
     1195       endif 
     1196C 
     1197      if ( dimensio .EQ. 6 ) then 
     1198      if (present(procname)) then 
     1199       Call Agrif_Interp_6D( 
    9921200     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
    9931201     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     
    9951203     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array6 ,      
    9961204     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
     1205     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname) 
     1206      else 
     1207       Call Agrif_Interp_6D( 
     1208     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
     1209     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     1210     & Agrif_Curgrid % tabvars(tabvarsindic), 
     1211     & Agrif_Curgrid % tabvars(tabvarsindic0) % var % array6 ,      
     1212     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
    9971213     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim) 
     1214      endif 
     1215      endif 
    9981216C 
    9991217      Return 
     
    10041222C     ************************************************************************** 
    10051223C  
    1006       Subroutine Agrif_Interp_var1d(q,tabvarsindic) 
     1224      Subroutine Agrif_Interp_var1d(q,tabvarsindic,procname) 
    10071225 
    10081226      REAL, DIMENSION(:) :: q 
    10091227      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
     1228      External :: procname 
     1229      Optional ::  procname 
    10101230C 
    10111231      if (Agrif_Root()) Return 
    10121232C       
     1233      if (present(procname)) then 
    10131234      Call Agrif_Interp_1D( 
    10141235     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
     
    10161237     & Agrif_Curgrid % tabvars(tabvarsindic),q, 
    10171238     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
     1239     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname) 
     1240      else 
     1241      Call Agrif_Interp_1D( 
     1242     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
     1243     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     1244     & Agrif_Curgrid % tabvars(tabvarsindic),q, 
     1245     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
    10181246     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim) 
    1019  
     1247      endif 
    10201248      Return 
    10211249      End Subroutine Agrif_Interp_var1d 
     
    10251253C     ************************************************************************** 
    10261254C  
    1027       Subroutine Agrif_Interp_var2d(q,tabvarsindic) 
     1255      Subroutine Agrif_Interp_var2d(q,tabvarsindic,procname) 
    10281256 
    10291257      REAL,  DIMENSION(:,:) :: q 
    10301258      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
     1259      External :: procname 
     1260      Optional ::  procname 
     1261 
    10311262C 
    10321263       if (Agrif_Root()) Return 
    10331264C 
     1265       if (present(procname)) then 
    10341266       Call Agrif_Interp_2D( 
    10351267     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
     
    10371269     & Agrif_Curgrid % tabvars(tabvarsindic),q, 
    10381270     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
     1271     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname) 
     1272       else 
     1273       Call Agrif_Interp_2D( 
     1274     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
     1275     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     1276     & Agrif_Curgrid % tabvars(tabvarsindic),q, 
     1277     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
    10391278     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim) 
    1040  
     1279       endif 
    10411280      Return 
    10421281      End Subroutine Agrif_Interp_var2d 
     
    10461285C     ************************************************************************** 
    10471286C  
    1048       Subroutine Agrif_Interp_var3d(q,tabvarsindic) 
     1287      Subroutine Agrif_Interp_var3d(q,tabvarsindic,procname) 
    10491288 
    10501289      REAL,  DIMENSION(:,:,:) :: q 
    10511290      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
     1291      External :: procname 
     1292      Optional ::  procname 
     1293 
    10521294C 
    10531295      if (Agrif_Root()) Return 
    10541296C 
     1297      if (present(procname)) then 
    10551298      Call Agrif_Interp_3D( 
    10561299     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
     
    10581301     & Agrif_Curgrid % tabvars(tabvarsindic),q, 
    10591302     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
     1303     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname) 
     1304      else 
     1305      Call Agrif_Interp_3D( 
     1306     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
     1307     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     1308     & Agrif_Curgrid % tabvars(tabvarsindic),q, 
     1309     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
    10601310     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim) 
    1061  
     1311      endif 
    10621312      Return 
    10631313      End Subroutine Agrif_Interp_var3d 
     
    10671317C     ************************************************************************** 
    10681318C  
    1069       Subroutine Agrif_Interp_var4d(q,tabvarsindic) 
     1319      Subroutine Agrif_Interp_var4d(q,tabvarsindic,procname) 
    10701320 
    10711321      REAL,  DIMENSION(:,:,:,:) :: q 
    10721322      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
     1323      External :: procname 
     1324      Optional ::  procname 
     1325 
    10731326C 
    10741327      if (Agrif_Root()) Return 
    10751328C 
     1329      if (present(procname)) then 
    10761330      Call Agrif_Interp_4D( 
    10771331     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
     
    10791333     & Agrif_Curgrid % tabvars(tabvarsindic),q, 
    10801334     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
     1335     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname) 
     1336      else 
     1337      Call Agrif_Interp_4D( 
     1338     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
     1339     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     1340     & Agrif_Curgrid % tabvars(tabvarsindic),q, 
     1341     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
    10811342     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim) 
    1082  
     1343      endif 
    10831344      Return 
    10841345      End Subroutine Agrif_Interp_var4d      
     
    10881349C     ************************************************************************** 
    10891350C  
    1090       Subroutine Agrif_Interp_var5d(q,tabvarsindic) 
     1351      Subroutine Agrif_Interp_var5d(q,tabvarsindic,procname) 
    10911352 
    10921353      REAL,  DIMENSION(:,:,:,:,:) :: q 
    10931354      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
     1355      External :: procname 
     1356      Optional ::  procname 
     1357 
    10941358C 
    10951359      if (Agrif_Root()) Return 
    10961360C 
     1361      if (present(procname)) then 
    10971362      Call Agrif_Interp_5D( 
    10981363     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
     
    11001365     & Agrif_Curgrid % tabvars(tabvarsindic),q, 
    11011366     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
     1367     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim,procname) 
     1368      else 
     1369      Call Agrif_Interp_5D( 
     1370     & Agrif_Mygrid % tabvars(tabvarsindic) % var %  TypeInterp, 
     1371     & Agrif_Curgrid % parent % tabvars(tabvarsindic), 
     1372     & Agrif_Curgrid % tabvars(tabvarsindic),q, 
     1373     & Agrif_Mygrid % tabvars(tabvarsindic) % var % restaure, 
    11021374     & Agrif_Mygrid % tabvars(tabvarsindic) %var % nbdim) 
    1103  
     1375      endif 
    11041376      Return 
    11051377      End Subroutine Agrif_Interp_var5d        
     
    11101382C  
    11111383      Subroutine Agrif_update_var0d(tabvarsindic0,tabvarsindic, 
    1112      &                              locupdate,procname) 
     1384     &                              locupdate,locupdate1, 
     1385     &                  locupdate2,procname) 
    11131386 
    11141387      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
     
    11181391      INTEGER :: dimensio 
    11191392      INTEGER, DIMENSION(2), OPTIONAL :: locupdate 
     1393      INTEGER, DIMENSION(2), OPTIONAL :: locupdate1 
     1394      INTEGER, DIMENSION(2), OPTIONAL :: locupdate2             
    11201395C 
    11211396      dimensio = Agrif_Mygrid % tabvars(tabvarsindic) % var % nbdim  
    11221397C       
    11231398      if (Agrif_Root()) Return 
     1399       
    11241400C      
    11251401      IF (present(locupdate)) THEN 
    1126       Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf = locupdate(1) 
    1127       Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup = locupdate(2) 
    1128       ELSE 
    1129       Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf = -99 
    1130       Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup = -99 
    1131       ENDIF 
     1402      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:dimensio) 
     1403     &      = locupdate(1) 
     1404      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:dimensio)  
     1405     &      = locupdate(2) 
     1406      ELSE 
     1407      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:dimensio)  
     1408     &      = -99 
     1409      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:dimensio)  
     1410     &      = -99 
     1411      ENDIF 
     1412       
     1413      IF (present(locupdate1)) THEN 
     1414      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1)  
     1415     &      = locupdate1(1) 
     1416      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1)  
     1417     &      = locupdate1(2) 
     1418      ENDIF   
     1419       
     1420      IF (present(locupdate2)) THEN 
     1421      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(2)  
     1422     &      = locupdate2(1) 
     1423      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(2)  
     1424     &      = locupdate2(2) 
     1425      ENDIF              
    11321426  
    11331427      if ( dimensio .EQ. 1 ) then 
     
    12401534C     ************************************************************************** 
    12411535C  
    1242       Subroutine Agrif_update_var1d(q,tabvarsindic,locupdate,procname) 
     1536      Subroutine Agrif_update_var1d(q,tabvarsindic,locupdate, 
     1537     &  locupdate1,locupdate2,procname) 
    12431538 
    12441539      REAL,  DIMENSION(:) :: q 
     
    12471542      Optional ::  procname       
    12481543      INTEGER, DIMENSION(2), OPTIONAL :: locupdate 
     1544      INTEGER, DIMENSION(2), OPTIONAL :: locupdate1 
     1545      INTEGER, DIMENSION(2), OPTIONAL :: locupdate2         
    12491546C       
    12501547      if (Agrif_Root()) Return 
    12511548C      
    12521549      IF (present(locupdate)) THEN 
    1253       Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf = locupdate(1) 
    1254       Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup = locupdate(2) 
    1255       ELSE 
    1256       Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf = -99 
    1257       Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup = -99 
    1258       ENDIF 
     1550      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:1)  
     1551     &      = locupdate(1) 
     1552      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:1)  
     1553     &      = locupdate(2) 
     1554      ELSE 
     1555      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:1)  
     1556     &      = -99 
     1557      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:1)  
     1558     &      = -99 
     1559      ENDIF 
     1560       
     1561      IF (present(locupdate1)) THEN 
     1562      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1)  
     1563     &      = locupdate1(1) 
     1564      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1)  
     1565     &      = locupdate1(2) 
     1566      ENDIF   
     1567       
     1568      IF (present(locupdate2)) THEN 
     1569      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(2)  
     1570     &      = locupdate2(1) 
     1571      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(2)  
     1572     &      = locupdate2(2) 
     1573      ENDIF        
    12591574  
    12601575      IF (present(procname)) THEN 
     
    12831598C     ************************************************************************** 
    12841599C  
    1285       Subroutine Agrif_update_var2d(q,tabvarsindic,locupdate,procname) 
     1600      Subroutine Agrif_update_var2d(q,tabvarsindic,locupdate, 
     1601     &  locupdate1,locupdate2,procname) 
    12861602 
    12871603      REAL,  DIMENSION(:,:) :: q 
     
    12891605      Optional ::  procname 
    12901606      INTEGER, DIMENSION(2), OPTIONAL :: locupdate  
     1607      INTEGER, DIMENSION(2), OPTIONAL :: locupdate1 
     1608      INTEGER, DIMENSION(2), OPTIONAL :: locupdate2         
    12911609      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
    12921610C       
    12931611      IF (Agrif_Root()) RETURN 
     1612       
    12941613C  
    12951614      IF (present(locupdate)) THEN 
    1296       Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf = locupdate(1) 
    1297       Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup = locupdate(2) 
    1298       ELSE 
    1299       Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf = -99 
    1300       Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup = -99 
     1615      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:2)  
     1616     &      = locupdate(1) 
     1617      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:2)  
     1618     &      = locupdate(2) 
     1619      ELSE 
     1620      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:2)  
     1621     &      = -99 
     1622      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:2)  
     1623     &      = -99 
     1624      ENDIF 
     1625       
     1626      IF (present(locupdate1)) THEN 
     1627      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1)  
     1628     &      = locupdate1(1) 
     1629      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1)  
     1630     &      = locupdate1(2) 
     1631      ENDIF   
     1632       
     1633      IF (present(locupdate2)) THEN 
     1634      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(2)  
     1635     &      = locupdate2(1) 
     1636      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(2)  
     1637     &      = locupdate2(2) 
    13011638      ENDIF 
    13021639  
     
    13261663C     ************************************************************************** 
    13271664C  
    1328       Subroutine Agrif_update_var3d(q,tabvarsindic,locupdate,procname) 
     1665      Subroutine Agrif_update_var3d(q,tabvarsindic,locupdate, 
     1666     &  locupdate1,locupdate2,procname) 
    13291667 
    13301668      REAL,  DIMENSION(:,:,:) :: q 
     
    13321670      Optional ::  procname 
    13331671      INTEGER, DIMENSION(2), OPTIONAL :: locupdate 
    1334       INTEGER :: tabvarsindic ! indice of the variable in tabvars 
    1335 C       
    1336       IF (Agrif_Root()) RETURN 
     1672      INTEGER, DIMENSION(2), OPTIONAL :: locupdate1 
     1673      INTEGER, DIMENSION(2), OPTIONAL :: locupdate2         
     1674      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
     1675C       
     1676      IF (Agrif_Root()) RETURN  
    13371677C       
    13381678 
    13391679      IF (present(locupdate)) THEN 
    1340       Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf = locupdate(1) 
    1341       Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup = locupdate(2) 
    1342       ELSE 
    1343       Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf = -99 
    1344       Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup = -99 
     1680      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:3)  
     1681     &      = locupdate(1) 
     1682      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:3)  
     1683     &      = locupdate(2) 
     1684      ELSE 
     1685      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:3)  
     1686     &      = -99 
     1687      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:3)  
     1688     &      = -99 
     1689      ENDIF       
     1690       
     1691      IF (present(locupdate1)) THEN 
     1692      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1)  
     1693     &      = locupdate1(1) 
     1694      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1)  
     1695     &      = locupdate1(2) 
     1696      ENDIF   
     1697       
     1698      IF (present(locupdate2)) THEN 
     1699      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(2)  
     1700     &      = locupdate2(1) 
     1701      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(2)  
     1702     &      = locupdate2(2) 
    13451703      ENDIF 
    13461704 
     
    13701728C     ************************************************************************** 
    13711729C  
    1372       Subroutine Agrif_update_var4d(q,tabvarsindic,locupdate,procname) 
     1730      Subroutine Agrif_update_var4d(q,tabvarsindic,locupdate, 
     1731     &  locupdate1,locupdate2,procname) 
    13731732 
    13741733      REAL,  DIMENSION(:,:,:,:) :: q 
     
    13761735      Optional ::  procname 
    13771736      INTEGER, DIMENSION(2), OPTIONAL :: locupdate 
     1737      INTEGER, DIMENSION(2), OPTIONAL :: locupdate1 
     1738      INTEGER, DIMENSION(2), OPTIONAL :: locupdate2         
    13781739      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
    13791740C       
     
    13811742C       
    13821743      IF (present(locupdate)) THEN 
    1383       Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf = locupdate(1) 
    1384       Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup = locupdate(2) 
    1385       ELSE 
    1386       Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf = -99 
    1387       Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup = -99 
     1744      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:4)  
     1745     &      = locupdate(1) 
     1746      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:4)  
     1747     &      = locupdate(2) 
     1748      ELSE 
     1749      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:4)  
     1750     &      = -99 
     1751      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:4)  
     1752     &      = -99 
     1753      ENDIF 
     1754       
     1755      IF (present(locupdate1)) THEN 
     1756      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1)  
     1757     &      = locupdate1(1) 
     1758      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1)  
     1759     &      = locupdate1(2) 
     1760      ENDIF   
     1761       
     1762      IF (present(locupdate2)) THEN 
     1763      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(2)  
     1764     &      = locupdate2(1) 
     1765      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(2)  
     1766     &      = locupdate2(2) 
    13881767      ENDIF 
    13891768 
     
    14131792C     ************************************************************************** 
    14141793C  
    1415       Subroutine Agrif_update_var5d(q,tabvarsindic,locupdate,procname) 
     1794      Subroutine Agrif_update_var5d(q,tabvarsindic,locupdate, 
     1795     &  locupdate1,locupdate2,procname) 
    14161796 
    14171797      REAL,  DIMENSION(:,:,:,:,:) :: q 
     
    14191799      Optional ::  procname 
    14201800      INTEGER, DIMENSION(2), OPTIONAL :: locupdate 
     1801      INTEGER, DIMENSION(2), OPTIONAL :: locupdate1 
     1802      INTEGER, DIMENSION(2), OPTIONAL :: locupdate2         
    14211803      INTEGER :: tabvarsindic ! indice of the variable in tabvars 
    14221804C 
     
    14241806C       
    14251807      IF (present(locupdate)) THEN 
    1426       Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf = locupdate(1) 
    1427       Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup = locupdate(2) 
    1428       ELSE 
    1429       Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf = -99 
    1430       Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup = -99 
     1808      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:5)  
     1809     &      = locupdate(1) 
     1810      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:5)  
     1811     &      = locupdate(2) 
     1812      ELSE 
     1813      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1:5)  
     1814     &      = -99 
     1815      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1:5)  
     1816     &      = -99 
     1817      ENDIF 
     1818       
     1819      IF (present(locupdate1)) THEN 
     1820      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(1)  
     1821     &      = locupdate1(1) 
     1822      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(1)  
     1823     &      = locupdate1(2) 
     1824      ENDIF   
     1825       
     1826      IF (present(locupdate2)) THEN 
     1827      Agrif_Curgrid%tabvars(tabvarsindic)%var % updateinf(2)  
     1828     &      = locupdate2(1) 
     1829      Agrif_Curgrid%tabvars(tabvarsindic)%var % updatesup(2)  
     1830     &      = locupdate2(2) 
    14311831      ENDIF 
    14321832 
     
    15511951       
    15521952      End Subroutine Agrif_Flux_Correction 
    1553                    
    1554       Subroutine Agrif_Declare_Profile(profilename,posvar,firstpoint, 
    1555      &    raf) 
     1953 
     1954      Subroutine Agrif_Declare_Variable(posvar,firstpoint, 
     1955     &    raf,lb,ub,varid) 
     1956      character*(80) :: variablename 
     1957      Type(Agrif_List_Variables), Pointer :: newvariable,newvariablep 
     1958      INTEGER, DIMENSION(:) :: posvar 
     1959      INTEGER, DIMENSION(:) :: lb,ub 
     1960      INTEGER, DIMENSION(:) :: firstpoint 
     1961      CHARACTER(*) ,DIMENSION(:) :: raf         
     1962      TYPE(Agrif_Pvariable), Pointer :: parent_var,root_var 
     1963      INTEGER :: dimensio 
     1964      INTEGER :: varid 
     1965             
     1966      if (agrif_root()) return 
     1967 
     1968      dimensio = SIZE(posvar) 
     1969C 
     1970C     
     1971      Allocate(newvariable) 
     1972      Allocate(newvariable%pvar) 
     1973      Allocate(newvariable%pvar%var) 
     1974      Allocate(newvariable%pvar%var%posvar(dimensio)) 
     1975      Allocate(newvariable%pvar%var%interptab(dimensio)) 
     1976      newvariable%pvar%var%variablename = variablename 
     1977      newvariable%pvar%var%interptab = raf 
     1978      newvariable%pvar%var%nbdim = dimensio 
     1979      newvariable%pvar%var%posvar = posvar 
     1980      newvariable%pvar%var%point(1:dimensio) = firstpoint 
     1981      newvariable%pvar%var%lb(1:dimensio) = lb(1:dimensio) 
     1982      newvariable%pvar%var%ub(1:dimensio) = ub(1:dimensio) 
     1983       
     1984      newvariable % nextvariable => Agrif_Curgrid%variables 
     1985       
     1986      Agrif_Curgrid%variables => newvariable 
     1987      Agrif_Curgrid%Nbvariables = Agrif_Curgrid%Nbvariables + 1 
     1988       
     1989      varid = -Agrif_Curgrid%Nbvariables 
     1990       
     1991       if (agrif_curgrid%parent%nbvariables < agrif_curgrid%nbvariables) 
     1992     &       then 
     1993      Allocate(newvariablep) 
     1994      Allocate(newvariablep%pvar) 
     1995      Allocate(newvariablep%pvar%var)       
     1996      Allocate(newvariablep%pvar%var%posvar(dimensio)) 
     1997      Allocate(newvariablep%pvar%var%interptab(dimensio)) 
     1998      newvariablep%pvar%var%variablename = variablename 
     1999      newvariablep%pvar%var%interptab = raf 
     2000      newvariablep%pvar%var%nbdim = dimensio 
     2001      newvariablep%pvar%var%posvar = posvar 
     2002      newvariablep%pvar%var%point(1:dimensio) = firstpoint 
     2003       
     2004      newvariablep % nextvariable => Agrif_Curgrid%parent%variables 
     2005       
     2006      Agrif_Curgrid%parent%variables => newvariablep        
     2007       
     2008      Agrif_Curgrid%parent%Nbvariables =  
     2009     &    Agrif_Curgrid%parent%Nbvariables + 1 
     2010      parent_var=>newvariablep%pvar 
     2011      else 
     2012      parent_var=>Agrif_Search_Variable 
     2013     &              (Agrif_Curgrid%parent,Agrif_Curgrid%nbvariables) 
     2014       endif 
     2015        
     2016       newvariable%pvar%parent_var=>parent_var 
     2017       
     2018      root_var=>Agrif_Search_Variable 
     2019     &              (Agrif_Mygrid,Agrif_Curgrid%nbvariables) 
     2020      
     2021      newvariable%pvar%var%root_var=>root_var%var 
     2022       
     2023            
     2024      End Subroutine Agrif_Declare_Variable 
     2025 
     2026      FUNCTION Agrif_Search_Variable(grid,varid) 
     2027      integer :: varid 
     2028      Type(Agrif_Pvariable), Pointer :: Agrif_Search_variable 
     2029      Type(Agrif_grid), Pointer :: grid 
     2030       
     2031      Type(Agrif_List_Variables), pointer :: parcours 
     2032      Logical :: foundvariable 
     2033      integer nb 
     2034       
     2035      foundvariable = .FALSE. 
     2036      parcours => grid%variables 
     2037       
     2038      do nb=1,varid-1 
     2039         parcours => parcours%nextvariable 
     2040      End Do 
     2041       
     2042      Agrif_Search_variable => parcours%pvar 
     2043       
     2044       
     2045      End Function Agrif_Search_variable 
     2046                               
     2047      Subroutine Agrif_Declare_Profile_flux(profilename,posvar, 
     2048     &    firstpoint,raf) 
    15562049      character*(*) :: profilename 
    15572050      Type(Agrif_Profile), Pointer :: newprofile 
     
    15772070      Agrif_myprofiles => newprofile 
    15782071       
    1579       End Subroutine Agrif_Declare_Profile 
     2072      End Subroutine Agrif_Declare_Profile_flux 
    15802073               
    15812074C 
  • trunk/AGRIF/AGRIF_FILES/modcluster.F

    r662 r1200  
    13071307C           grid pointed by parcours%gr       
    13081308C       
    1309             Call Agrif_Allocation (parcours % gr)      
     1309            Call Agrif_Allocation (parcours % gr)    
     1310C             
     1311            Call Agrif_initialisations(parcours % gr)               
    13101312C        
    13111313            Call Agrif_Instance(parcours % gr) 
  • trunk/AGRIF/AGRIF_FILES/modcurgridfunctions.F

    r774 r1200  
    960960      end subroutine Agrif_Open_File 
    961961 
     962C     ************************************************************************** 
     963CCC    subroutine Agrif_Set_MaskMaxSearch 
     964C     ************************************************************************** 
     965      subroutine Agrif_Set_MaskMaxSearch(mymaxsearch) 
     966      integer mymaxsearch 
     967      MaxSearch = mymaxsearch 
     968      end subroutine Agrif_Set_MaskMaxSearch 
     969 
    962970      End Module Agrif_CurgridFunctions  
  • trunk/AGRIF/AGRIF_FILES/modinit.F

    r396 r1200  
    129129C     Pointer argument:  
    130130      Type(Agrif_Grid), Pointer  :: Agrif_Gr 
     131       
    131132C 
    132133      do i = 1 , Agrif_NbVariables 
     
    136137         if (associated(Agrif_Gr%tabvars(i)%var%array1)) then 
    137138             Agrif_Gr % tabvars(i) % var % nbdim = 1 
     139             Agrif_Gr % tabvars(i) % var % lb(1:1) =  
     140     &         lbound(Agrif_Gr%tabvars(i)%var%array1) 
     141             Agrif_Gr % tabvars(i) % var % ub(1:1) =  
     142     &         ubound(Agrif_Gr%tabvars(i)%var%array1)      
    138143         endif 
    139144         if (associated(Agrif_Gr%tabvars(i)%var%array2)) then 
    140145             Agrif_Gr % tabvars(i) % var % nbdim = 2 
     146             Agrif_Gr % tabvars(i) % var % lb(1:2) =  
     147     &         lbound(Agrif_Gr%tabvars(i)%var%array2) 
     148             Agrif_Gr % tabvars(i) % var % ub(1:2) =  
     149     &         ubound(Agrif_Gr%tabvars(i)%var%array2) 
    141150         endif 
    142151         if (associated(Agrif_Gr%tabvars(i)%var%array3)) then 
    143152             Agrif_Gr % tabvars(i) % var % nbdim = 3 
     153             Agrif_Gr % tabvars(i) % var % lb(1:3) =  
     154     &         lbound(Agrif_Gr%tabvars(i)%var%array3) 
     155             Agrif_Gr % tabvars(i) % var % ub(1:3) =  
     156     &         ubound(Agrif_Gr%tabvars(i)%var%array3) 
    144157         endif 
    145158         if (associated(Agrif_Gr%tabvars(i)%var%array4)) then 
    146159             Agrif_Gr % tabvars(i) % var % nbdim = 4 
     160             Agrif_Gr % tabvars(i) % var % lb(1:4) =  
     161     &         lbound(Agrif_Gr%tabvars(i)%var%array4) 
     162             Agrif_Gr % tabvars(i) % var % ub(1:4) =  
     163     &         ubound(Agrif_Gr%tabvars(i)%var%array4) 
    147164         endif 
    148165         if (associated(Agrif_Gr%tabvars(i)%var%array5)) then 
    149166             Agrif_Gr % tabvars(i) % var % nbdim = 5 
     167             Agrif_Gr % tabvars(i) % var % lb(1:5) =  
     168     &         lbound(Agrif_Gr%tabvars(i)%var%array5) 
     169             Agrif_Gr % tabvars(i) % var % ub(1:5) =  
     170     &         ubound(Agrif_Gr%tabvars(i)%var%array5) 
    150171         endif 
    151172         if (associated(Agrif_Gr%tabvars(i)%var%array6)) then 
    152173             Agrif_Gr % tabvars(i) % var % nbdim = 6 
     174             Agrif_Gr % tabvars(i) % var % lb(1:6) =  
     175     &         lbound(Agrif_Gr%tabvars(i)%var%array6) 
     176             Agrif_Gr % tabvars(i) % var % ub(1:6) =  
     177     &         ubound(Agrif_Gr%tabvars(i)%var%array6) 
    153178         endif 
    154179C 
  • trunk/AGRIF/AGRIF_FILES/modinterp.F

    r898 r1200  
    5454C  
    5555      Subroutine Agrif_Interp_1d(TypeInterp,parent,child,tab, 
    56      &    torestore,nbdim)             
     56     &    torestore,nbdim,procname)             
    5757C 
    5858CCC   Description: 
     
    7474      LOGICAL :: torestore 
    7575      REAL, DIMENSION( 
    76      &         lbound(child%var%array1,1):ubound(child%var%array1,1) 
     76     &         child%var%lb(1):child%var%ub(1) 
    7777     &         ), Target :: tab    ! Result 
     78      External :: procname 
     79      Optional ::  procname 
    7880C 
    7981C 
     
    8890C     Tab is the result of the interpolation 
    8991      childtemp % var % array1 => tab  
     92       
     93      childtemp % var % lb = child % var % lb 
     94      childtemp % var % ub = child % var % ub   
     95             
    9096C       
    9197      if (torestore) then 
     
    108114      childtemp % var % list_interp => child % var% list_interp             
    109115C       
     116      if (present(procname)) then 
     117      Call Agrif_InterpVariable 
     118     &     (TypeInterp,parent,childtemp,torestore,procname) 
     119      else 
    110120      Call Agrif_InterpVariable 
    111121     &     (TypeInterp,parent,childtemp,torestore) 
     122      endif 
    112123      child % var % list_interp => childtemp % var %list_interp      
    113124C       
     
    124135C  
    125136      Subroutine Agrif_Interp_2d(TypeInterp,parent,child,tab, 
    126      &                           torestore,nbdim)             
     137     &                           torestore,nbdim,procname)             
    127138C 
    128139CCC   Description: 
     
    144155      LOGICAL :: torestore 
    145156      REAL, DIMENSION( 
    146      &    lbound(child%var%array2,1):ubound(child%var%array2,1), 
    147      &    lbound(child%var%array2,2):ubound(child%var%array2,2) 
     157     &         child%var%lb(1):child%var%ub(1), 
     158     &         child%var%lb(2):child%var%ub(2) 
    148159     &    ), Target :: tab    ! Result 
     160      External :: procname 
     161      Optional ::  procname 
    149162C 
    150163C 
     
    159172C     Tab is the result of the interpolation 
    160173      childtemp % var % array2 => tab   
    161 C       
     174       
     175      childtemp % var % lb = child % var % lb 
     176      childtemp % var % ub = child % var % ub 
     177       
     178C 
    162179      if (torestore) then       
    163180C  
    164           childtemp % var % array2 = child % var % array2 
     181          childtemp % var % array2 = child % var % array2           
    165182C  
    166183          childtemp % var % restore2D => child % var % restore2D         
     
    179196      childtemp % var % list_interp => child % var% list_interp           
    180197C      
     198      if (present(procname)) then 
     199      Call Agrif_InterpVariable 
     200     &     (TypeInterp,parent,childtemp,torestore,procname) 
     201      else 
    181202      Call Agrif_InterpVariable 
    182203     &     (TypeInterp,parent,childtemp,torestore) 
     204      endif 
     205 
    183206      child % var % list_interp => childtemp % var %list_interp      
    184207C       
     
    195218C  
    196219      Subroutine Agrif_Interp_3d(TypeInterp,parent,child,tab, 
    197      &   torestore,nbdim)             
     220     &   torestore,nbdim,procname)             
    198221C 
    199222CCC   Description: 
     
    215238      LOGICAL :: torestore 
    216239      REAL, DIMENSION( 
    217      &      lbound(child%var%array3,1):ubound(child%var%array3,1), 
    218      &      lbound(child%var%array3,2):ubound(child%var%array3,2), 
    219      &      lbound(child%var%array3,3):ubound(child%var%array3,3) 
     240     &         child%var%lb(1):child%var%ub(1), 
     241     &         child%var%lb(2):child%var%ub(2), 
     242     &         child%var%lb(3):child%var%ub(3) 
    220243     &      ), Target :: tab  ! Results 
     244      External :: procname 
     245      Optional ::  procname 
    221246C 
    222247C 
     
    231256C     Tab is the result of the interpolation  
    232257      childtemp % var % array3 => tab  
     258       
     259      childtemp % var % lb = child % var % lb 
     260      childtemp % var % ub = child % var % ub         
    233261C       
    234262      if (torestore) then 
     
    251279      childtemp % var % list_interp => child % var% list_interp           
    252280C      
     281 
     282      if (present(procname)) then 
     283      Call Agrif_InterpVariable 
     284     &     (TypeInterp,parent,childtemp,torestore,procname) 
     285      else 
    253286      Call Agrif_InterpVariable 
    254287     &     (TypeInterp,parent,childtemp,torestore) 
     288      endif 
     289 
     290 
    255291      child % var % list_interp => childtemp % var %list_interp      
    256292C       
     
    267303C  
    268304      Subroutine Agrif_Interp_4d(TypeInterp,parent,child,tab, 
    269      &   torestore,nbdim)             
     305     &   torestore,nbdim,procname)             
    270306C 
    271307CCC   Description: 
     
    287323      LOGICAL :: torestore 
    288324      REAL, DIMENSION( 
    289      &      lbound(child%var%array4,1):ubound(child%var%array4,1), 
    290      &      lbound(child%var%array4,2):ubound(child%var%array4,2), 
    291      &      lbound(child%var%array4,3):ubound(child%var%array4,3), 
    292      &      lbound(child%var%array4,4):ubound(child%var%array4,4) 
     325     &         child%var%lb(1):child%var%ub(1), 
     326     &         child%var%lb(2):child%var%ub(2), 
     327     &         child%var%lb(3):child%var%ub(3), 
     328     &         child%var%lb(4):child%var%ub(4) 
    293329     &      ), Target :: tab  ! Results 
     330      External :: procname 
     331      Optional ::  procname 
    294332C 
    295333C 
     
    304342C     Tab is the result of the interpolation 
    305343      childtemp % var % array4 => tab  
     344       
     345      childtemp % var % lb = child % var % lb 
     346      childtemp % var % ub = child % var % ub   
     347             
    306348C  
    307349      if (torestore) then 
     
    324366      childtemp % var % list_interp => child % var% list_interp            
    325367C      
     368      if (present(procname)) then 
     369      Call Agrif_InterpVariable 
     370     &     (TypeInterp,parent,childtemp,torestore,procname) 
     371      else 
    326372      Call Agrif_InterpVariable 
    327373     &     (TypeInterp,parent,childtemp,torestore) 
     374      endif 
     375 
     376 
    328377      child % var % list_interp => childtemp % var %list_interp 
    329378C       
     
    340389C  
    341390      Subroutine Agrif_Interp_5d(TypeInterp,parent,child,tab, 
    342      &   torestore,nbdim)             
     391     &   torestore,nbdim,procname)             
    343392C 
    344393CCC   Description: 
     
    360409      LOGICAL :: torestore 
    361410      REAL, DIMENSION( 
    362      &      lbound(child%var%array5,1):ubound(child%var%array5,1), 
    363      &      lbound(child%var%array5,2):ubound(child%var%array5,2), 
    364      &      lbound(child%var%array5,3):ubound(child%var%array5,3), 
    365      &      lbound(child%var%array5,4):ubound(child%var%array5,4), 
    366      &      lbound(child%var%array5,5):ubound(child%var%array5,5) 
     411     &         child%var%lb(1):child%var%ub(1), 
     412     &         child%var%lb(2):child%var%ub(2), 
     413     &         child%var%lb(3):child%var%ub(3), 
     414     &         child%var%lb(4):child%var%ub(4), 
     415     &         child%var%lb(5):child%var%ub(5) 
    367416     &      ),  Target :: tab  ! Results 
     417      External :: procname 
     418      Optional ::  procname 
    368419C 
    369420C 
     
    378429C     Tab is the result of the interpolation 
    379430      childtemp % var % array5 => tab   
     431       
     432      childtemp % var % lb = child % var % lb 
     433      childtemp % var % ub = child % var % ub   
     434             
    380435C       
    381436      if (torestore) then 
     
    398453      childtemp % var % list_interp => child % var% list_interp           
    399454C       
     455      if (present(procname)) then 
     456      Call Agrif_InterpVariable 
     457     &     (TypeInterp,parent,childtemp,torestore,procname) 
     458      else 
    400459      Call Agrif_InterpVariable 
    401460     &     (TypeInterp,parent,childtemp,torestore) 
     461      endif 
     462 
    402463      
    403464      child % var % list_interp => childtemp % var %list_interp 
     
    415476C  
    416477      Subroutine Agrif_Interp_6d(TypeInterp,parent,child,tab, 
    417      &  torestore,nbdim)             
     478     &  torestore,nbdim,procname)             
    418479C 
    419480CCC   Description: 
     
    435496      LOGICAL :: torestore 
    436497      REAL, DIMENSION( 
    437      &      lbound(child%var%array6,1):ubound(child%var%array6,1), 
    438      &      lbound(child%var%array6,2):ubound(child%var%array6,2), 
    439      &      lbound(child%var%array6,3):ubound(child%var%array6,3), 
    440      &      lbound(child%var%array6,4):ubound(child%var%array6,4), 
    441      &      lbound(child%var%array6,5):ubound(child%var%array6,5), 
    442      &      lbound(child%var%array6,6):ubound(child%var%array6,6) 
     498     &         child%var%lb(1):child%var%ub(1), 
     499     &         child%var%lb(2):child%var%ub(2), 
     500     &         child%var%lb(3):child%var%ub(3), 
     501     &         child%var%lb(4):child%var%ub(4), 
     502     &         child%var%lb(5):child%var%ub(5), 
     503     &         child%var%lb(6):child%var%ub(6) 
    443504     &      ),  Target :: tab  ! Results 
     505      External :: procname 
     506      Optional ::  procname 
    444507C 
    445508C 
     
    454517C     Tab is the result of the interpolation 
    455518      childtemp % var % array6 => tab   
     519       
     520      childtemp % var % lb = child % var % lb 
     521      childtemp % var % ub = child % var % ub   
     522             
    456523C       
    457524      if (torestore) then 
     
    475542      childtemp % var % list_interp => child % var% list_interp            
    476543C       
     544 
     545      if (present(procname)) then 
     546      Call Agrif_InterpVariable 
     547     &     (TypeInterp,parent,childtemp,torestore,procname) 
     548      else 
    477549      Call Agrif_InterpVariable 
    478550     &     (TypeInterp,parent,childtemp,torestore) 
     551      endif 
     552 
     553 
    479554C       
    480555      child % var % list_interp => childtemp % var %list_interp 
     
    490565C     ************************************************************************** 
    491566C    
    492       Subroutine Agrif_InterpVariable(TYPEinterp,parent,child,torestore) 
     567      Subroutine Agrif_InterpVariable(TYPEinterp,parent,child,torestore, 
     568     &            procname) 
    493569C 
    494570CCC   Description: 
     
    521597      REAL    ,DIMENSION(6) :: s_child,s_parent 
    522598      REAL    ,DIMENSION(6) :: ds_child,ds_parent 
     599      External :: procname 
     600      Optional ::  procname 
     601 
    523602C 
    524603      Call PreProcessToInterpOrUpdate(parent,child, 
     
    533612C     the grid variable 
    534613C 
     614 
     615      if (present(procname)) then 
     616      call Agrif_InterpnD 
     617     &            (TYPEinterp,parent,child, 
     618     &             pttab_Child(1:nbdim),petab_Child(1:nbdim), 
     619     &             pttab_Child(1:nbdim),pttab_Parent(1:nbdim), 
     620     &             s_Child(1:nbdim),s_Parent(1:nbdim), 
     621     &             ds_Child(1:nbdim),ds_Parent(1:nbdim), 
     622     &             child,torestore,nbdim,procname) 
     623      else 
    535624      call Agrif_InterpnD 
    536625     &            (TYPEinterp,parent,child, 
     
    540629     &             ds_Child(1:nbdim),ds_Parent(1:nbdim), 
    541630     &             child,torestore,nbdim) 
     631 
     632      endif 
    542633C 
    543634      Return 
     
    633724      INTEGER,DIMENSION(nbdim,0:Agrif_Nbprocs-1,8) :: tab4t 
    634725      LOGICAL, DIMENSION(0:Agrif_Nbprocs-1) :: memberinall 
    635       LOGICAL, DIMENSION(0:Agrif_Nbprocs-1) :: sendtoproc1,recvfromproc1       
     726      LOGICAL, DIMENSION(0:Agrif_Nbprocs-1) :: sendtoproc1,recvfromproc1 
    636727      LOGICAL, DIMENSION(1) :: memberin1 
    637728C 
    638729#endif       
    639730C      
     731 
    640732C    
    641733C     Boundaries of the current grid where interpolation is done 
    642734 
    643        
    644        
    645        
    646735      IF (Associated(child%var%list_interp)) THEN 
    647736      Call Agrif_Find_list_interp(child%var%list_interp,pttab,petab, 
     
    659748       
    660749      IF (.not.find_list_interp) THEN 
     750 
    661751      Call Agrif_nbdim_Get_bound_dimension(child % var, 
    662752     &                               lowerbound,upperbound,nbdim) 
    663  
     753       
    664754      Call Agrif_Childbounds(nbdim,lowerbound,upperbound, 
    665755     &                                   pttab,petab, 
     
    667757      
    668758C 
    669 C 
    670  
    671759      Call Agrif_Parentbounds(TYPEinterp,nbdim,indminglob,indmaxglob, 
    672760     &                        s_Parent_temp,s_Child_temp, 
     
    677765     &                        child%var%root_var%posvar, 
    678766     &                        child % var % root_var % interptab) 
    679  
    680  
     767        
    681768#ifdef AGRIF_MPI 
    682769       IF (memberin) THEN 
     
    689776     &                        child%var%root_var%posvar, 
    690777     &                        child % var % root_var % interptab) 
    691       ENDIF  
    692  
     778      ENDIF 
     779        
    693780      Call Agrif_nbdim_Get_bound_dimension(parent%var, 
    694781     &                              lowerbound,upperbound,nbdim) 
    695  
     782        
    696783      Call Agrif_ChildGrid_to_ParentGrid() 
    697784C 
     
    739826            
    740827      ENDIF 
    741  
    742  
    743828 
    744829      IF (member) THEN 
     
    855940#endif 
    856941     &    ) 
    857       endif 
    858        
     942      endif    
    859943C 
    860944C 
     
    9451029 
    9461030 
    947 C 
    948 C 
    949 C     Special values on the child grid   
    950       if (Agrif_UseSpecialValueFineGrid) then 
    951 C 
    952 #ifdef AGRIF_MPI 
    953 C         
    954           Call GiveAgrif_SpecialValueToTab_mpi(child%var,tempC%var, 
    955      &                 childarray, 
    956      &                 pttruetab,cetruetab, 
    957      &                 Agrif_SpecialValueFineGrid,nbdim) 
    958 C 
    959 #else 
    960 C 
    961           Call GiveAgrif_SpecialValueToTab(child%var,tempC%var, 
    962      &                  pttruetab,cetruetab, 
    963      &                  Agrif_SpecialValueFineGrid,nbdim) 
    964 C 
    965 #endif  
    966 C 
    967 C         
    968       endif 
    9691031 
    9701032 
     
    9871049#endif 
    9881050 
     1051 
     1052C 
     1053C 
     1054C     Special values on the child grid   
     1055      if (Agrif_UseSpecialValueFineGrid) then 
     1056C 
     1057 
     1058          Call GiveAgrif_SpecialValueToTab_mpi(child%var,tempC%var, 
     1059     &                 childarray, 
     1060     &                 pttruetab,cetruetab, 
     1061     &                 Agrif_SpecialValueFineGrid,nbdim) 
     1062 
     1063C         
     1064      endif 
     1065       
    9891066      endif 
    9901067 
     
    10891166        CASE (2) 
    10901167           do j = pttruetab(2),cetruetab(2) 
    1091              do i = pttruetab(1),cetruetab(1)             
     1168             do i = pttruetab(1),cetruetab(1)  
    10921169              if (restore%var%restore2D(i,j) == 0)      
    10931170     &              child % var % array2(i,j) =  
     
    20962173          ENDIF 
    20972174        EndDo 
    2098 C        print *,'ok trouve' 
     2175 
    20992176        indmin = parcours%interp_loc%indmin(1:nbdim) 
    21002177        indmax = parcours%interp_loc%indmax(1:nbdim) 
  • trunk/AGRIF/AGRIF_FILES/modmask.F

    r779 r1200  
    3535C 
    3636      IMPLICIT NONE 
    37       Integer, Parameter :: MaxSearch = 3 
    3837C 
    3938      CONTAINS 
  • trunk/AGRIF/AGRIF_FILES/modsauv.F

    r662 r1200  
    6161C     Pointer argument     
    6262      TYPE(Agrif_Grid),pointer   :: Agrif_Gr ! Pointer on the current grid 
    63       INTEGER i 
     63      INTEGER i  
    6464C 
    6565C    
     
    164164               Deallocate(Agrif_Gr%tabvars(i)%var%interptab) 
    165165            endif   
    166                               
    167 C 
     166             
     167       endif 
     168            
     169C 
     170       if (associated(Agrif_Gr%tabvars(i)%var%list_interp)) then 
     171         Call Agrif_Free_list_interp 
     172     &                          (Agrif_Gr%tabvars(i)%var%list_interp) 
     173       endif                              
     174C 
     175       if ( .NOT. Agrif_Mygrid % tabvars(i) % var % restaure) then 
    168176            Deallocate(Agrif_Gr%tabvars(i)%var) 
    169177C  
     
    185193C 
    186194C 
     195      Recursive Subroutine Agrif_Free_list_interp(list_interp) 
     196      TYPE(Agrif_List_Interp_Loc), Pointer :: list_interp 
     197       
     198      if (associated(list_interp%suiv)) 
     199     &      Call Agrif_Free_list_interp(list_interp%suiv) 
     200      
     201#ifdef AGRIF_MPI 
     202       Deallocate(list_interp%interp_loc%tab4t) 
     203       Deallocate(list_interp%interp_loc%memberinall) 
     204       Deallocate(list_interp%interp_loc%sendtoproc1) 
     205       Deallocate(list_interp%interp_loc%recvfromproc1) 
     206#endif 
     207       Deallocate(list_interp%interp_loc) 
     208       Deallocate(list_interp) 
     209       Nullify(list_interp) 
     210 
     211      End Subroutine Agrif_Free_list_interp       
    187212C 
    188213C     ************************************************************************** 
     
    307332            if (associated(Agrif_Gr%tabvars(i)%var%interptab)) then 
    308333               Deallocate(Agrif_Gr%tabvars(i)%var%interptab) 
    309             endif               
     334            endif                   
    310335! 
    311336            Deallocate(Agrif_Gr%tabvars(i)%var) 
  • trunk/AGRIF/AGRIF_FILES/modtypes.F

    r898 r1200  
    3232C     Maximum refinement ratio 
    3333 
    34       INTEGER, PARAMETER :: Agrif_MaxRaff = 7       
     34      INTEGER, PARAMETER :: Agrif_MaxRaff = 7 
     35       
     36C     Maximum number of grids of the hierarchy 
     37      INTEGER, PARAMETER :: Agrif_NbMaxGrids = 10 
     38                   
    3539C 
    3640C     ************************************************************************** 
     
    160164           INTEGER ,DIMENSION(:,:)        ,Pointer :: tabpoint2D 
    161165           INTEGER ,DIMENSION(:,:,:)      ,Pointer :: tabpoint3D 
    162             
     166           Type(Agrif_List_Variables), Pointer     :: variables=>NULL() 
     167           INTEGER                                 :: NbVariables = 0 
    163168           Type(Agrif_Flux), Pointer               :: fluxes => NULL() 
    164169      End TYPE Agrif_grid 
     
    172177C 
    173178      TYPE Agrif_Variable  
     179         CHARACTER*80 :: variablename 
    174180C        
    175181         ! Pointer on the variable of the root grid  
     
    204210         REAL*8, DIMENSION(:,:,:,:,:)  ,Pointer :: darray5   => NULL() 
    205211         REAL*8, DIMENSION(:,:,:,:,:,:),Pointer :: darray6   => NULL() 
     212C        Arrays containing the values of the grid variables (REAL*4) 
     213         REAL*4                                 :: sarray0 
     214         REAL*4, DIMENSION(:)          ,Pointer :: sarray1   => NULL() 
     215         REAL*4, DIMENSION(:,:)        ,Pointer :: sarray2   => NULL() 
     216         REAL*4, DIMENSION(:,:,:)      ,Pointer :: sarray3   => NULL() 
     217         REAL*4, DIMENSION(:,:,:,:)    ,Pointer :: sarray4   => NULL() 
     218         REAL*4, DIMENSION(:,:,:,:,:)  ,Pointer :: sarray5   => NULL() 
     219         REAL*4, DIMENSION(:,:,:,:,:,:),Pointer :: sarray6   => NULL() 
    206220C        Arrays containing the values of the grid variables (LOGICAL) 
    207221         LOGICAL                                 :: larray0 
     
    241255         INTEGER :: bcinf ! option bc 
    242256         INTEGER :: bcsup ! option bc 
    243          INTEGER :: updateinf ! option update 
    244          INTEGER :: updatesup ! option update          
     257         INTEGER, DIMENSION(6) :: updateinf ! option update 
     258         INTEGER, DIMENSION(6) :: updatesup ! option update          
    245259         INTEGER, DIMENSION(6,6) :: bcTYPEinterp ! option bcinterp 
    246260         INTEGER, DIMENSION(6) :: TYPEinterp ! option interp 
    247261         INTEGER, DIMENSION(6) :: TYPEupdate ! option update 
     262          
     263         INTEGER, DIMENSION(6) :: lb, ub 
    248264          
    249265         Type(Agrif_List_Interp_Loc), Pointer :: list_interp => NULL() 
     
    278294      Type(Agrif_List_Interp_Loc), Pointer :: suiv 
    279295      End Type Agrif_List_Interp_Loc 
    280          
     296 
     297       TYPE Agrif_List_Variables 
     298         Type(Agrif_PVariable), Pointer :: pvar 
     299         Type(Agrif_List_Variables), Pointer :: nextvariable  => NULL() 
     300       END TYPE Agrif_List_Variables 
     301                
    281302       TYPE Agrif_Profile 
    282303          character*80 :: profilename 
     
    294315         !    each of them  
    295316         CHARACTER(6),DIMENSION(:) ,Pointer :: interptab   => NULL()  
     317         Type(Agrif_Variable), Pointer :: var 
    296318         Type(Agrif_Profile), Pointer :: nextprofile  => NULL() 
    297319       END TYPE Agrif_Profile 
     
    354376      INTEGER               :: Agrif_Minwidth 
    355377      REAL                  :: Agrif_Efficiency = 0.7 
     378      INTEGER               :: MaxSearch = 5 
    356379      REAL    ,DIMENSION(3) :: Agrif_mind 
    357380C     PARAMETERs for the interpolation of the child grids 
  • trunk/AGRIF/AGRIF_FILES/modupdate.F

    r898 r1200  
    6868      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid 
    6969      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child 
    70       INTEGER :: deb,fin                      ! Positions where interpolations  
     70      INTEGER, DIMENSION(6) :: deb,fin       ! Positions where interpolations  
    7171                                              ! are done on the fine grid        
    7272      External :: procname 
     
    8686C       
    8787C     Values on the current grid used for the update 
    88       childtemp % var % array1 => tab      
     88      childtemp % var % array1 => tab 
     89       
     90      childtemp % var % lb = child % var % lb 
     91      childtemp % var % ub = child % var % ub              
    8992       
    9093C      childtemp % var % list_update => child%var%list_update 
     
    129132      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid 
    130133      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child 
    131       INTEGER :: deb,fin                      ! Positions where interpolations  
     134      INTEGER, DIMENSION(6) :: deb,fin       ! Positions where interpolations  
    132135                                              ! are done on the fine grid  
    133136                                               
     
    151154C       
    152155C     Values on the current grid used for the update 
    153       childtemp % var % array2 => tab       
     156      childtemp % var % array2 => tab  
     157       
     158      childtemp % var % lb = child % var % lb 
     159      childtemp % var % ub = child % var % ub              
    154160       
    155161C      childtemp % var % list_update => child%var%list_update       
     
    191197      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid 
    192198      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child 
    193       INTEGER :: deb,fin                      ! Positions where interpolations  
     199      INTEGER, DIMENSION(6) :: deb,fin       ! Positions where interpolations  
    194200                                              ! are done on the fine grid     
    195201      External :: procname 
     
    215221      childtemp % var % array3 => tab      
    216222       
     223      childtemp % var % lb = child % var % lb 
     224      childtemp % var % ub = child % var % ub   
     225             
     226       
    217227C      childtemp % var % list_update => child%var%list_update       
    218228C 
     
    253263      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid 
    254264      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child 
    255       INTEGER :: deb,fin                      ! Positions where interpolations  
     265      INTEGER, DIMENSION(6) :: deb,fin       ! Positions where interpolations  
    256266                                              ! are done on the fine grid      
    257267      External :: procname 
     
    277287      childtemp % var % array4 => tab      
    278288       
     289      childtemp % var % lb = child % var % lb 
     290      childtemp % var % ub = child % var % ub   
     291             
     292       
    279293C      childtemp % var % list_update => child%var%list_update 
    280294             
     
    316330      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid 
    317331      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child 
    318       INTEGER :: deb,fin                      ! Positions where interpolations  
     332      INTEGER, DIMENSION(6) :: deb,fin       ! Positions where interpolations  
    319333                                              ! are done on the fine grid      
    320334      External :: procname 
     
    342356      childtemp % var % array5 => tab       
    343357       
     358      childtemp % var % lb = child % var % lb 
     359      childtemp % var % ub = child % var % ub         
     360       
    344361C      childtemp % var % list_update => child%var%list_update       
    345362C 
     
    381398      TYPE(AGRIF_PVariable) :: child         ! Variable on the child grid 
    382399      TYPE(AGRIF_PVariable) :: childtemp     ! Temporary variable on the child 
    383       INTEGER :: deb,fin                      ! Positions where interpolations  
     400      INTEGER, DIMENSION(6) :: deb,fin       ! Positions where interpolations  
    384401                                              ! are done on the fine grid        
    385402      REAL, DIMENSION( 
     
    404421C     Values on the current grid used for the update 
    405422      childtemp % var % array6 => tab       
     423       
     424      childtemp % var % lb = child % var % lb 
     425      childtemp % var % ub = child % var % ub   
     426             
    406427C      childtemp % var % list_update => child%var%list_update 
    407428C 
     
    439460      TYPE(AGRIF_PVariable) :: parent   ! Variable on the parent grid 
    440461      TYPE(AGRIF_PVariable) :: child    ! Variable on the child grid  
    441       INTEGER               :: deb,fin  ! Positions where boundary conditions 
     462      INTEGER, DIMENSION(6) :: deb,fin       ! Positions where interpolations  
    442463                                        !    are calculated      
    443464      External :: procname 
     
    532553 
    533554      wholeupdate = .FALSE. 
    534  
    535       IF ((deb == -99) .AND. (deb == fin)) THEN 
    536        wholeupdate = .TRUE. 
    537       ENDIF 
    538  
    539       IF ((deb > fin)) THEN 
    540        wholeupdate = .TRUE. 
    541       ENDIF 
     555       
     556      do n=1,nbdim 
     557      if (loctab_child(n) /= -3) then 
     558        if (deb(n)>fin(n)) wholeupdate = .TRUE. 
     559        if ((deb(n) == -99).AND.(deb(n)==fin(n))) wholeupdate=.TRUE. 
     560      endif 
     561      enddo 
    542562      
    543563       IF (present(procname)) THEN 
     
    620640      TYPE(AGRIF_PVariable)    :: child              ! Variable on the child 
    621641                                                     !    grid  
    622       INTEGER :: deb, fin 
     642      INTEGER, DIMENSION(6) :: deb, fin 
    623643      INTEGER                  :: nbdim              ! Number of dimensions of 
    624644                                                     !    the grid variable 
     
    677697        ENDIF 
    678698 
    679         IF (deb > fin) THEN 
    680           debloc = deb 
    681           finloc = finloc - deb 
     699        IF (deb(i) > fin(i)) THEN 
     700          debloc = deb(i) 
     701          finloc = finloc - deb(i) 
    682702        ENDIF 
    683703 
     
    810830      TYPE(AGRIF_PVariable)    :: child              ! Variable on the child 
    811831                                                     !   grid  
    812       INTEGER                  :: deb,fin            ! Positions where 
    813                                                      !   interpolations are done 
     832      INTEGER, DIMENSION(6) :: deb, fin 
    814833      INTEGER                  :: nbdim              ! Number of dimensions of 
    815834                                                     !   the grid variable 
     
    859878      DO i = 1, nbdim 
    860879        coeffraf = nint(ds_Parent(i)/ds_Child(i)) 
    861         indtab(i,1,1) = pttab_child(i) + (deb + 1) * coeffraf 
    862         indtab(i,1,2) = pttab_child(i) + (fin + 1) * coeffraf 
     880        indtab(i,1,1) = pttab_child(i) + (deb(i) + 1) * coeffraf 
     881        indtab(i,1,2) = pttab_child(i) + (fin(i) + 1) * coeffraf 
    863882 
    864883        indtab(i,2,1) = pttab_child(i) + nbtab_child(i) 
    865      &    - (fin + 1) *  coeffraf 
     884     &    - (fin(i) + 1) *  coeffraf 
    866885        indtab(i,2,2) = pttab_child(i) + nbtab_child(i) 
    867      &    - (deb + 1) *  coeffraf 
     886     &    - (deb(i) + 1) *  coeffraf 
    868887 
    869888        IF (posvartab_child(i) == 1) THEN 
Note: See TracChangeset for help on using the changeset viewer.