Skip navigation links
(CGNS Documentation Home Page) (Steering Committee Charter) (Overview and Entry-Level Document) (A User's Guide to CGNS) (Mid-Level Library) (Standard Interface Data Structures) (SIDS File Mapping Manual) (CGIO Manual) (Parallel CGNS User's Guide) (ADF Implementation) (HDF5 Implementation) (Python Implementation) (CGNS Tools and Utilities)

(Introduction) (The ADF Software Library) (Glossary of Terms) (History of ADF Version Releases) (File System Architectures) (File Version Control Numbering) (Design Considerations) (Conventions and Implementations) (Error Messages) (Default Values and Limits) (Database-Level Routines) (Data Structure and Management Routines) (Data Query Routines) (Data I/O Routines) (Miscellaneous Routines) (Sample Fortran Program) (Sample C Program)

Sample Fortran Program

The following Fortran program builds the ADF file shown in the example database figure.

         PROGRAM TEST
   C
   C     SAMPLE ADF TEST PROGRAM TO BUILD ADF FILES ILLUSTRATED
   C     IN THE EXAMPLE DATABASE FIGURE
   C
         PARAMETER (MAXCHR=32)
   C
         CHARACTER*(MAXCHR) TSTLBL,DTYPE
         CHARACTER*(MAXCHR) FNAM,PATH
   C
         REAL*8 RID,PID,CID,TMPID,RIDF2
         REAL A(4,3),B(4,3)
         INTEGER IC(6),ID(6)
         INTEGER IERR
         INTEGER IDIM(2),IDIMA(2),IDIMC,IDIMD
   C
         DATA A /1.1,2.1,3.1,4.1,
        X        1.2,2.2,3.2,4.2,
        X        1.3,2.3,3.3,4.3/
         DATA IDIMA /4,3/
   C
         DATA IC /1,2,3,4,5,6/
         DATA IDIMC /6/
   C
   C     SET ERROR FLAG TO ABORT ON ERROR
   C
         CALL ADFSES(1,IERR)
   C
   C *** 1.) OPEN 1ST DATABASE (ADF_FILE_TWO.ADF)
   C     2.) CREATE THREE NODES AT FIRST LEVEL
   C     3.) PUT LABEL ON NODE F3
   C     4.) PUT DATA IN F3
   C     5.) CREATE TWO NODES BELOW F3
   C     6.) CLOSE DATABASE
   C
         CALL ADFDOPN('adf_file_two.adf','NEW',' ',RID,IERR)
         RIDF2 = RID
         CALL ADFCRE(RID,'F1',TMPID,IERR)
         CALL ADFCRE(RID,'F2',TMPID,IERR)
         CALL ADFCRE(RID,'F3',PID,IERR)
         CALL ADFSLB(PID,'LABEL ON NODE F3',IERR)
         CALL ADFPDIM(PID,'R4',2,IDIMA,IERR)
         CALL ADFWALL(PID,A,IERR)
   C
         CALL ADFCRE(PID,'F4',CID,IERR)
   C
         CALL ADFCRE(PID,'F5',CID,IERR)
   C
         CALL ADFDCLO(RID,IERR)
   C
   C *** 1.) OPEN 2ND DATABASE
   C     2.) CREATE NODES
   C     3.) PUT DATA IN N13
   C
         CALL ADFDOPN('adf_file_one.adf','NEW',' ',RID,IERR)
   C
   C     THREE NODES UNDER ROOT
   C
         CALL ADFCRE(RID,'N1',TMPID,IERR)
         CALL ADFCRE(RID,'N2',TMPID,IERR)
         CALL ADFCRE(RID,'N3',TMPID,IERR)
   C
   C     THREE NODES UNDER N1 (TWO REGULAR AND ONE LINK)
   C
         CALL ADFGNID(RID,'N1',PID,IERR)
         CALL ADFCRE(PID,'N4',TMPID,IERR)
         CALL ADFLINK(PID,'L3','adf_file_two.adf','/F3',TMPID,IERR)
         CALL ADFCRE(PID,'N5',TMPID,IERR)
   C
   C     TWO NODES UNDER N4
   C
         CALL ADFGNID(PID,'N4',CID,IERR)
         CALL ADFCRE(CID,'N6',TMPID,IERR)
         CALL ADFCRE(CID,'N7',TMPID,IERR)
   C
   C     ONE NODE UNDER N6
   C
         CALL ADFGNID(RID,'/N1/N4/N6',PID,IERR)
         CALL ADFCRE(PID,'N8',TMPID,IERR)
   C
   C     THREE NODES UNDER N3
   C
         CALL ADFGNID(RID,'N3',PID,IERR)
         CALL ADFCRE(PID,'N9',TMPID,IERR)
         CALL ADFCRE(PID,'N10',TMPID,IERR)
         CALL ADFCRE(PID,'N11',TMPID,IERR)
   C
   C     TWO NODES UNDER N9
   C
         CALL ADFGNID(PID,'N9',CID,IERR)
         CALL ADFCRE(CID,'N12',TMPID,IERR)
         CALL ADFCRE(CID,'N13',TMPID,IERR)
   C
   C     PUT LABEL AND DATA IN N13
   C
         CALL ADFSLB(TMPID,'LABEL ON NODE N13',IERR)
         CALL ADFPDIM(TMPID,'I4',1,IDIMC,IERR)
         CALL ADFWALL(TMPID,IC,IERR)
   C
   C     TWO NODES UNDER N10
   C
         CALL ADFGNID(RID,'/N3/N10',PID,IERR)
         CALL ADFLINK(PID,'L1',' ','/N3/N9/N13',TMPID,IERR)
         CALL ADFCRE(PID,'N14',TMPID,IERR)
   C
   C     TWO NODES UNDER N11
   C
         CALL ADFGNID(RID,'/N3/N11',PID,IERR)
         CALL ADFLINK(PID,'L2',' ','/N3/N9/N13',TMPID,IERR)
         CALL ADFCRE(PID,'N15',TMPID,IERR)
   C
   C *** READ AND PRINT DATA FROM NODES
   C     1.) NODE F5 THROUGH LINK L3
   C
         CALL ADFGNID(RID,'/N1/L3',PID,IERR)
         CALL ADFGLB(PID,TSTLBL,IERR)
         CALL ADFGDT(PID,DTYPE,IERR)
         CALL ADFGND(PID,NUMDIM,IERR)
         CALL ADFGDV(PID,IDIM,IERR)
         CALL ADFRALL(PID,B,IERR)
         PRINT *,' NODE F3 THROUGH LINK L3:'
         PRINT *,'   LABEL       = ',TSTLBL
         PRINT *,'   DATA TYPE   = ',DTYPE
         PRINT *,'   NUM OF DIMS = ',NUMDIM
         PRINT *,'   DIM VALS    = ',IDIM
         PRINT *,'   DATA:'
         WRITE(*,100)((B(J,I),I=1,3),J=1,4)
     100 FORMAT(5X,3F10.2)
   C
   C     2.) N13
   C
         CALL ADFGNID(RID,'N3/N9/N13',PID,IERR)
         CALL ADFGLB(PID,TSTLBL,IERR)
         CALL ADFGDT(PID,DTYPE,IERR)
         CALL ADFGND(PID,NUMDIM,IERR)
         CALL ADFGDV(PID,IDIMD,IERR)
         CALL ADFRALL(PID,ID,IERR)
         PRINT *,' '
         PRINT *,' NODE N13:'
         PRINT *,'   LABEL       = ',TSTLBL
         PRINT *,'   DATA TYPE   = ',DTYPE
         PRINT *,'   NUM OF DIMS = ',NUMDIM
         PRINT *,'   DIM VALS    = ',IDIMD
         PRINT *,'   DATA:'
         WRITE(*,200)(ID(I),I=1,6)
     200 FORMAT(5X,6I6)
   C
   C     3.) N13 THROUGH L1
   C
         CALL ADFGNID(RID,'N3/N10/L1',TMPID,IERR)
         CALL ADFGLB(TMPID,TSTLBL,IERR)
         CALL ADFRALL(TMPID,ID,IERR)
         PRINT *,' '
         PRINT *,' NODE N13 THROUGH LINK L1:'
         PRINT *,'   LABEL       = ',TSTLBL
         PRINT *,'   DATA:'
         WRITE(*,200)(ID(I),I=1,6)
   C
   C     4.) N13 THROUTH L2
   C
         CALL ADFGNID(RID,'N3/N11/L2',CID,IERR)
         CALL ADFGLB(CID,TSTLBL,IERR)
         CALL ADFRALL(CID,ID,IERR)
         PRINT *,' '
         PRINT *,' NODE N13 THROUGH LINK L2:'
         PRINT *,'   LABEL       = ',TSTLBL
         PRINT *,'   DATA:'
         WRITE(*,200)(ID(I),I=1,6)
   C
   C     PRINT LIST OF CHILDREN UNDER ROOT NODE
   C
         CALL PRTCLD(RID)
   C
   C     PRINT LIST OF CHILDREN UNDER N3
   C
         CALL ADFGNID(RID,'N3',PID,IERR)
         CALL PRTCLD(PID)
   C
   C     REOPEN ADF_FILE_TWO AND GET NEW ROOT ID
   C
         CALL ADFDOPN('adf_file_two.adf','OLD',' ',RID,IERR)
         PRINT *,' '
         PRINT *,' COMPARISON OF ROOT ID: '
         PRINT *,' ADF_FILE_TWO.ADF ORIGINAL ROOT ID = ',RIDF2
         PRINT *,' ADF_FILE_TWO.ADF NEW ROOT ID      = ',RID
   C
         STOP
         END
   C
   C ************* SUBROUTINES ****************
   C
         SUBROUTINE PRTCLD(PID)
   C
   C *** PRINT TABLE OF CHILDREN GIVEN A PARENT NODE-ID
   C
         PARAMETER (MAXCLD=10)
         PARAMETER (MAXCHR=32)
         REAL*8 PID
         CHARACTER*(MAXCHR) NODNAM,NDNMS(MAXCLD)
         CALL ADFGNAM(PID,NODNAM,IERR)
         CALL ADFNCLD(PID,NUMC,IERR)
         WRITE(*,120)NODNAM,NUMC
     120 FORMAT(/,' PARENT NODE NAME = ',A,/,
        X       '     NUMBER OF CHILDREN = ',I2,/,
        X       '     CHILDREN NAMES:')
         NLEFT = NUMC
         ISTART = 1
   C     --- TOP OF DO-WHILE LOOP
     130 CONTINUE
            CALL ADFCNAM(PID,ISTART,MAXCLD,LEN(NDNMS),
        X                NUMRET,NDNMS,IERR)
            WRITE(*,140)(NDNMS(K),K=1,NUMRET)
     140    FORMAT(8X,A)
            NLEFT = NLEFT - MAXCLD
            ISTART = ISTART + MAXCLD
         IF (NLEFT .GT. 0) GO TO 130
         RETURN
         END

