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

Changeset 3778


Ignore:
Timestamp:
2013-02-08T11:40:58+01:00 (11 years ago)
Author:
cetlod
Message:

2013/dev_r3411_CNRS4_IOCRS/NEMOGCM : improvment of outputs coarsening

Location:
branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_CRS/EXP00/iodef.xml

    r3622 r3778  
    291291         <field id="soce_crs"   description="salinity"                unit="psu"  axis_ref="deptht" /> 
    292292   <field id="ssh_crs"    description="sea surface height"      unit="m"                      /> 
     293        <field id="ssh2_crs"    description="sea surface height"      unit="m"                      /> 
    293294   <field id="sst_crs"    description="sea surface temperature" unit="degC"                   /> 
    294295   <field id="sss_crs"    description="sea surface salinity"    unit="psu"                    /> 
     
    311312      <group id="gcrs_W"  axis_ref="depthw" grid_ref="grid_W_crs"> 
    312313   <field id="woce_crs"   description="ocean vertical velocity"   unit="m/s" /> 
     314        <field id="woce2_crs"   description="ocean vertical velocity"   unit="m/s" /> 
    313315   <field id="wocet_crs"  description="ocean vertical velocity times temperature" unit="degC.m/s" /> 
    314316   <field id="woces_crs"  description="ocean vertical velocity times salinity"    unit="psu.m/s" /> 
     
    347349             <field ref="soce_crs"    name="vosaline" /> 
    348350             <field ref="ssh_crs"     name="sossheig" /> 
     351             <field ref="ssh2_crs"    name="sossheig2" /> 
    349352             <field ref="hdiv_crs"    name="vohdiver" /> 
    350353              <field ref="sst_crs"     name="sosstsst" /> 
     
    431434           <field ref="soce_crs"    name="vosaline" /> 
    432435           <field ref="ssh_crs"     name="sossheig" /> 
     436           <field ref="ssh2_crs"     name="sossheig2" /> 
    433437      <field ref="sst_crs"     name="sosstsst" /> 
    434438      <field ref="sss_crs"     name="sosaline" /> 
     
    474478        <file id="5d_gcrs_W" name="auto" description="ocean U grid coarsened variables" > 
    475479           <field ref="woce_crs"    name="vovecrtz"  /> 
     480           <field ref="woce2_crs"   name="vovecrtz2"  /> 
    476481           <field ref="wocet_crs"   name="vovewoct" /> 
    477482           <field ref="woces_crs"   name="vovewocs" /> 
  • branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_CRS/MY_SRC/iom.F90

    r3738 r3778  
    114114      CALL set_grid( "grid_V", glamv, gphiv ) 
    115115      CALL set_grid( "grid_W", glamt, gphit ) 
    116  
     116      !cc 
     117      IF(ln_crs) THEN 
    117118      ! horizontal coarse grid definition 
    118       CALL setgrid_crs( "grid_T_crs", glamt_crs, gphit_crs ) 
    119       CALL setgrid_crs( "grid_U_crs", glamu_crs, gphiu_crs ) 
    120       CALL setgrid_crs( "grid_V_crs", glamv_crs, gphiv_crs ) 
    121       CALL setgrid_crs( "grid_W_crs", glamt_crs, gphit_crs ) 
     119         CALL setgrid_crs( "grid_T_crs", glamt_crs, gphit_crs ) 
     120         CALL setgrid_crs( "grid_U_crs", glamu_crs, gphiu_crs ) 
     121         CALL setgrid_crs( "grid_V_crs", glamv_crs, gphiv_crs ) 
     122         CALL setgrid_crs( "grid_W_crs", glamt_crs, gphit_crs ) 
     123      ENDIF 
    122124 
    123125      ! vertical grid definition 
  • branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/CONFIG/ORCA2_LIM_CRS/MY_SRC/lbclnk.F90

    r3622 r3778  
    161161            END SELECT 
    162162            !                                          ! North fold 
    163             pt3d( 1 ,jpj,:) = zland 
    164             pt3d(jpi,jpj,:) = zland 
     163           
    165164            CALL lbc_nfd( pt3d(:,:,:), cd_type, psgn ) 
    166165            ! 
     
    249248               pt2d(:, 1 ) = zland 
    250249            END SELECT 
    251             !                                          ! North fold 
    252             pt2d( 1 ,1  ) = zland  
    253             pt2d( 1 ,jpj) = zland  
    254             pt2d(jpi,jpj) = zland 
     250             
    255251            CALL lbc_nfd( pt2d(:,:), cd_type, psgn ) 
    256252            ! 
  • branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crs.F90

    r3735 r3778  
    4343   PRIVATE  
    4444 
    45    PUBLIC crsfun 
     45   PUBLIC crsfun, crs_e3_max, crs_surf 
    4646 
    4747   INTERFACE crsfun 
     
    282282      p_cglam(jpi_crs,1) = p_cglam(2,1) 
    283283      ! Fill upper-right corner i=1, j=jpj_crs 
    284       IF ( nperio == 4 ) THEN 
    285          p_cgphi(1,jpj_crs) = p_cgphi(jpi_crsm1,jpj_crs-2) 
    286          p_cglam(1,jpj_crs) = p_cglam(jpi_crsm1,jpj_crs-2) 
    287       ELSEIF ( nperio == 6 ) THEN 
    288          p_cgphi(1,jpj_crs) = p_cgphi(jpi_crs,jpj_crsm1) 
    289          p_cglam(1,jpj_crs) = p_cglam(jpi_crs,jpj_crsm1) 
    290       ENDIF 
     284     !cc IF ( nperio == 4 ) THEN 
     285     !cc    p_cgphi(1,jpj_crs) = p_cgphi(jpi_crsm1,jpj_crs-2) 
     286     !cc    p_cglam(1,jpj_crs) = p_cglam(jpi_crsm1,jpj_crs-2) 
     287     !cc ELSEIF ( nperio == 6 ) THEN 
     288     !cc    p_cgphi(1,jpj_crs) = p_cgphi(jpi_crs,jpj_crsm1) 
     289     !cc    p_cglam(1,jpj_crs) = p_cglam(jpi_crs,jpj_crsm1) 
     290     !cc ENDIF 
    291291 
    292292      WRITE(numout,*) 'crsfun_coordinates. done' 
     
    398398 
    399399             zcfield2d_1(:,:) = 0.0 ; zcfield2d_2(:,:) = 0.0         
    400              DO ji = 2, jpi_crsm1 
     400             ! DO ji = 2, jpi_crsm1 
     401             DO ji = 1, jpi_crs 
    401402                ijie = mie_crs(ji) 
    402403                ijis = mis_crs(ji) 
    403404 
    404                 DO jj = 1, jpj_crsm1 
     405             !   DO jj = 1, jpj_crsm1 
     406                DO jj = 1, jpj_crs 
    405407                   ijje = mje_crs(jj)  
    406408                   ijjs = mjs_crs(jj)                    
     
    430432 
    431433                      ELSE 
    432  
    433                          ! Calculate e1 scale factor or if present ze3, unmasked surface area 
    434                          DO jii = ijis, ijie 
    435                             zcfield2d_1(ji,jj) = zcfield2d_1(ji,jj) +  ( ze1(jii,ijje) * ze3(jii,ijje,jk) )  
    436                          ENDDO 
    437  
    438                          ! Calculate e2 scale factor 
    439                          DO jjj = ijjs, ijje 
    440                             zcfield2d_2(ji,jj) = zcfield2d_2(ji,jj) +  ( ze2(ijie,jjj) * ze3(ijie,jjj,jk) ) 
    441                          ENDDO 
    442   
     434                         SELECT CASE ( cd_type ) 
     435                          
     436                         CASE ( 'T' ) 
     437                            IF ( nn_factx == 3 ) THEN 
     438                               ! Calculate e1 scale factor or if present ze3, unmasked surface area 
     439                               IF (jj == 1) THEN 
     440                                  DO jii = ijis, ijie 
     441                                  zcfield2d_1(ji,jj) = zcfield2d_1(ji,jj) +  ( ze1(jii,ijje) * ze3(jii,ijje-1,jk) )  
     442                                  ENDDO 
     443                               ELSE 
     444                                  DO jii = ijis, ijie 
     445                                     zcfield2d_1(ji,jj) = zcfield2d_1(ji,jj) +  ( ze1(jii,ijje-1) * ze3(jii,ijje-1,jk) )  
     446                                  ENDDO 
     447                               ENDIF 
     448                             
     449                               ! Calculate e2 scale factor 
     450                               DO jjj = ijjs, ijje 
     451                                zcfield2d_2(ji,jj) = zcfield2d_2(ji,jj) +  ( ze2(ijie-1,jjj) * ze3(ijie-1,jjj,jk) ) 
     452                               ENDDO 
     453                            ENDIF 
     454                             
     455                         CASE ( 'U' ) 
     456                            IF ( nn_factx == 3 ) THEN 
     457                               ! Calculate e1 scale factor or if present ze3, unmasked surface area 
     458                               IF (jj == 1) THEN 
     459                                  DO jii = ijis, ijie 
     460                                  zcfield2d_1(ji,jj) = zcfield2d_1(ji,jj) +  ( ze1(jii+1,ijje) * ze3(jii+1,ijje-1,jk) )  
     461                                  ENDDO 
     462                               ELSE 
     463                                  DO jii = ijis, ijie 
     464                                     zcfield2d_1(ji,jj) = zcfield2d_1(ji,jj) +  ( ze1(jii+1,ijje-1) * ze3(jii+1,ijje-1,jk) )  
     465                                  ENDDO 
     466                               ENDIF                             
     467                               ! Calculate e2 scale factor 
     468                               DO jjj = ijjs, ijje 
     469                                zcfield2d_2(ji,jj) = zcfield2d_2(ji,jj) +  ( ze2(ijie,jjj) * ze3(ijie,jjj,jk) ) 
     470                               ENDDO 
     471                            ENDIF 
     472                             
     473                         CASE ( 'V' ) 
     474                            IF ( nn_factx == 3 ) THEN 
     475                               ! Calculate e1 scale factor or if present ze3, unmasked surface area 
     476                               DO jii = ijis, ijie 
     477                                  zcfield2d_1(ji,jj) = zcfield2d_1(ji,jj) +  ( ze1(jii,ijje) * ze3(jii,ijje,jk) )  
     478                               ENDDO 
     479                             
     480                               ! Calculate e2 scale factor 
     481                               DO jjj = ijjs, ijje 
     482                                zcfield2d_2(ji,jj) = zcfield2d_2(ji,jj) +  ( ze2(ijie-1,jjj+1) * ze3(ijie-1,jjj+1,jk) ) 
     483                               ENDDO 
     484                            ENDIF 
     485                             
     486                            CASE ( 'F' ) 
     487                            IF ( nn_factx == 3 ) THEN 
     488                               ! Calculate e1 scale factor or if present ze3, unmasked surface area 
     489                               DO jii = ijis, ijie 
     490                                  zcfield2d_1(ji,jj) = zcfield2d_1(ji,jj) +  ( ze1(jii+1,ijje) * ze3(jii+1,ijje,jk) )  
     491                               ENDDO 
     492                             
     493                               ! Calculate e2 scale factor 
     494                               DO jjj = ijjs, ijje 
     495                                zcfield2d_2(ji,jj) = zcfield2d_2(ji,jj) +  ( ze2(ijie,jjj+1) * ze3(ijie,jjj+1,jk) ) 
     496                               ENDDO 
     497                            ENDIF 
     498                         END SELECT 
     499                          
     500                          
     501                          
    443502                         IF ( PRESENT(p_cfield3d_1) ) THEN 
    444503 
     
    468527 
    469528                   ENDIF 
     529                    
     530                   IF ( cd_op == 'POS' ) THEN      !cc 
     531                    
     532                      IF ( nn_factx == 3 .AND. nn_facty == 3) THEN 
     533                       
     534                         SELECT CASE ( cd_type ) 
     535                          
     536                            CASE ( 'T' ) 
     537                             
     538                               IF ((jj == 1) .AND. (ji == 1)) THEN 
     539                                  ! Calculate e1 scale factor or if present ze3, unmasked surface area 
     540                                  zcfield2d_1(ji,jj) = ( ze1(ijie,ijje  ) * ze3(ijie,ijje,jk) ) * nn_factx 
     541                             
     542                                  ! Calculate e2 scale factor 
     543                                  zcfield2d_2(ji,jj) = ( ze2(ijie,ijje  ) * ze3(ijie,ijje,jk) ) * nn_facty 
     544                               ELSEIF (jj == 1) THEN 
     545                                  ! Calculate e1 scale factor or if present ze3, unmasked surface area 
     546                                  zcfield2d_1(ji,jj) = ( ze1(ijie-1,ijje  ) * ze3(ijie-1,ijje,jk) ) * nn_factx 
     547                             
     548                                  ! Calculate e2 scale factor 
     549                                  zcfield2d_2(ji,jj) = ( ze2(ijie-1,ijje  ) * ze3(ijie-1,ijje,jk) ) * nn_facty 
     550                               ELSEIF (ji == 1) THEN  
     551                                  ! Calculate e1 scale factor or if present ze3, unmasked surface area 
     552                                  zcfield2d_1(ji,jj) = ( ze1(ijie,ijje-1) * ze3(ijie,ijje-1,jk) ) * nn_factx 
     553                             
     554                                  ! Calculate e2 scale factor 
     555                                  zcfield2d_2(ji,jj) = ( ze2(ijie,ijje-1) * ze3(ijie,ijje-1,jk) ) * nn_facty 
     556                               ELSE 
     557                                 ! Calculate e1 scale factor or if present ze3, unmasked surface area 
     558                                  zcfield2d_1(ji,jj) = ( ze1(ijie-1,ijje-1) * ze3(ijie-1,ijje-1,jk) ) * nn_factx 
     559                             
     560                                  ! Calculate e2 scale factor 
     561                                  zcfield2d_2(ji,jj) = ( ze2(ijie-1,ijje-1) * ze3(ijie-1,ijje-1,jk) ) * nn_facty 
     562                               ENDIF 
     563                                
     564                            CASE ( 'U' ) 
     565                               IF (jj == 1) THEN 
     566                                  ! Calculate e1 scale factor or if present ze3, unmasked surface area 
     567                                  zcfield2d_1(ji,jj) = ( ze1(ijie  ,ijje  ) * ze3(ijie  ,ijje,jk) ) * nn_factx 
     568                             
     569                                  ! Calculate e2 scale factor 
     570                                  zcfield2d_2(ji,jj) = ( ze2(ijie  ,ijje  ) * ze3(ijie  ,ijje,jk) ) * nn_facty 
     571                               ELSE 
     572                                  ! Calculate e1 scale factor or if present ze3, unmasked surface area 
     573                                  zcfield2d_1(ji,jj) = ( ze1(ijie  ,ijje-1) * ze3(ijie  ,ijje-1,jk) ) * nn_factx 
     574                             
     575                                  ! Calculate e2 scale factor 
     576                                  zcfield2d_2(ji,jj) = ( ze2(ijie  ,ijje-1) * ze3(ijie  ,ijje-1,jk) ) * nn_facty 
     577                              ENDIF 
     578                                 
     579                            CASE ( 'V' ) 
     580                               IF (ji == 1) THEN  
     581                               ! Calculate e1 scale factor or if present ze3, unmasked surface area 
     582                               zcfield2d_1(ji,jj) = ( ze1(ijie,ijje  ) * ze3(ijie,ijje  ,jk) ) * nn_factx 
     583                             
     584                               ! Calculate e2 scale factor 
     585                               zcfield2d_2(ji,jj) = ( ze2(ijie,ijje  ) * ze3(ijie,ijje  ,jk) ) * nn_facty 
     586                               ELSE 
     587                               ! Calculate e1 scale factor or if present ze3, unmasked surface area 
     588                               zcfield2d_1(ji,jj) = ( ze1(ijie-1,ijje  ) * ze3(ijie-1,ijje  ,jk) ) * nn_factx 
     589                             
     590                               ! Calculate e2 scale factor 
     591                               zcfield2d_2(ji,jj) = ( ze2(ijie-1,ijje  ) * ze3(ijie-1,ijje  ,jk) ) * nn_facty 
     592                               ENDIF 
     593                                
     594                            CASE ( 'F' ) 
     595                               ! Calculate e1 scale factor or if present ze3, unmasked surface area 
     596                               zcfield2d_1(ji,jj) = ( ze1(ijie  ,ijje  ) * ze3(ijie  ,ijje  ,jk) ) * nn_factx 
     597                             
     598                               ! Calculate e2 scale factor 
     599                               zcfield2d_2(ji,jj) = ( ze2(ijie  ,ijje  ) * ze3(ijie  ,ijje  ,jk) ) * nn_facty 
     600                                
     601                         END SELECT 
     602                      ENDIF 
     603                   ENDIF                    !cc 
     604                    
    470605 
    471606                   IF ( cd_op == 'WGT' ) THEN 
     
    540675 
    541676         ! Take care of the 2D arrays 
    542          IF ( cd_op == 'SUM' ) THEN 
     677         IF ( cd_op == 'SUM' .OR.  cd_op == 'POS') THEN 
    543678            IF ( PRESENT(p_cfield2d_1) ) THEN 
    544679               p_cfield2d_1(:,:) = zcfield2d_1(:,:) 
     
    546681 
    547682               ! Fill up jrow=1 which is zeroed out or not handled by lbc_lnk and lbc_nfd 
    548                p_cfield2d_1(:,1) = zcfield2d_1(:,1) 
     683               p_cfield2d_1(:,1) = zcfield2d_1(:,1)  !cc  
    549684               ! Fill i=1, i=jpi at j=1 
    550685               p_cfield2d_1(1,1) = p_cfield2d_1(jpi_crsm1,1) 
    551686               p_cfield2d_1(jpi_crs,1) = p_cfield2d_1(2,1) 
    552  
    553                ! Fill upper-right corner i=1, j=jpj_crs 
    554                IF ( nperio == 4 ) THEN 
    555                   p_cfield2d_1(1,jpj_crs) = p_cfield2d_1(jpi_crsm1,jpj_crs-2) 
    556                ELSEIF ( nperio == 6 ) THEN 
    557                   p_cfield2d_1(1,jpj_crs) = p_cfield2d_1(jpi_crs,jpj_crsm1) 
    558                ENDIF 
     687                
     688             !cc  p_cfield2d_1(1,jpj_crs-1) = p_cfield2d_1(3,jpj_crs-1) 
     689 
     690              ! Fill upper-right corner i=1, j=jpj_crs 
     691              !cc IF ( nperio == 4 ) THEN on écrase les valeurs limites calculées dans crs_lbc_lnk 
     692              !cc   p_cfield2d_1(1,jpj_crs) = p_cfield2d_1(jpi_crsm1,jpj_crs-2) 
     693              !cc ELSEIF ( nperio == 6 ) THEN 
     694              !cc    p_cfield2d_1(1,jpj_crs) = p_cfield2d_1(jpi_crs,jpj_crsm1) 
     695              !cc ENDIF 
    559696 
    560697            ENDIF 
     
    562699               p_cfield2d_2(:,:) = zcfield2d_2(:,:) 
    563700               CALL crs_lbc_lnk( cd_type,1.0,pt2d=p_cfield2d_2 ) 
    564  
     701                
    565702               ! Fill up jrow=1 which is zeroed out or not handled by lbc_lnk and lbc_nfd 
    566703               p_cfield2d_2(:,1) = zcfield2d_2(:,1) 
     
    569706               p_cfield2d_2(1,1) = p_cfield2d_2(jpi_crsm1,1) 
    570707               p_cfield2d_2(jpi_crs,1) = p_cfield2d_2(2,1) 
    571  
     708               IF ( cd_op == 'SUM') THEN  
     709                  DO jii = 1 , jpiglo_crs 
     710                  p_cfield2d_2(jii,1) = p_cfield2d_2(jii,1) * 3 
     711                  ENDDO 
     712               ENDIF 
    572713               ! Fill upper-right corner i=1, j=jpj_crs 
    573                IF ( nperio == 4 ) THEN 
    574                   p_cfield2d_2(1,jpj_crs) = p_cfield2d_2(jpi_crsm1,jpj_crs-2) 
    575                ELSEIF ( nperio == 6 ) THEN 
    576                   p_cfield2d_2(1,jpj_crs) = p_cfield2d_2(jpi_crs,jpj_crsm1) 
    577                ENDIF 
     714           !cc     IF ( nperio == 4 ) THEN 
     715           !cc       p_cfield2d_2(1,jpj_crs) = p_cfield2d_2(jpi_crsm1,jpj_crs-2) 
     716           !cc    ELSEIF ( nperio == 6 ) THEN 
     717           !cc       p_cfield2d_2(1,jpj_crs) = p_cfield2d_2(jpi_crs,jpj_crsm1) 
     718           !cc ENDIF 
    578719            ENDIF 
    579720 
     
    588729 
    589730         ! Take care now of 3d arrays 
    590          IF ( cd_op == 'SUM' .OR. cd_op == 'VOL' ) THEN 
     731         IF ( cd_op == 'SUM' .OR. cd_op == 'VOL' .OR. cd_op == 'POS'  ) THEN 
    591732            CALL crs_lbc_lnk( cd_type,1.0,pt3d1=zcfield3d_1 )  
    592733            IF ( PRESENT(p_cfield3d_1) ) p_cfield3d_1(:,:,:) = zcfield3d_1(:,:,:) 
     
    607748 
    608749      ELSE 
    609          IF ( cd_op == 'SUM' ) THEN       
     750         IF ( cd_op == 'SUM' .OR. cd_op == 'POS'  ) THEN       
    610751            IF ( PRESENT(p_cfield2d_1) ) THEN 
    611752               p_cfield2d_1(:,:) = zcfield2d_1(:,:) 
     
    9181059               ijis = mis_crs(ji) 
    9191060 
    920                DO jj = 2, jpj_crsm1 
     1061            ! DO jj = 2, jpj_crsm1 
     1062              DO jj = 1, jpj_crsm1 
    9211063                  ijje = mje_crs(jj)  
    9221064                  ijjs = mjs_crs(jj)                    
     
    10271169   END SUBROUTINE crsfun_TW 
    10281170 
     1171SUBROUTINE crs_e3_max( p_e3, cd_type, p_mask, p_e3_crs) 
     1172      !!---------------------------------------------------------------- 
     1173      !!               *** SUBROUTINE crsfun_TW *** 
     1174      !! ** Purpose :  Five applications. 
     1175      !!               1) Maximum surface quantity  
     1176      !!                  - Vertical scale factors (fse3t or fse3w)  
     1177      !!                    max thickness of the parent grid for coarse grid scale factors. 
     1178      !!                  - or diffusion test 
     1179      !!               2) Area-weighted mean quantity: w, or other 3D or 2D quantity 
     1180      !!               3) Volume-weighted mean quantity: tracer 
     1181      !!               4) Minimum surface quantity (diffusion test) 
     1182      !!               5) Area- or Volume- weighted sum. 
     1183      !! ** Method  :  1) - cd_op = 'MAX'. Determines the max vertical thickness of grid boxes 
     1184      !!                    including partial steps for at the bottom 
     1185      !!                    for the coarsened grid, where within the subset of  
     1186      !!                    the parent grid cells the maximum thickness is taken. 
     1187      !!                    Valid arguments: p_e1e2t, cd_type, cd_op, p_cmask, p_pfield3d_1 
     1188      !!                    Where, normally p_pfield3d_1 is e3t. 
     1189      !!                  - cd_op = 'MAX'. May also be used for say, determining the maximum value of Kz,  
     1190      !!                    thus p_pfield3d_1 is set to the 3D field, Kz. 
     1191      !!                    Valid arguments: p_e1e2t, cd_type, cd_op, p_cmask, p_pfield3d_1 
     1192      !!               2) - cd_op = 'ARE'. Calculate the area-weighted average (surface e1t*e2t)   
     1193      !!                    of vertical velocity, w. 
     1194      !!                    Valid arguments: p_e1e2t, cd_type, cd_op, p_cmask, p_pfield3d_1 
     1195      !!                  - cd_op = 'ARE'. Calculate area-weighted average of a 2D quantity (e.g. emp) 
     1196      !!                    Valid arguments: p_e1e2t, cd_type, cd_op, p_cmask, p_pfield2d 
     1197      !!               3) - cd_op = 'VOL'. Calculate the ocean volume (e1e2t*[fse3t|fse3w])  
     1198      !!                    Valid arguments: p_e1e2t, cd_type, cd_op, p_cmask, p_pfield3d_1 
     1199      !!                  - cd_op = 'VOL'. Calculate volume-weighted average (volume e1t*e2t*fse3t) of a quantity. 
     1200      !!                    Valid arguments: p_e1e2t, cd_type, cd_op, p_cmask, p_pfield3d_1, p_pfield3d_2 
     1201      !!               4) - cd_op = 'MIN'. Calculate the minimum value on surface e1t*e2t for 3D variables 
     1202      !!                  Valid arguments: p_e1e2t, cd_type, cd_op, p_cmask, p_pfield3d_1 
     1203      !!               5) - cd_op = 'SUM'. Calculate a dimesionally-weighted sum.  This could be area-weighted 
     1204      !!                  or volume-weighted sum.  
     1205      !! ** Inputs  : p_e1e2t      = parent grid top face surface area, e1t*e2t  
     1206      !!              cd_type      = grid type T, W (U, V, F)  
     1207      !!              cd_op        = MAX, ARE, VOL, MIN, SUM 
     1208      !!              p_cmask      =  coarse grid mask 
     1209      !!              p_ptmask     =  parent grid tmask      
     1210      !!              psgn         = (Optional) sign for lbc_lnk   
     1211      !!              p_pfield2d   = (Optional) 2D field on parent grid 
     1212      !!              p_pfield3d_1 = (Optional) parent grid fse3t or fse3w 
     1213      !!              p_pfield3d_2 = (Optional) 3D field on parent grid 
     1214      !! ** Outputs : p_cfield2d   = (Optional) 2D field on coarse grid 
     1215      !!              p_cfield3d   = (Optional) 3D field on coarse grid 
     1216      !! 
     1217      !!  
     1218      !! History.  30 May.  Editing.  To decide later: Keep all functionality or separate out the mean function. 
     1219      !!            7 Jun   TODO. Need to fix up the parent grid mask to optional like crsfun_UV... 
     1220      !!---------------------------------------------------------------- 
     1221      !!  
     1222      !!  Arguments 
     1223      CHARACTER(len=1),                           INTENT(in) :: cd_type      ! grid type T, W ( U, V, F) 
     1224      REAL(wp), DIMENSION(jpi,jpj,jpk),           INTENT(in) :: p_mask       ! Parent grid T mask 
     1225      REAL(wp), DIMENSION(jpi,jpj,jpk), OPTIONAL, INTENT(in) :: p_e3         ! 3D tracer T or W on parent grid 
     1226      REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), OPTIONAL, INTENT(out):: p_e3_crs ! Coarse grid box east or north face quantity  
     1227 
     1228      !! Local variables 
     1229      INTEGER ::  ji, jj, jk                   ! dummy loop indices 
     1230      INTEGER :: ijie,ijis,ijje,ijjs,ijpk,jii,jjj 
     1231      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze3, ze3_crs, zpmask   
     1232      !!----------------------------------------------------------------   
     1233      ! Initialize 
     1234 
     1235      ALLOCATE( ze3(jpi,jpj,jpk), zpmask(jpi,jpj,jpk) ) 
     1236      ALLOCATE( ze3_crs(jpi_crs,jpj_crs,jpk) ) 
     1237 
     1238      ! Arrays, scalars initialization  
     1239      ze3(:,:,:)       = p_e3(:,:,:) 
     1240      ze3_crs(:,:,:)   = 0.0 
     1241      zpmask(:,:,:)    = p_mask(:,:,:) 
     1242      ijpk             = jpk 
     1243 
     1244      SELECT CASE ( cd_type ) 
     1245       
     1246         CASE ('T') 
     1247          
     1248            DO jk = 1 , ijpk 
     1249             
     1250               DO ji = 1, jpi_crs                       ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
     1251                   ijie = mie_crs(ji) 
     1252                   ijis = mis_crs(ji) 
     1253 
     1254                   DO jj = 1, jpj_crs                   ! jj = jpj_crs definit par pivot T  
     1255                      ijje = mje_crs(jj)  
     1256                      ijjs = mjs_crs(jj)   
     1257                    
     1258                      DO jii = ijis, ijie 
     1259                         DO jjj = ijjs, ijje 
     1260                            ze3_crs(ji,jj,jk) = max( ze3_crs(ji,jj,jk), ze3(jii,jjj,jk) * zpmask(jii,jjj,jk)  ) 
     1261                         ENDDO 
     1262                      ENDDO 
     1263                   ENDDO 
     1264               ENDDO 
     1265            ENDDO 
     1266             
     1267         CASE ('W') 
     1268          
     1269            DO jk = 2 , ijpk 
     1270             
     1271               DO ji = 1, jpi_crs                       ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
     1272                   ijie = mie_crs(ji) 
     1273                   ijis = mis_crs(ji) 
     1274 
     1275                   DO jj = 1, jpj_crs                   ! jj = jpj_crs definit par pivot T  
     1276                      ijje = mje_crs(jj)  
     1277                      ijjs = mjs_crs(jj)   
     1278                    
     1279                      DO jii = ijis, ijie 
     1280                         DO jjj = ijjs, ijje 
     1281                            ze3_crs(ji,jj,jk) = max( ze3_crs(ji,jj,jk), ze3(jii,jjj,jk) * zpmask(jii,jjj,jk-1)  ) 
     1282                         ENDDO 
     1283                      ENDDO 
     1284                   ENDDO 
     1285               ENDDO 
     1286            ENDDO 
     1287              
     1288            jk = 1                                           ! cas particulier car zpmask(jii,jjj,0) n'existe pas       
     1289           
     1290            DO ji = 1, jpi_crs                        
     1291               ijie = mie_crs(ji) 
     1292               ijis = mis_crs(ji) 
     1293 
     1294               DO jj = 1, jpj_crs                  
     1295                  ijje = mje_crs(jj)  
     1296                  ijjs = mjs_crs(jj)   
     1297                    
     1298                  DO jii = ijis, ijie 
     1299                     DO jjj = ijjs, ijje 
     1300                        ze3_crs(ji,jj,jk) = max( ze3_crs(ji,jj,jk), ze3(jii,jjj,jk) * zpmask(jii,jjj,jk)  ) 
     1301                     ENDDO 
     1302                  ENDDO 
     1303               ENDDO 
     1304            ENDDO   
     1305             
     1306         END SELECT  
     1307          
     1308         p_e3_crs(:,:,:) = ze3_crs(:,:,:) 
     1309          
     1310         CALL crs_lbc_lnk( cd_type, 1.0, pt3d1=p_e3_crs ) 
     1311 
     1312         ! lbcnlk met la ligne jpj = 1 a 0 donc il faut la remettre en ne pas oubliant le cyclique est-ouest 
     1313                    
     1314         p_e3_crs(   :   ,1,:) = ze3_crs(    :    ,1,:)    
     1315         p_e3_crs(   1   ,1,:) = ze3_crs(jpi_crsm1,1,:) 
     1316         p_e3_crs(jpi_crs,1,:) = ze3_crs(    2    ,1,:)        
     1317  
     1318 
     1319      DEALLOCATE( ze3 , zpmask ) 
     1320      DEALLOCATE( ze3_crs ) 
     1321  
     1322 
     1323   END SUBROUTINE crs_e3_max 
     1324 
     1325 
     1326SUBROUTINE crs_surf(p_e1, p_e2 ,p_e3, cd_type, p_mask, surf_crs, surf_msk_crs) 
     1327      !!---------------------------------------------------------------- 
     1328      !!               *** SUBROUTINE crsfun_TW *** 
     1329      !! ** Purpose :  Five applications. 
     1330      !!               1) Maximum surface quantity  
     1331      !!                  - Vertical scale factors (fse3t or fse3w)  
     1332      !!                    max thickness of the parent grid for coarse grid scale factors. 
     1333      !!                  - or diffusion test 
     1334      !!               2) Area-weighted mean quantity: w, or other 3D or 2D quantity 
     1335      !!               3) Volume-weighted mean quantity: tracer 
     1336      !!               4) Minimum surface quantity (diffusion test) 
     1337      !!               5) Area- or Volume- weighted sum. 
     1338      !! ** Method  :  1) - cd_op = 'MAX'. Determines the max vertical thickness of grid boxes 
     1339      !!                    including partial steps for at the bottom 
     1340      !!                    for the coarsened grid, where within the subset of  
     1341      !!                    the parent grid cells the maximum thickness is taken. 
     1342      !!                    Valid arguments: p_e1e2t, cd_type, cd_op, p_cmask, p_pfield3d_1 
     1343      !!                    Where, normally p_pfield3d_1 is e3t. 
     1344      !!                  - cd_op = 'MAX'. May also be used for say, determining the maximum value of Kz,  
     1345      !!                    thus p_pfield3d_1 is set to the 3D field, Kz. 
     1346      !!                    Valid arguments: p_e1e2t, cd_type, cd_op, p_cmask, p_pfield3d_1 
     1347      !!               2) - cd_op = 'ARE'. Calculate the area-weighted average (surface e1t*e2t)   
     1348      !!                    of vertical velocity, w. 
     1349      !!                    Valid arguments: p_e1e2t, cd_type, cd_op, p_cmask, p_pfield3d_1 
     1350      !!                  - cd_op = 'ARE'. Calculate area-weighted average of a 2D quantity (e.g. emp) 
     1351      !!                    Valid arguments: p_e1e2t, cd_type, cd_op, p_cmask, p_pfield2d 
     1352      !!               3) - cd_op = 'VOL'. Calculate the ocean volume (e1e2t*[fse3t|fse3w])  
     1353      !!                    Valid arguments: p_e1e2t, cd_type, cd_op, p_cmask, p_pfield3d_1 
     1354      !!                  - cd_op = 'VOL'. Calculate volume-weighted average (volume e1t*e2t*fse3t) of a quantity. 
     1355      !!                    Valid arguments: p_e1e2t, cd_type, cd_op, p_cmask, p_pfield3d_1, p_pfield3d_2 
     1356      !!               4) - cd_op = 'MIN'. Calculate the minimum value on surface e1t*e2t for 3D variables 
     1357      !!                  Valid arguments: p_e1e2t, cd_type, cd_op, p_cmask, p_pfield3d_1 
     1358      !!               5) - cd_op = 'SUM'. Calculate a dimesionally-weighted sum.  This could be area-weighted 
     1359      !!                  or volume-weighted sum.  
     1360      !! ** Inputs  : p_e1e2t      = parent grid top face surface area, e1t*e2t  
     1361      !!              cd_type      = grid type T, W (U, V, F)  
     1362      !!              cd_op        = MAX, ARE, VOL, MIN, SUM 
     1363      !!              p_cmask      =  coarse grid mask 
     1364      !!              p_ptmask     =  parent grid tmask      
     1365      !!              psgn         = (Optional) sign for lbc_lnk   
     1366      !!              p_pfield2d   = (Optional) 2D field on parent grid 
     1367      !!              p_pfield3d_1 = (Optional) parent grid fse3t or fse3w 
     1368      !!              p_pfield3d_2 = (Optional) 3D field on parent grid 
     1369      !! ** Outputs : p_cfield2d   = (Optional) 2D field on coarse grid 
     1370      !!              p_cfield3d   = (Optional) 3D field on coarse grid 
     1371      !! 
     1372      !!  
     1373      !! History.  30 May.  Editing.  To decide later: Keep all functionality or separate out the mean function. 
     1374      !!            7 Jun   TODO. Need to fix up the parent grid mask to optional like crsfun_UV... 
     1375      !!---------------------------------------------------------------- 
     1376      !!  
     1377      !!  Arguments 
     1378      CHARACTER(len=1),                           INTENT(in) :: cd_type      ! grid type T, W ( U, V, F) 
     1379      REAL(wp), DIMENSION(jpi,jpj,jpk),           INTENT(in) :: p_mask       ! Parent grid T mask 
     1380      REAL(wp), DIMENSION(jpi,jpj,jpk), OPTIONAL, INTENT(in) :: p_e1, p_e2, p_e3         ! 3D tracer T or W on parent grid 
     1381      REAL(wp), DIMENSION(jpi_crs,jpj_crs,jpk), OPTIONAL, INTENT(out):: surf_crs, surf_msk_crs ! Coarse grid box east or north face quantity  
     1382 
     1383      !! Local variables 
     1384      INTEGER ::  ji, jj, jk                   ! dummy loop indices 
     1385      INTEGER :: ijie,ijis,ijje,ijjs,ijpk,jii,jjj 
     1386      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze1, ze2, ze3, zsurf_crs, zsurf_msk_crs, zpmask   
     1387      !!----------------------------------------------------------------   
     1388      ! Initialize 
     1389 
     1390      ALLOCATE( ze1(jpi,jpj,jpk), ze2(jpi,jpj,jpk), ze3(jpi,jpj,jpk), zpmask(jpi,jpj,jpk) ) 
     1391      ALLOCATE( zsurf_crs(jpi_crs,jpj_crs,jpk), zsurf_msk_crs(jpi_crs,jpj_crs,jpk) ) 
     1392 
     1393      ! Arrays, scalars initialization  
     1394      ze1(:,:,:)           = p_e1(:,:,:) 
     1395      ze2(:,:,:)           = p_e2(:,:,:) 
     1396      ze3(:,:,:)           = p_e3(:,:,:) 
     1397      zsurf_crs(:,:,:)     = 0.0 
     1398      zsurf_msk_crs(:,:,:) = 0.0 
     1399      zpmask(:,:,:)        = p_mask(:,:,:) 
     1400      ijpk                 = jpk 
     1401 
     1402      SELECT CASE ( cd_type ) 
     1403       
     1404         CASE ('W') 
     1405 
     1406            DO jk = 2 , ijpk 
     1407             
     1408               DO ji = 1, jpi_crs                       ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
     1409                   ijie = mie_crs(ji) 
     1410                   ijis = mis_crs(ji) 
     1411                   jj   = 1 
     1412                   ijje = mje_crs(jj)  
     1413                   ijjs = mjs_crs(jj) 
     1414                    
     1415                   DO jii = ijis, ijie 
     1416                      DO jjj = ijjs, ijje 
     1417                         zsurf_crs(ji,jj,jk) = zsurf_crs(ji,jj,jk) + ze1(ji,jj,jk) * ze2(jii,jjj,jk) 
     1418                         zsurf_msk_crs(ji,jj,jk) = zsurf_msk_crs(ji,jj,jk) + ( ze1(ji,jj,jk) * ze2(jii,jjj,jk) ) * zpmask(jii,jjj,jk-1)                
     1419                      ENDDO 
     1420                   ENDDO 
     1421                    
     1422                   zsurf_crs(ji,jj,jk) = zsurf_crs(ji,jj,jk) * 3 
     1423                    
     1424                   DO jj = 2, jpj_crs                   ! jj = jpj_crs definit par pivot T  
     1425                      ijje = mje_crs(jj)  
     1426                      ijjs = mjs_crs(jj)   
     1427                    
     1428                      DO jii = ijis, ijie 
     1429                         DO jjj = ijjs, ijje 
     1430                            zsurf_crs(ji,jj,jk) = zsurf_crs(ji,jj,jk) + ze1(ji,jj,jk) * ze2(jii,jjj,jk) 
     1431                            zsurf_msk_crs(ji,jj,jk) = zsurf_msk_crs(ji,jj,jk) + ( ze1(ji,jj,jk) * ze2(jii,jjj,jk) ) * zpmask(jii,jjj,jk-1)    
     1432                         ENDDO 
     1433                      ENDDO 
     1434                   ENDDO 
     1435               ENDDO 
     1436            ENDDO 
     1437             
     1438            jk = 1                                      !cas particulier ou on est en surface 
     1439             
     1440            DO ji = 1, jpi_crs                       ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
     1441               ijie = mie_crs(ji) 
     1442               ijis = mis_crs(ji) 
     1443               jj   = 1                            
     1444               ijje = mje_crs(jj)  
     1445               ijjs = mjs_crs(jj) 
     1446                    
     1447               DO jii = ijis, ijie  
     1448                  DO jjj = ijjs, ijje 
     1449                     zsurf_crs(ji,jj,jk) = zsurf_crs(ji,jj,jk) + ze1(ji,jj,jk) * ze2(jii,jjj,jk) 
     1450                     zsurf_msk_crs(ji,jj,jk) = zsurf_msk_crs(ji,jj,jk) + ( ze1(ji,jj,jk) * ze2(jii,jjj,jk) ) * zpmask(jii,jjj,jk)                
     1451                  ENDDO   
     1452               ENDDO 
     1453               zsurf_crs(ji,jj,jk) = zsurf_crs(ji,jj,jk) * 3                 
     1454               DO jj = 2, jpj_crs                   ! jj = jpj_crs definit par pivot T  
     1455                  ijje = mje_crs(jj)  
     1456                  ijjs = mjs_crs(jj)               
     1457                  DO jii = ijis, ijie 
     1458                     DO jjj = ijjs, ijje    
     1459                        zsurf_crs(ji,jj,jk) = zsurf_crs(ji,jj,jk) + ze1(ji,jj,jk) * ze2(jii,jjj,jk) 
     1460                        zsurf_msk_crs(ji,jj,jk) = zsurf_msk_crs(ji,jj,jk) + ( ze1(ji,jj,jk) * ze2(jii,jjj,jk) ) * zpmask(jii,jjj,jk)    
     1461                     ENDDO    
     1462                  ENDDO 
     1463               ENDDO 
     1464            ENDDO 
     1465             
     1466       CASE ('U') 
     1467        
     1468          DO jk = 1 , ijpk 
     1469             
     1470             DO ji = 1, jpi_crs                       ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
     1471                ijie = mie_crs(ji) 
     1472                ijis = mis_crs(ji) 
     1473                jj   = 1 
     1474                ijje = mje_crs(jj)   
     1475                ijjs = mjs_crs(jj) 
     1476                    
     1477                DO jii = ijis, ijie 
     1478                   DO jjj = ijjs, ijje       
     1479                      zsurf_crs(ji,jj,jk) = zsurf_crs(ji,jj,jk) + ze3(ji,jj,jk) * ze2(jii,jjj,jk) 
     1480                      zsurf_msk_crs(ji,jj,jk) = zsurf_msk_crs(ji,jj,jk) + ( ze3(ji,jj,jk) * ze2(jii,jjj,jk) ) * zpmask(jii,jjj,jk)                
     1481                   ENDDO 
     1482                ENDDO 
     1483                    
     1484                zsurf_crs(ji,jj,jk) = zsurf_crs(ji,jj,jk) * 3 
     1485                    
     1486                DO jj = 2, jpj_crs                   ! jj = jpj_crs definit par pivot T  
     1487                   ijje = mje_crs(jj)  
     1488                   ijjs = mjs_crs(jj)   
     1489                
     1490                   DO jii = ijis, ijie 
     1491                      DO jjj = ijjs, ijje 
     1492                         zsurf_crs(ji,jj,jk) = zsurf_crs(ji,jj,jk) + ze3(ji,jj,jk) * ze2(jii,jjj,jk) 
     1493                         zsurf_msk_crs(ji,jj,jk) = zsurf_msk_crs(ji,jj,jk) + ( ze3(ji,jj,jk) * ze2(jii,jjj,jk) ) * zpmask(jii,jjj,jk) 
     1494                      ENDDO          
     1495                   ENDDO 
     1496                ENDDO 
     1497            ENDDO 
     1498         ENDDO 
     1499        
     1500      CASE ('V') 
     1501           
     1502         DO jk = 1 , ijpk 
     1503             
     1504            DO ji = 1, jpi_crs                       ! ji = 1 et jpi_crs definit par cyclique est-ouest et pivot T 
     1505               ijie = mie_crs(ji) 
     1506               ijis = mis_crs(ji) 
     1507                    
     1508               DO jj = 1, jpj_crs                   ! jj = jpj_crs definit par pivot T  
     1509                  ijje = mje_crs(jj)    
     1510                  ijjs = mjs_crs(jj)   
     1511                    
     1512                  DO jii = ijis, ijie 
     1513                     DO jjj = ijjs, ijje 
     1514                        zsurf_crs(ji,jj,jk) = zsurf_crs(ji,jj,jk) + ze3(ji,jj,jk) * ze1(jii,jjj,jk)  
     1515                        zsurf_msk_crs(ji,jj,jk) = zsurf_msk_crs(ji,jj,jk) + ( ze3(ji,jj,jk) * ze1(jii,jjj,jk) ) * zpmask(jii,jjj,jk)    
     1516                     ENDDO 
     1517                  ENDDO 
     1518               ENDDO 
     1519            ENDDO 
     1520         ENDDO 
     1521      END SELECT 
     1522  
     1523      surf_crs(:,:,:) = zsurf_crs(:,:,:) 
     1524      CALL crs_lbc_lnk( cd_type, 1.0, pt3d1=surf_crs ) 
     1525         ! lbcnlk met la ligne jpj = 1 a 0 donc il faut la remettre en ne pas oubliant le cyclique est-ouest  
     1526         ! a faire un case pour cyclique est-ouest ou non.       
     1527         surf_crs(   :   ,1,:) = zsurf_crs(    :    ,1,:)    
     1528         surf_crs(   1   ,1,:) = zsurf_crs(jpi_crsm1,1,:) 
     1529         surf_crs(jpi_crs,1,:) = zsurf_crs(    2    ,1,:)    
     1530          
     1531         surf_msk_crs(:,:,:) = zsurf_msk_crs(:,:,:) 
     1532      CALL crs_lbc_lnk( cd_type, 1.0, pt3d1=surf_msk_crs ) 
     1533         ! lbcnlk met la ligne jpj = 1 a 0 donc il faut la remettre en ne pas oubliant le cyclique est-ouest         
     1534         surf_msk_crs(   :   ,1,:) = zsurf_msk_crs(    :    ,1,:)    
     1535         surf_msk_crs(   1   ,1,:) = zsurf_msk_crs(jpi_crsm1,1,:) 
     1536         surf_msk_crs(jpi_crs,1,:) = zsurf_msk_crs(    2    ,1,:)  
     1537 
     1538      DEALLOCATE( ze3 , ze2, ze1, zpmask ) 
     1539      DEALLOCATE( zsurf_msk_crs, zsurf_crs ) 
     1540  
     1541 
     1542   END SUBROUTINE crs_surf 
     1543 
    10291544 
    10301545END MODULE crs 
  • branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crs_dom.F90

    r3738 r3778  
    1313   PUBLIC 
    1414 
    15    PUBLIC crs_dom_alloc  ! Called from crsini.F90 
     15    
     16      PUBLIC crs_dom_alloc  ! Called from crsini.F90 
    1617   PUBLIC dom_grid_glo    
    1718   PUBLIC dom_grid_crs    
     
    3031      INTEGER  ::  npolj_full, npolj_crs        !: north fold mark 
    3132      INTEGER  ::  jpiglo_full, jpjglo_full     !: jpiglo / jpjglo 
     33      INTEGER  ::  npiglo, npjglo      !: jpjglo 
    3234      INTEGER  ::  nlci_full, nlcj_full         !: i-, j-dimension of local or sub domain on parent grid 
    3335      INTEGER  ::  nldi_full, nldj_full         !: starting indices of internal sub-domain on parent grid 
     
    5961      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: fse3t_crs, fse3u_crs, fse3v_crs, fse3f_crs, fse3w_crs 
    6062      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: fse3t_n_crs, fse3t_b_crs, fse3t_a_crs 
    61  
     63       
     64      ! Surface 
     65      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: e1e2w_msk, e2e3u_msk, e1e3v_msk, e1e2w, e2e3u, e1e3v 
    6266                                                                  ! vertical scale factors  
    6367      ! Coordinates 
     
    7074      ! Weights 
    7175      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: facsurfv, facsurfu, facvol_t, facvol_w 
    72       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ocean_volume_crs_t, ocean_volume_crs_w 
     76      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ocean_volume_crs_t, ocean_volume_crs_w, bt_crs, r1_bt_crs 
    7377      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: crs_surfu_wgt, crs_surfv_wgt, crs_surfw_wgt, crs_volt_wgt 
    7478 
     
    192196         &      e3f_crs(jpi_crs,jpj_crs,jpk)    , fse3f_crs(jpi_crs,jpj_crs,jpk) , &  
    193197         &      fse3t_b_crs(jpi_crs,jpj_crs,jpk), fse3t_n_crs(jpi_crs,jpj_crs,jpk),& 
    194          &      fse3t_a_crs(jpi_crs,jpj_crs,jpk), STAT=ierr(6)) 
     198         &      fse3t_a_crs(jpi_crs,jpj_crs,jpk), e1e2w_msk(jpi_crs,jpj_crs,jpk) , & 
     199         &      e2e3u_msk(jpi_crs,jpj_crs,jpk)  , e1e3v_msk(jpi_crs,jpj_crs,jpk) , & 
     200         &      e1e2w(jpi_crs,jpj_crs,jpk)      , e2e3u(jpi_crs,jpj_crs,jpk)     , & 
     201         &      e1e3v(jpi_crs,jpj_crs,jpk)      , STAT=ierr(6)) 
    195202 
    196203 
    197204      ALLOCATE( facsurfv(jpi_crs,jpj_crs,jpk) , facsurfu(jpi_crs,jpj_crs,jpk) , &  
    198205         &      facvol_t(jpi_crs,jpj_crs,jpk) , facvol_w(jpi_crs,jpj_crs,jpk) , & 
    199          &      ocean_volume_crs_t(jpi_crs,jpj_crs,jpk) , ocean_volume_crs_w(jpi_crs,jpj_crs,jpk) , STAT=ierr(7)) 
     206         &      ocean_volume_crs_t(jpi_crs,jpj_crs,jpk) , ocean_volume_crs_w(jpi_crs,jpj_crs,jpk), & 
     207         &      bt_crs(jpi_crs,jpj_crs,jpk)   , r1_bt_crs(jpi_crs,jpj_crs,jpk) , STAT=ierr(7)) 
    200208 
    201209 
  • branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crs_iom.F90

    r3738 r3778  
    179179      ELSEIF( PRESENT(pv_r3d) ) THEN   ;  CALL iom_put( cdvar, pv_r3d ) 
    180180      ENDIF 
    181  
    182181      CALL dom_grid_glo   ! Return to parent grid domain 
    183182 
  • branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsdiawri.F90

    r3738 r3778  
    103103      REAL(wp), POINTER, DIMENSION(:,:)   :: ze1e2u ! 2D workspace 
    104104      REAL(wp), POINTER, DIMENSION(:,:)   :: ze1e2v ! 2D workspace 
    105       REAL(wp), POINTER, DIMENSION(:,:,:) :: z3dcrs ! 3D workspace for coarse grid 
    106       REAL(wp), POINTER, DIMENSION(:,:)   :: z2dcrs ! 2D workspace for coarse grid 
     105      REAL(wp), POINTER, DIMENSION(:,:,:) :: z3dcrs, zw ! 3D workspace for coarse grid !cc 
     106      REAL(wp), POINTER, DIMENSION(:,:)   :: z2dcrs, ssh_crs2 ! 2D workspace for coarse grid 
    107107      INTEGER        :: ialloc, iiki, iikn 
    108108      INTEGER, SAVE  :: itsct 
    109109      REAL(wp)       :: zdtj, zrtsct 
     110!!cc1 
     111      REAL(wp)       :: z2dcrsu, z2dcrsv 
     112!!cc1 
    110113      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:), SAVE :: ztsnm 
    111114 
     
    125128      REAL(wp)                                      :: zcoefu, zcoefv, zcoeff, z2dt, z1_2dt, z1_rau0, zraur 
    126129      REAL(wp)                                      :: zij, zip1j, zijp1 
    127       REAL(wp), ALLOCATABLE, DIMENSION(:,:)         :: z2dcrsu, z2dcrsv, z2dcrsf 
     130!!cc1      REAL(wp), ALLOCATABLE, DIMENSION(:,:)         :: z2dcrsu, z2dcrsv, z2dcrsf, zhdivbt 
     131      REAL(wp), ALLOCATABLE, DIMENSION(:,:)         :: z2dcrsf, zhdivbt 
    128132      REAL(wp), ALLOCATABLE, DIMENSION(:,:)         :: zsshub, zsshua, zsshvb, zsshva   ! temp work arrays for instantaneous fields 
    129133      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)       :: zhdiv, zvolt_wgt, zrhd, zrhop, zavt 
    130       REAL(wp), ALLOCATABLE, DIMENSION(:,:)         :: zhdivbt 
    131134      REAL(wp), ALLOCATABLE, DIMENSION(:,:)         :: zee_t, zee_f, zee_u, zee_v 
    132135      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)       :: zmut, zmuf 
     
    150153      CALL wrk_alloc( jpi , jpj , jpk , zfse3u, zfse3v ) 
    151154      CALL wrk_alloc( jpi , jpj , jpk , zfse3t, zfse3w ) 
    152       CALL wrk_alloc( jpi_crs , jpj_crs , jpk , z3dcrs ) 
    153       CALL wrk_alloc( jpi_crs , jpj_crs , z2dcrs ) 
     155      CALL wrk_alloc( jpi_crs , jpj_crs , jpk , z3dcrs, zw ) !cc 
     156      CALL wrk_alloc( jpi_crs , jpj_crs , z2dcrs, ssh_crs2 ) 
     157       
    154158 
    155159      IF ( .NOT. ALLOCATED(ztsnm) ) THEN 
     
    187191      ENDIF 
    188192 
    189       IF ( .NOT. ALLOCATED(z2dcrsu) ) THEN 
    190          ALLOCATE( z2dcrsu(jpi_crs,jpj_crs) , z2dcrsv(jpi_crs,jpj_crs) , & 
     193      IF ( .NOT. ALLOCATED(z2dcrsf) ) THEN 
     194!!cc1      IF ( .NOT. ALLOCATED(z2dcrsu) ) THEN 
     195!!cc1         ALLOCATE( z2dcrsu(jpi_crs,jpj_crs) , z2dcrsv(jpi_crs,jpj_crs) , & 
     196         ALLOCATE(   & 
    191197            &      z2dcrsf(jpi_crs,jpj_crs) , zhdivbt(jpi_crs,jpj_crs) , & 
    192198            &      zsshub(jpi_crs,jpj_crs)  , zsshvb(jpi_crs,jpj_crs)  , & 
     
    213219      ENDIF 
    214220 
    215  
     221      zw(:,:,:)=0.0 
    216222      ! generic work arrays 
    217223      z2d(:,:)      = 0.0 
     
    320326      z3d(:,:,:) = tsn(:,:,:,jp_tem) 
    321327      CALL crsfun( p_e1e2t=e1e2t, cd_type='T', cd_op='VOL', p_cmask=tmask_crs, p_ptmask=tmask, & 
    322          &         p_pfield3d_1=zfse3t, p_pfield3d_2=z3d, p_cfield3d=z3dcrs ) 
     328         &         p_pfield3d_1=zfse3t, p_pfield3d_2=z3d, p_cfield3d=z3dcrs )  
    323329      ztsn(:,:,:,1) = z3dcrs(:,:,:) 
    324330      ztsnm(:,:,:,1) = ztsnm(:,:,:,1) + ztsn(:,:,:,1)  
     
    392398         &         p_fse3=zfse3v, p_pfield=z3d1, p_cfield3d=z3dcrs ) 
    393399      zvsm(:,:,:) = zvsm(:,:,:) + z3dcrs(:,:,:) 
     400       
     401       
     402      ! Vitesse vertical !cc 
     403      z3dcrs(:,:,:) = 0.0 
     404      CALL crsfun( p_e1e2t=e1e2t, cd_type='T', cd_op='ARE', p_cmask=tmask_crs, p_ptmask=tmask, & 
     405        &           p_pfield3d_1=wn, p_cfield3d=z3dcrs) 
     406      zw(:,:,:) = z3dcrs(:,:,:) 
     407 
    394408 
    395409      ! 2.5. Surface boundary conditions 
     
    495509      zhdivbt(:,:) = 0.0 
    496510      DO jk = 1, jpkm1 
    497          z2dcrsu(:,:) = 0.0; z2dcrsv(:,:) = 0.0    
     511!!cc1         z2dcrsu(:,:) = 0.0; z2dcrsv(:,:) = 0.0    
    498512         DO ji = 2, jpi_crsm1 
    499513            DO jj = 2, jpj_crsm1 
     
    501515               ! Horizontal divergence ( following OPA_SRC/DYN/divcur.F90 )  
    502516               ! with partial steps and/or variable layer thicknesses for W 
    503                z2dcrsu(ji,jj) =  ( zum(ji,  jj,jk) * crs_surfu_wgt(ji,  jj,jk)  ) & 
     517!!cc1               z2dcrsu(ji,jj) =  ( zum(ji,  jj,jk) * crs_surfu_wgt(ji,  jj,jk)  ) & 
     518               z2dcrsu =  ( zum(ji,  jj,jk) * crs_surfu_wgt(ji,  jj,jk)  ) & 
    504519                  &            - ( zum(ji-1,jj,jk) * crs_surfu_wgt(ji-1,jj,jk)  ) 
    505                z2dcrsv(ji,jj) =  ( zvm(ji,jj,  jk) * crs_surfv_wgt(ji,jj  ,jk)  ) & 
     520!!cc1               z2dcrsv(ji,jj) =  ( zvm(ji,jj,  jk) * crs_surfv_wgt(ji,jj  ,jk)  ) & 
     521               z2dcrsv =  ( zvm(ji,jj,  jk) * crs_surfv_wgt(ji,jj  ,jk)  ) & 
    506522                  &            - ( zvm(ji,jj-1,jk) * crs_surfv_wgt(ji,jj-1,jk)  ) 
    507523 
    508                zhdiv(ji,jj,jk) = ( z2dcrsu(ji,jj) + z2dcrsv(ji,jj) ) * zvolt_wgt(ji,jj,jk)  
     524!!cc1               zhdiv(ji,jj,jk) = ( z2dcrsu(ji,jj) + z2dcrsv(ji,jj) ) * zvolt_wgt(ji,jj,jk)  
     525               zhdiv(ji,jj,jk) = ( z2dcrsu + z2dcrsv ) * zvolt_wgt(ji,jj,jk)  
    509526  
    510527            ENDDO 
     
    523540      zhdivbtm(:,:) = zhdivbtm(:,:) + zhdivbt 
    524541 
    525  
    526       ! 
     542!      !!! Calcul de l'energie cinétique   !cc  !! DECLARE LES VARIABLES 
     543!       
     544!      zun2(:,:,:) = un(:,:,:) * un(:,:,:)    ! U^2 
     545!      zvn2(:,:,:) = vn(:,:,:) * vn(:,:,:)    ! V^2 
     546!       
     547!!      ! moyenne sur i de U^2 
     548!       
     549!      DO ji = 1, jpiglo-1 
     550!         zun2(ji,:,:) = 0.5 * (zun2(ji,:,:) + zun2(ji+1,:,:)) 
     551!      END 
     552!      ji = jpiglo 
     553!      zun2(ji,:,:) = 0.5 * zun2(ji,:,:)  
     554!      uun2(:,:,:) = zun2(:,:,:) 
     555!       
     556!       
     557!         CALL crs_lbc_lnk( cd_type='T', 1.0, pt3d1=uun2) 
     558!         ! lbcnlk met la ligne jpj = 1 a 0 donc il faut la remettre en ne pas oubliant le cyclique est-ouest  
     559!         ! a faire un case pour cyclique est-ouest ou non.       
     560!         uun2(   :   ,1,:) = zun2(    :    ,1,:)    
     561!          
     562!         IF ((jperio==4) .OR. (jperio==6)) THEN 
     563!            uun2(   1   ,1,:) = zun2(jpi_crsm1,1,:) 
     564!            uun2(jpi_crs,1,:) = zun2(    2    ,1,:) 
     565!         ENDIF   
     566! 
     567! 
     568 !     DO jj = 1, jpjglo-1 
     569 !        zvn2(:,jj,:) = 0.5 * (zvn2(:,jj,:) + zvn2(:,jj+1,:)) 
     570 !     END 
     571 !     jj = jpjglo  
     572 !     zvn2(:,jj,:) = 0.5 * zvn2(:,jj,:) 
     573 !     vvn2(:,:,:) = zvn2(:,:,:) 
     574 !      
     575 !     CALL crs_lbc_lnk( cd_type='T', 1.0, pt3d1=vvn2) 
     576 !        ! lbcnlk met la ligne jpj = 1 a 0 donc il faut la remettre en ne pas oubliant le cyclique est-ouest  
     577 !        ! a faire un case pour cyclique est-ouest ou non.       
     578 !        vvn2(   :   ,1,:) = zvn2(    :    ,1,:)    
     579 !         
     580 !        IF ((jperio==4) .OR. (jperio==6)) THEN 
     581 !           vvn2(   1   ,1,:) = zvn2(jpi_crsm1,1,:) 
     582 !           vvn2(jpi_crs,1,:) = zvn2(    2    ,1,:) 
     583 !        ENDIF   
     584 
     585 
     586 
     587       
    527588      !    2.6.3. Sea-surface Height  ( See DOM/istate.F90: ssh init; OPA_SRC/DYN/sshwzv.F90: ssh update ) 
     589      !cc 
     590      z2dcrs(:,:) = 0.0 
     591      CALL crsfun( p_e1e2t=e1e2t, cd_type='T', cd_op='ARE', p_cmask=tmask_crs, p_ptmask=tmask, p_pfield2d=sshn, & 
     592      &                  p_cfield2d=z2dcrs ) 
     593      ssh_crs2(:,:) = z2dcrs(:,:) 
     594  !    WRITE(numout,*) 'test', sshn(:,:) 
     595  !    WRITE(numout,*) 'test', ssh_crs2(:,:) 
     596       
     597     !cc     
     598       
    528599      !       set some temp variables 
    529600      z2dcrs(:,:) = 0.0; z2dcrsf(:,:) = 0.0 
     
    696767         WRITE(numout,*) 'crsdiawri.', clmode 
    697768         zrtsct = 1.0/REAL(itsct, wp) 
     769 
    698770         ! 
    699771         !    3.1.2 Weights for spatial averages 
     
    710782         CALL crs_iom_put( "toce_crs"   , pv_r3d=tsn_crs(:,:,:,1)  )    ! temperature 
    711783         CALL crs_iom_put( "sst_crs"    , pv_r2d=z2dcrs            )    ! sst 
     784      
    712785         ! 
    713786         !    3.1.4 Salinity 
     
    725798         us_crs(:,:,:) = zusm(:,:,:) * zsuru(:,:,:) ! area-weighted- , time- mean       
    726799         CALL crs_iom_put( "uoces_crs"     , pv_r3d=us_crs             )   ! uS 
    727  
     800               
    728801         !    3.1.6 V-velocity 
    729802         vn_crs(:,:,:) = zvm(:,:,:) * zrtsct ! area-weighted- , time- mean  
     
    737810         wn_crs(:,:,:) = zwm(:,:,:) * zrtsct ! area-weighted- , time- mean  
    738811         CALL crs_iom_put( "woce_crs"   , pv_r3d=wn_crs                   )    ! W-velocity 
     812         CALL crs_iom_put( "woce2_crs"   , pv_r3d=zw                      )    ! cc 
    739813 
    740814         !    3.1.8 Horizontal divergence 
    741815         hdivn_crs(:,:,:) = zhdivnm(:,:,:) * zrtsct 
    742          CALL crs_iom_put( "hdivn_crs"   , pv_r3d=hdivn_crs            )    ! hdiv 
     816      !   CALL crs_iom_put( "hdivn_crs"   , pv_r3d=hdivn_crs            )   ! hdiv 
     817         CALL crs_iom_put( "hdiv_crs"   , pv_r3d=hdivn_crs            )   
     818 
    743819         hdivbt_crs(:,:) = zhdivbtm(:,:) * zrtsct 
    744820 
     
    758834         ENDIF 
    759835         CALL crs_iom_put( "ssh_crs"   , pv_r2d=sshn_crs                  )   ! ssh output  
    760  
     836         CALL crs_iom_put( "ssh2_crs"  , pv_r2d=ssh_crs2                  )   !cc 
    761837 
    762838         !    3.1.10 Potential density 
     
    866942      CALL wrk_dealloc( jpi , jpj , jpk , zfse3u, zfse3v ) 
    867943      CALL wrk_dealloc( jpi , jpj , jpk , zfse3t, zfse3w ) 
    868       CALL wrk_dealloc( jpi_crs , jpj_crs , jpk , z3dcrs ) 
    869       CALL wrk_dealloc( jpi_crs , jpj_crs , z2dcrs ) 
    870  
    871       DEALLOCATE( z2dcrsu, z2dcrsv, z2dcrsf, zhdivbt ) 
     944      CALL wrk_dealloc( jpi_crs , jpj_crs , jpk , z3dcrs, zw ) !cc 
     945      CALL wrk_dealloc( jpi_crs , jpj_crs , z2dcrs, ssh_crs2 ) 
     946 
     947!!cc1      DEALLOCATE( z2dcrsu, z2dcrsv, z2dcrsf, zhdivbt ) ! probleme de malloc au 65 eme pas de temps 
     948      DEALLOCATE( z2dcrsf, zhdivbt ) ! probleme de malloc au 65 eme pas de temps 
    872949      DEALLOCATE( zsshub, zsshua, zsshvb, zsshva ) 
    873950      DEALLOCATE( zee_t, zee_f, zee_u, zee_v ) 
     
    876953      DEALLOCATE( zhdiv, zvolt_wgt)  
    877954      ! 
     955                         
    878956      IF( nn_timing == 1 )   CALL timing_stop('crs_dia_wri') 
    879957      ! 
  • branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsdomwri.F90

    r3622 r3778  
    137137      !======================================================== 
    138138      !                                                         ! horizontal mesh (inum3) 
    139       CALL crs_iom_rstput( 0, 0, inum3, 'glamt_crs', pv_r2d=glamt_crs, ktype = jp_r4 )     !    ! latitude 
    140       CALL crs_iom_rstput( 0, 0, inum3, 'glamu_crs', pv_r2d=glamu_crs, ktype = jp_r4 ) 
    141       CALL crs_iom_rstput( 0, 0, inum3, 'glamv_crs', pv_r2d=glamv_crs, ktype = jp_r4 ) 
    142       CALL crs_iom_rstput( 0, 0, inum3, 'glamf_crs', pv_r2d=glamf_crs, ktype = jp_r4 ) 
    143        
    144       CALL crs_iom_rstput( 0, 0, inum3, 'gphit_crs', pv_r2d=gphit_crs, ktype = jp_r4 )     !    ! longitude 
    145       CALL crs_iom_rstput( 0, 0, inum3, 'gphiu_crs', pv_r2d=gphiu_crs, ktype = jp_r4 ) 
    146       CALL crs_iom_rstput( 0, 0, inum3, 'gphiv_crs', pv_r2d=gphiv_crs, ktype = jp_r4 ) 
    147       CALL crs_iom_rstput( 0, 0, inum3, 'gphif_crs', pv_r2d=gphif_crs, ktype = jp_r4 ) 
    148        
    149       CALL crs_iom_rstput( 0, 0, inum3, 'e1t_crs', pv_r2d=e1t_crs, ktype = jp_r8 )         !    ! e1 scale factors 
    150       CALL crs_iom_rstput( 0, 0, inum3, 'e1u_crs', pv_r2d=e1u_crs, ktype = jp_r8 ) 
    151       CALL crs_iom_rstput( 0, 0, inum3, 'e1v_crs', pv_r2d=e1v_crs, ktype = jp_r8 ) 
    152       CALL crs_iom_rstput( 0, 0, inum3, 'e1f_crs', pv_r2d=e1f_crs, ktype = jp_r8 ) 
    153        
    154       CALL crs_iom_rstput( 0, 0, inum3, 'e2t_crs', pv_r2d=e2t_crs, ktype = jp_r8 )         !    ! e2 scale factors 
    155       CALL crs_iom_rstput( 0, 0, inum3, 'e2u_crs', pv_r2d=e2u_crs, ktype = jp_r8 ) 
    156       CALL crs_iom_rstput( 0, 0, inum3, 'e2v_crs', pv_r2d=e2v_crs, ktype = jp_r8 ) 
    157       CALL crs_iom_rstput( 0, 0, inum3, 'e2f_crs', pv_r2d=e2f_crs, ktype = jp_r8 ) 
     139      CALL crs_iom_rstput( 0, 0, inum3, 'glamt', pv_r2d=glamt_crs, ktype = jp_r4 )     !    ! latitude 
     140      CALL crs_iom_rstput( 0, 0, inum3, 'glamu', pv_r2d=glamu_crs, ktype = jp_r4 ) 
     141      CALL crs_iom_rstput( 0, 0, inum3, 'glamv', pv_r2d=glamv_crs, ktype = jp_r4 ) 
     142      CALL crs_iom_rstput( 0, 0, inum3, 'glamf', pv_r2d=glamf_crs, ktype = jp_r4 ) 
     143       
     144      CALL crs_iom_rstput( 0, 0, inum3, 'gphit', pv_r2d=gphit_crs, ktype = jp_r4 )     !    ! longitude 
     145      CALL crs_iom_rstput( 0, 0, inum3, 'gphiu', pv_r2d=gphiu_crs, ktype = jp_r4 ) 
     146      CALL crs_iom_rstput( 0, 0, inum3, 'gphiv', pv_r2d=gphiv_crs, ktype = jp_r4 ) 
     147      CALL crs_iom_rstput( 0, 0, inum3, 'gphif', pv_r2d=gphif_crs, ktype = jp_r4 ) 
     148       
     149      CALL crs_iom_rstput( 0, 0, inum3, 'e1t', pv_r2d=e1t_crs, ktype = jp_r8 )         !    ! e1 scale factors 
     150      CALL crs_iom_rstput( 0, 0, inum3, 'e1u', pv_r2d=e1u_crs, ktype = jp_r8 ) 
     151      CALL crs_iom_rstput( 0, 0, inum3, 'e1v', pv_r2d=e1v_crs, ktype = jp_r8 ) 
     152      CALL crs_iom_rstput( 0, 0, inum3, 'e1f', pv_r2d=e1f_crs, ktype = jp_r8 ) 
     153       
     154      CALL crs_iom_rstput( 0, 0, inum3, 'e2t', pv_r2d=e2t_crs, ktype = jp_r8 )         !    ! e2 scale factors 
     155      CALL crs_iom_rstput( 0, 0, inum3, 'e2u', pv_r2d=e2u_crs, ktype = jp_r8 ) 
     156      CALL crs_iom_rstput( 0, 0, inum3, 'e2v', pv_r2d=e2v_crs, ktype = jp_r8 ) 
     157      CALL crs_iom_rstput( 0, 0, inum3, 'e2f', pv_r2d=e2f_crs, ktype = jp_r8 ) 
    158158       
    159159      CALL crs_iom_rstput( 0, 0, inum3, 'ff_crs', pv_r2d=ff_crs, ktype = jp_r8 )           !    ! coriolis factor 
     
    167167      IF( ln_zps ) THEN                       ! z-coordinate - partial steps 
    168168 
     169             
    169170         IF ( nn_msh_crs <= 6 ) THEN 
    170             CALL crs_iom_rstput( 0, 0, inum4, 'e3t_crs', pv_r3d=fse3t_crs )       
    171             CALL crs_iom_rstput( 0, 0, inum4, 'e3w_crs', pv_r3d=fse3w_crs )       
    172             CALL crs_iom_rstput( 0, 0, inum4, 'e3u_crs', pv_r3d=fse3u_crs )       
    173             CALL crs_iom_rstput( 0, 0, inum4, 'e3v_crs', pv_r3d=fse3v_crs )       
     171            CALL crs_iom_rstput( 0, 0, inum4, 'e3t', pv_r3d=e3t_crs )       
     172            CALL crs_iom_rstput( 0, 0, inum4, 'e3w', pv_r3d=e3w_crs )       
     173            CALL crs_iom_rstput( 0, 0, inum4, 'e3u', pv_r3d=e3u_crs )       
     174            CALL crs_iom_rstput( 0, 0, inum4, 'e3v', pv_r3d=e3v_crs )       
    174175         ELSE 
    175176            DO jj = 1,jpj_crs    
     
    188189 
    189190         IF ( nn_msh_crs <= 3 ) THEN 
    190             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_crs', pv_r3d=gdept_crs, ktype = jp_r4 )  
    191192            DO jk = 1,jpk    
    192193               DO jj = 1, jpj_crsm1    
     
    219220 
    220221         CALL crs_iom_rstput(  0, 0, inum4, 'ocean_volume_crs_t', pv_r3d=ocean_volume_crs_t )  
    221          CALL crs_iom_rstput(  0, 0, inum4, 'facvol_t', pv_r3d=facvol_t )  
    222          CALL crs_iom_rstput(  0, 0, inum4, 'facvol_w', pv_r3d=facvol_w )  
    223          CALL crs_iom_rstput(  0, 0, inum4, 'facsurfu', pv_r3d=facsurfu )  
    224          CALL crs_iom_rstput(  0, 0, inum4, 'facsurfv', pv_r3d=facsurfv )  
     222         CALL crs_iom_rstput(  0, 0, inum4, 'facvol_t' , pv_r3d=facvol_t )  
     223         CALL crs_iom_rstput(  0, 0, inum4, 'facvol_w' , pv_r3d=facvol_w )  
     224         CALL crs_iom_rstput(  0, 0, inum4, 'facsurfu' , pv_r3d=facsurfu )  
     225         CALL crs_iom_rstput(  0, 0, inum4, 'facsurfv' , pv_r3d=facsurfv )  
     226         CALL crs_iom_rstput(  0, 0, inum4, 'e1e2w_msk', pv_r3d=e1e2w_msk)  
     227         CALL crs_iom_rstput(  0, 0, inum4, 'e2e3u_msk', pv_r3d=e2e3u_msk)  
     228         CALL crs_iom_rstput(  0, 0, inum4, 'e1e3v_msk', pv_r3d=e1e3v_msk) 
     229         CALL crs_iom_rstput(  0, 0, inum4, 'e1e2w'    , pv_r3d=e1e2w    )  
     230         CALL crs_iom_rstput(  0, 0, inum4, 'e2e3u'    , pv_r3d=e2e3u    )  
     231         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) 
    225234 
    226235         CALL crs_iom_rstput(  0, 0, inum4, 'crs_surfu_wgt', pv_r3d=crs_surfu_wgt)  
  • branches/2013/dev_r3411_CNRS4_IOCRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsini.F90

    r3738 r3778  
    193193 
    194194            DO ji = 2, jpiglo_crsm1 
    195                ijie = (ji*nn_factx)-nn_factx+1 
     195               !cc ijie = (ji*nn_factx)-nn_factx+1 
     196               ijie = (ji*nn_factx)-nn_factx   !cc 
    196197               ijis = ijie-nn_factx+1 
    197198 
    198199               IF ( ji == jpiglo_crsm1 ) THEN 
    199                   IF ( ((jpiglo-1)-ijie) <= nn_factx )   ijie = jpiglo-1 
     200                  IF ( ((jpiglo-1)-ijie) <= nn_factx ) ijie = jpiglo-2  ! ijie = jpiglo-1 !cc 
    200201               ENDIF 
    201202 
     
    207208                  ENDIF 
    208209 
    209                   DO jj = 2, jpjglo_crsm1 
    210                      ijje = ijjgloT-nn_facty*(jj-2) 
     210                 DO jj = 2, jpjglo_crsm1 
     211                ! cc ijje = ijjgloT-nn_facty*(jj-2) 
     212                     ijje = ijjgloT-nn_facty*(jj-2) - 1 
    211213                     ijjs = ijje-nn_facty+1                    
    212214                   
     
    271273 
    272274        ! Pad the boundaries, do not know if it is necessary 
    273          mis_crs(1) = 1; mis_crs(jpiglo_crs) = jpiglo 
    274          mie_crs(1) = 1; mie_crs(jpiglo_crs) = jpiglo 
    275          mjs_crs(1) = 1; mjs_crs(jpjglo_crs) = jpjglo 
    276          mje_crs(1) = 1; mje_crs(jpjglo_crs) = jpjglo  
     275         mis_crs(1) = 1           ; mis_crs(jpiglo_crs) = mie_crs(jpiglo_crs - 1) + 1    !cc 
     276         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 
     278         mje_crs(1) = mjs_crs(2)-1; mje_crs(jpjglo_crs) = jpjglo  
    277279 
    278280!         WRITE(numout,*) 'crs_init. coarse grid bounds on parent grid' 
     
    313315        WRITE(numout,*) 'crsini. count 1' 
    314316 
    315 !        CALL crsfun( gphiu, glamu, 'U', gphiu_crs, glamu_crs ) 
    316 !        WRITE(numout,*) 'crsini. gphiu_crs(15,15)', gphiu_crs(15,15) 
    317 !        WRITE(numout,*) 'crsini. glamu_crs(15,15)', glamu_crs(15,15) 
     317        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 
    318320        WRITE(numout,*) 'crsini. count 2' 
    319321  
    320 !        CALL crsfun( p_pgphi=gphiv, p_pglam=glamv, cd_type='V', p_cgphi=gphiv_crs, p_cglam=glamv_crs ) 
    321 !        WRITE(numout,*) 'crsini. gphiv_crs(15,15)', gphiv_crs(15,15) 
    322 !        WRITE(numout,*) 'crsini. glamv_crs(15,15)', glamv_crs(15,15) 
     322        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 
    323325 
    324326        WRITE(numout,*) 'crsini. count 3' 
    325 !        CALL crsfun( p_pgphi=gphif, p_pglam=glamf, cd_type='F', p_cgphi=gphif_crs, p_cglam=glamf_crs ) 
    326 !        WRITE(numout,*) 'crsini. gphif_crs(15,15)', gphif_crs(15,15) 
    327 !        WRITE(numout,*) 'crsini. glamf_crs(15,15)', glamf_crs(15,15) 
     327        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 
    328330 
    329331        WRITE(numout,*) 'crsini. count 4' 
     
    350352 
    351353     !      3.c.1 Horizontal scale factors 
    352      CALL crsfun( cd_type='T', cd_op='SUM', p_pmask=tmask, p_e1=e1t, p_e2=e2t, p_cfield2d_1=e1t_crs, p_cfield2d_2=e2t_crs ) 
    353      CALL crsfun( cd_type='U', cd_op='SUM', p_pmask=umask, p_e1=e1u, p_e2=e2u, p_cfield2d_1=e1u_crs, p_cfield2d_2=e2u_crs ) 
    354      CALL crsfun( cd_type='V', cd_op='SUM', p_pmask=vmask, p_e1=e1v, p_e2=e2v, p_cfield2d_1=e1v_crs, p_cfield2d_2=e2v_crs ) 
    355      CALL crsfun( cd_type='F', cd_op='SUM', p_pmask=fmask, p_e1=e1f, p_e2=e2f, p_cfield2d_1=e1f_crs, p_cfield2d_2=e2f_crs ) 
     354  !   CALL crsfun( cd_type='T', cd_op='SUM', p_pmask=tmask, p_e1=e1t, p_e2=e2t, p_cfield2d_1=e1t_crs, p_cfield2d_2=e2t_crs ) 
     355  !   CALL crsfun( cd_type='U', cd_op='SUM', p_pmask=umask, p_e1=e1u, p_e2=e2u, p_cfield2d_1=e1u_crs, p_cfield2d_2=e2u_crs ) 
     356  !   CALL crsfun( cd_type='V', cd_op='SUM', p_pmask=vmask, p_e1=e1v, p_e2=e2v, p_cfield2d_1=e1v_crs, p_cfield2d_2=e2v_crs ) 
     357  !   CALL crsfun( cd_type='F', cd_op='SUM', p_pmask=fmask, p_e1=e1f, p_e2=e2f, p_cfield2d_1=e1f_crs, p_cfield2d_2=e2f_crs ) 
     358     CALL crsfun( cd_type='T', cd_op='POS', p_pmask=tmask, p_e1=e1t, p_e2=e2t, p_cfield2d_1=e1t_crs, p_cfield2d_2=e2t_crs ) 
     359     CALL crsfun( cd_type='U', cd_op='POS', p_pmask=umask, p_e1=e1u, p_e2=e2u, p_cfield2d_1=e1u_crs, p_cfield2d_2=e2u_crs ) 
     360     CALL crsfun( cd_type='V', cd_op='POS', p_pmask=vmask, p_e1=e1v, p_e2=e2v, p_cfield2d_1=e1v_crs, p_cfield2d_2=e2v_crs ) 
     361     CALL crsfun( cd_type='F', cd_op='POS', p_pmask=fmask, p_e1=e1f, p_e2=e2f, p_cfield2d_1=e1f_crs, p_cfield2d_2=e2f_crs ) 
    356362 
    357363     e1e2t_crs(:,:) = e1t_crs(:,:) * e2t_crs(:,:) 
     
    440446     zfse3f(:,:,:) = fse3f(:,:,:) 
    441447     zfse3w(:,:,:) = fse3w(:,:,:) 
    442  
    443      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 ) 
    444      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 ) 
    445      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 ) 
    446      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 ) 
    447      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 ) 
    448  
     448      
     449       
     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 ) 
     453     !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 ) 
     454     !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 ) 
     455     !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 ) 
     456     CALL crs_e3_max( p_e3=zfse3t, cd_type='T', p_mask=tmask, p_e3_crs=e3t_crs) 
     457     CALL crs_e3_max( p_e3=zfse3w, cd_type='W', p_mask=tmask, p_e3_crs=e3w_crs) 
     458     
    449459     ! Reset 0 to e3t_0 or e3w_0 
    450460     DO jk = 1, jpk 
     
    465475     CALL crsfun( p_e1e2t=e1e2t, cd_type='W', cd_op='MAX', p_cmask=tmask_crs, p_ptmask=tmask, p_pfield3d_1=gdepw, p_cfield3d=gdepw_crs ) 
    466476 
    467  
     477     !    3.d.4   Surfaces  
     478      
     479     CALL crs_surf(p_e1=e1t, p_e2=e2t ,p_e3=zfse3w, cd_type='W', p_mask=tmask, surf_crs=e1e2w, surf_msk_crs=e1e2w_msk) 
     480     CALL crs_surf(p_e1=e1u, p_e2=e2u ,p_e3=zfse3u, cd_type='U', p_mask=umask, surf_crs=e2e3u, surf_msk_crs=e2e3u_msk) 
     481     CALL crs_surf(p_e1=e1v, p_e2=e2v ,p_e3=zfse3v, cd_type='V', p_mask=vmask, surf_crs=e1e3v, surf_msk_crs=e1e3v_msk) 
    468482 
    469483 
     
    476490      CALL crsfun( cd_type='T', cd_op='VOL', p_pmask=tmask, p_e1=e1t, p_e2=e2t, p_fse3=zfse3t, & 
    477491         &             p_cfield3d_1=ocean_volume_crs_t, p_cfield3d_2=facvol_t ) 
     492       
     493      r1_bt_crs(:,:,:) = 0._wp  
     494      bt_crs(:,:,:) = ocean_volume_crs_t(:,:,:)* facvol_t(:,:,:) 
     495      WHERE( bt_crs /= 0._wp ) r1_bt_crs(:,:,:) = 1._wp/bt_crs(:,:,:) 
    478496 
    479497      CALL crsfun( cd_type='W', cd_op='VOL', p_pmask=tmask, p_e1=e1t, p_e2=e2t, p_fse3=zfse3w, & 
     
    495513     ! 5.  Write out coarse meshmask  (see OPA_SRC/DOM/domwri.F90 for ideas later) 
    496514     !--------------------------------------------------------- 
    497       
    498515     IF ( nn_msh_crs > 0 ) CALL crs_dom_wri 
    499516 
Note: See TracChangeset for help on using the changeset viewer.