GAMS Data Exchange API
GAMS Data Exchange API
GAMS Data Exchange API
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Example 5: Fortran program<br />
Page 22<br />
RC = gdxGetDLLVersion(PGX, Msg)<br />
WRITE(*,*) 'Using GDX DLL version: ', Msg<br />
IF (1 == argc) THEN<br />
! Write demand data<br />
RC = gdxOpenWrite(PGX, './demanddata.gdx', 'example1', ErrNr)<br />
IF (ErrNr /= 0) CALL ReportIOError(ErrNr,'gdxOpenWrite')<br />
ok = 0 .ne. gdx<strong>Data</strong>WriteStrStart(PGX,'Demand','Demand data',1,DT_PAR ,0)<br />
IF (.NOT. ok) CALL ReportGDXError(PGX)<br />
CALL Write<strong>Data</strong>(PGX,'New-York',324D0)<br />
CALL Write<strong>Data</strong>(PGX,'Chicago',299D0)<br />
CALL Write<strong>Data</strong>(PGX,'Topeka',274D0)<br />
ok = 0 .ne. gdx<strong>Data</strong>WriteDone(PGX)<br />
IF (.NOT. ok) CALL ReportGDXError(PGX)<br />
WRITE(*,*) 'Demand data written by example1'<br />
ELSE<br />
! Read variable X<br />
CALL getarg(2, gdxFname)<br />
RC = gdxOpenRead(PGX, gdxFname, ErrNr)<br />
IF (ErrNr /= 0) CALL ReportIOError(ErrNr,'gdxOpenRead')<br />
RC = gdxFileVersion(PGX,Msg,Producer)<br />
WRITE(*,*) 'GDX file written using version: ',Msg<br />
WRITE(*,*) 'GDX file written by: ',Producer<br />
ok = 0 .ne. gdxFindSymbol(PGX,'x',VarNr)<br />
IF (.NOT. ok) THEN<br />
WRITE(*,*) '**** Could not find variable X'<br />
CALL gdxExit(1)<br />
END IF<br />
RC = gdxSymbolInfo(PGX,VarNr,VarName,Dim,VarTyp)<br />
IF (Dim /= 2 .OR. DT_VAR /= VarTyp) THEN<br />
WRITE(*,*) '**** X is not a two dimensional variable: ',Dim,':',VarTyp<br />
CALL gdxExit(1)<br />
END IF<br />
ok = 0 .ne. gdx<strong>Data</strong>ReadStrStart(PGX,VarNr,NrRecs)<br />
IF (.NOT. ok) CALL ReportGDXError(PGX)<br />
WRITE(*,*) 'Variable X has ',NrRecs,' records'<br />
DO WHILE (0 .ne. gdx<strong>Data</strong>ReadStr(PGX,Indx,Values,N))<br />
IF (0D0 == Values(VAL_LEVEL)) CYCLE ! skip, level 0.0 is default<br />
DO D = 1,Dim<br />
IF (D /= DIM) THEN<br />
WRITE(*,*) Indx(D) ,'.'<br />
ELSE<br />
WRITE(*,*) Indx(D)<br />
END IF<br />
END DO<br />
write(*,*) ' = ', Values(VAL_LEVEL)<br />
END DO<br />
WRITE(*,*) 'All solution values shown'<br />
RC = gdx<strong>Data</strong>ReadDone(PGX)<br />
END IF<br />
ErrNr = gdxClose(PGX)<br />
IF (ErrNr /= 0) CALL ReportIOError(ErrNr,'gdxClose')<br />
ok = gdxFree(PGX)<br />
IF (.NOT. ok) THEN<br />
WRITE(*,*) 'Problems unloading the GDX DLL'<br />
CALL gdxExit(1)<br />
END IF<br />
CONTAINS<br />
SUBROUTINE ReportGDXError(PGX)<br />
INTEGER(KIND=8), INTENT(IN) :: PGX<br />
CHARACTER(LEN=256) :: S<br />
WRITE (*,*) '**** Fatal GDX Error'<br />
GDX <strong>GAMS</strong> <strong>Data</strong> <strong>Exchange</strong> Example<br />
programs<br />
<strong>GAMS</strong> <strong>Data</strong> <strong>Exchange</strong> <strong>API</strong><br />
1.6<br />
Page 22 2.4<br />
12/3/2012