22.04.2013 Views

GAMS Data Exchange API

GAMS Data Exchange API

GAMS Data Exchange API

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!