Fortran Interface
The functions described in this section are either unique to the Fortran interface or facilitate the mixing of C/C++ and Fortran within a single application interacting with a Silo file. Note that when Silo was originally written, the vision was that only visualization/post-processing tools would ever attempt to read the contents of Silo files. Therefore, the Fortran interface has never included all the companion functions to read objects. That said, it is possible to write simple Fortran callable wrappers to the C functions much like the write interface already implemented. Have a look in the source file silo_f.c for examples.
dbmkptr()
Summary: create a pointer-id from a pointer
C Signature:
integer function dbmkptr(void p)
Arguments:
Arg name
Description
ppointer for which a pointer-id is needed
Returned value:
the integer pointer id to associate with the pointer
Description:
In cases where the C interface returns to the application a pointer to an abstract Silo object, in the Fortran interface an integer pointer-id is created and returned instead. In addition, in cases where the C interface would accept an array of pointers, such as in
DBPutCsgvar(), the Fortran interface accepts an array of pointer-ids. This function is used to create a pointer-id from a pointer.A table of pointers is maintained internally in the Fortran wrapper library. The pointer-id is simply the index into this table where the associated object’s pointer actually is. The caller can free up space in this table using
dbrmptr()
dbrmptr()
Summary: remove an old and no longer needed pointer-id
Fortran Signature:
integer function dbrmptr(ptr_id)
Arguments:
Arg name
Description
ptr_idthe pointer-id to remove
Returned value:
always 0
dbset2dstrlen()
Summary: Set the size of a ‘row’ for pointers to ‘arrays’ of strings
Fortran Signature:
integer function dbset2dstrlen(int len) integer len
Arguments:
Arg name
Description
lenThe length to set
Returned value:
Returns the previously set value.
Description:
A number of functions in the Fortran interface take a
char*argument that is really treated internally in the Fortran interface as a 2D array of characters. Calling this function allows the caller to specify the length of the rows in this 2D array of characters. If necessary, this setting can be varied from call to call.The default value is 32 characters.
dbget2dstrlen()
Summary: Get the size of a ‘row’ for pointers to ‘arrays’ of character strings
Fortran Signature:
integer function dbget2dstrlen()
Arguments:
NoneReturned value:
The current setting for the 2D string length.
DBFortranAllocPointer()
Summary: Facilitates accessing C objects through Fortran
Fortran Signature:
int DBFortranAllocPointer (void *pointer)
Arguments:
Arg name
Description
pointerA
pointerto a Silo object for which a Fortran identifier is neededReturned value:
DBFortranAllocPointer returns an integer that Fortran code can use to reference the given Silo object.
Description:
The
DBFortranAllocPointerfunction allows programs written in both C and Fortran to access the same data structures. Many of the routines in the Fortran interface to Silo use an “object id”, an integer which refers to a Silo object. DBFortanAllocPointer converts apointerto a Silo object into an integer that Fortran code can use. In some ways, this function is the inverse ofDBFortranAccessPointer.The integer that
DBFortranAllocPointerreturns is used to index a table of Silo object pointers. When done with the integer, the entry in the table may be freed for use later through the use ofDBFortranRemovePointer.See
DBFortranAccessPointerandDBFortranRemovePointerfor more information about how to use Silo objects in code that uses C and Fortran together.For example, if you have a
DBfile*pointer for a Silo database file and wish to pass this object to some Fortran function(s), the coding pattern would look like the following…DBfile *db = DBOpen("foo.silo", DB_UNKNOWN, DB_APPEND); /* . . C/C++ code operates on db `pointer` . */ /* create entry in Fortran wrappers for this Silo Object */ int dbid = DBFortranAllocPointer(db); /* pass dbid to any Fortran code to interact with file */ /* free up Fortran wrapper resources for this Silo object */ DBFortranRemovePointer(dbid);
DBFortranAccessPointer()
Summary: Access Silo objects created through the Fortran Silo interface.
C Signature:
void *DBFortranAccessPointer (int value)
Arguments:
Arg name
Description
valueThe
valuereturned by a Silo Fortran function, referencing a Silo object.Returned value:
DBFortranAccessPointer returns a pointer to a Silo object (which must be cast to the appropriate type) on success, and
NULLon failure.Description:
The
DBFortranAccessPointerfunction allows programs written in both C and Fortran to access the same data structures. Many of the routines in the Fortran interface to Silo return an “object id”, an integer which refers to a Silo object. DBFortranAccessPointer converts this integer into a C pointer so that the sections of code written in C can access the Silo object directly.See
DBFortranAllocPointerandDBFortranRemovePointerfor more information about how to use Silo objects in code that uses C and Fortran together.
DBFortranRemovePointer()
Summary: Removes a pointer from the Fortran-C index table
C Signature:
void DBFortranRemovePointer (int value)
Arguments:
Arg name
Description
valueAn integer returned by DBFortranAllocPointer
Returned value:
Nothing
Description:
The
DBFortranRemovePointerfunction frees up the storage associated with Silo object pointers as allocated byDBFortranAllocPointer.Code that uses both C and Fortran may make use of
DBFortranAllocPointerto allocate space in a translation table so that the same Silo object may be referenced by both languages.DBFortranAccessPointerprovides access to this Silo object from the C side. Once the Fortran side of the code is done referencing the object, the space in the translation table may be freed by callingDBFortranRemovePointer. SeeDBFortranAccessPointerandDBFortranAllocPointerfor more information about how to use Silo objects in code that uses C and Fortran together.
dbwrtfl()
Summary: Write a facelist object referenced by its object_id to a silo file
C Signature:
dbwrtfl(dbid, name, lname, object_id, status)
Arguments:
Arg name
Description
dbidThe identifier for the Silo database to write the object to.
nameThe
nameto be assigned to the object in the file.lnameThe length of the
nameargument.object_idThe identifier for the facelist object, obtained via
dbcalcfl.statusReturn value indicating success or failure of the operation; 0 on success, -1 on failure.
Returned value:
Nothing
Description:
This function is designed to go hand-in-hand with
dbcalcfl, the function used to calculate an external facelist. Whendbcalcflis called, an object identifier is returned inobject_idfor the newly created facelist. This call can then be used to write that facelist object to a Silo database.