The resulting output is:

   NODE F3 THROUGH LINK L3:
     LABEL       = LABEL ON NODE F3
     DATA TYPE   = R4
     NUM OF DIMS = 2
     DIM VALS    = 4 3
     DATA:
             1.10      1.20      1.30
             2.10      2.20      2.30
             3.10      3.20      3.30
             4.10      4.20      4.30

   NODE N13:
     LABEL       = LABEL ON NODE N13
     DATA TYPE   = I4
     NUM OF DIMS = 1
     DIM VALS    = 6
     DATA:
            1      2      3      4      5      6

   NODE N13 THROUGH LINK L1:
     LABEL       = LABEL ON NODE N13
     DATA:
            1      2      3      4      5      6

   NODE N13 THROUGH LINK L2:
     LABEL       = LABEL ON NODE N13
     DATA:
            1      2      3      4      5      6

   PARENT NODE NAME = ADF MotherNode
       NUMBER OF CHILDREN =  3
       CHILDREN NAMES:
          N1
          N2
          N3

   PARENT NODE NAME = N3
       NUMBER OF CHILDREN =  3
       CHILDREN NAMES:
          N9
          N10
          N11

   COMPARISON OF ROOT ID:
     ADF_FILE_TWO.ADF ORIGINAL ROOT ID = 1.2653021189994324-320
     ADF_FILE_TWO.ADF NEW ROOT ID      = 4.7783097267391979-299