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 3823 – NEMO

Changeset 3823


Ignore:
Timestamp:
2013-02-28T14:31:33+01:00 (11 years ago)
Author:
cetlod
Message:

dev_r3411_CNRS4_IOCRS : minor bugfix + style

Location:
branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crs.F90

    r3790 r3823  
    3232 
    3333   USE dom_oce        ! ocean space and time domain and to get jperio 
    34 !   USE wrk_nemo       ! work arrays 
     34   USE wrk_nemo       ! work arrays 
    3535   USE crs_dom        ! domain for coarse grid 
    3636   USE in_out_manager  
     
    8888      ! Initialize 
    8989      DO jk = 1, jpk 
    90          DO ji = 2, jpi_crsm1 
     90         DO ji = 2, nlei_crs - 1 
    9191            ijie = mie_crs(ji) 
    9292            ijis = mis_crs(ji) 
    9393 
    94             DO jj = 2, jpj_crsm1 
     94            DO jj = njstart, njend 
    9595               ijje = mje_crs(jj)  
    9696               ijjs = mjs_crs(jj)                    
     
    163163      INTEGER :: ijie,ijis,ijje,ijjs,ijpk 
    164164 
    165       WRITE(numout,*) 'crsfun_coordinates. begin' 
    166  
     165   
    167166      !! Initialize output fields 
    168167      p_cgphi(:,:) = 0.e0 
     
    170169 
    171170 
    172       DO ji = 2, jpi_crsm1 
     171      DO ji = 2, nlei_crs - 1 
    173172 
    174173         IF ( cd_type == 'T' .OR. cd_type == 'V' )  ijis = mis_crs(ji) + mxbinctr  
    175174         IF ( cd_type == 'U' .OR. cd_type == 'F' )  ijis = mie_crs(ji) 
    176175 
    177          DO jj = 2, jpj_crsm1 
     176         DO jj = njstart, njend 
    178177      
    179178            IF ( cd_type == 'T' .OR. cd_type == 'U' ) ijjs = mjs_crs(jj) + mybinctr                   
     
    187186      ENDDO 
    188187 
    189       WRITE(numout,*) 'crsfun_coordinates. completed set new coords' 
    190188 
    191189! Retroactively add back the boundary halo cells. 
    192190 
    193191      IF( nperio /= 0 ) THEN 
    194       WRITE(numout,*) 'crsfun_coordinates. call crs_lbc_lnk' 
    195  
    196192         CALL crs_lbc_lnk( cd_type,1.0,p_cgphi ) 
    197193         CALL crs_lbc_lnk( cd_type,1.0,p_cglam ) 
     
    209205      ENDIF 
    210206 
    211       WRITE(numout,*) 'crsfun_coordinates. fill out edges' 
    212  
    213207      ! Fill up jrow=1 which is zeroed out or not handled by lbc_lnk and lbc_nfd 
    214       DO ji = 2, jpi_crsm1 
     208      DO ji = 2, nlei_crs - 1 
    215209 
    216210         IF ( cd_type == 'T' .OR. cd_type == 'V' )  ijis = mis_crs(ji) + mxbinctr  
     
    235229     !cc    p_cglam(1,jpj_crs) = p_cglam(jpi_crs,jpj_crsm1) 
    236230     !cc ENDIF 
    237  
    238       WRITE(numout,*) 'crsfun_coordinates. done' 
    239  
    240231 
    241232   END SUBROUTINE crsfun_coordinates 
     
    300291      INTEGER                                 :: ijie,ijis,ijje,ijjs,ijpk 
    301292      REAL(wp)                                :: zdAm                      ! masked face area 
    302       REAL(wp), DIMENSION(:,:),   ALLOCATABLE :: ze1, ze2 
    303       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ze3        
    304       REAL(wp), DIMENSION(:,:),   ALLOCATABLE :: zcfield2d_1, zcfield2d_2 
    305       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zcfield3d_1, zcfield3d_2 
     293      REAL(wp), DIMENSION(:,:),   POINTER    :: ze1, ze2 
     294      REAL(wp), DIMENSION(:,:,:), POINTER    :: ze3        
     295      REAL(wp), DIMENSION(:,:),   POINTER    :: zcfield2d_1, zcfield2d_2 
     296      REAL(wp), DIMENSION(:,:,:), POINTER    :: zcfield3d_1, zcfield3d_2 
    306297   
    307298      !!----------------------------------------------------------------   
     
    309300 
    310301      ! Arrays, scalars initialization  
    311       ALLOCATE( ze1(jpi,jpj) , ze2(jpi,jpj) ) 
    312       ALLOCATE( ze3(jpi,jpj,jpk) ) 
    313       ALLOCATE( zcfield2d_1(jpi_crs,jpj_crs) , zcfield2d_2(jpi_crs,jpj_crs) ) 
    314       ALLOCATE( zcfield3d_1(jpi_crs,jpj_crs,jpk), zcfield3d_2(jpi_crs,jpj_crs,jpk) ) 
     302      CALL wrk_alloc(jpi    , jpj         , ze1, ze2 ) 
     303      CALL wrk_alloc(jpi    , jpj    , jpk, ze3 ) 
     304      CALL wrk_alloc(jpi_crs, jpj_crs,      zcfield2d_1,  zcfield2d_2 ) 
     305      CALL wrk_alloc(jpi_crs, jpj_crs, jpk, zcfield3d_1,  zcfield3d_2 ) 
    315306 
    316307      ze1(:,:) = 1.0 
     
    340331             zcfield2d_1(:,:) = 0.0 ; zcfield2d_2(:,:) = 0.0         
    341332             ! DO ji = 2, jpi_crsm1 
    342              DO ji = 1, jpi_crs 
     333             DO ji = 2, nlei_crs - 1 
    343334                ijie = mie_crs(ji) 
    344335                ijis = mis_crs(ji) 
    345336 
    346337             !   DO jj = 1, jpj_crsm1 
    347                 DO jj = 1, jpj_crs 
     338                DO jj = njstart, njend 
    348339                   ijje = mje_crs(jj)  
    349340                   ijjs = mjs_crs(jj)                    
     
    722713      ENDIF 
    723714 
    724       DEALLOCATE( ze1 , ze2 ) 
    725       DEALLOCATE( ze3 ) 
    726       DEALLOCATE( zcfield2d_1 , zcfield2d_2 ) 
    727       DEALLOCATE( zcfield3d_1 , zcfield3d_2 ) 
     715      CALL wrk_dealloc(jpi    , jpj         , ze1, ze2 ) 
     716      CALL wrk_dealloc(jpi    , jpj    , jpk, ze3 ) 
     717      CALL wrk_dealloc(jpi_crs, jpj_crs,      zcfield2d_1, zcfield2d_2 ) 
     718      CALL wrk_dealloc(jpi_crs, jpj_crs, jpk, zcfield3d_1, zcfield3d_2 ) 
    728719 
    729720   END SUBROUTINE crsfun_wgt 
     
    768759      INTEGER  :: ji, jj, jk , jii, jjj                  ! dummy loop indices 
    769760      INTEGER  :: ijie, ijis, ijje, ijjs 
    770       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zsurfcrs    
     761      REAL(wp), DIMENSION(:,:,:), POINTER :: zsurfcrs    
    771762 
    772763      !!----------------------------------------------------------------   
    773764 
    774       ALLOCATE( zsurfcrs(jpi_crs,jpj_crs,jpk) ) 
     765      CALL wrk_alloc( jpi_crs, jpj_crs, jpk, zsurfcrs ) 
    775766      zsurfcrs(:,:,:) = 1.0 
    776767      IF ( PRESENT(p_surf_crs) ) THEN 
     
    780771      DO jk = 1, jpk     
    781772 
    782          DO ji = 2, jpi_crsm1 
     773         DO ji = 2, nlei_crs - 1 
    783774            ijie = mie_crs(ji) 
    784775            ijis = mis_crs(ji) 
    785776 
    786             DO jj = 2, jpj_crsm1 
     777            DO jj = njstart, njend 
    787778               ijje = mje_crs(jj)  
    788779               ijjs = mjs_crs(jj)                    
     
    821812      ENDIF 
    822813 
    823       DEALLOCATE( zsurfcrs ) 
     814      CALL wrk_dealloc( jpi_crs, jpj_crs, jpk, zsurfcrs ) 
    824815 
    825816   END SUBROUTINE crsfun_UV 
     
    895886      INTEGER :: ijie,ijis,ijje,ijjs,ijpk,jii,jjj 
    896887      INTEGER, DIMENSION(3) :: idims 
    897       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   :: ze1e2, zpfield2d, zcfield2d 
    898       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze3, zpfield3d, zcfield3d, zcmask, zpmask   
    899       REAL(wp)                                :: zdAm, zsgn 
     888      REAL(wp), POINTER, DIMENSION(:,:)   :: ze1e2, zpfield2d, zcfield2d 
     889      REAL(wp), POINTER, DIMENSION(:,:,:) :: ze3, zpfield3d, zcfield3d, zcmask, zpmask   
     890      REAL(wp)                            :: zdAm, zsgn 
    900891      !!----------------------------------------------------------------   
    901892      ! Initialize 
    902893 
    903       ALLOCATE( ze3(jpi,jpj,jpk) , zpfield3d(jpi,jpj,jpk) , zpmask(jpi,jpj,jpk) ) 
    904       ALLOCATE( ze1e2(jpi,jpj) , zpfield2d(jpi,jpj) ) 
    905       ALLOCATE( zcfield2d(jpi_crs,jpj_crs) ) 
    906       ALLOCATE( zcfield3d(jpi_crs,jpj_crs,jpk) , zcmask(jpi_crs,jpj_crs,jpk) ) 
     894      CALL wrk_alloc(jpi    , jpj         , ze1e2, zpfield2d ) 
     895      CALL wrk_alloc(jpi    , jpj    , jpk,  ze3 , zpfield3d, zpmask ) 
     896      CALL wrk_alloc(jpi_crs, jpj_crs,      zcfield2d ) 
     897      CALL wrk_alloc(jpi_crs, jpj_crs, jpk, zcfield3d,  zcmask ) 
     898 
    907899 
    908900      ! Arrays, scalars initialization  
     
    998990         zcfield2d(:,:) = 0.0  
    999991 
    1000             DO ji = 2, jpi_crsm1 
     992            DO ji = 2, nlei_crs - 1 
    1001993               ijie = mie_crs(ji) 
    1002994               ijis = mis_crs(ji) 
    1003995 
    1004             ! DO jj = 2, jpj_crsm1 
    1005               DO jj = 1, jpj_crsm1 
     996             DO jj = njstart, njend 
     997            !  DO jj = 1, jpj_crsm1 
    1006998                  ijje = mje_crs(jj)  
    1007999                  ijjs = mjs_crs(jj)                    
     
    11031095      ENDIF 
    11041096 
    1105       DEALLOCATE( ze3 , zpfield3d , zpmask ) 
    1106       DEALLOCATE( ze1e2 , zpfield2d ) 
    1107       DEALLOCATE( zcfield2d ) 
    1108       DEALLOCATE( zcfield3d , zcmask ) 
     1097      CALL wrk_dealloc(jpi    , jpj         , ze1e2, zpfield2d ) 
     1098      CALL wrk_dealloc(jpi    , jpj    , jpk,  ze3 , zpfield3d, zpmask ) 
     1099      CALL wrk_dealloc(jpi_crs, jpj_crs,      zcfield2d ) 
     1100      CALL wrk_dealloc(jpi_crs, jpj_crs, jpk, zcfield3d, zcmask ) 
    11091101  
    11101102 
     
    11631155      !!  
    11641156      !!  Arguments 
    1165       CHARACTER(len=1),                           INTENT(in) :: cd_type      ! grid type T, W ( U, V, F) 
    1166       REAL(wp), DIMENSION(jpi,jpj,jpk),           INTENT(in) :: p_mask       ! Parent grid T mask 
    1167       REAL(wp), DIMENSION(jpi,jpj,jpk), OPTIONAL, INTENT(in) :: p_e3         ! 3D tracer T or W on parent grid 
    1168       REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), OPTIONAL, INTENT(out):: p_e3_crs ! Coarse grid box east or north face quantity  
     1157      CHARACTER(len=1),                         INTENT(in) :: cd_type      ! grid type T, W ( U, V, F) 
     1158      REAL(wp), DIMENSION(jpi,jpj,jpk),         INTENT(in) :: p_mask       ! Parent grid T mask 
     1159      REAL(wp), DIMENSION(jpi,jpj,jpk),         INTENT(in) :: p_e3         ! 3D tracer T or W on parent grid 
     1160      REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), INTENT(inout):: p_e3_crs ! Coarse grid box east or north face quantity  
    11691161 
    11701162      !! Local variables 
    11711163      INTEGER ::  ji, jj, jk                   ! dummy loop indices 
    1172       INTEGER :: ijie,ijis,ijje,ijjs,ijpk,jii,jjj 
    1173       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze3, ze3_crs, zpmask   
     1164      INTEGER :: ijie,ijis,ijje,ijjs,jii,jjj 
    11741165      !!----------------------------------------------------------------   
    11751166      ! Initialize 
    1176  
    1177       ALLOCATE( ze3(jpi,jpj,jpk), zpmask(jpi,jpj,jpk) ) 
    1178       ALLOCATE( ze3_crs(jpi_crs,jpj_crs,jpk) ) 
    1179  
    1180       ! Arrays, scalars initialization  
    1181       ze3(:,:,:)       = p_e3(:,:,:) 
    1182       ze3_crs(:,:,:)   = 0.0 
    1183       zpmask(:,:,:)    = p_mask(:,:,:) 
    1184       ijpk             = jpk 
    11851167 
    11861168      SELECT CASE ( cd_type ) 
     
    11881170         CASE ('T') 
    11891171          
    1190             DO jk = 1 , ijpk 
     1172            DO jk = 1 , jpk 
    11911173             
    1192                DO ji = 1, jpi_crs                       ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
     1174               DO ji =  2, nlei_crs - 1    ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
    11931175                   ijie = mie_crs(ji) 
    11941176                   ijis = mis_crs(ji) 
    11951177 
    1196                    DO jj = 1, jpj_crs                   ! jj = jpj_crs definit par pivot T  
     1178                   DO jj =  njstart, njend  ! jj = jpj_crs definit par pivot T  
    11971179                      ijje = mje_crs(jj)  
    11981180                      ijjs = mjs_crs(jj)   
    1199                     
     1181                       
    12001182                      DO jii = ijis, ijie 
    12011183                         DO jjj = ijjs, ijje 
    1202                             ze3_crs(ji,jj,jk) = max( ze3_crs(ji,jj,jk), ze3(jii,jjj,jk) * zpmask(jii,jjj,jk)  ) 
     1184                            p_e3_crs(ji,jj,jk) = max( p_e3_crs(ji,jj,jk), p_e3(jii,jjj,jk) * p_mask(jii,jjj,jk)  ) 
    12031185                         ENDDO 
    12041186                      ENDDO 
     
    12061188               ENDDO 
    12071189            ENDDO 
    1208              
     1190  
    12091191         CASE ('W') 
    12101192          
    1211             DO jk = 2 , ijpk 
     1193            DO jk = 2 , jpk 
    12121194             
    1213                DO ji = 1, jpi_crs                       ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
     1195               DO ji = 2, nlei_crs - 1     ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
    12141196                   ijie = mie_crs(ji) 
    12151197                   ijis = mis_crs(ji) 
    12161198 
    1217                    DO jj = 1, jpj_crs                  ! jj = jpj_crs definit par pivot T  
     1199                   DO jj = njstart, njend ! jj = jpj_crs definit par pivot T  
    12181200                      ijje = mje_crs(jj)  
    12191201                      ijjs = mjs_crs(jj)   
     
    12211203                      DO jii = ijis, ijie 
    12221204                         DO jjj = ijjs, ijje 
    1223                             ze3_crs(ji,jj,jk) = max( ze3_crs(ji,jj,jk), ze3(jii,jjj,jk) * zpmask(jii,jjj,jk-1)  ) 
     1205                            p_e3_crs(ji,jj,jk) = max( p_e3_crs(ji,jj,jk), p_e3(jii,jjj,jk) * p_mask(jii,jjj,jk-1)  ) 
    12241206                         ENDDO 
    12251207                      ENDDO 
     
    12301212            jk = 1                                           ! cas particulier car zpmask(jii,jjj,0) n'existe pas       
    12311213           
    1232             DO ji = 1, jpi_crs                        
     1214            DO ji = 2, nlei_crs - 1 
    12331215               ijie = mie_crs(ji) 
    12341216               ijis = mis_crs(ji) 
    12351217 
    1236                DO jj = 1, jpj_crs                  
     1218               DO jj = njstart, njend             
    12371219                  ijje = mje_crs(jj)  
    12381220                  ijjs = mjs_crs(jj)   
     
    12401222                  DO jii = ijis, ijie 
    12411223                     DO jjj = ijjs, ijje 
    1242                         ze3_crs(ji,jj,jk) = max( ze3_crs(ji,jj,jk), ze3(jii,jjj,jk) * zpmask(jii,jjj,jk)  ) 
     1224                        p_e3_crs(ji,jj,jk) = max( p_e3_crs(ji,jj,jk), p_e3(jii,jjj,jk) * p_mask(jii,jjj,jk)  ) 
    12431225                     ENDDO 
    12441226                  ENDDO 
     
    12471229             
    12481230         END SELECT  
    1249           
    1250          p_e3_crs(:,:,:) = ze3_crs(:,:,:) 
    1251           
     1231                   
    12521232         CALL crs_lbc_lnk( cd_type, 1.0, pt3d1=p_e3_crs ) 
    12531233 
    12541234         ! lbcnlk met la ligne jpj = 1 a 0 donc il faut la remettre en ne pas oubliant le cyclique est-ouest 
    12551235                    
    1256          p_e3_crs(   :   ,1,:) = ze3_crs(    :    ,1,:)    
    1257          p_e3_crs(   1   ,1,:) = ze3_crs(jpi_crsm1,1,:) 
    1258          p_e3_crs(jpi_crs,1,:) = ze3_crs(    2    ,1,:)        
    1259   
    1260  
    1261       DEALLOCATE( ze3 , zpmask ) 
    1262       DEALLOCATE( ze3_crs ) 
     1236         p_e3_crs(   1   ,1,:) = p_e3_crs(jpi_crsm1,1,:) 
     1237         p_e3_crs(jpi_crs,1,:) = p_e3_crs(    2    ,1,:)   
     1238      
     1239         WRITE(numout,*) 'crs_e3_max : end of subroutine ' 
    12631240  
    12641241 
     
    13261303      INTEGER ::  ji, jj, jk                   ! dummy loop indices 
    13271304      INTEGER :: ijie,ijis,ijje,ijjs,ijpk,jii,jjj 
    1328       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze1, ze2, ze3   
    1329       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zsurf_crs, zsurf_msk_crs, zpmask   
     1305      REAL(wp), POINTER, DIMENSION(:,:,:) :: ze1, ze2, ze3   
     1306      REAL(wp), POINTER, DIMENSION(:,:,:) :: zsurf_crs, zsurf_msk_crs, zpmask   
    13301307      !!----------------------------------------------------------------   
    13311308      ! Initialize 
    13321309 
    1333       ALLOCATE( ze1(jpi,jpj,jpk), ze2(jpi,jpj,jpk), ze3(jpi,jpj,jpk), zpmask(jpi,jpj,jpk) ) 
    1334       ALLOCATE( zsurf_crs(jpi_crs,jpj_crs,jpk), zsurf_msk_crs(jpi_crs,jpj_crs,jpk) ) 
     1310      CALL wrk_alloc( jpi    , jpj    , jpk, ze1, ze2, ze3, zpmask ) 
     1311      CALL wrk_alloc( jpi_crs, jpj_crs, jpk, zsurf_crs, zsurf_msk_crs ) 
    13351312 
    13361313      ! Arrays, scalars initialization  
     
    13491326            DO jk = 2 , ijpk 
    13501327             
    1351                DO ji = 1, jpi_crs                       ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
     1328               DO ji = 2, nlei_crs - 1                       ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
    13521329                   ijie = mie_crs(ji) 
    13531330                   ijis = mis_crs(ji) 
     
    13661343                   zsurf_crs(ji,jj,jk) = zsurf_crs(ji,jj,jk) * 3 
    13671344                    
    1368                    DO jj = 2, jpj_crs                   ! jj = jpj_crs definit par pivot T  
     1345                   DO jj = njstart, njend                   ! jj = jpj_crs definit par pivot T  
    13691346                      ijje = mje_crs(jj)  
    13701347                      ijjs = mjs_crs(jj)   
     
    13831360            jk = 1                                      !cas particulier ou on est en surface 
    13841361             
    1385             DO ji = 1, jpi_crs                       ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
     1362            DO ji = 1, nlei_crs - 1                  ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
    13861363               ijie = mie_crs(ji) 
    13871364               ijis = mis_crs(ji) 
     1365               IF( njstart == 1 ) THEN 
    13881366               jj   = 1                            
    13891367               ijje = mje_crs(jj)  
     
    13981376               ENDDO 
    13991377               zsurf_crs(ji,jj,jk) = zsurf_crs(ji,jj,jk) * 3                 
    1400                DO jj = 2, jpj_crs                   ! jj = jpj_crs definit par pivot T  
     1378               ENDIF 
     1379               DO jj = njstart, njend                   ! jj = jpj_crs definit par pivot T  
    14011380                  ijje = mje_crs(jj)  
    14021381                  ijjs = mjs_crs(jj)               
     
    14151394          DO jk = 1 , ijpk 
    14161395             
    1417              DO ji = 1, jpi_crs                       ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
     1396             DO ji = 1, nlei_crs - 1             ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
    14181397                ijie = mie_crs(ji) 
    14191398                ijis = mis_crs(ji) 
     1399                IF( njstart == 1 ) THEN 
    14201400                jj   = 1 
    14211401                ijje = mje_crs(jj)   
     
    14301410                    
    14311411                zsurf_crs(ji,jj,jk) = zsurf_crs(ji,jj,jk) * 3 
    1432                     
    1433                 DO jj = 2, jpj_crs                   ! jj = jpj_crs definit par pivot T  
     1412               ENDIF 
     1413                    
     1414                DO jj = njstart, njend                  ! jj = jpj_crs definit par pivot T  
    14341415                   ijje = mje_crs(jj)  
    14351416                   ijjs = mjs_crs(jj)   
     
    14501431         DO jk = 1 , ijpk 
    14511432             
    1452             DO ji = 1, jpi_crs                       ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
     1433            DO ji = 1, nlei_crs - 1                       ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
    14531434               ijie = mie_crs(ji) 
    14541435               ijis = mis_crs(ji) 
    14551436                    
    1456                DO jj = 1, jpj_crs                   ! jj = jpj_crs definit par pivot T  
     1437               DO jj = njstart, njend                  ! jj = jpj_crs definit par pivot T  
    14571438                  ijje = mje_crs(jj)    
    14581439                  ijjs = mjs_crs(jj)   
     
    14851466         surf_msk_crs(jpi_crs,1,:) = zsurf_msk_crs(    2    ,1,:)  
    14861467 
    1487       DEALLOCATE( ze3 , ze2, ze1, zpmask ) 
    1488       DEALLOCATE( zsurf_msk_crs, zsurf_crs ) 
     1468      CALL wrk_dealloc( jpi    , jpj    , jpk, ze1, ze2, ze3, zpmask ) 
     1469      CALL wrk_dealloc( jpi_crs, jpj_crs, jpk, zsurf_crs, zsurf_msk_crs ) 
    14891470  
    14901471 
  • branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crs_dom.F90

    r3809 r3823  
    88   !!---------------------------------------------------------------------- 
    99   USE par_oce   
    10    USE dom_oce,  ONLY: nperio, narea, npolj, nlci, nlcj, nldi, nldj, nlei, nlej 
     10   USE dom_oce 
     11   USE in_out_manager 
    1112 
    1213   IMPLICIT NONE 
     
    1415 
    1516    
    16       PUBLIC crs_dom_alloc  ! Called from crsini.F90 
     17   PUBLIC crs_dom_alloc  ! Called from crsini.F90 
    1718   PUBLIC dom_grid_glo    
    18    PUBLIC dom_grid_crs    
     19   PUBLIC dom_grid_crs  
    1920 
    2021      ! Domain variables 
     
    2627                   jpj_full                     !: 2nd dimension of local parent grid domain 
    2728 
     29      INTEGER  ::  nistart, njstart 
     30      INTEGER  ::  niend  , njend 
     31 
    2832      INTEGER  ::  jpi_crsm1, jpj_crsm1         !: loop indices       
    2933      INTEGER  ::  jpiglo_crsm1, jpjglo_crsm1   !: loop indices       
     
    3135      INTEGER  ::  npolj_full, npolj_crs        !: north fold mark 
    3236      INTEGER  ::  jpiglo_full, jpjglo_full     !: jpiglo / jpjglo 
    33       INTEGER  ::  npiglo, npjglo      !: jpjglo 
     37      INTEGER  ::  npiglo, npjglo               !: jpjglo 
    3438      INTEGER  ::  nlci_full, nlcj_full         !: i-, j-dimension of local or sub domain on parent grid 
    3539      INTEGER  ::  nldi_full, nldj_full         !: starting indices of internal sub-domain on parent grid 
     
    4347      INTEGER  ::  nimpp_full, njmpp_full       !: global position of point (1,1) of subdomain on parent grid 
    4448      INTEGER  ::  nimpp_crs, njmpp_crs         !: set to 1,1 for now .  Valid only for monoproc 
    45  
    46  
    47       INTEGER, DIMENSION(:), ALLOCATABLE :: mis_crs, mie_crs, mjs_crs, mje_crs 
    48                                                 ! starting and ending indices of parent subset 
     49      INTEGER  ::  nreci_full, nrecj_full 
     50      INTEGER  ::  nreci_crs, nrecj_crs 
     51      !cc 
     52      INTEGER ::   noea_full, nowe_full        !: index of the local neighboring processors in 
     53      INTEGER ::   noso_full, nono_full        !: east, west, south and north directions 
     54      INTEGER ::   npne_full, npnw_full        !: index of north east and north west processor 
     55      INTEGER ::   npse_full, npsw_full        !: index of south east and south west processor 
     56      INTEGER ::   nbne_full, nbnw_full        !: logical of north east & north west processor 
     57      INTEGER ::   nbse_full, nbsw_full        !: logical of south east & south west processor 
     58      INTEGER ::   nidom_full                  !: ??? 
     59      INTEGER ::   nproc_full                  !:number for local processor 
     60      INTEGER ::   nbondi_full, nbondj_full    !: mark of i- and j-direction local boundaries 
     61      INTEGER ::   noea_crs, nowe_crs          !: index of the local neighboring processors in 
     62      INTEGER ::   noso_crs, nono_crs          !: east, west, south and north directions 
     63      INTEGER ::   npne_crs, npnw_crs          !: index of north east and north west processor 
     64      INTEGER ::   npse_crs, npsw_crs          !: index of south east and south west processor 
     65      INTEGER ::   nbne_crs, nbnw_crs          !: logical of north east & north west processor 
     66      INTEGER ::   nbse_crs, nbsw_crs          !: logical of south east & south west processor 
     67      INTEGER ::   nidom_crs                   !: ??? 
     68      INTEGER ::   nproc_crs                   !:number for local processor 
     69      INTEGER ::   nbondi_crs, nbondj_crs      !: mark of i- and j-direction local boundaries 
     70       
     71 
     72      INTEGER, DIMENSION(:), ALLOCATABLE :: mis_crs, mie_crs  ! starting and ending i-indices of parent subset 
     73      INTEGER, DIMENSION(:), ALLOCATABLE :: mjs_crs, mje_crs ! starting and ending  j-indices of parent subset 
    4974      INTEGER  :: mxbinctr, mybinctr            ! central point in grid box 
    5075  
     
    135160      !!------------------------------------------------------------------- 
    136161      !! Local variables 
    137       INTEGER, DIMENSION(15) :: ierr 
     162      INTEGER, DIMENSION(17) :: ierr 
    138163 
    139164      ierr(:) = 0 
     
    206231      ALLOCATE( nmln_crs(jpi_crs,jpj_crs) , hmld_crs(jpi_crs,jpj_crs) , & 
    207232         &      hmlp_crs(jpi_crs,jpj_crs) , hmlpt_crs(jpi_crs,jpj_crs) , STAT=ierr(14) ) 
    208  
    209  
     233          
    210234      crs_dom_alloc = MAXVAL(ierr) 
    211235 
     
    227251 
    228252      npolj  = npolj_full 
    229       jpnij  = jpnij_full 
    230       narea  = narea_full 
    231253      jpiglo = jpiglo_full 
    232254      jpjglo = jpjglo_full 
    233255 
     256      nlci   = nlci_full 
    234257      nlcj   = nlcj_full 
    235       nlci   = nlci_full 
    236258      nldi   = nldi_full 
     259      nldj   = nldj_full 
    237260      nlei   = nlei_full 
    238261      nlej   = nlej_full 
    239  
    240       nldj   = nldj_full 
     262      nimpp  = nimpp_full 
     263      njmpp  = njmpp_full 
     264       
    241265 
    242266   END SUBROUTINE dom_grid_glo 
     
    257281 
    258282      npolj_full  = npolj 
    259       jpnij_full  = jpnij 
    260       narea_full  = narea 
    261283      jpiglo_full = jpiglo 
    262284      jpjglo_full = jpjglo 
     
    265287      nlci_full   = nlci 
    266288      nldi_full   = nldi 
     289      nldj_full   = nldj 
    267290      nlei_full   = nlei 
    268291      nlej_full   = nlej 
    269       nldj_full   = nldj 
    270  
     292      nimpp_full  = nimpp      
     293      njmpp_full  = njmpp 
     294      ! 
    271295      !                        Switch to coarse grid domain 
    272296      jpi    = jpi_crs 
     
    277301 
    278302      npolj  = npolj_crs 
    279       jpnij  = jpnij_crs 
    280       narea  = narea_crs 
    281303      jpiglo = jpiglo_crs 
    282304      jpjglo = jpjglo_crs 
     305 
    283306 
    284307      nlci   = nlci_crs 
     
    287310      nlei   = nlei_crs 
    288311      nlej   = nlej_crs 
    289  
    290312      nldj   = nldj_crs 
    291  
     313      nimpp  = nimpp_crs 
     314      njmpp  = njmpp_crs 
     315      ! 
    292316   END SUBROUTINE dom_grid_crs 
     317    
    293318   !!====================================================================== 
    294319 
  • branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crs_iom.F90

    r3778 r3823  
    8888      ENDIF 
    8989      IF ( PRESENT(kdom) ) idomcrs = kdom 
    90  
    91       WRITE(numout,*) 'crs_iom_open. kiomid=', kiomid 
    9290 
    9391      CALL iom_open( cdname, kiomid, ldwrt, idomcrs, kiolib ) 
  • branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsdomwri.F90

    r3778 r3823  
    6969      IF( nn_timing == 1 )  CALL timing_start('crs_dom_wri') 
    7070      ! 
    71       ALLOCATE( zprt(jpi_crs,jpj_crs) , zprw(jpi_crs,jpj_crs) ) 
    72       ALLOCATE( zdepu(jpi_crs,jpj_crs,jpk) , zdepv(jpi_crs,jpj_crs,jpk) ) 
    73       ALLOCATE( ze3tp(jpi_crs,jpj_crs) , ze3wp(jpi_crs,jpj_crs) ) 
     71      ALLOCATE( zprt  (jpi_crs,jpj_crs)  , zprw(jpi_crs,jpj_crs) ) 
     72      ALLOCATE( zdepu(jpi_crs,jpj_crs,jpk), zdepv(jpi_crs,jpj_crs,jpk) ) 
     73      ALLOCATE( ze3tp(jpi_crs,jpj_crs)    , ze3wp(jpi_crs,jpj_crs) ) 
    7474 
    7575      ze3tp(:,:) = 0.0 
     
    118118      !======================================================== 
    119119      !                                                         ! masks (inum2)  
    120       CALL crs_iom_rstput( 0, 0, inum2, 'tmask_crs', pv_r3d=tmask_crs, ktype = jp_i1 )     !    ! land-sea mask 
    121       CALL crs_iom_rstput( 0, 0, inum2, 'umask_crs', pv_r3d=umask_crs, ktype = jp_i1 ) 
    122       CALL crs_iom_rstput( 0, 0, inum2, 'vmask_crs', pv_r3d=vmask_crs, ktype = jp_i1 ) 
    123       CALL crs_iom_rstput( 0, 0, inum2, 'fmask_crs', pv_r3d=fmask_crs, ktype = jp_i1 ) 
     120      CALL crs_iom_rstput( 0, 0, inum2, 'tmask', pv_r3d=tmask_crs, ktype = jp_i1 )     !    ! land-sea mask 
     121      CALL crs_iom_rstput( 0, 0, inum2, 'umask', pv_r3d=umask_crs, ktype = jp_i1 ) 
     122      CALL crs_iom_rstput( 0, 0, inum2, 'vmask', pv_r3d=vmask_crs, ktype = jp_i1 ) 
     123      CALL crs_iom_rstput( 0, 0, inum2, 'fmask', pv_r3d=fmask_crs, ktype = jp_i1 ) 
    124124       
    125125      CALL crs_dom_uniq( zprw, 'T' ) 
    126126      tmask_i_crs(:,:) = tmask_crs(:,:,1) * zprw                               !    ! unique point mask 
    127       CALL crs_iom_rstput( 0, 0, inum2, 'tmaskutil_crs', pv_r2d=tmask_i_crs, ktype = jp_i1 )   
     127      CALL crs_iom_rstput( 0, 0, inum2, 'tmaskutil', pv_r2d=tmask_i_crs, ktype = jp_i1 )   
    128128      CALL crs_dom_uniq( zprw, 'U' ) 
    129129      zprt = umask_crs(:,:,1) * zprw 
    130       CALL crs_iom_rstput( 0, 0, inum2, 'umaskutil_crs', pv_r2d=zprt, ktype = jp_i1 )   
     130      CALL crs_iom_rstput( 0, 0, inum2, 'umaskutil', pv_r2d=zprt, ktype = jp_i1 )   
    131131      CALL crs_dom_uniq( zprw, 'V' ) 
    132132      zprt = vmask_crs(:,:,1) * zprw 
    133       CALL crs_iom_rstput( 0, 0, inum2, 'vmaskutil_crs', pv_r2d=zprt, ktype = jp_i1 )   
     133      CALL crs_iom_rstput( 0, 0, inum2, 'vmaskutil', pv_r2d=zprt, ktype = jp_i1 )   
    134134      CALL crs_dom_uniq( zprw, 'F' ) 
    135135      zprt = fmask_crs(:,:,1) * zprw 
    136       CALL crs_iom_rstput( 0, 0, inum2, 'fmaskutil_crs', pv_r2d=zprt, ktype = jp_i1 )   
     136      CALL crs_iom_rstput( 0, 0, inum2, 'fmaskutil', pv_r2d=zprt, ktype = jp_i1 )   
    137137      !======================================================== 
    138138      !                                                         ! horizontal mesh (inum3) 
     
    157157      CALL crs_iom_rstput( 0, 0, inum3, 'e2f', pv_r2d=e2f_crs, ktype = jp_r8 ) 
    158158       
    159       CALL crs_iom_rstput( 0, 0, inum3, 'ff_crs', pv_r2d=ff_crs, ktype = jp_r8 )           !    ! coriolis factor 
     159      CALL crs_iom_rstput( 0, 0, inum3, 'ff', pv_r2d=ff_crs, ktype = jp_r8 )           !    ! coriolis factor 
    160160 
    161161      !======================================================== 
     
    184184            CALL crs_lbc_lnk( 'W', 1.0, ze3wp ) 
    185185   
    186             CALL crs_iom_rstput( 0, 0, inum4, 'e3t_ps_crs', pv_r2d=ze3tp )       
    187             CALL crs_iom_rstput( 0, 0, inum4, 'e3w_ps_crs', pv_r2d=ze3wp ) 
     186            CALL crs_iom_rstput( 0, 0, inum4, 'e3t_ps', pv_r2d=ze3tp )       
     187            CALL crs_iom_rstput( 0, 0, inum4, 'e3w_ps', pv_r2d=ze3wp ) 
    188188         ENDIF 
    189189 
    190190         IF ( nn_msh_crs <= 3 ) THEN 
    191             CALL crs_iom_rstput( 0, 0, inum4, 'gdept_crs', pv_r3d=gdept_crs, ktype = jp_r4 )  
     191            CALL crs_iom_rstput( 0, 0, inum4, 'gdept', pv_r3d=gdept_crs, ktype = jp_r4 )  
    192192            DO jk = 1,jpk    
    193193               DO jj = 1, jpj_crsm1    
     
    200200 
    201201            CALL crs_lbc_lnk( 'U', 1.,pt3d1=zdepu )   ;   CALL crs_lbc_lnk( 'V', 1.,pt3d1=zdepv )  
    202             CALL crs_iom_rstput( 0, 0, inum4, 'gdepu_crs', pv_r3d=zdepu, ktype = jp_r4 ) 
    203             CALL crs_iom_rstput( 0, 0, inum4, 'gdepv_crs', pv_r3d=zdepv, ktype = jp_r4 ) 
    204             CALL crs_iom_rstput( 0, 0, inum4, 'gdepw_crs', pv_r3d=gdepw_crs, ktype = jp_r4 ) 
     202            CALL crs_iom_rstput( 0, 0, inum4, 'gdepu', pv_r3d=zdepu, ktype = jp_r4 ) 
     203            CALL crs_iom_rstput( 0, 0, inum4, 'gdepv', pv_r3d=zdepv, ktype = jp_r4 ) 
     204            CALL crs_iom_rstput( 0, 0, inum4, 'gdepw', pv_r3d=gdepw_crs, ktype = jp_r4 ) 
    205205         ELSE 
    206206            DO jj = 1,jpj_crs    
     
    214214         ENDIF 
    215215 
    216          CALL iom_rstput( 0, 0, inum4, 'gdept_0_crs', gdept_0 )     !    ! reference z-coord. 
    217          CALL iom_rstput( 0, 0, inum4, 'gdepw_0_crs', gdepw_0 ) 
    218          CALL iom_rstput( 0, 0, inum4, 'e3t_0_crs'  , e3t_0   ) 
    219          CALL iom_rstput( 0, 0, inum4, 'e3w_0_crs'  , e3w_0   ) 
    220  
    221          CALL crs_iom_rstput(  0, 0, inum4, 'ocean_volume_crs_t', pv_r3d=ocean_volume_crs_t )  
     216         CALL iom_rstput( 0, 0, inum4, 'gdept_0', gdept_0 )     !    ! reference z-coord. 
     217         CALL iom_rstput( 0, 0, inum4, 'gdepw_0', gdepw_0 ) 
     218         CALL iom_rstput( 0, 0, inum4, 'e3t_0'  , e3t_0   ) 
     219         CALL iom_rstput( 0, 0, inum4, 'e3w_0'  , e3w_0   ) 
     220 
     221         CALL crs_iom_rstput(  0, 0, inum4, 'ocean_volume_t', pv_r3d=ocean_volume_crs_t )  
    222222         CALL crs_iom_rstput(  0, 0, inum4, 'facvol_t' , pv_r3d=facvol_t )  
    223223         CALL crs_iom_rstput(  0, 0, inum4, 'facvol_w' , pv_r3d=facvol_w )  
     
    230230         CALL crs_iom_rstput(  0, 0, inum4, 'e2e3u'    , pv_r3d=e2e3u    )  
    231231         CALL crs_iom_rstput(  0, 0, inum4, 'e1e3v'    , pv_r3d=e1e3v    ) 
    232          CALL crs_iom_rstput(  0, 0, inum4, 'bt_crs'   , pv_r3d=bt_crs   ) 
    233          CALL crs_iom_rstput(  0, 0, inum4, 'r1_bt_crs', pv_r3d=r1_bt_crs) 
     232         CALL crs_iom_rstput(  0, 0, inum4, 'bt'       , pv_r3d=bt_crs   ) 
     233         CALL crs_iom_rstput(  0, 0, inum4, 'r1_bt'    , pv_r3d=r1_bt_crs) 
    234234 
    235235         CALL crs_iom_rstput(  0, 0, inum4, 'crs_surfu_wgt', pv_r3d=crs_surfu_wgt)  
     
    243243     IF( ln_zco ) THEN 
    244244         !                                                      ! z-coordinate - full steps 
    245         CALL iom_rstput( 0, 0, inum4, 'gdept_0_crs', gdept_0 )     !    ! depth 
    246         CALL iom_rstput( 0, 0, inum4, 'gdepw_0_crs', gdepw_0 ) 
    247         CALL iom_rstput( 0, 0, inum4, 'e3t_0_crs'  , e3t_0   )     !    ! scale factors 
    248         CALL iom_rstput( 0, 0, inum4, 'e3w_0_crs'  , e3w_0   ) 
     245        CALL iom_rstput( 0, 0, inum4, 'gdept_0', gdept_0 )     !    ! depth 
     246        CALL iom_rstput( 0, 0, inum4, 'gdepw_0', gdepw_0 ) 
     247        CALL iom_rstput( 0, 0, inum4, 'e3t_0'  , e3t_0   )     !    ! scale factors 
     248        CALL iom_rstput( 0, 0, inum4, 'e3w_0'  , e3w_0   ) 
    249249     ENDIF 
    250250      !                                     ! ============================ 
  • branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsini.F90

    r3779 r3823  
    1212   USE crs_dom                  ! Coarse grid domain 
    1313   USE phycst, ONLY: omega, rad ! physical constants 
    14 !   USE wrk_nemo  
     14   USE wrk_nemo  
    1515   USE in_out_manager 
    1616   USE par_kind, ONLY: wp 
     
    1818   USE crsdomwri 
    1919   USE crslbclnk 
     20   USE lib_mpp 
    2021 
    2122   IMPLICIT NONE 
     
    6364      !!------------------------------------------------------------------- 
    6465      !! Local variables 
    65       INTEGER  :: ji,jj,jk,ijjgloT,ijis,ijie,ijjs,ijje         ! dummy indices 
     66      INTEGER  :: ji,jj,jk,ijjgloT,ijis,ijie,ijjs,ijje,jn      ! dummy indices 
    6667      INTEGER  :: ierr                                ! allocation error status 
    6768      REAL(wp) :: zrestx, zresty                      ! for determining odd or even reduction factor 
    68       REAL(wp), DIMENSION(:,:),   ALLOCATABLE :: zmbk 
    69       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zfse3t, zfse3u, zfse3v, zfse3f 
    70       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zfse3w, zfse3t_n, zfse3t_b 
     69      REAL(wp), DIMENSION(:,:)  , POINTER :: zmbk 
     70      REAL(wp), DIMENSION(:,:,:), POINTER :: zfse3t, zfse3u, zfse3v, zfse3w 
    7171      LOGICAL  :: llok 
    7272 
     
    9696         WRITE(numout,*) '          nn_msh_crs = ', nn_msh_crs 
    9797      ENDIF 
    98  
     98               
    9999     rfactx_r = 1./nn_factx 
    100100     rfacty_r = 1./nn_facty 
     
    107107      jpjglo_crs   = INT( (jpjglo - 2) / nn_facty ) + 2  ! the -2 removes j=1, j=jpj 
    108108      jpiglo_crsm1 = jpiglo_crs - 1 
    109       jpjglo_crsm1 = jpjglo_crs - 1 
    110       jpkm1  = jpk - 1 
     109      jpjglo_crsm1 = jpjglo_crs - 1   
    111110 
    112111     ! 2.b. Define local domain indices 
    113       jpi_crs = ( jpiglo_crs-2*jpreci + (jpni-1) ) / jpni + 2*jpreci 
    114       jpj_crs = ( jpjglo_crs-2*jprecj + (jpnj-1) ) / jpnj + 2*jprecj  
    115       jpi_crsm1 = jpi_crs - 1 
    116       jpj_crsm1 = jpj_crs - 1 
    117  
     112      jpi_crs = ( jpiglo_crs-2 * jpreci + (jpni-1) ) / jpni + 2*jpreci 
     113      jpj_crs = ( jpjglo_crs-2 * jprecj + (jpnj-1) ) / jpnj + 2*jprecj 
     114        
     115      jpi_crsm1   = jpi_crs - 1 
     116      jpj_crsm1   = jpj_crs - 1 
    118117      nperio_crs  = jperio 
    119118      npolj_crs   = npolj 
    120  
    121       IF ( jpnij == 1 ) THEN 
    122          jpnij_crs = jpnij 
    123          narea_crs = narea 
    124          nimpp_crs = nimpp 
    125          njmpp_crs = njmpp 
     119       
     120      ierr = crs_dom_alloc()          ! allocate most coarse grid arrays 
     121 
     122      IF( .NOT. lk_mpp ) THEN 
     123         nimpp_crs  = 1 
     124         njmpp_crs  = 1 
     125         nlci_crs   = jpi_crs 
     126         nlcj_crs   = jpj_crs 
     127         nldi_crs   = 1 
     128         nldj_crs   = 1 
     129         nlei_crs   = jpi_crs 
     130         nlej_crs   = jpj_crs 
     131 
    126132      ELSE 
    127          WRITE(numout,*) 'crsini.F90. mpp not supported... Stopping' 
    128          STOP 
    129       ENDIF 
    130  
    131       nlcj_crs = jpj_crs  
    132       nlci_crs = jpi_crs 
    133       nldi_crs = 1 
    134       nlei_crs = jpi_crs 
    135       nlej_crs = jpj_crs 
    136       nldj_crs = 1 
     133         ! Initialisation of most local variables - 
     134         nimpp_crs  = 1 
     135         njmpp_crs  = 1 
     136         nlci_crs   = jpi_crs 
     137         nlcj_crs   = jpj_crs 
     138         nldi_crs   = 1 
     139         nldj_crs   = 1 
     140         nlei_crs   = jpi_crs 
     141         nlej_crs   = jpj_crs 
     142 
     143        SELECT CASE ( npolj ) 
     144      
     145        CASE ( 0 ) 
     146  
     147           nlej_crs = AINT( REAL( ( jpjglo - (njmpp - 1) ) / nn_facty, wp ) ) & 
     148              &     - AINT( REAL( ( jpjglo - mjg(nlej-1) ) / nn_facty, wp ) ) 
     149           IF( noso == -1 ) THEN 
     150              IF( MOD( jpjglo - njmpp     , nn_facty ) > 0 )             nlej_crs = nlej_crs + 1 
     151           ELSE 
     152              IF( MOD( jpjglo - njmpp + 1 , nn_facty ) > nn_facty / 2 )  nlej_crs = nlej_crs + 1 
     153           ENDIF 
     154         
     155        CASE ( 3, 4, 5, 6 ) 
     156 
     157           nlej_crs = AINT( REAL( ( jpjglo - (njmpp - 1) ) / nn_facty, wp ) ) & 
     158              &     - AINT( REAL( ( jpjglo - mjg(nlej) + 1 ) / nn_facty, wp ) ) + 1 
     159         
     160        CASE DEFAULT 
     161            WRITE(numout,*) 'crs_init. Only jperio =0, 3, 4, 5, 6 supported'  
     162            STOP 
     163         END SELECT 
     164 
     165         IF (noso > -1) THEN 
     166            nlej_crs = nlej_crs + 1 
     167            nldj_crs = 2 
     168         ELSE 
     169            nldj_crs = 1 
     170         ENDIF 
     171          
     172         IF ( nono < jpnj  ) THEN 
     173            nlcj_crs = nlej_crs + 1 
     174         ELSE 
     175            nlcj_crs = nlej_crs 
     176         ENDIF 
     177          
     178         njmpp_crs = jpjglo_crs - ANINT( REAL( (jpjglo - njmpp ) / nn_facty, wp ) ) - 1 
     179         IF( MOD( jpjglo - njmpp , nn_facty ) > nn_facty / 2 )  njmpp_crs = njmpp_crs - 1 
     180 
     181       ENDIF 
     182 
     183      CALL dom_grid_crs  !swich de grille 
     184      
    137185 
    138186      IF (lwp) THEN 
    139187         WRITE(numout,*) 
    140188         WRITE(numout,*) 'crs_init : coarse grid dimensions' 
    141          WRITE(numout,*) '~~~~~~~   coarse domain global j-dimension           jpjglo_crs = ', jpjglo_crs 
    142          WRITE(numout,*) '~~~~~~~   coarse domain global i-dimension           jpiglo_crs = ', jpiglo_crs 
    143          WRITE(numout,*) '~~~~~~~   coarse domain local  i-dimension              jpi_crs = ', jpi_crs 
    144          WRITE(numout,*) '~~~~~~~   coarse domain local  j-dimension              jpj_crs = ', jpj_crs 
     189         WRITE(numout,*) '~~~~~~~   coarse domain global j-dimension           jpjglo = ', jpjglo 
     190         WRITE(numout,*) '~~~~~~~   coarse domain global i-dimension           jpiglo = ', jpiglo 
     191         WRITE(numout,*) '~~~~~~~   coarse domain local  i-dimension              jpi = ', jpi 
     192         WRITE(numout,*) '~~~~~~~   coarse domain local  j-dimension              jpj = ', jpj 
     193         WRITE(numout,*) 
     194         WRITE(numout,*) ' nproc  = ', narea 
     195         WRITE(numout,*) ' nlci   = ', nlci 
     196         WRITE(numout,*) ' nlcj   = ', nlcj 
     197         WRITE(numout,*) ' nldi   = ', nldi 
     198         WRITE(numout,*) ' nldj   = ', nldj 
     199         WRITE(numout,*) ' nlei   = ', nlei 
     200         WRITE(numout,*) ' nlej   = ', nlej 
     201         WRITE(numout,*) ' nimpp  = ', nimpp 
     202         WRITE(numout,*) ' njmpp  = ', njmpp 
     203         WRITE(numout,*) 
    145204      ENDIF 
    146       
    147  
     205 
     206      CALL dom_grid_glo 
     207       
    148208      mxbinctr   = INT( nn_factx * 0.5 ) 
    149209      mybinctr   = INT( nn_facty * 0.5 ) 
     
    169229 
    170230 !jes. TODO Need to deallocate these if ln_crs = F  
    171       ierr = crs_dom_alloc()          ! allocate most coarse grid arrays 
     231       
    172232 
    173233! jes. TODO. Add the next two lines when mpp is done 
     
    181241      mjs_crs(:) = 0; mje_crs(:) = 0 
    182242 
     243       
    183244      SELECT CASE ( cn_binref ) 
    184245 
    185246      CASE ( 'NORTH' )  
    186247 
    187          SELECT CASE ( nperio ) 
     248         SELECT CASE ( npolj ) 
     249         !cc 
     250        CASE ( 0, 1, 3, 4 )    !   3, 4 : T-Pivot at North Fold 
     251         
     252            DO ji = 2, jpiglo_crsm1 
     253               ijie = (ji*nn_factx)-nn_factx   !cc 
     254               ijis = ijie-nn_factx+1 
     255               mis_crs(ji) = ijis 
     256               mie_crs(ji) = ijie 
     257            ENDDO 
     258            IF ( jpiglo - 1 - mie_crs(jpiglo_crsm1) <= nn_factx ) mie_crs(jpiglo_crsm1)  = jpiglo-2  ! ijie = jpiglo-1 !cc 
     259 
     260            ! Handle first the northernmost bin 
     261            IF ( nn_facty == 2 ) THEN   ;    ijjgloT = jpjglo - 1  
     262            ELSE                        ;    ijjgloT = jpjglo 
     263            ENDIF 
     264 
     265            DO jj = 2, jpjglo_crsm1 
     266                ijje = ijjgloT-nn_facty*(jj-2) 
     267                ijjs = ijje-nn_facty+1                    
     268                mjs_crs(jpjglo_crs-jj+1) = ijjs 
     269                mje_crs(jpjglo_crs-jj+1) = ijje 
     270            ENDDO 
    188271 
    189272         CASE ( 2 )  
    190273            WRITE(numout,*)  'crs_init, jperio=2 not supported'  
    191274         
    192          CASE ( 3, 4 )     ! T-Pivot at North Fold  
     275         CASE ( 5, 6 )    ! F-pivot at North Fold 
    193276 
    194277            DO ji = 2, jpiglo_crsm1 
    195                !cc ijie = (ji*nn_factx)-nn_factx+1 
    196                ijie = (ji*nn_factx)-nn_factx   !cc 
     278               ijie = (ji*nn_factx)-nn_factx  
    197279               ijis = ijie-nn_factx+1 
    198  
    199                IF ( ji == jpiglo_crsm1 ) THEN 
    200                   IF ( ((jpiglo-1)-ijie) <= nn_factx ) ijie = jpiglo-2  ! ijie = jpiglo-1 !cc 
    201                ENDIF 
    202  
    203                   ! Handle first the northernmost bin 
    204                   IF ( nn_facty == 2 ) THEN 
    205                      ijjgloT=jpjglo-1 
    206                   ELSE 
    207                      ijjgloT=jpjglo 
    208                   ENDIF 
    209  
    210                  DO jj = 2, jpjglo_crsm1 
    211                 ! cc ijje = ijjgloT-nn_facty*(jj-2) 
    212                      ijje = ijjgloT-nn_facty*(jj-2) - 1 
    213                      ijjs = ijje-nn_facty+1                    
    214                    
    215                      IF ( ijjs <= nn_facty )   ijjs = 2 
    216  
    217                      mis_crs(ji) = ijis 
    218                      mie_crs(ji) = ijie 
    219                      mjs_crs(jpjglo_crs-jj+1) = ijjs 
    220                      mje_crs(jpjglo_crs-jj+1) = ijje 
    221  
    222                  ENDDO 
    223               ENDDO 
    224  
    225          CASE ( 5, 6 )    ! F-pivot at North Fold 
    226  
    227             DO ji = 2, jpiglo_crsm1 
    228                ijie = (ji*nn_factx)-nn_factx+1 
    229                ijis = ijie-nn_factx+1 
    230  
    231                IF ( ji == jpiglo_crsm1 ) THEN 
    232                   IF ( ((jpiglo-1)-ijie) <= nn_factx )   ijie = jpiglo-1 
    233                ENDIF 
    234  
    235                ! Treat the northernmost bin separately. 
    236                jj = 2 
    237                ijje = jpjglo-nn_facty*(jj-2) 
    238                   IF ( nn_facty == 3 ) THEN 
    239                      ijjs=ijje-1 
    240                   ELSE 
    241                      ijjs=ijje-nn_facty+1 
    242                   ENDIF 
    243  
    244                 mis_crs(ji) = ijis 
    245                 mie_crs(ji) = ijie 
    246                 mjs_crs(jpjglo_crs-jj+1) = ijjs 
    247                 mje_crs(jpjglo_crs-jj+1) = ijje 
    248  
    249                 ! Now bin the rest, any remainder at the south is lumped in the southern bin 
    250                 DO jj = 3, jpjglo_crsm1 
    251  
    252                    ijje = jpjglo-nn_facty*(jj-2) 
    253                    ijjs = ijje-nn_facty+1                   
    254                    
    255                    IF ( ijjs <= nn_facty )   ijjs = 2 
    256  
    257                    mis_crs(ji) = ijis 
    258                    mie_crs(ji) = ijie 
    259                    mjs_crs(jpjglo_crs-jj+1) = ijjs 
    260                    mje_crs(jpjglo_crs-jj+1) = ijje 
    261                 ENDDO 
     280               mis_crs(ji) = ijis 
     281               mie_crs(ji) = ijie 
    262282            ENDDO 
     283            IF ( jpiglo - 1 - mie_crs(jpiglo_crsm1) <= nn_factx ) mie_crs(jpiglo_crsm1)  = jpiglo-2  ! ijie = jpiglo-1 !cc 
     284 
     285            ! Treat the northernmost bin separately. 
     286            jj = 2 
     287            ijje = jpj-nn_facty*(jj-2) 
     288            IF ( nn_facty == 3 ) THEN   ;  ijjs = ijje - 1  
     289            ELSE                        ;  ijjs = ijje - nn_facty + 1 
     290            ENDIF 
     291            mjs_crs(jpj_crs-jj+1) = ijjs 
     292            mje_crs(jpj_crs-jj+1) = ijje 
     293 
     294            ! Now bin the rest, any remainder at the south is lumped in the southern bin 
     295            DO jj = 3, jpjglo_crsm1 
     296                ijje = jpjglo-nn_facty*(jj-2) 
     297                ijjs = ijje-nn_facty+1                   
     298                IF ( ijjs <= nn_facty )   ijjs = 2 
     299                mjs_crs(jpj_crs-jj+1) = ijjs 
     300                mje_crs(jpj_crs-jj+1) = ijje 
     301            ENDDO 
    263302 
    264303         CASE DEFAULT 
    265             WRITE(numout,*) 'crs_init. Only jperio = 3, 4, 5, 6 supported'  
     304            WRITE(numout,*) 'crs_init. Only jperio = 0, 1, 3, 4, 5, 6 supported'  
    266305  
    267306         END SELECT 
     
    271310 
    272311      END SELECT 
     312 
    273313 
    274314        ! Pad the boundaries, do not know if it is necessary 
    275315         mis_crs(1) = 1           ; mis_crs(jpiglo_crs) = mie_crs(jpiglo_crs - 1) + 1    !cc 
    276316         mie_crs(1) = nn_factx    ; mie_crs(jpiglo_crs) = jpiglo                         !cc 
    277          mjs_crs(1) = 1           ; mjs_crs(jpjglo_crs) = mje_crs(jpjglo_crs - 1) + 1 
     317! Probleme de segmentation je sais pas pourquoi 
     318         mjs_crs(1) = 1           ; mjs_crs(jpjglo_crs) = mje_crs(jpjglo_crsm1) + 1    
    278319         mje_crs(1) = mjs_crs(2)-1; mje_crs(jpjglo_crs) = jpjglo  
    279320 
    280 !         WRITE(numout,*) 'crs_init. coarse grid bounds on parent grid' 
    281 !         WRITE(numout,'(1x,a,62(1x,i3),/)') 'mis_crs=', mis_crs 
    282 !         WRITE(numout,'(1x,a,62(1x,i3),/)') 'mie_crs=', mie_crs 
    283 !         WRITE(numout,'(1x,a,51(1x,i3),/)') 'mjs_crs=', mjs_crs 
    284 !         WRITE(numout,'(1x,a,51(1x,i3),/)') 'mje_crs=', mje_crs 
    285  
    286    
     321  !       WRITE(numout,*) 'crs_init. coarse grid bounds on parent grid' 
     322  !       WRITE(numout,*) 'mis_crs=', mis_crs 
     323  !       WRITE(numout,*) 'mie_crs=', mie_crs 
     324  !       WRITE(numout,*) 'mjs_crs=', mjs_crs 
     325  !       WRITE(numout,*) 'mje_crs=', mje_crs 
     326          
     327  
     328      IF( .NOT. lk_mpp ) THEN      
     329         njstart = 1     ;    njend =  jpj_crsm1 
     330      ELSE 
     331         ! 
     332         IF( noso == -1 )  THEN ;   njstart = 1 
     333         ELSE                   ;   njstart = 2 
     334         ENDIF 
     335         ! 
     336         IF( mje_crs(nlej_crs) >= jpj )   THEN ;   njend = nlej_crs - 1 
     337         ELSE                                  ;   njend = nlej_crs 
     338         ENDIF 
     339         ! 
     340      ENDIF 
     341 
    287342     !--------------------------------------------------------- 
    288343     ! 3. Mask and Mesh 
     
    310365 
    311366        CALL crsfun( gphit, glamt, 'T', gphit_crs, glamt_crs )  
    312         WRITE(numout,*) 'crsini. gphit_crs(15,15)', gphit_crs(15,15) 
    313         WRITE(numout,*) 'crsini. glamt_crs(15,15)', glamt_crs(15,15) 
    314  
    315         WRITE(numout,*) 'crsini. count 1' 
     367 !       WRITE(numout,*) 'crsini. gphit_crs(15,15)', gphit_crs(15,15) 
     368 !       WRITE(numout,*) 'crsini. glamt_crs(15,15)', glamt_crs(15,15) 
     369 
     370  !      WRITE(numout,*) 'crsini. count 1' 
    316371 
    317372        CALL crsfun( gphiu, glamu, 'U', gphiu_crs, glamu_crs )       !cc 
    318         WRITE(numout,*) 'crsini. gphiu_crs(15,15)', gphiu_crs(15,15) !cc 
    319         WRITE(numout,*) 'crsini. glamu_crs(15,15)', glamu_crs(15,15) !cc 
    320         WRITE(numout,*) 'crsini. count 2' 
     373   !     WRITE(numout,*) 'crsini. gphiu_crs(15,15)', gphiu_crs(15,15) !cc 
     374    !    WRITE(numout,*) 'crsini. glamu_crs(15,15)', glamu_crs(15,15) !cc 
     375     !   WRITE(numout,*) 'crsini. count 2' 
    321376  
    322377        CALL crsfun( p_pgphi=gphiv, p_pglam=glamv, cd_type='V', p_cgphi=gphiv_crs, p_cglam=glamv_crs ) !cc 
    323         WRITE(numout,*) 'crsini. gphiv_crs(15,15)', gphiv_crs(15,15) !cc 
    324         WRITE(numout,*) 'crsini. glamv_crs(15,15)', glamv_crs(15,15) !cc 
    325  
    326         WRITE(numout,*) 'crsini. count 3' 
     378      !  WRITE(numout,*) 'crsini. gphiv_crs(15,15)', gphiv_crs(15,15) !cc 
     379       ! WRITE(numout,*) 'crsini. glamv_crs(15,15)', glamv_crs(15,15) !cc 
     380 
     381    !    WRITE(numout,*) 'crsini. count 3' 
    327382        CALL crsfun( p_pgphi=gphif, p_pglam=glamf, cd_type='F', p_cgphi=gphif_crs, p_cglam=glamf_crs ) !cc 
    328         WRITE(numout,*) 'crsini. gphif_crs(15,15)', gphif_crs(15,15) !cc 
    329         WRITE(numout,*) 'crsini. glamf_crs(15,15)', glamf_crs(15,15) !cc 
    330  
    331         WRITE(numout,*) 'crsini. count 4' 
     383    !    WRITE(numout,*) 'crsini. gphif_crs(15,15)', gphif_crs(15,15) !cc 
     384    !    WRITE(numout,*) 'crsini. glamf_crs(15,15)', glamf_crs(15,15) !cc 
     385 
     386     !   WRITE(numout,*) 'crsini. count 4' 
    332387     ELSEIF ( zresty /= 0 .AND. zrestx == 0 ) THEN 
    333388        CALL crsfun( p_pgphi=gphiu, p_pglam=glamu, cd_type='T', p_cgphi=gphit_crs, p_cglam=glamt_crs ) 
     
    406461      ENDDO 
    407462      
    408       ALLOCATE( zmbk(jpi_crs,jpj_crs) ) 
     463      CALL wrk_alloc( jpi_crs, jpj_crs, zmbk ) 
    409464 
    410465      zmbk(:,:) = 0.0 
     
    438493 
    439494     !    3.d.2   Vertical scale factors 
    440  
    441      ALLOCATE( zfse3t(jpi,jpj,jpk),   zfse3u(jpi,jpj,jpk),   zfse3v(jpi,jpj,jpk), zfse3f(jpi,jpj,jpk), & 
    442         &      zfse3w(jpi,jpj,jpk), zfse3t_n(jpi,jpj,jpk), zfse3t_b(jpi,jpj,jpk)  ) 
     495     CALL wrk_alloc(jpi, jpj, jpk, zfse3t, zfse3u, zfse3v, zfse3w ) 
     496     ! 
    443497     zfse3t(:,:,:) = fse3t(:,:,:) 
    444498     zfse3u(:,:,:) = fse3u(:,:,:) 
    445499     zfse3v(:,:,:) = fse3v(:,:,:) 
    446      zfse3f(:,:,:) = fse3f(:,:,:) 
    447500     zfse3w(:,:,:) = fse3w(:,:,:) 
    448501      
    449502       
    450  
    451      !CALL crsfun( p_e1e2t=e1e2t, cd_type='T', cd_op='MAX', p_cmask=tmask_crs, p_ptmask=tmask, p_pfield3d_1=zfse3t, p_cfield3d=e3t_crs ) 
    452      !CALL crsfun( p_e1e2t=e1e2t, cd_type='W', cd_op='MAX', p_cmask=tmask_crs, p_ptmask=tmask, p_pfield3d_1=zfse3w, p_cfield3d=e3w_crs ) 
     503      WRITE(numout,*) 'crs_init : beginning section 3.d.2 ! ' 
     504     !CALL crsfun( p_e1e2t=e1e2t, cd_type='T', cd_op='MAX', p_cmask=tmask_crs, & 
     505     !     &       p_ptmask=tmask, p_pfield3d_1=zfse3t, p_cfield3d=e3t_crs ) 
     506     !CALL crsfun( p_e1e2t=e1e2t, cd_type='W', cd_op='MAX', p_cmask=tmask_crs, & 
     507     !     &       p_ptmask=tmask, p_pfield3d_1=zfse3w, p_cfield3d=e3w_crs ) 
    453508     !CALL crsfun( p_e1e2t=e1e2t, cd_type='U', cd_op='MIN', p_cmask=umask_crs, p_ptmask=umask, p_pfield3d_1=zfse3u, p_cfield3d=e3u_crs ) 
    454509     !CALL crsfun( p_e1e2t=e1e2t, cd_type='V', cd_op='MIN', p_cmask=vmask_crs, p_ptmask=vmask, p_pfield3d_1=zfse3v, p_cfield3d=e3v_crs ) 
    455510     !CALL crsfun( p_e1e2t=e1e2t, cd_type='F', cd_op='MIN', p_cmask=fmask_crs, p_ptmask=fmask, p_pfield3d_1=zfse3f, p_cfield3d=e3f_crs ) 
     511  
    456512     CALL crs_e3_max( p_e3=zfse3t, cd_type='T', p_mask=tmask, p_e3_crs=e3t_crs) 
    457513     CALL crs_e3_max( p_e3=zfse3w, cd_type='W', p_mask=tmask, p_e3_crs=e3w_crs) 
     514      
     515      WRITE(numout,*) 'crs_init : crs_e3_max ' 
     516       
    458517     
    459518     ! Reset 0 to e3t_0 or e3w_0 
     
    522581     ! 7. Finish and clean-up 
    523582     !--------------------------------------------------------- 
    524       DEALLOCATE( zmbk ) 
    525       DEALLOCATE( zfse3t, zfse3u, zfse3v, zfse3f ) 
    526       DEALLOCATE( zfse3w, zfse3t_n, zfse3t_b )  
    527  
    528        
     583     CALL wrk_dealloc( jpi_crs, jpj_crs, zmbk ) 
     584     CALL wrk_dealloc(jpi, jpj, jpk, zfse3t, zfse3u, zfse3v, zfse3w ) 
     585 
     586 
    529587   END SUBROUTINE crs_init 
    530588     
Note: See TracChangeset for help on using the changeset viewer.