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 662 for trunk/AGRIF/AGRIF_FILES/modmask.F – NEMO

Ignore:
Timestamp:
2007-05-25T17:58:52+02:00 (17 years ago)
Author:
opalod
Message:

RB: update Agrif internal routines with a new update scheme and performance improvment

File:
1 edited

Legend:

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

    r396 r662  
    202202C     Local scalar 
    203203      INTEGER                  :: i,ii,iii,jj,kk,ll,mm,nn  
    204       INTEGER,DIMENSION(nbdim) :: imin,imax 
     204      INTEGER,DIMENSION(nbdim) :: imin,imax,idecal 
    205205      INTEGER                  :: Nbvals 
    206206      REAL                     :: Res 
     
    235235                  imin(iii) = max(indic(iii) - i,ppbtab(iii)) 
    236236                  imax(iii) = min(indic(iii) + i,ppetab(iii)) 
     237                  if (firsttest) then                
     238                  if (indic(iii).GT.ppbtab(iii)) then 
     239 
     240                     idecal = indic 
     241                     idecal(iii) = idecal(iii)-1 
     242                     SELECT CASE(nbdim) 
     243                     CASE (1) 
     244                        if (tempP%var%array1(idecal(1) 
     245     &                            ) == Agrif_SpecialValue) then 
     246                           imin(iii) = imax(iii) 
     247                        endif                      
     248                     CASE (2) 
     249                        if (tempP%var%array2(idecal(1), 
     250     &            idecal(2)) == Agrif_SpecialValue) then 
     251                           imin(iii) = imax(iii) 
     252                        endif 
     253                     CASE (3) 
     254                        if (tempP%var%array3(idecal(1), 
     255     &            idecal(2),idecal(3))  
     256     &                               == Agrif_SpecialValue) then 
     257                           imin(iii) = imax(iii) 
     258                        endif   
     259                     CASE (4) 
     260                        if (tempP%var%array4(idecal(1), 
     261     &            idecal(2),idecal(3),idecal(4))  
     262     &                               == Agrif_SpecialValue) then 
     263                           imin(iii) = imax(iii) 
     264                        endif      
     265                     CASE (5) 
     266                        if (tempP%var%array5(idecal(1), 
     267     &            idecal(2),idecal(3),idecal(4),idecal(5))  
     268     &                               == Agrif_SpecialValue) then 
     269                           imin(iii) = imax(iii) 
     270                        endif   
     271                     CASE (6) 
     272                        if (tempP%var%array6(idecal(1), 
     273     &            idecal(2),idecal(3),idecal(4),idecal(5),idecal(6))  
     274     &                               == Agrif_SpecialValue) then 
     275                           imin(iii) = imax(iii) 
     276                        endif                                                                                            
     277                     END SELECT 
     278                  endif 
     279                  endif 
    237280               endif             
    238281            enddo 
     
    241284            Nbvals = 0 
    242285C 
    243             if ( nbdim .EQ. 1 ) then 
     286            SELECT CASE(nbdim) 
     287            CASE (1) 
    244288               do ii = imin(1),imax(1) 
    245289                    ValParent = parent%var%array1(ii) 
     
    249293                    endif  
    250294               enddo 
    251             endif 
    252 C 
    253             if ( nbdim .EQ. 2 ) then 
     295C 
     296            CASE (2) 
    254297               do jj = imin(2),imax(2) 
    255298               do ii = imin(1),imax(1) 
     
    261304               enddo   
    262305               enddo 
    263             endif 
    264 C 
    265             if ( nbdim .EQ. 3 ) then 
     306                
     307            CASE (3) 
    266308               do kk = imin(3),imax(3) 
    267309               do jj = imin(2),imax(2) 
     
    275317                  enddo   
    276318               enddo 
    277             endif 
    278 C 
    279             if ( nbdim .EQ. 4 ) then 
     319 
     320            CASE (4) 
    280321               do ll = imin(4),imax(4) 
    281322               do kk = imin(3),imax(3) 
     
    291332                  enddo   
    292333               enddo 
    293             endif 
    294 C 
    295             if ( nbdim .EQ. 5 ) then 
     334 
     335            CASE (5) 
    296336               do mm = imin(5),imax(5) 
    297337               do ll = imin(4),imax(4) 
     
    309349                  enddo   
    310350               enddo 
    311             endif 
    312 C 
    313             if ( nbdim .EQ. 6 ) then 
     351 
     352            CASE (6) 
    314353               do nn = imin(6),imax(6) 
    315354               do mm = imin(5),imax(5) 
     
    329368                  enddo   
    330369               enddo 
    331             endif 
     370 
     371            END SELECT 
    332372C 
    333373C 
     
    336376              if (firsttest) then 
    337377                   firsttest = .FALSE. 
     378                   i=1 
    338379                   cycle 
    339380              endif 
    340               if ( nbdim .EQ. 1 ) tempP%var%array1(indic(1))  
     381            SELECT CASE(nbdim) 
     382            CASE (1)               
     383              tempP%var%array1(indic(1))  
    341384     &           = Res/Nbvals 
    342               if ( nbdim .EQ. 2 ) tempP%var%array2(indic(1), 
     385            CASE (2) 
     386              tempP%var%array2(indic(1), 
    343387     &                            indic(2)) = Res/Nbvals 
    344               if ( nbdim .EQ. 3 ) tempP%var%array3(indic(1), 
     388            CASE (3) 
     389              tempP%var%array3(indic(1), 
    345390     &                            indic(2),indic(3)) = Res/Nbvals 
    346               if ( nbdim .EQ. 4 ) tempP%var%array4(indic(1), 
     391            CASE (4) 
     392              tempP%var%array4(indic(1), 
    347393     &                            indic(2),indic(3),indic(4)) 
    348394     &                = Res/Nbvals 
    349               if ( nbdim .EQ. 5 ) tempP%var%array5(indic(1), 
     395            CASE (5) 
     396              tempP%var%array5(indic(1), 
    350397     &                            indic(2),indic(3),indic(4), 
    351398     &                   indic(5)) = Res/Nbvals 
    352               if ( nbdim .EQ. 6 ) tempP%var%array6(indic(1), 
     399            CASE (6) 
     400              tempP%var%array6(indic(1), 
    353401     &                            indic(2),indic(3),indic(4), 
    354402     &                           indic(5),indic(6)) = Res/Nbvals 
     403            END SELECT 
    355404              exit 
    356405            else 
Note: See TracChangeset for help on using the changeset viewer.