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/modbcfunction.F – 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)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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 
Note: See TracChangeset for help on using the changeset viewer.