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 15397 for NEMO/branches/UKMO/NEMO_4.0.4_CO9_shelf_climate/src/OCE/DIA/diadct.F90 – NEMO

Ignore:
Timestamp:
2021-10-19T10:22:46+02:00 (3 years ago)
Author:
hadjt
Message:

Region mean and NOOS transport XIOS scaler output
Scalar output, so passing 85 and 3 values per iom call rather than 297*375*85.
DIADCT edited (nd changes commmeted out) to allow compilation on IFORT.
In all NEMO, reading section_ijglobal.diadct was the only compilation error, ifort didn't like ctl_opn, and cray didn't like call ftell.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.4_CO9_shelf_climate/src/OCE/DIA/diadct.F90

    r15378 r15397  
    8484  LOGICAL, PUBLIC ::   ln_diadct 
    8585 
     86  CHARACTER(len=60), PUBLIC ::  diadct_endian 
     87 
    8688  ! JT 
    8789 
     
    175177     !! 
    176178     !!--------------------------------------------------------------------- 
     179 
     180     ! 
    177181     NAMELIST/namdct/ln_diadct,ln_NOOS,nn_dct,ln_dct_h,ln_dct_ascii,nn_secdebug,ln_dct_calc_noos_day,ln_dct_calc_noos_hr,& 
    178              & nn_dct_iom_cont,ln_dct_day_25hr,ln_dct_verbose 
     182             & nn_dct_iom_cont,ln_dct_day_25hr,ln_dct_verbose,diadct_endian 
    179183     INTEGER           ::   ios,jsec        ! Local integer output status for namelist read 
    180184     CHARACTER(len=3)  ::   jsec_str        ! name of the jsec 
    181185     LOGICAL       ::   verbose      
    182186     verbose = ln_dct_verbose!.false. 
     187 
     188     diadct_endian='BIG_ENDIAN' 
    183189 
    184190     IF( ln_timing )   CALL timing_start('dia_dct_init') 
     
    649655     INTEGER :: jsec, jpt                                     ! dummy loop indices 
    650656     INTEGER                            :: ierr  ! error for allocate 
    651  
     657     !JT 
     658     INTEGER                            :: fsize, floc  ! exit section_ijglobal.diadct gracefully. 
     659     !JT 
    652660     INTEGER, DIMENSION(2) :: icoord  
    653661     CHARACTER(len=160)    :: clname                          !filename 
     
    673681      
    674682     IF ( verbose ) write(numout,*) 'dct low-level pre open: big endian :',nproc,narea 
     683 
     684 
     685     ! ok with Daleys set up (ifort?) 
     686     !OPEN(UNIT=107,FILE='section_ijglobal.diadct', FORM='UNFORMATTED', ACCESS='SEQUENTIAL', STATUS='OLD',convert='NATIVE') 
     687     !READ(107) isec 
     688     !CLOSE(107) 
     689     !IF( lwp .AND. verbose ) write(numout,*) 'diadct readsec: NATIVE, isec',isec 
     690 
     691     !ok with  Daleys set up (ifort?) 
     692     !OPEN(UNIT=107,FILE='section_ijglobal.diadct', FORM='UNFORMATTED', ACCESS='SEQUENTIAL', STATUS='OLD',convert='LITTLE_ENDIAN') 
     693     !READ(107) isec 
     694     !CLOSE(107) 
     695     !IF( lwp .AND. verbose ) write(numout,*) 'diadct readsec: LITTLE_ENDIAN, isec',isec 
     696 
     697 
    675698     OPEN(UNIT=107,FILE='section_ijglobal.diadct', FORM='UNFORMATTED', ACCESS='SEQUENTIAL', STATUS='OLD',convert='BIG_ENDIAN') 
    676       
    677      !write(numout,*) 'dct low-level pre open: SWAP ' 
    678      !OPEN(UNIT=107,FILE='section_ijglobal.diadct', FORM='UNFORMATTED', ACCESS='SEQUENTIAL', STATUS='OLD',convert='SWAP') 
    679       
    680      !write(numout,*) 'dct low-level pre open: NATIVE ' 
    681      !OPEN(UNIT=107,FILE='section_ijglobal.diadct', FORM='UNFORMATTED', ACCESS='SEQUENTIAL', STATUS='OLD',convert='NATIVE') 
    682       
    683699     READ(107) isec 
    684700     CLOSE(107) 
     701     IF( lwp .AND. verbose ) write(numout,*) 'diadct readsec: BIG_ENDIAN, isec',isec 
     702 
     703     inquire(file='section_ijglobal.diadct',size=fsize) 
    685704      
    686705     CALL ctl_opn( numdct_in, 'section_ijglobal.diadct', 'OLD', 'UNFORMATTED', 'SEQUENTIAL', -1, numout, .TRUE. ) 
     706 
     707     !ok with  Daleys set up (ifort?) 
     708     !CLOSE(numdct_in) 
     709     ! 
     710     !!OPEN(UNIT=numdct_in,FILE='section_ijglobal.diadct', FORM='UNFORMATTED', ACCESS='SEQUENTIAL', STATUS='OLD',convert='BIG_ENDIAN') 
     711     ! 
     712     !OPEN(UNIT=numdct_in,FILE='section_ijglobal.diadct', FORM='UNFORMATTED', ACCESS='SEQUENTIAL', STATUS='OLD',convert=TRIM(diadct_endian)) 
    687713  
    688714     !--------------- 
     
    711737        secs(jsec)%nb_point       = 0 
    712738 
    713         !read section's number / name / computing choices / classes / slopeSection / points number 
    714         !----------------------------------------------------------------------------------------- 
    715          
     739 
     740!        ! ok with Daleys set up (ifort?) 
     741!        !read section's number / name / computing choices / classes / slopeSection / points number 
     742!        !----------------------------------------------------------------------------------------- 
     743!        !JT 
     744!        CALL FTELL(numdct_in, floc) 
     745!         
     746!        IF( lwp .AND. verbose ) write(numout,*) 'diadct readsec: section_ijglobal.diadct size and location',fsize, floc 
     747!        !JT 
     748!        IF (floc .GE. fsize) THEN 
     749!  
     750!            IF( lwp .AND. verbose )THEN 
     751!               write(numout,*) 'diadct readsec: End of section_ijglobal.diadct: Exiting Gracefully' 
     752!               write(numout,*) 'diadct readsec: section_ijglobal.diadct: size and location',fsize, floc 
     753!            ENDIF             
     754!            EXIT  
     755!        ENDIF 
     756 
    716757        READ(numdct_in,iostat=iost) isec 
    717758        IF (iost .NE. 0 ) then 
     
    19992040     CHARACTER(len=3)      :: noos_sect_name             ! Classname  
    20002041     CHARACTER(len=25)      :: noos_var_sect_name 
    2001      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   noos_iom_dummy 
     2042     REAL(wp), ALLOCATABLE, DIMENSION(:) ::   noos_iom_dummy 
    20022043     INTEGER               :: IERR 
    20032044      
     
    20472088     IF ( nn_dct_iom_cont  .eq. 1) THEN 
    20482089         max_iom_val = 1.e10 
    2049          ALLOCATE( noos_iom_dummy(jpi,jpj,3),  STAT= ierr ) 
     2090         ALLOCATE( noos_iom_dummy(3),  STAT= ierr ) 
    20502091            IF( ierr /= 0 )   CALL ctl_stop( 'dia_dct_wri_NOOS: failed to allocate noos_iom_dummy array' ) 
    20512092     ENDIF 
     
    20882129         noos_var_sect_name = "noos_" // trim(noos_sect_name) // '_trans' 
    20892130         IF (iom_use(noos_var_sect_name)) THEN 
    2090              noos_iom_dummy(:,:,:) = 0. 
     2131             noos_iom_dummy(:) = 0. 
    20912132             tmp_iom_output(:) = 0. 
    20922133              
     
    21132154             if ( tmp_iom_output(3) .ne.  tmp_iom_output(3) ) tmp_iom_output(1) =  max_iom_val*2 
    21142155              
    2115              noos_iom_dummy(:,:,1) = tmp_iom_output(1) 
    2116              noos_iom_dummy(:,:,2) = tmp_iom_output(2) 
    2117              noos_iom_dummy(:,:,3) = tmp_iom_output(3) 
     2156             noos_iom_dummy(1) = tmp_iom_output(1) 
     2157             noos_iom_dummy(2) = tmp_iom_output(2) 
     2158             noos_iom_dummy(3) = tmp_iom_output(3) 
    21182159              
    2119              !noos_iom_dummy(:,:,1) = (zsumclasses( 1)+zsumclasses( 2)) 
    2120              !noos_iom_dummy(:,:,2) = zsumclasses( 1) 
    2121              !noos_iom_dummy(:,:,3) = zsumclasses( 2) 
     2160             !noos_iom_dummy(1) = (zsumclasses( 1)+zsumclasses( 2)) 
     2161             !noos_iom_dummy(2) = zsumclasses( 1) 
     2162             !noos_iom_dummy(3) = zsumclasses( 2) 
    21222163              
    21232164              
    21242165              
    21252166             if ( lwp .AND. verbose ) WRITE(numout,*) 'dia_dct_wri_NOOS iom_put: ', kt,ksec, noos_var_sect_name 
    2126              CALL iom_put( noos_var_sect_name,  noos_iom_dummy ) 
     2167             CALL iom_put( noos_var_sect_name,  noos_iom_dummy(:) ) 
    21272168         ENDIF 
    21282169 
    21292170         noos_var_sect_name =  "noos_" // trim(noos_sect_name) // '_heat' 
    21302171         IF (iom_use(noos_var_sect_name)) THEN 
    2131              noos_iom_dummy(:,:,:) = 0. 
     2172             noos_iom_dummy(:) = 0. 
    21322173             tmp_iom_output(:) = 0. 
    21332174              
     
    21542195             if ( tmp_iom_output(3) .ne.  tmp_iom_output(3) ) tmp_iom_output(1) =  max_iom_val*2 
    21552196              
    2156              noos_iom_dummy(:,:,1) = tmp_iom_output(1) 
    2157              noos_iom_dummy(:,:,2) = tmp_iom_output(2) 
    2158              noos_iom_dummy(:,:,3) = tmp_iom_output(3) 
     2197             noos_iom_dummy(1) = tmp_iom_output(1) 
     2198             noos_iom_dummy(2) = tmp_iom_output(2) 
     2199             noos_iom_dummy(3) = tmp_iom_output(3) 
    21592200              
    2160              !noos_iom_dummy(:,:,1) = (zsumclasses( 7)+zsumclasses( 8)) 
    2161              !noos_iom_dummy(:,:,2) = zsumclasses( 7) 
    2162              !noos_iom_dummy(:,:,3) = zsumclasses( 8) 
     2201             !noos_iom_dummy(1) = (zsumclasses( 7)+zsumclasses( 8)) 
     2202             !noos_iom_dummy(2) = zsumclasses( 7) 
     2203             !noos_iom_dummy(3) = zsumclasses( 8) 
    21632204              
    21642205             if ( lwp .AND. verbose ) WRITE(numout,*) 'dia_dct_wri_NOOS iom_put: ', kt,ksec, noos_var_sect_name 
    2165              CALL iom_put(noos_var_sect_name,  noos_iom_dummy 
     2206             CALL iom_put(noos_var_sect_name,  noos_iom_dummy(:) 
    21662207         ENDIF 
    21672208 
    21682209         noos_var_sect_name = "noos_" // trim(noos_sect_name) // '_salt' 
    21692210         IF (iom_use(noos_var_sect_name)) THEN 
    2170              noos_iom_dummy(:,:,:) = 0. 
     2211             noos_iom_dummy(:) = 0. 
    21712212             tmp_iom_output(:) = 0. 
    21722213              
     
    21942235             if ( tmp_iom_output(3) .ne.  tmp_iom_output(3) ) tmp_iom_output(1) =  max_iom_val*2 
    21952236              
    2196              noos_iom_dummy(:,:,1) = tmp_iom_output(1) 
    2197              noos_iom_dummy(:,:,2) = tmp_iom_output(2) 
    2198              noos_iom_dummy(:,:,3) = tmp_iom_output(3) 
     2237             noos_iom_dummy(1) = tmp_iom_output(1) 
     2238             noos_iom_dummy(2) = tmp_iom_output(2) 
     2239             noos_iom_dummy(3) = tmp_iom_output(3) 
    21992240              
    2200              !noos_iom_dummy(:,:,1) = (zsumclasses( 9)+zsumclasses( 10)) 
    2201              !noos_iom_dummy(:,:,2) = zsumclasses( 9) 
    2202              !noos_iom_dummy(:,:,3) = zsumclasses( 10) 
     2241             !noos_iom_dummy(1) = (zsumclasses( 9)+zsumclasses( 10)) 
     2242             !noos_iom_dummy(2) = zsumclasses( 9) 
     2243             !noos_iom_dummy(3) = zsumclasses( 10) 
    22032244              
    22042245             if ( lwp .AND. verbose ) WRITE(numout,*) 'dia_dct_wri_NOOS iom_put: ', kt,ksec, noos_var_sect_name 
    2205              CALL iom_put(noos_var_sect_name,  noos_iom_dummy ) 
    2206              noos_iom_dummy(:,:,:) = 0.          
     2246             CALL iom_put(noos_var_sect_name,  noos_iom_dummy(:) ) 
     2247             noos_iom_dummy(:) = 0.          
    22072248             tmp_iom_output(:) = 0. 
    22082249        ENDIF 
     
    23232364     CHARACTER(len=3)      :: noos_sect_name             ! Classname  
    23242365     CHARACTER(len=25)      :: noos_var_sect_name 
    2325      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   noos_iom_dummy 
     2366     REAL(wp), ALLOCATABLE, DIMENSION(:) ::   noos_iom_dummy 
    23262367     INTEGER               :: IERR 
    23272368      
     
    23692410     !IF ( nn_dct_iom_cont .EQ. 2 ) THEN 
    23702411     max_iom_val = 1.e10 
    2371      ALLOCATE( noos_iom_dummy(jpi,jpj,3),  STAT= ierr ) 
     2412     ALLOCATE( noos_iom_dummy(3),  STAT= ierr ) 
    23722413        IF( ierr /= 0 )   CALL ctl_stop( 'dia_dct_wri_NOOS: failed to allocate noos_iom_dummy array' ) 
    23732414 
    23742415     noos_var_sect_name = "noos_" // trim(noos_sect_name) // '_trans' 
    23752416     IF (iom_use(noos_var_sect_name)) THEN 
    2376          noos_iom_dummy(:,:,:) = 0. 
     2417         noos_iom_dummy(:) = 0. 
    23772418         tmp_iom_output(:) = 0. 
    23782419          
     
    23992440         if ( tmp_iom_output(3) .ne.  tmp_iom_output(3) ) tmp_iom_output(1) =  max_iom_val*2 
    24002441          
    2401          noos_iom_dummy(:,:,1) = tmp_iom_output(1) 
    2402          noos_iom_dummy(:,:,2) = tmp_iom_output(2) 
    2403          noos_iom_dummy(:,:,3) = tmp_iom_output(3) 
     2442         noos_iom_dummy(1) = tmp_iom_output(1) 
     2443         noos_iom_dummy(2) = tmp_iom_output(2) 
     2444         noos_iom_dummy(3) = tmp_iom_output(3) 
    24042445          
    2405          !noos_iom_dummy(:,:,1) = (zsumclasses( 1)+zsumclasses( 2)) 
    2406          !noos_iom_dummy(:,:,2) = zsumclasses( 1) 
    2407          !noos_iom_dummy(:,:,3) = zsumclasses( 2) 
     2446         !noos_iom_dummy(1) = (zsumclasses( 1)+zsumclasses( 2)) 
     2447         !noos_iom_dummy(2) = zsumclasses( 1) 
     2448         !noos_iom_dummy(3) = zsumclasses( 2) 
    24082449          
    24092450          
    24102451          
    24112452         if ( lwp .AND. verbose ) WRITE(numout,*) 'dia_dct_wri_NOOS iom_put: ', kt,ksec, noos_var_sect_name,tmp_iom_output(1) 
    2412          CALL iom_put( noos_var_sect_name,  noos_iom_dummy  ) 
     2453         CALL iom_put( noos_var_sect_name,  noos_iom_dummy(:)  ) 
    24132454     ENDIF 
    24142455 
    24152456     noos_var_sect_name =  "noos_" // trim(noos_sect_name) // '_heat' 
    24162457     IF (iom_use(noos_var_sect_name)) THEN 
    2417          noos_iom_dummy(:,:,:) = 0. 
     2458         noos_iom_dummy(:) = 0. 
    24182459         tmp_iom_output(:) = 0. 
    24192460          
     
    24402481         if ( tmp_iom_output(3) .ne.  tmp_iom_output(3) ) tmp_iom_output(1) =  max_iom_val*2 
    24412482          
    2442          noos_iom_dummy(:,:,1) = tmp_iom_output(1) 
    2443          noos_iom_dummy(:,:,2) = tmp_iom_output(2) 
    2444          noos_iom_dummy(:,:,3) = tmp_iom_output(3) 
     2483         noos_iom_dummy(1) = tmp_iom_output(1) 
     2484         noos_iom_dummy(2) = tmp_iom_output(2) 
     2485         noos_iom_dummy(3) = tmp_iom_output(3) 
    24452486          
    2446          !noos_iom_dummy(:,:,1) = (zsumclasses( 7)+zsumclasses( 8)) 
    2447          !noos_iom_dummy(:,:,2) = zsumclasses( 7) 
    2448          !noos_iom_dummy(:,:,3) = zsumclasses( 8) 
     2487         !noos_iom_dummy(1) = (zsumclasses( 7)+zsumclasses( 8)) 
     2488         !noos_iom_dummy(2) = zsumclasses( 7) 
     2489         !noos_iom_dummy(3) = zsumclasses( 8) 
    24492490          
    24502491         if ( lwp .AND. verbose ) WRITE(numout,*) 'dia_dct_wri_NOOS iom_put: ', kt,ksec, noos_var_sect_name,tmp_iom_output(1) 
    2451          CALL iom_put(noos_var_sect_name,  noos_iom_dummy 
     2492         CALL iom_put(noos_var_sect_name,  noos_iom_dummy(:) 
    24522493     ENDIF 
    24532494 
    24542495     noos_var_sect_name = "noos_" // trim(noos_sect_name) // '_salt' 
    24552496     IF (iom_use(noos_var_sect_name)) THEN 
    2456          noos_iom_dummy(:,:,:) = 0. 
     2497         noos_iom_dummy(:) = 0. 
    24572498         tmp_iom_output(:) = 0. 
    24582499          
     
    24802521         if ( tmp_iom_output(3) .ne.  tmp_iom_output(3) ) tmp_iom_output(1) =  max_iom_val*2 
    24812522          
    2482          noos_iom_dummy(:,:,1) = tmp_iom_output(1) 
    2483          noos_iom_dummy(:,:,2) = tmp_iom_output(2) 
    2484          noos_iom_dummy(:,:,3) = tmp_iom_output(3) 
     2523         noos_iom_dummy(1) = tmp_iom_output(1) 
     2524         noos_iom_dummy(2) = tmp_iom_output(2) 
     2525         noos_iom_dummy(3) = tmp_iom_output(3) 
    24852526          
    2486          !noos_iom_dummy(:,:,1) = (zsumclasses( 9)+zsumclasses( 10)) 
    2487          !noos_iom_dummy(:,:,2) = zsumclasses( 9) 
    2488          !noos_iom_dummy(:,:,3) = zsumclasses( 10) 
     2527         !noos_iom_dummy(1) = (zsumclasses( 9)+zsumclasses( 10)) 
     2528         !noos_iom_dummy(2) = zsumclasses( 9) 
     2529         !noos_iom_dummy(3) = zsumclasses( 10) 
    24892530          
    24902531         if ( lwp .AND. verbose ) WRITE(numout,*) 'dia_dct_wri_NOOS iom_put: ', kt,ksec, noos_var_sect_name,tmp_iom_output(1) 
    2491          CALL iom_put(noos_var_sect_name,  noos_iom_dummy  ) 
    2492          noos_iom_dummy(:,:,:) = 0.          
     2532         CALL iom_put(noos_var_sect_name,  noos_iom_dummy(:)  ) 
     2533         noos_iom_dummy(:) = 0.          
    24932534         tmp_iom_output(:) = 0. 
    24942535    ENDIF 
     
    25312572     CHARACTER(len=3)      :: noos_sect_name             ! Classname  
    25322573     CHARACTER(len=25)      :: noos_var_sect_name 
    2533      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   noos_iom_dummy 
     2574     REAL(wp), ALLOCATABLE, DIMENSION(:) ::   noos_iom_dummy 
    25342575     INTEGER               :: IERR 
    25352576     LOGICAL       ::   verbose      
     
    25512592     write (noos_sect_name, "(I03)")  ksec 
    25522593      
    2553      ALLOCATE( noos_iom_dummy(jpi,jpj,3),  STAT= ierr ) 
     2594     ALLOCATE( noos_iom_dummy(3),  STAT= ierr ) 
    25542595        IF( ierr /= 0 )   CALL ctl_stop( 'dia_dct_wri_NOOS_h: failed to allocate noos_iom_dummy array' ) 
    25552596 
Note: See TracChangeset for help on using the changeset viewer.