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