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
p
pointer 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_id
the 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
len
The 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:
None
Returned 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
pointer
A
pointer
to 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
DBFortranAllocPointer
function 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 apointer
to a Silo object into an integer that Fortran code can use. In some ways, this function is the inverse ofDBFortranAccessPointer
.The integer that
DBFortranAllocPointer
returns 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
DBFortranAccessPointer
andDBFortranRemovePointer
for 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
value
The
value
returned 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
NULL
on failure.Description:
The
DBFortranAccessPointer
function 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
DBFortranAllocPointer
andDBFortranRemovePointer
for 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
value
An integer returned by DBFortranAllocPointer
Returned value:
Nothing
Description:
The
DBFortranRemovePointer
function frees up the storage associated with Silo object pointers as allocated byDBFortranAllocPointer
.Code that uses both C and Fortran may make use of
DBFortranAllocPointer
to allocate space in a translation table so that the same Silo object may be referenced by both languages.DBFortranAccessPointer
provides 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
. SeeDBFortranAccessPointer
andDBFortranAllocPointer
for 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
dbid
The identifier for the Silo database to write the object to.
name
The
name
to be assigned to the object in the file.lname
The length of the
name
argument.object_id
The identifier for the facelist object, obtained via dbcalcfl.
status
Return 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. Whendbcalcfl
is called, an object identifier is returned inobject_id
for the newly created facelist. This call can then be used to write that facelist object to a Silo database.