The main documentation of the Dump_GMV DV and MV Vector Procedures contains additional explanation of this code listing.
define([DUMP_GMV_VARIABLE_ROUTINE],[ subroutine Dump_GMV_$1_Vector (Variable, Mesh, unit, status) ! Input variables. type($1_Vector_type), intent(in) :: Variable ! Variable to be output. type(Multi_Mesh_type), intent(in) :: Mesh ! Mesh to be output. type(integer), intent(in) :: unit ! GMV output unit. ! Output variable. type(Status_type), intent(out), optional :: status ! Exit status. ! Internal variables. type(integer) :: GMV_Locus_Number ! GMV Locus: 0-Cells, 1-Nodes, 2-Faces. type(integer) :: location ! Location of the space character. type(character,name_length) :: Variable_Name ! Name of the GMV variable. type(real,1) :: Variable_PE ! BNV of the variable on each PE. type(real,1) :: Variable_Total ! BNV of the total variable on the IO_PE. type(Status_type) :: consolidated_status ! Consolidated Status. type(Status_type), dimension(4) :: dump_status ! Status vector. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Verify requirements. VERIFY(Valid_State(Mesh),5) ! Mesh is valid. VERIFY(Valid_State(Variable),5) ! Variable is valid. ! Allocations and initializations. call Initialize (dump_status) call Initialize (consolidated_status) ! Get Variable Name and process to replace spaces with underscores. Variable_Name = Name(Variable) location = SCAN(TRIM(Variable_Name), " ") do while (location /= 0) Variable_Name(location:location) = "_" location = SCAN(TRIM(Variable_Name), " ") end do ! Toggle on Variable Locus to initialize temporaries. select case (Locus(Variable)) case ("Cells") GMV_Locus_Number = 0 call Initialize (Variable_PE, Mesh%NCells_PE, dump_status(1)) call Initialize (Variable_Total, Mesh%NCells_Total, dump_status(2)) case ("Nodes") GMV_Locus_Number = 1 call Initialize (Variable_PE, Mesh%NNodes_PE, dump_status(1)) call Initialize (Variable_Total, Mesh%NNodes_Total, dump_status(2)) case ("Faces") GMV_Locus_Number = 2 call Initialize (Variable_PE, Mesh%NFaces_PE, dump_status(1)) call Initialize (Variable_Total, Mesh%NFaces_Total, dump_status(2)) VERIFY(.false.,1) ! Face-based variables cannot be output to GMV until ! the mesh is defined by faces instead of cells. case default VERIFY(.false.,1) ! GMV variable output is only available for ! mesh-based variables with a Locus of Cells, ! Nodes or Faces. end select ! Move data to the IO_PE and output. Variable_PE = Variable call Assemble (Variable_Total, Variable_PE) if (this_is_IO_PE) then ! GMV limit is 32 characters. write (unit,100) TRIM(Variable_Name(:32)), GMV_Locus_Number write (unit,101) Variable_Total end if ! Clean up temporary vectors. call Finalize (Variable_PE, dump_status(3)) call Finalize (Variable_Total, dump_status(4)) ! Consolidate and handle status. consolidated_status = dump_status if (PRESENT(status)) then WARN_IF(Error(consolidated_status), 5) status = consolidated_status else VERIFY(Normal(consolidated_status), 5) end if call Finalize (consolidated_status) call Finalize (dump_status) ! Format statements. 100 format (a,5(:,i11)) 101 format ((1pg15.8,4(:,1pg16.8))) ! Verify guarantees - none. return end subroutine Dump_GMV_$1_Vector ]) fortext([Type], [Mathematic Distributed],[ DUMP_GMV_VARIABLE_ROUTINE(Type) ])